gpattern.h 0000644 00000003366 15021467762 0006563 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997, 1999 Peter Mattis, Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_PATTERN_H__
#define __G_PATTERN_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GPatternSpec GPatternSpec;
GLIB_AVAILABLE_IN_ALL
GPatternSpec* g_pattern_spec_new (const gchar *pattern);
GLIB_AVAILABLE_IN_ALL
void g_pattern_spec_free (GPatternSpec *pspec);
GLIB_AVAILABLE_IN_ALL
gboolean g_pattern_spec_equal (GPatternSpec *pspec1,
GPatternSpec *pspec2);
GLIB_AVAILABLE_IN_ALL
gboolean g_pattern_match (GPatternSpec *pspec,
guint string_length,
const gchar *string,
const gchar *string_reversed);
GLIB_AVAILABLE_IN_ALL
gboolean g_pattern_match_string (GPatternSpec *pspec,
const gchar *string);
GLIB_AVAILABLE_IN_ALL
gboolean g_pattern_match_simple (const gchar *pattern,
const gchar *string);
G_END_DECLS
#endif /* __G_PATTERN_H__ */
grand.h 0000644 00000006155 15021467762 0006031 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_RAND_H__
#define __G_RAND_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GRand GRand;
/* GRand - a good and fast random number generator: Mersenne Twister
* see http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html for more info.
* The range functions return a value in the interval [begin, end).
* int -> [0..2^32-1]
* int_range -> [begin..end-1]
* double -> [0..1)
* double_range -> [begin..end)
*/
GLIB_AVAILABLE_IN_ALL
GRand* g_rand_new_with_seed (guint32 seed);
GLIB_AVAILABLE_IN_ALL
GRand* g_rand_new_with_seed_array (const guint32 *seed,
guint seed_length);
GLIB_AVAILABLE_IN_ALL
GRand* g_rand_new (void);
GLIB_AVAILABLE_IN_ALL
void g_rand_free (GRand *rand_);
GLIB_AVAILABLE_IN_ALL
GRand* g_rand_copy (GRand *rand_);
GLIB_AVAILABLE_IN_ALL
void g_rand_set_seed (GRand *rand_,
guint32 seed);
GLIB_AVAILABLE_IN_ALL
void g_rand_set_seed_array (GRand *rand_,
const guint32 *seed,
guint seed_length);
#define g_rand_boolean(rand_) ((g_rand_int (rand_) & (1 << 15)) != 0)
GLIB_AVAILABLE_IN_ALL
guint32 g_rand_int (GRand *rand_);
GLIB_AVAILABLE_IN_ALL
gint32 g_rand_int_range (GRand *rand_,
gint32 begin,
gint32 end);
GLIB_AVAILABLE_IN_ALL
gdouble g_rand_double (GRand *rand_);
GLIB_AVAILABLE_IN_ALL
gdouble g_rand_double_range (GRand *rand_,
gdouble begin,
gdouble end);
GLIB_AVAILABLE_IN_ALL
void g_random_set_seed (guint32 seed);
#define g_random_boolean() ((g_random_int () & (1 << 15)) != 0)
GLIB_AVAILABLE_IN_ALL
guint32 g_random_int (void);
GLIB_AVAILABLE_IN_ALL
gint32 g_random_int_range (gint32 begin,
gint32 end);
GLIB_AVAILABLE_IN_ALL
gdouble g_random_double (void);
GLIB_AVAILABLE_IN_ALL
gdouble g_random_double_range (gdouble begin,
gdouble end);
G_END_DECLS
#endif /* __G_RAND_H__ */
gtimer.h 0000644 00000005020 15021467762 0006213 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_TIMER_H__
#define __G_TIMER_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
/* Timer
*/
/* microseconds per second */
typedef struct _GTimer GTimer;
#define G_USEC_PER_SEC 1000000
GLIB_AVAILABLE_IN_ALL
GTimer* g_timer_new (void);
GLIB_AVAILABLE_IN_ALL
void g_timer_destroy (GTimer *timer);
GLIB_AVAILABLE_IN_ALL
void g_timer_start (GTimer *timer);
GLIB_AVAILABLE_IN_ALL
void g_timer_stop (GTimer *timer);
GLIB_AVAILABLE_IN_ALL
void g_timer_reset (GTimer *timer);
GLIB_AVAILABLE_IN_ALL
void g_timer_continue (GTimer *timer);
GLIB_AVAILABLE_IN_ALL
gdouble g_timer_elapsed (GTimer *timer,
gulong *microseconds);
GLIB_AVAILABLE_IN_2_62
gboolean g_timer_is_active (GTimer *timer);
GLIB_AVAILABLE_IN_ALL
void g_usleep (gulong microseconds);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_IN_2_62
void g_time_val_add (GTimeVal *time_,
glong microseconds);
GLIB_DEPRECATED_IN_2_62_FOR(g_date_time_new_from_iso8601)
gboolean g_time_val_from_iso8601 (const gchar *iso_date,
GTimeVal *time_);
GLIB_DEPRECATED_IN_2_62_FOR(g_date_time_format)
gchar* g_time_val_to_iso8601 (GTimeVal *time_) G_GNUC_MALLOC;
G_GNUC_END_IGNORE_DEPRECATIONS
G_END_DECLS
#endif /* __G_TIMER_H__ */
gversionmacros.h 0000644 00000135075 15021467762 0010003 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_VERSION_MACROS_H__
#define __G_VERSION_MACROS_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
/* Version boundaries checks */
#define G_ENCODE_VERSION(major,minor) ((major) << 16 | (minor) << 8)
/* XXX: Every new stable minor release bump should add a macro here */
/**
* GLIB_VERSION_2_26:
*
* A macro that evaluates to the 2.26 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.32
*/
#define GLIB_VERSION_2_26 (G_ENCODE_VERSION (2, 26))
/**
* GLIB_VERSION_2_28:
*
* A macro that evaluates to the 2.28 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.32
*/
#define GLIB_VERSION_2_28 (G_ENCODE_VERSION (2, 28))
/**
* GLIB_VERSION_2_30:
*
* A macro that evaluates to the 2.30 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.32
*/
#define GLIB_VERSION_2_30 (G_ENCODE_VERSION (2, 30))
/**
* GLIB_VERSION_2_32:
*
* A macro that evaluates to the 2.32 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.32
*/
#define GLIB_VERSION_2_32 (G_ENCODE_VERSION (2, 32))
/**
* GLIB_VERSION_2_34:
*
* A macro that evaluates to the 2.34 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.34
*/
#define GLIB_VERSION_2_34 (G_ENCODE_VERSION (2, 34))
/**
* GLIB_VERSION_2_36:
*
* A macro that evaluates to the 2.36 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.36
*/
#define GLIB_VERSION_2_36 (G_ENCODE_VERSION (2, 36))
/**
* GLIB_VERSION_2_38:
*
* A macro that evaluates to the 2.38 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.38
*/
#define GLIB_VERSION_2_38 (G_ENCODE_VERSION (2, 38))
/**
* GLIB_VERSION_2_40:
*
* A macro that evaluates to the 2.40 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.40
*/
#define GLIB_VERSION_2_40 (G_ENCODE_VERSION (2, 40))
/**
* GLIB_VERSION_2_42:
*
* A macro that evaluates to the 2.42 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.42
*/
#define GLIB_VERSION_2_42 (G_ENCODE_VERSION (2, 42))
/**
* GLIB_VERSION_2_44:
*
* A macro that evaluates to the 2.44 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.44
*/
#define GLIB_VERSION_2_44 (G_ENCODE_VERSION (2, 44))
/**
* GLIB_VERSION_2_46:
*
* A macro that evaluates to the 2.46 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.46
*/
#define GLIB_VERSION_2_46 (G_ENCODE_VERSION (2, 46))
/**
* GLIB_VERSION_2_48:
*
* A macro that evaluates to the 2.48 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.48
*/
#define GLIB_VERSION_2_48 (G_ENCODE_VERSION (2, 48))
/**
* GLIB_VERSION_2_50:
*
* A macro that evaluates to the 2.50 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.50
*/
#define GLIB_VERSION_2_50 (G_ENCODE_VERSION (2, 50))
/**
* GLIB_VERSION_2_52:
*
* A macro that evaluates to the 2.52 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.52
*/
#define GLIB_VERSION_2_52 (G_ENCODE_VERSION (2, 52))
/**
* GLIB_VERSION_2_54:
*
* A macro that evaluates to the 2.54 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.54
*/
#define GLIB_VERSION_2_54 (G_ENCODE_VERSION (2, 54))
/**
* GLIB_VERSION_2_56:
*
* A macro that evaluates to the 2.56 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.56
*/
#define GLIB_VERSION_2_56 (G_ENCODE_VERSION (2, 56))
/**
* GLIB_VERSION_2_58:
*
* A macro that evaluates to the 2.58 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.58
*/
#define GLIB_VERSION_2_58 (G_ENCODE_VERSION (2, 58))
/**
* GLIB_VERSION_2_60:
*
* A macro that evaluates to the 2.60 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.60
*/
#define GLIB_VERSION_2_60 (G_ENCODE_VERSION (2, 60))
/**
* GLIB_VERSION_2_62:
*
* A macro that evaluates to the 2.62 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.62
*/
#define GLIB_VERSION_2_62 (G_ENCODE_VERSION (2, 62))
/**
* GLIB_VERSION_2_64:
*
* A macro that evaluates to the 2.64 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.64
*/
#define GLIB_VERSION_2_64 (G_ENCODE_VERSION (2, 64))
/**
* GLIB_VERSION_2_66:
*
* A macro that evaluates to the 2.66 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.66
*/
#define GLIB_VERSION_2_66 (G_ENCODE_VERSION (2, 66))
/**
* GLIB_VERSION_2_68:
*
* A macro that evaluates to the 2.68 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.68
*/
#define GLIB_VERSION_2_68 (G_ENCODE_VERSION (2, 68))
/**
* GLIB_VERSION_2_70:
*
* A macro that evaluates to the 2.70 version of GLib, in a format
* that can be used by the C pre-processor.
*
* Since: 2.70
*/
#define GLIB_VERSION_2_70 (G_ENCODE_VERSION (2, 70))
/**
* GLIB_VERSION_CUR_STABLE:
*
* A macro that evaluates to the current stable version of GLib, in a format
* that can be used by the C pre-processor.
*
* During an unstable development cycle, this evaluates to the next stable
* (unreleased) version which will be the result of the development cycle.
*
* Since: 2.32
*/
#if (GLIB_MINOR_VERSION % 2)
#define GLIB_VERSION_CUR_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION + 1))
#else
#define GLIB_VERSION_CUR_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION))
#endif
/**
* GLIB_VERSION_PREV_STABLE:
*
* A macro that evaluates to the previous stable version of GLib, in a format
* that can be used by the C pre-processor.
*
* During an unstable development cycle, this evaluates to the most recent
* released stable release, which preceded this development cycle.
*
* Since: 2.32
*/
#if (GLIB_MINOR_VERSION % 2)
#define GLIB_VERSION_PREV_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION - 1))
#else
#define GLIB_VERSION_PREV_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION - 2))
#endif
/**
* GLIB_VERSION_MIN_REQUIRED:
*
* A macro that should be defined by the user prior to including
* the glib.h header.
* The definition should be one of the predefined GLib version
* macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,...
*
* This macro defines the earliest version of GLib that the package is
* required to be able to compile against.
*
* If the compiler is configured to warn about the use of deprecated
* functions, then using functions that were deprecated in version
* %GLIB_VERSION_MIN_REQUIRED or earlier will cause warnings (but
* using functions deprecated in later releases will not).
*
* Since: 2.32
*/
/* If the package sets GLIB_VERSION_MIN_REQUIRED to some future
* GLIB_VERSION_X_Y value that we don't know about, it will compare as
* 0 in preprocessor tests.
*/
#ifndef GLIB_VERSION_MIN_REQUIRED
# define GLIB_VERSION_MIN_REQUIRED (GLIB_VERSION_CUR_STABLE)
#elif GLIB_VERSION_MIN_REQUIRED == 0
# undef GLIB_VERSION_MIN_REQUIRED
# define GLIB_VERSION_MIN_REQUIRED (GLIB_VERSION_CUR_STABLE + 2)
#endif
/**
* GLIB_VERSION_MAX_ALLOWED:
*
* A macro that should be defined by the user prior to including
* the glib.h header.
* The definition should be one of the predefined GLib version
* macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,...
*
* This macro defines the latest version of the GLib API that the
* package is allowed to make use of.
*
* If the compiler is configured to warn about the use of deprecated
* functions, then using functions added after version
* %GLIB_VERSION_MAX_ALLOWED will cause warnings.
*
* Unless you are using GLIB_CHECK_VERSION() or the like to compile
* different code depending on the GLib version, then this should be
* set to the same value as %GLIB_VERSION_MIN_REQUIRED.
*
* Since: 2.32
*/
#if !defined (GLIB_VERSION_MAX_ALLOWED) || (GLIB_VERSION_MAX_ALLOWED == 0)
# undef GLIB_VERSION_MAX_ALLOWED
# define GLIB_VERSION_MAX_ALLOWED (GLIB_VERSION_CUR_STABLE)
#endif
/* sanity checks */
#if GLIB_VERSION_MIN_REQUIRED > GLIB_VERSION_CUR_STABLE
#error "GLIB_VERSION_MIN_REQUIRED must be <= GLIB_VERSION_CUR_STABLE"
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_MIN_REQUIRED
#error "GLIB_VERSION_MAX_ALLOWED must be >= GLIB_VERSION_MIN_REQUIRED"
#endif
#if GLIB_VERSION_MIN_REQUIRED < GLIB_VERSION_2_26
#error "GLIB_VERSION_MIN_REQUIRED must be >= GLIB_VERSION_2_26"
#endif
/* These macros are used to mark deprecated functions in GLib headers,
* and thus have to be exposed in installed headers. But please
* do *not* use them in other projects. Instead, use G_DEPRECATED
* or define your own wrappers around it.
*/
#define GLIB_AVAILABLE_IN_ALL _GLIB_EXTERN
/* XXX: Every new stable minor release should add a set of macros here */
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_26
# define GLIB_DEPRECATED_IN_2_26 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_26_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_26 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_26_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_26 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_26_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_26 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_26_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_26 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_26_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_26
# define GLIB_DEPRECATED_MACRO_IN_2_26_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_26
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_26_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_26
# define GLIB_DEPRECATED_TYPE_IN_2_26_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_26
# define GLIB_AVAILABLE_IN_2_26 GLIB_UNAVAILABLE(2, 26)
# define GLIB_AVAILABLE_MACRO_IN_2_26 GLIB_UNAVAILABLE_MACRO(2, 26)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_26 GLIB_UNAVAILABLE_ENUMERATOR(2, 26)
# define GLIB_AVAILABLE_TYPE_IN_2_26 GLIB_UNAVAILABLE_TYPE(2, 26)
#else
# define GLIB_AVAILABLE_IN_2_26 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_26
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_26
# define GLIB_AVAILABLE_TYPE_IN_2_26
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_28
# define GLIB_DEPRECATED_IN_2_28 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_28_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_28 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_28_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_28 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_28_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_28 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_28_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_28 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_28_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_28
# define GLIB_DEPRECATED_MACRO_IN_2_28_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_28
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_28_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_28
# define GLIB_DEPRECATED_TYPE_IN_2_28_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_28
# define GLIB_AVAILABLE_IN_2_28 GLIB_UNAVAILABLE(2, 28)
# define GLIB_AVAILABLE_MACRO_IN_2_28 GLIB_UNAVAILABLE_MACRO(2, 28)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_28 GLIB_UNAVAILABLE_ENUMERATOR(2, 28)
# define GLIB_AVAILABLE_TYPE_IN_2_28 GLIB_UNAVAILABLE_TYPE(2, 28)
#else
# define GLIB_AVAILABLE_IN_2_28 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_28
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_28
# define GLIB_AVAILABLE_TYPE_IN_2_28
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_30
# define GLIB_DEPRECATED_IN_2_30 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_30_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_30 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_30_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_30 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_30_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_30 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_30_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_30 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_30_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_30
# define GLIB_DEPRECATED_MACRO_IN_2_30_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_30
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_30_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_30
# define GLIB_DEPRECATED_TYPE_IN_2_30_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_30
# define GLIB_AVAILABLE_IN_2_30 GLIB_UNAVAILABLE(2, 30)
# define GLIB_AVAILABLE_MACRO_IN_2_30 GLIB_UNAVAILABLE_MACRO(2, 30)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_30 GLIB_UNAVAILABLE_ENUMERATOR(2, 30)
# define GLIB_AVAILABLE_TYPE_IN_2_30 GLIB_UNAVAILABLE_TYPE(2, 30)
#else
# define GLIB_AVAILABLE_IN_2_30 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_30
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_30
# define GLIB_AVAILABLE_TYPE_IN_2_30
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_32
# define GLIB_DEPRECATED_IN_2_32 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_32_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_32 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_32_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_32 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_32_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_32 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_32_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_32 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_32_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_32
# define GLIB_DEPRECATED_MACRO_IN_2_32_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_32
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_32_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_32
# define GLIB_DEPRECATED_TYPE_IN_2_32_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_32
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_32_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_32
# define GLIB_DEPRECATED_TYPE_IN_2_32_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_32
# define GLIB_AVAILABLE_IN_2_32 GLIB_UNAVAILABLE(2, 32)
# define GLIB_AVAILABLE_MACRO_IN_2_32 GLIB_UNAVAILABLE_MACRO(2, 32)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_32 GLIB_UNAVAILABLE_ENUMERATOR(2, 32)
# define GLIB_AVAILABLE_TYPE_IN_2_32 GLIB_UNAVAILABLE_TYPE(2, 32)
#else
# define GLIB_AVAILABLE_IN_2_32 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_32
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_32
# define GLIB_AVAILABLE_TYPE_IN_2_32
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_34
# define GLIB_DEPRECATED_IN_2_34 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_34_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_34 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_34_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_34 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_34_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_34 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_34_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_34 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_34_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_34
# define GLIB_DEPRECATED_MACRO_IN_2_34_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_34
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_34_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_34
# define GLIB_DEPRECATED_TYPE_IN_2_34_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_34
# define GLIB_AVAILABLE_IN_2_34 GLIB_UNAVAILABLE(2, 34)
# define GLIB_AVAILABLE_MACRO_IN_2_34 GLIB_UNAVAILABLE_MACRO(2, 34)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_34 GLIB_UNAVAILABLE_ENUMERATOR(2, 34)
# define GLIB_AVAILABLE_TYPE_IN_2_34 GLIB_UNAVAILABLE_TYPE(2, 34)
#else
# define GLIB_AVAILABLE_IN_2_34 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_34
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_34
# define GLIB_AVAILABLE_TYPE_IN_2_34
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_36
# define GLIB_DEPRECATED_IN_2_36 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_36_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_36 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_36_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_36 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_36_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_36 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_36_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_36 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_36_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_36
# define GLIB_DEPRECATED_MACRO_IN_2_36_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_36
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_36_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_36
# define GLIB_DEPRECATED_TYPE_IN_2_36_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_36
# define GLIB_AVAILABLE_IN_2_36 GLIB_UNAVAILABLE(2, 36)
# define GLIB_AVAILABLE_MACRO_IN_2_36 GLIB_UNAVAILABLE_MACRO(2, 36)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_36 GLIB_UNAVAILABLE_ENUMERATOR(2, 36)
# define GLIB_AVAILABLE_TYPE_IN_2_36 GLIB_UNAVAILABLE_TYPE(2, 36)
#else
# define GLIB_AVAILABLE_IN_2_36 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_36
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_36
# define GLIB_AVAILABLE_TYPE_IN_2_36
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_38
# define GLIB_DEPRECATED_IN_2_38 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_38_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_38 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_38_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_38 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_38_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_38 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_38_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_38 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_38_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_38
# define GLIB_DEPRECATED_MACRO_IN_2_38_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_38
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_38_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_38
# define GLIB_DEPRECATED_TYPE_IN_2_38_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
# define GLIB_AVAILABLE_IN_2_38 GLIB_UNAVAILABLE(2, 38)
# define GLIB_AVAILABLE_MACRO_IN_2_38 GLIB_UNAVAILABLE_MACRO(2, 38)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_38 GLIB_UNAVAILABLE_ENUMERATOR(2, 38)
# define GLIB_AVAILABLE_TYPE_IN_2_38 GLIB_UNAVAILABLE_TYPE(2, 38)
#else
# define GLIB_AVAILABLE_IN_2_38 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_38
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_38
# define GLIB_AVAILABLE_TYPE_IN_2_38
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_40
# define GLIB_DEPRECATED_IN_2_40 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_40_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_40 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_40_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_40 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_40_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_40 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_40_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_40 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_40_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_40
# define GLIB_DEPRECATED_MACRO_IN_2_40_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_40
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_40_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_40
# define GLIB_DEPRECATED_TYPE_IN_2_40_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_40
# define GLIB_AVAILABLE_IN_2_40 GLIB_UNAVAILABLE(2, 40)
# define GLIB_AVAILABLE_MACRO_IN_2_40 GLIB_UNAVAILABLE_MACRO(2, 40)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_40 GLIB_UNAVAILABLE_ENUMERATOR(2, 40)
# define GLIB_AVAILABLE_TYPE_IN_2_40 GLIB_UNAVAILABLE_TYPE(2, 40)
#else
# define GLIB_AVAILABLE_IN_2_40 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_40
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_40
# define GLIB_AVAILABLE_TYPE_IN_2_40
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_42
# define GLIB_DEPRECATED_IN_2_42 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_42_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_42 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_42_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_42 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_42_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_42
# define GLIB_DEPRECATED_MACRO_IN_2_42_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_42
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_42_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_42
# define GLIB_DEPRECATED_TYPE_IN_2_42_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_42
# define GLIB_AVAILABLE_IN_2_42 GLIB_UNAVAILABLE(2, 42)
# define GLIB_AVAILABLE_MACRO_IN_2_42 GLIB_UNAVAILABLE_MACRO(2, 42)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_42 GLIB_UNAVAILABLE_ENUMERATOR(2, 42)
# define GLIB_AVAILABLE_TYPE_IN_2_42 GLIB_UNAVAILABLE_TYPE(2, 42)
#else
# define GLIB_AVAILABLE_IN_2_42 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_42
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_42
# define GLIB_AVAILABLE_TYPE_IN_2_42
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_44
# define GLIB_DEPRECATED_IN_2_44 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_44_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_44 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_44_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_44 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_44_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_44 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_44_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_44 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_44_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_44
# define GLIB_DEPRECATED_MACRO_IN_2_44_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_44
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_44_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_44
# define GLIB_DEPRECATED_TYPE_IN_2_44_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_44
# define GLIB_AVAILABLE_IN_2_44 GLIB_UNAVAILABLE(2, 44)
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_44 GLIB_UNAVAILABLE_STATIC_INLINE(2, 44)
# define GLIB_AVAILABLE_MACRO_IN_2_44 GLIB_UNAVAILABLE_MACRO(2, 44)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_44 GLIB_UNAVAILABLE_ENUMERATOR(2, 44)
# define GLIB_AVAILABLE_TYPE_IN_2_44 GLIB_UNAVAILABLE_TYPE(2, 44)
#else
# define GLIB_AVAILABLE_IN_2_44 _GLIB_EXTERN
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
# define GLIB_AVAILABLE_MACRO_IN_2_44
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_44
# define GLIB_AVAILABLE_TYPE_IN_2_44
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_46
# define GLIB_DEPRECATED_IN_2_46 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_46_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_46 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_46_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_46 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_46_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_46
# define GLIB_DEPRECATED_MACRO_IN_2_46_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_46
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_46_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_46
# define GLIB_DEPRECATED_TYPE_IN_2_46_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_46
# define GLIB_AVAILABLE_IN_2_46 GLIB_UNAVAILABLE(2, 46)
# define GLIB_AVAILABLE_MACRO_IN_2_46 GLIB_UNAVAILABLE_MACRO(2, 46)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_46 GLIB_UNAVAILABLE_ENUMERATOR(2, 46)
# define GLIB_AVAILABLE_TYPE_IN_2_46 GLIB_UNAVAILABLE_TYPE(2, 46)
#else
# define GLIB_AVAILABLE_IN_2_46 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_46
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_46
# define GLIB_AVAILABLE_TYPE_IN_2_46
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_48
# define GLIB_DEPRECATED_IN_2_48 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_48_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_48 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_48_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_48 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_48_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_48 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_48_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_48 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_48_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_48
# define GLIB_DEPRECATED_MACRO_IN_2_48_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_48
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_48_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_48
# define GLIB_DEPRECATED_TYPE_IN_2_48_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_48
# define GLIB_AVAILABLE_IN_2_48 GLIB_UNAVAILABLE(2, 48)
# define GLIB_AVAILABLE_MACRO_IN_2_48 GLIB_UNAVAILABLE_MACRO(2, 48)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_48 GLIB_UNAVAILABLE_ENUMERATOR(2, 48)
# define GLIB_AVAILABLE_TYPE_IN_2_48 GLIB_UNAVAILABLE_TYPE(2, 48)
#else
# define GLIB_AVAILABLE_IN_2_48 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_48
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_48
# define GLIB_AVAILABLE_TYPE_IN_2_48
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_50
# define GLIB_DEPRECATED_IN_2_50 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_50_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_50 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_50_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_50 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_50_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_50 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_50_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_50 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_50_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_50
# define GLIB_DEPRECATED_MACRO_IN_2_50_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_50
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_50_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_50
# define GLIB_DEPRECATED_TYPE_IN_2_50_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_50
# define GLIB_AVAILABLE_IN_2_50 GLIB_UNAVAILABLE(2, 50)
# define GLIB_AVAILABLE_MACRO_IN_2_50 GLIB_UNAVAILABLE_MACRO(2, 50)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_50 GLIB_UNAVAILABLE_ENUMERATOR(2, 50)
# define GLIB_AVAILABLE_TYPE_IN_2_50 GLIB_UNAVAILABLE_TYPE(2, 50)
#else
# define GLIB_AVAILABLE_IN_2_50 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_50
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_50
# define GLIB_AVAILABLE_TYPE_IN_2_50
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_52
# define GLIB_DEPRECATED_IN_2_52 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_52_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_52 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_52_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_52 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_52_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_52 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_52_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_52 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_52_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_52
# define GLIB_DEPRECATED_MACRO_IN_2_52_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_52
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_52_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_52
# define GLIB_DEPRECATED_TYPE_IN_2_52_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_52
# define GLIB_AVAILABLE_IN_2_52 GLIB_UNAVAILABLE(2, 52)
# define GLIB_AVAILABLE_MACRO_IN_2_52 GLIB_UNAVAILABLE_MACRO(2, 52)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_52 GLIB_UNAVAILABLE_ENUMERATOR(2, 52)
# define GLIB_AVAILABLE_TYPE_IN_2_52 GLIB_UNAVAILABLE_TYPE(2, 52)
#else
# define GLIB_AVAILABLE_IN_2_52 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_52
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_52
# define GLIB_AVAILABLE_TYPE_IN_2_52
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_54
# define GLIB_DEPRECATED_IN_2_54 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_54_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_54 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_54_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_54 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_54_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_54 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_54_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_54 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_54_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_54
# define GLIB_DEPRECATED_MACRO_IN_2_54_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_54
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_54_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_54
# define GLIB_DEPRECATED_TYPE_IN_2_54_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_54
# define GLIB_AVAILABLE_IN_2_54 GLIB_UNAVAILABLE(2, 54)
# define GLIB_AVAILABLE_MACRO_IN_2_54 GLIB_UNAVAILABLE_MACRO(2, 54)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_54 GLIB_UNAVAILABLE_ENUMERATOR(2, 54)
# define GLIB_AVAILABLE_TYPE_IN_2_54 GLIB_UNAVAILABLE_TYPE(2, 54)
#else
# define GLIB_AVAILABLE_IN_2_54 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_54
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_54
# define GLIB_AVAILABLE_TYPE_IN_2_54
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_56
# define GLIB_DEPRECATED_IN_2_56 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_56_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_56 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_56_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_56 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_56_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_56 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_56_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_56 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_56_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_56
# define GLIB_DEPRECATED_MACRO_IN_2_56_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_56
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_56_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_56
# define GLIB_DEPRECATED_TYPE_IN_2_56_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_56
# define GLIB_AVAILABLE_IN_2_56 GLIB_UNAVAILABLE(2, 56)
# define GLIB_AVAILABLE_MACRO_IN_2_56 GLIB_UNAVAILABLE_MACRO(2, 56)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_56 GLIB_UNAVAILABLE_ENUMERATOR(2, 56)
# define GLIB_AVAILABLE_TYPE_IN_2_56 GLIB_UNAVAILABLE_TYPE(2, 56)
#else
# define GLIB_AVAILABLE_IN_2_56 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_56
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_56
# define GLIB_AVAILABLE_TYPE_IN_2_56
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_58
# define GLIB_DEPRECATED_IN_2_58 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_58_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_58 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_58_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_58 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_58_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_58 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_58_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_58 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_58_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_58
# define GLIB_DEPRECATED_MACRO_IN_2_58_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_58
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_58_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_58
# define GLIB_DEPRECATED_TYPE_IN_2_58_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_58
# define GLIB_AVAILABLE_IN_2_58 GLIB_UNAVAILABLE(2, 58)
# define GLIB_AVAILABLE_MACRO_IN_2_58 GLIB_UNAVAILABLE_MACRO(2, 58)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_58 GLIB_UNAVAILABLE_ENUMERATOR(2, 58)
# define GLIB_AVAILABLE_TYPE_IN_2_58 GLIB_UNAVAILABLE_TYPE(2, 58)
#else
# define GLIB_AVAILABLE_IN_2_58 _GLIB_EXTERN
# define GLIB_AVAILABLE_MACRO_IN_2_58
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_58
# define GLIB_AVAILABLE_TYPE_IN_2_58
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_60
# define GLIB_DEPRECATED_IN_2_60 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_60_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_60 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_60_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_60 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_60_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_60 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_60_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_60 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_60_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_60
# define GLIB_DEPRECATED_MACRO_IN_2_60_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_60
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_60_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_60
# define GLIB_DEPRECATED_TYPE_IN_2_60_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_60
# define GLIB_AVAILABLE_IN_2_60 GLIB_UNAVAILABLE(2, 60)
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_60 GLIB_UNAVAILABLE_STATIC_INLINE(2, 60)
# define GLIB_AVAILABLE_MACRO_IN_2_60 GLIB_UNAVAILABLE_MACRO(2, 60)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_60 GLIB_UNAVAILABLE_ENUMERATOR(2, 60)
# define GLIB_AVAILABLE_TYPE_IN_2_60 GLIB_UNAVAILABLE_TYPE(2, 60)
#else
# define GLIB_AVAILABLE_IN_2_60 _GLIB_EXTERN
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_60
# define GLIB_AVAILABLE_MACRO_IN_2_60
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_60
# define GLIB_AVAILABLE_TYPE_IN_2_60
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_62
# define GLIB_DEPRECATED_IN_2_62 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_62_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_62 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_62_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_62 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_62_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_62 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_62_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_62 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_62_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_62
# define GLIB_DEPRECATED_MACRO_IN_2_62_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_62
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_62_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_62
# define GLIB_DEPRECATED_TYPE_IN_2_62_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_62
# define GLIB_AVAILABLE_IN_2_62 GLIB_UNAVAILABLE(2, 62)
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_62 GLIB_UNAVAILABLE_STATIC_INLINE(2, 62)
# define GLIB_AVAILABLE_MACRO_IN_2_62 GLIB_UNAVAILABLE_MACRO(2, 62)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_62 GLIB_UNAVAILABLE_ENUMERATOR(2, 62)
# define GLIB_AVAILABLE_TYPE_IN_2_62 GLIB_UNAVAILABLE_TYPE(2, 62)
#else
# define GLIB_AVAILABLE_IN_2_62 _GLIB_EXTERN
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
# define GLIB_AVAILABLE_MACRO_IN_2_62
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_62
# define GLIB_AVAILABLE_TYPE_IN_2_62
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_64
# define GLIB_DEPRECATED_IN_2_64 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_64_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_64 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_64_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_64 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_64_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_64 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_64_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_64 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_64_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_64
# define GLIB_DEPRECATED_MACRO_IN_2_64_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_64
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_64_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_64
# define GLIB_DEPRECATED_TYPE_IN_2_64_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_64
# define GLIB_AVAILABLE_IN_2_64 GLIB_UNAVAILABLE(2, 64)
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_64 GLIB_UNAVAILABLE_STATIC_INLINE(2, 64)
# define GLIB_AVAILABLE_MACRO_IN_2_64 GLIB_UNAVAILABLE_MACRO(2, 64)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_64 GLIB_UNAVAILABLE_ENUMERATOR(2, 64)
# define GLIB_AVAILABLE_TYPE_IN_2_64 GLIB_UNAVAILABLE_TYPE(2, 64)
#else
# define GLIB_AVAILABLE_IN_2_64 _GLIB_EXTERN
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_64
# define GLIB_AVAILABLE_MACRO_IN_2_64
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_64
# define GLIB_AVAILABLE_TYPE_IN_2_64
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_66
# define GLIB_DEPRECATED_IN_2_66 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_66_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_66 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_66_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_66 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_66_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_66 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_66_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_66 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_66_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_66
# define GLIB_DEPRECATED_MACRO_IN_2_66_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_66
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_66_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_66
# define GLIB_DEPRECATED_TYPE_IN_2_66_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_66
# define GLIB_AVAILABLE_IN_2_66 GLIB_UNAVAILABLE(2, 66)
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_66 GLIB_UNAVAILABLE_STATIC_INLINE(2, 66)
# define GLIB_AVAILABLE_MACRO_IN_2_66 GLIB_UNAVAILABLE_MACRO(2, 66)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_66 GLIB_UNAVAILABLE_ENUMERATOR(2, 66)
# define GLIB_AVAILABLE_TYPE_IN_2_66 GLIB_UNAVAILABLE_TYPE(2, 66)
#else
# define GLIB_AVAILABLE_IN_2_66 _GLIB_EXTERN
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_66
# define GLIB_AVAILABLE_MACRO_IN_2_66
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_66
# define GLIB_AVAILABLE_TYPE_IN_2_66
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68
# define GLIB_DEPRECATED_IN_2_68 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_68_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_68 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_68_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_68 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_68_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_68 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_68_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_68 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_68_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_68
# define GLIB_DEPRECATED_MACRO_IN_2_68_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_68
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_68_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_68
# define GLIB_DEPRECATED_TYPE_IN_2_68_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_68
# define GLIB_AVAILABLE_IN_2_68 GLIB_UNAVAILABLE(2, 68)
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_68 GLIB_UNAVAILABLE_STATIC_INLINE(2, 68)
# define GLIB_AVAILABLE_MACRO_IN_2_68 GLIB_UNAVAILABLE_MACRO(2, 68)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_68 GLIB_UNAVAILABLE_ENUMERATOR(2, 68)
# define GLIB_AVAILABLE_TYPE_IN_2_68 GLIB_UNAVAILABLE_TYPE(2, 68)
#else
# define GLIB_AVAILABLE_IN_2_68 _GLIB_EXTERN
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_68
# define GLIB_AVAILABLE_MACRO_IN_2_68
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_68
# define GLIB_AVAILABLE_TYPE_IN_2_68
#endif
#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_70
# define GLIB_DEPRECATED_IN_2_70 GLIB_DEPRECATED
# define GLIB_DEPRECATED_IN_2_70_FOR(f) GLIB_DEPRECATED_FOR(f)
# define GLIB_DEPRECATED_MACRO_IN_2_70 GLIB_DEPRECATED_MACRO
# define GLIB_DEPRECATED_MACRO_IN_2_70_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_70 GLIB_DEPRECATED_ENUMERATOR
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_70_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_70 GLIB_DEPRECATED_TYPE
# define GLIB_DEPRECATED_TYPE_IN_2_70_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
#else
# define GLIB_DEPRECATED_IN_2_70 _GLIB_EXTERN
# define GLIB_DEPRECATED_IN_2_70_FOR(f) _GLIB_EXTERN
# define GLIB_DEPRECATED_MACRO_IN_2_70
# define GLIB_DEPRECATED_MACRO_IN_2_70_FOR(f)
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_70
# define GLIB_DEPRECATED_ENUMERATOR_IN_2_70_FOR(f)
# define GLIB_DEPRECATED_TYPE_IN_2_70
# define GLIB_DEPRECATED_TYPE_IN_2_70_FOR(f)
#endif
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_70
# define GLIB_AVAILABLE_IN_2_70 GLIB_UNAVAILABLE(2, 70)
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_70 GLIB_UNAVAILABLE_STATIC_INLINE(2, 70)
# define GLIB_AVAILABLE_MACRO_IN_2_70 GLIB_UNAVAILABLE_MACRO(2, 70)
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_70 GLIB_UNAVAILABLE_ENUMERATOR(2, 70)
# define GLIB_AVAILABLE_TYPE_IN_2_70 GLIB_UNAVAILABLE_TYPE(2, 70)
#else
# define GLIB_AVAILABLE_IN_2_70 _GLIB_EXTERN
# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_70
# define GLIB_AVAILABLE_MACRO_IN_2_70
# define GLIB_AVAILABLE_ENUMERATOR_IN_2_70
# define GLIB_AVAILABLE_TYPE_IN_2_70
#endif
#endif /* __G_VERSION_MACROS_H__ */
gsequence.h 0000644 00000021153 15021467762 0006710 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
* Soeren Sandmann (sandmann@daimi.au.dk)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_SEQUENCE_H__
#define __G_SEQUENCE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GSequence GSequence;
typedef struct _GSequenceNode GSequenceIter;
typedef gint (* GSequenceIterCompareFunc) (GSequenceIter *a,
GSequenceIter *b,
gpointer data);
/* GSequence */
GLIB_AVAILABLE_IN_ALL
GSequence * g_sequence_new (GDestroyNotify data_destroy);
GLIB_AVAILABLE_IN_ALL
void g_sequence_free (GSequence *seq);
GLIB_AVAILABLE_IN_ALL
gint g_sequence_get_length (GSequence *seq);
GLIB_AVAILABLE_IN_ALL
void g_sequence_foreach (GSequence *seq,
GFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
void g_sequence_foreach_range (GSequenceIter *begin,
GSequenceIter *end,
GFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
void g_sequence_sort (GSequence *seq,
GCompareDataFunc cmp_func,
gpointer cmp_data);
GLIB_AVAILABLE_IN_ALL
void g_sequence_sort_iter (GSequence *seq,
GSequenceIterCompareFunc cmp_func,
gpointer cmp_data);
GLIB_AVAILABLE_IN_2_48
gboolean g_sequence_is_empty (GSequence *seq);
/* Getting iters */
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_get_begin_iter (GSequence *seq);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_get_end_iter (GSequence *seq);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_get_iter_at_pos (GSequence *seq,
gint pos);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_append (GSequence *seq,
gpointer data);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_prepend (GSequence *seq,
gpointer data);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_insert_before (GSequenceIter *iter,
gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_sequence_move (GSequenceIter *src,
GSequenceIter *dest);
GLIB_AVAILABLE_IN_ALL
void g_sequence_swap (GSequenceIter *a,
GSequenceIter *b);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_insert_sorted (GSequence *seq,
gpointer data,
GCompareDataFunc cmp_func,
gpointer cmp_data);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_insert_sorted_iter (GSequence *seq,
gpointer data,
GSequenceIterCompareFunc iter_cmp,
gpointer cmp_data);
GLIB_AVAILABLE_IN_ALL
void g_sequence_sort_changed (GSequenceIter *iter,
GCompareDataFunc cmp_func,
gpointer cmp_data);
GLIB_AVAILABLE_IN_ALL
void g_sequence_sort_changed_iter (GSequenceIter *iter,
GSequenceIterCompareFunc iter_cmp,
gpointer cmp_data);
GLIB_AVAILABLE_IN_ALL
void g_sequence_remove (GSequenceIter *iter);
GLIB_AVAILABLE_IN_ALL
void g_sequence_remove_range (GSequenceIter *begin,
GSequenceIter *end);
GLIB_AVAILABLE_IN_ALL
void g_sequence_move_range (GSequenceIter *dest,
GSequenceIter *begin,
GSequenceIter *end);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_search (GSequence *seq,
gpointer data,
GCompareDataFunc cmp_func,
gpointer cmp_data);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_search_iter (GSequence *seq,
gpointer data,
GSequenceIterCompareFunc iter_cmp,
gpointer cmp_data);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_lookup (GSequence *seq,
gpointer data,
GCompareDataFunc cmp_func,
gpointer cmp_data);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_lookup_iter (GSequence *seq,
gpointer data,
GSequenceIterCompareFunc iter_cmp,
gpointer cmp_data);
/* Dereferencing */
GLIB_AVAILABLE_IN_ALL
gpointer g_sequence_get (GSequenceIter *iter);
GLIB_AVAILABLE_IN_ALL
void g_sequence_set (GSequenceIter *iter,
gpointer data);
/* Operations on GSequenceIter * */
GLIB_AVAILABLE_IN_ALL
gboolean g_sequence_iter_is_begin (GSequenceIter *iter);
GLIB_AVAILABLE_IN_ALL
gboolean g_sequence_iter_is_end (GSequenceIter *iter);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_iter_next (GSequenceIter *iter);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_iter_prev (GSequenceIter *iter);
GLIB_AVAILABLE_IN_ALL
gint g_sequence_iter_get_position (GSequenceIter *iter);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_iter_move (GSequenceIter *iter,
gint delta);
GLIB_AVAILABLE_IN_ALL
GSequence * g_sequence_iter_get_sequence (GSequenceIter *iter);
/* Search */
GLIB_AVAILABLE_IN_ALL
gint g_sequence_iter_compare (GSequenceIter *a,
GSequenceIter *b);
GLIB_AVAILABLE_IN_ALL
GSequenceIter *g_sequence_range_get_midpoint (GSequenceIter *begin,
GSequenceIter *end);
G_END_DECLS
#endif /* __G_SEQUENCE_H__ */
gscanner.h 0000644 00000021235 15021467762 0006532 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_SCANNER_H__
#define __G_SCANNER_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
typedef struct _GScanner GScanner;
typedef struct _GScannerConfig GScannerConfig;
typedef union _GTokenValue GTokenValue;
typedef void (*GScannerMsgFunc) (GScanner *scanner,
gchar *message,
gboolean error);
/* GScanner: Flexible lexical scanner for general purpose.
*/
/* Character sets */
#define G_CSET_A_2_Z "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
#define G_CSET_a_2_z "abcdefghijklmnopqrstuvwxyz"
#define G_CSET_DIGITS "0123456789"
#define G_CSET_LATINC "\300\301\302\303\304\305\306"\
"\307\310\311\312\313\314\315\316\317\320"\
"\321\322\323\324\325\326"\
"\330\331\332\333\334\335\336"
#define G_CSET_LATINS "\337\340\341\342\343\344\345\346"\
"\347\350\351\352\353\354\355\356\357\360"\
"\361\362\363\364\365\366"\
"\370\371\372\373\374\375\376\377"
/* Error types */
typedef enum
{
G_ERR_UNKNOWN,
G_ERR_UNEXP_EOF,
G_ERR_UNEXP_EOF_IN_STRING,
G_ERR_UNEXP_EOF_IN_COMMENT,
G_ERR_NON_DIGIT_IN_CONST,
G_ERR_DIGIT_RADIX,
G_ERR_FLOAT_RADIX,
G_ERR_FLOAT_MALFORMED
} GErrorType;
/* Token types */
typedef enum
{
G_TOKEN_EOF = 0,
G_TOKEN_LEFT_PAREN = '(',
G_TOKEN_RIGHT_PAREN = ')',
G_TOKEN_LEFT_CURLY = '{',
G_TOKEN_RIGHT_CURLY = '}',
G_TOKEN_LEFT_BRACE = '[',
G_TOKEN_RIGHT_BRACE = ']',
G_TOKEN_EQUAL_SIGN = '=',
G_TOKEN_COMMA = ',',
G_TOKEN_NONE = 256,
G_TOKEN_ERROR,
G_TOKEN_CHAR,
G_TOKEN_BINARY,
G_TOKEN_OCTAL,
G_TOKEN_INT,
G_TOKEN_HEX,
G_TOKEN_FLOAT,
G_TOKEN_STRING,
G_TOKEN_SYMBOL,
G_TOKEN_IDENTIFIER,
G_TOKEN_IDENTIFIER_NULL,
G_TOKEN_COMMENT_SINGLE,
G_TOKEN_COMMENT_MULTI,
/*< private >*/
G_TOKEN_LAST
} GTokenType;
union _GTokenValue
{
gpointer v_symbol;
gchar *v_identifier;
gulong v_binary;
gulong v_octal;
gulong v_int;
guint64 v_int64;
gdouble v_float;
gulong v_hex;
gchar *v_string;
gchar *v_comment;
guchar v_char;
guint v_error;
};
struct _GScannerConfig
{
/* Character sets
*/
gchar *cset_skip_characters; /* default: " \t\n" */
gchar *cset_identifier_first;
gchar *cset_identifier_nth;
gchar *cpair_comment_single; /* default: "#\n" */
/* Should symbol lookup work case sensitive?
*/
guint case_sensitive : 1;
/* Boolean values to be adjusted "on the fly"
* to configure scanning behaviour.
*/
guint skip_comment_multi : 1; /* C like comment */
guint skip_comment_single : 1; /* single line comment */
guint scan_comment_multi : 1; /* scan multi line comments? */
guint scan_identifier : 1;
guint scan_identifier_1char : 1;
guint scan_identifier_NULL : 1;
guint scan_symbols : 1;
guint scan_binary : 1;
guint scan_octal : 1;
guint scan_float : 1;
guint scan_hex : 1; /* '0x0ff0' */
guint scan_hex_dollar : 1; /* '$0ff0' */
guint scan_string_sq : 1; /* string: 'anything' */
guint scan_string_dq : 1; /* string: "\\-escapes!\n" */
guint numbers_2_int : 1; /* bin, octal, hex => int */
guint int_2_float : 1; /* int => G_TOKEN_FLOAT? */
guint identifier_2_string : 1;
guint char_2_token : 1; /* return G_TOKEN_CHAR? */
guint symbol_2_token : 1;
guint scope_0_fallback : 1; /* try scope 0 on lookups? */
guint store_int64 : 1; /* use value.v_int64 rather than v_int */
/*< private >*/
guint padding_dummy;
};
struct _GScanner
{
/* unused fields */
gpointer user_data;
guint max_parse_errors;
/* g_scanner_error() increments this field */
guint parse_errors;
/* name of input stream, featured by the default message handler */
const gchar *input_name;
/* quarked data */
GData *qdata;
/* link into the scanner configuration */
GScannerConfig *config;
/* fields filled in after g_scanner_get_next_token() */
GTokenType token;
GTokenValue value;
guint line;
guint position;
/* fields filled in after g_scanner_peek_next_token() */
GTokenType next_token;
GTokenValue next_value;
guint next_line;
guint next_position;
/*< private >*/
/* to be considered private */
GHashTable *symbol_table;
gint input_fd;
const gchar *text;
const gchar *text_end;
gchar *buffer;
guint scope_id;
/*< public >*/
/* handler function for _warn and _error */
GScannerMsgFunc msg_handler;
};
GLIB_AVAILABLE_IN_ALL
GScanner* g_scanner_new (const GScannerConfig *config_templ);
GLIB_AVAILABLE_IN_ALL
void g_scanner_destroy (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
void g_scanner_input_file (GScanner *scanner,
gint input_fd);
GLIB_AVAILABLE_IN_ALL
void g_scanner_sync_file_offset (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
void g_scanner_input_text (GScanner *scanner,
const gchar *text,
guint text_len);
GLIB_AVAILABLE_IN_ALL
GTokenType g_scanner_get_next_token (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
GTokenType g_scanner_peek_next_token (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
GTokenType g_scanner_cur_token (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
GTokenValue g_scanner_cur_value (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
guint g_scanner_cur_line (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
guint g_scanner_cur_position (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
gboolean g_scanner_eof (GScanner *scanner);
GLIB_AVAILABLE_IN_ALL
guint g_scanner_set_scope (GScanner *scanner,
guint scope_id);
GLIB_AVAILABLE_IN_ALL
void g_scanner_scope_add_symbol (GScanner *scanner,
guint scope_id,
const gchar *symbol,
gpointer value);
GLIB_AVAILABLE_IN_ALL
void g_scanner_scope_remove_symbol (GScanner *scanner,
guint scope_id,
const gchar *symbol);
GLIB_AVAILABLE_IN_ALL
gpointer g_scanner_scope_lookup_symbol (GScanner *scanner,
guint scope_id,
const gchar *symbol);
GLIB_AVAILABLE_IN_ALL
void g_scanner_scope_foreach_symbol (GScanner *scanner,
guint scope_id,
GHFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
gpointer g_scanner_lookup_symbol (GScanner *scanner,
const gchar *symbol);
GLIB_AVAILABLE_IN_ALL
void g_scanner_unexp_token (GScanner *scanner,
GTokenType expected_token,
const gchar *identifier_spec,
const gchar *symbol_spec,
const gchar *symbol_name,
const gchar *message,
gint is_error);
GLIB_AVAILABLE_IN_ALL
void g_scanner_error (GScanner *scanner,
const gchar *format,
...) G_GNUC_PRINTF (2,3);
GLIB_AVAILABLE_IN_ALL
void g_scanner_warn (GScanner *scanner,
const gchar *format,
...) G_GNUC_PRINTF (2,3);
/* keep downward source compatibility */
#define g_scanner_add_symbol( scanner, symbol, value ) G_STMT_START { \
g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \
} G_STMT_END GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_scanner_scope_add_symbol)
#define g_scanner_remove_symbol( scanner, symbol ) G_STMT_START { \
g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \
} G_STMT_END GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_scanner_scope_remove_symbol)
#define g_scanner_foreach_symbol( scanner, func, data ) G_STMT_START { \
g_scanner_scope_foreach_symbol ((scanner), 0, (func), (data)); \
} G_STMT_END GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_scanner_scope_foreach_symbol)
/* The following two functions are deprecated and will be removed in
* the next major release. They do no good. */
#define g_scanner_freeze_symbol_table(scanner) ((void)0) GLIB_DEPRECATED_MACRO_IN_2_26
#define g_scanner_thaw_symbol_table(scanner) ((void)0) GLIB_DEPRECATED_MACRO_IN_2_26
G_END_DECLS
#endif /* __G_SCANNER_H__ */
gmappedfile.h 0000644 00000003702 15021467762 0007206 0 ustar 00 /* GLIB - Library of useful routines for C programming
* gmappedfile.h: Simplified wrapper around the mmap function
*
* Copyright 2005 Matthias Clasen
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_MAPPED_FILE_H__
#define __G_MAPPED_FILE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
typedef struct _GMappedFile GMappedFile;
GLIB_AVAILABLE_IN_ALL
GMappedFile *g_mapped_file_new (const gchar *filename,
gboolean writable,
GError **error);
GLIB_AVAILABLE_IN_ALL
GMappedFile *g_mapped_file_new_from_fd (gint fd,
gboolean writable,
GError **error);
GLIB_AVAILABLE_IN_ALL
gsize g_mapped_file_get_length (GMappedFile *file);
GLIB_AVAILABLE_IN_ALL
gchar *g_mapped_file_get_contents (GMappedFile *file);
GLIB_AVAILABLE_IN_2_34
GBytes * g_mapped_file_get_bytes (GMappedFile *file);
GLIB_AVAILABLE_IN_ALL
GMappedFile *g_mapped_file_ref (GMappedFile *file);
GLIB_AVAILABLE_IN_ALL
void g_mapped_file_unref (GMappedFile *file);
GLIB_DEPRECATED_FOR(g_mapped_file_unref)
void g_mapped_file_free (GMappedFile *file);
G_END_DECLS
#endif /* __G_MAPPED_FILE_H__ */
genviron.h 0000644 00000004474 15021467762 0006567 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_ENVIRON_H__
#define __G_ENVIRON_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
const gchar * g_getenv (const gchar *variable);
GLIB_AVAILABLE_IN_ALL
gboolean g_setenv (const gchar *variable,
const gchar *value,
gboolean overwrite);
GLIB_AVAILABLE_IN_ALL
void g_unsetenv (const gchar *variable);
GLIB_AVAILABLE_IN_ALL
gchar ** g_listenv (void);
GLIB_AVAILABLE_IN_ALL
gchar ** g_get_environ (void);
GLIB_AVAILABLE_IN_ALL
const gchar * g_environ_getenv (gchar **envp,
const gchar *variable);
GLIB_AVAILABLE_IN_ALL
gchar ** g_environ_setenv (gchar **envp,
const gchar *variable,
const gchar *value,
gboolean overwrite) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
gchar ** g_environ_unsetenv (gchar **envp,
const gchar *variable) G_GNUC_WARN_UNUSED_RESULT;
G_END_DECLS
#endif /* __G_ENVIRON_H__ */
gmacros.h 0000644 00000132171 15021467762 0006367 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
/* This file must not include any other glib header file and must thus
* not refer to variables from glibconfig.h
*/
#ifndef __G_MACROS_H__
#define __G_MACROS_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
/* We include stddef.h to get the system's definition of NULL
*/
#include
#ifdef __GNUC__
#define G_GNUC_CHECK_VERSION(major, minor) \
((__GNUC__ > (major)) || \
((__GNUC__ == (major)) && \
(__GNUC_MINOR__ >= (minor))))
#else
#define G_GNUC_CHECK_VERSION(major, minor) 0
#endif
/* Here we provide G_GNUC_EXTENSION as an alias for __extension__,
* where this is valid. This allows for warningless compilation of
* "long long" types even in the presence of '-ansi -pedantic'.
*/
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
#define G_GNUC_EXTENSION __extension__
#else
#define G_GNUC_EXTENSION
#endif
/* Every compiler that we target supports inlining, but some of them may
* complain about it if we don't say "__inline". If we have C99, or if
* we are using C++, then we can use "inline" directly. Unfortunately
* Visual Studio does not support __STDC_VERSION__, so we need to check
* whether we are on Visual Studio 2013 or earlier to see that we need to
* say "__inline" in C mode.
* Otherwise, we say "__inline" to avoid the warning.
*/
#define G_CAN_INLINE
#ifndef __cplusplus
# ifdef _MSC_VER
# if (_MSC_VER < 1900)
# define G_INLINE_DEFINE_NEEDED
# endif
# elif !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199900)
# define G_INLINE_DEFINE_NEEDED
# endif
#endif
#ifdef G_INLINE_DEFINE_NEEDED
# undef inline
# define inline __inline
#endif
#undef G_INLINE_DEFINE_NEEDED
/**
* G_INLINE_FUNC:
*
* This macro used to be used to conditionally define inline functions
* in a compatible way before this feature was supported in all
* compilers. These days, GLib requires inlining support from the
* compiler, so your GLib-using programs can safely assume that the
* "inline" keyword works properly.
*
* Never use this macro anymore. Just say "static inline".
*
* Deprecated: 2.48: Use "static inline" instead
*/
/* For historical reasons we need to continue to support those who
* define G_IMPLEMENT_INLINES to mean "don't implement this here".
*/
#ifdef G_IMPLEMENT_INLINES
# define G_INLINE_FUNC extern GLIB_DEPRECATED_MACRO_IN_2_48_FOR(static inline)
# undef G_CAN_INLINE
#else
# define G_INLINE_FUNC static inline GLIB_DEPRECATED_MACRO_IN_2_48_FOR(static inline)
#endif /* G_IMPLEMENT_INLINES */
/* Provide macros to feature the GCC function attribute.
*/
/**
* G_GNUC_PURE:
*
* Expands to the GNU C `pure` function attribute if the compiler is gcc.
* Declaring a function as `pure` enables better optimization of calls to
* the function. A `pure` function has no effects except its return value
* and the return value depends only on the parameters and/or global
* variables.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* gboolean g_type_check_value (const GValue *value) G_GNUC_PURE;
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-pure-function-attribute) for more details.
*/
/**
* G_GNUC_MALLOC:
*
* Expands to the
* [GNU C `malloc` function attribute](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-functions-that-behave-like-malloc)
* if the compiler is gcc.
* Declaring a function as `malloc` enables better optimization of the function,
* but must only be done if the allocation behaviour of the function is fully
* understood, otherwise miscompilation can result.
*
* A function can have the `malloc` attribute if it returns a pointer which is
* guaranteed to not alias with any other pointer valid when the function
* returns, and moreover no pointers to valid objects occur in any storage
* addressed by the returned pointer.
*
* In practice, this means that `G_GNUC_MALLOC` can be used with any function
* which returns unallocated or zeroed-out memory, but not with functions which
* return initialised structures containing other pointers, or with functions
* that reallocate memory. This definition changed in GLib 2.58 to match the
* stricter definition introduced around GCC 5.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* gpointer g_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
* ]|
*
* See the
* [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-functions-that-behave-like-malloc)
* for more details.
*
* Since: 2.6
*/
/**
* G_GNUC_NO_INLINE:
*
* Expands to the GNU C `noinline` function attribute if the compiler is gcc.
* If the compiler is not gcc, this macro expands to nothing.
*
* Declaring a function as `noinline` prevents the function from being
* considered for inlining.
*
* The attribute may be placed before the declaration or definition,
* right before the `static` keyword.
*
* |[
* G_GNUC_NO_INLINE
* static int
* do_not_inline_this (void)
* {
* ...
* }
* ]|
*
* See the
* [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-noinline-function-attribute)
* for more details.
*
* Since: 2.58
*/
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
#define G_GNUC_PURE __attribute__((__pure__))
#define G_GNUC_MALLOC __attribute__((__malloc__))
#define G_GNUC_NO_INLINE __attribute__((noinline))
#else
#define G_GNUC_PURE
#define G_GNUC_MALLOC
#define G_GNUC_NO_INLINE
#endif
/**
* G_GNUC_NULL_TERMINATED:
*
* Expands to the GNU C `sentinel` function attribute if the compiler is gcc.
* This function attribute only applies to variadic functions and instructs
* the compiler to check that the argument list is terminated with an
* explicit %NULL.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* gchar *g_strconcat (const gchar *string1,
* ...) G_GNUC_NULL_TERMINATED;
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-sentinel-function-attribute) for more details.
*
* Since: 2.8
*/
#if __GNUC__ >= 4
#define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
#else
#define G_GNUC_NULL_TERMINATED
#endif
/*
* We can only use __typeof__ on GCC >= 4.8, and not when compiling C++. Since
* __typeof__ is used in a few places in GLib, provide a pre-processor symbol
* to factor the check out from callers.
*
* This symbol is private.
*/
#undef glib_typeof
#if !defined(__cplusplus) && \
((defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))) || \
defined(__clang__))
#define glib_typeof(t) __typeof__ (t)
#elif defined(__cplusplus) && __cplusplus >= 201103L
/* C++11 decltype() is close enough for our usage */
/* This needs `#include `, but we have guarded this feature with a
* `GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68` check, and such a check
* cannot be enforced in this header due to include ordering requirements.
* Within GLib itself, which use `glib_typeof` need to add the include
* themselves. See other examples in GLib for how to do this.
*/
#define glib_typeof(t) typename std::remove_reference::type
#define glib_typeof_2_68
#endif
/*
* Clang feature detection: http://clang.llvm.org/docs/LanguageExtensions.html
* These are not available on GCC, but since the pre-processor doesn't do
* operator short-circuiting, we can't use it in a statement or we'll get:
*
* error: missing binary operator before token "("
*
* So we define it to 0 to satisfy the pre-processor.
*/
#ifdef __has_attribute
#define g_macro__has_attribute __has_attribute
#else
#define g_macro__has_attribute(x) 0
#endif
#ifdef __has_feature
#define g_macro__has_feature __has_feature
#else
#define g_macro__has_feature(x) 0
#endif
#ifdef __has_builtin
#define g_macro__has_builtin __has_builtin
#else
#define g_macro__has_builtin(x) 0
#endif
/**
* G_GNUC_ALLOC_SIZE:
* @x: the index of the argument specifying the allocation size
*
* Expands to the GNU C `alloc_size` function attribute if the compiler
* is a new enough gcc. This attribute tells the compiler that the
* function returns a pointer to memory of a size that is specified
* by the @xth function parameter.
*
* Place the attribute after the function declaration, just before the
* semicolon.
*
* |[
* gpointer g_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-alloc_005fsize-function-attribute) for more details.
*
* Since: 2.18
*/
/**
* G_GNUC_ALLOC_SIZE2:
* @x: the index of the argument specifying one factor of the allocation size
* @y: the index of the argument specifying the second factor of the allocation size
*
* Expands to the GNU C `alloc_size` function attribute if the compiler is a
* new enough gcc. This attribute tells the compiler that the function returns
* a pointer to memory of a size that is specified by the product of two
* function parameters.
*
* Place the attribute after the function declaration, just before the
* semicolon.
*
* |[
* gpointer g_malloc_n (gsize n_blocks,
* gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1, 2);
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-alloc_005fsize-function-attribute) for more details.
*
* Since: 2.18
*/
#if (!defined(__clang__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) || \
(defined(__clang__) && g_macro__has_attribute(__alloc_size__))
#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
#define G_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y)))
#else
#define G_GNUC_ALLOC_SIZE(x)
#define G_GNUC_ALLOC_SIZE2(x,y)
#endif
/**
* G_GNUC_PRINTF:
* @format_idx: the index of the argument corresponding to the
* format string (the arguments are numbered from 1)
* @arg_idx: the index of the first of the format arguments, or 0 if
* there are no format arguments
*
* Expands to the GNU C `format` function attribute if the compiler is gcc.
* This is used for declaring functions which take a variable number of
* arguments, with the same syntax as `printf()`. It allows the compiler
* to type-check the arguments passed to the function.
*
* Place the attribute after the function declaration, just before the
* semicolon.
*
* See the
* [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-Wformat-3288)
* for more details.
*
* |[
* gint g_snprintf (gchar *string,
* gulong n,
* gchar const *format,
* ...) G_GNUC_PRINTF (3, 4);
* ]|
*/
/**
* G_GNUC_SCANF:
* @format_idx: the index of the argument corresponding to
* the format string (the arguments are numbered from 1)
* @arg_idx: the index of the first of the format arguments, or 0 if
* there are no format arguments
*
* Expands to the GNU C `format` function attribute if the compiler is gcc.
* This is used for declaring functions which take a variable number of
* arguments, with the same syntax as `scanf()`. It allows the compiler
* to type-check the arguments passed to the function.
*
* |[
* int my_scanf (MyStream *stream,
* const char *format,
* ...) G_GNUC_SCANF (2, 3);
* int my_vscanf (MyStream *stream,
* const char *format,
* va_list ap) G_GNUC_SCANF (2, 0);
* ]|
*
* See the
* [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-Wformat-3288)
* for details.
*/
/**
* G_GNUC_STRFTIME:
* @format_idx: the index of the argument corresponding to
* the format string (the arguments are numbered from 1)
*
* Expands to the GNU C `strftime` format function attribute if the compiler
* is gcc. This is used for declaring functions which take a format argument
* which is passed to `strftime()` or an API implementing its formats. It allows
* the compiler check the format passed to the function.
*
* |[
* gsize my_strftime (MyBuffer *buffer,
* const char *format,
* const struct tm *tm) G_GNUC_STRFTIME (2);
* ]|
*
* See the
* [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-Wformat-3288)
* for details.
*
* Since: 2.60
*/
/**
* G_GNUC_FORMAT:
* @arg_idx: the index of the argument
*
* Expands to the GNU C `format_arg` function attribute if the compiler
* is gcc. This function attribute specifies that a function takes a
* format string for a `printf()`, `scanf()`, `strftime()` or `strfmon()` style
* function and modifies it, so that the result can be passed to a `printf()`,
* `scanf()`, `strftime()` or `strfmon()` style function (with the remaining
* arguments to the format function the same as they would have been
* for the unmodified string).
*
* Place the attribute after the function declaration, just before the
* semicolon.
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-Wformat-nonliteral-1) for more details.
*
* |[
* gchar *g_dgettext (gchar *domain_name, gchar *msgid) G_GNUC_FORMAT (2);
* ]|
*/
/**
* G_GNUC_NORETURN:
*
* Expands to the GNU C `noreturn` function attribute if the compiler is gcc.
* It is used for declaring functions which never return. It enables
* optimization of the function, and avoids possible compiler warnings.
*
* Since 2.68, it is recommended that code uses %G_NORETURN instead of
* %G_GNUC_NORETURN, as that works on more platforms and compilers (in
* particular, MSVC and C++11) than %G_GNUC_NORETURN, which works with GCC and
* Clang only. %G_GNUC_NORETURN continues to work, so has not been deprecated
* yet.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* void g_abort (void) G_GNUC_NORETURN;
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-noreturn-function-attribute) for more details.
*/
/**
* G_GNUC_CONST:
*
* Expands to the GNU C `const` function attribute if the compiler is gcc.
* Declaring a function as `const` enables better optimization of calls to
* the function. A `const` function doesn't examine any values except its
* parameters, and has no effects except its return value.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* gchar g_ascii_tolower (gchar c) G_GNUC_CONST;
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-const-function-attribute) for more details.
*
* A function that has pointer arguments and examines the data pointed to
* must not be declared `const`. Likewise, a function that calls a non-`const`
* function usually must not be `const`. It doesn't make sense for a `const`
* function to return `void`.
*/
/**
* G_GNUC_UNUSED:
*
* Expands to the GNU C `unused` function attribute if the compiler is gcc.
* It is used for declaring functions and arguments which may never be used.
* It avoids possible compiler warnings.
*
* For functions, place the attribute after the declaration, just before the
* semicolon. For arguments, place the attribute at the beginning of the
* argument declaration.
*
* |[
* void my_unused_function (G_GNUC_UNUSED gint unused_argument,
* gint other_argument) G_GNUC_UNUSED;
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-unused-function-attribute) for more details.
*/
/**
* G_GNUC_NO_INSTRUMENT:
*
* Expands to the GNU C `no_instrument_function` function attribute if the
* compiler is gcc. Functions with this attribute will not be instrumented
* for profiling, when the compiler is called with the
* `-finstrument-functions` option.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* int do_uninteresting_things (void) G_GNUC_NO_INSTRUMENT;
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-no_005finstrument_005ffunction-function-attribute) for more details.
*/
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
#if !defined (__clang__) && G_GNUC_CHECK_VERSION (4, 4)
#define G_GNUC_PRINTF( format_idx, arg_idx ) \
__attribute__((__format__ (gnu_printf, format_idx, arg_idx)))
#define G_GNUC_SCANF( format_idx, arg_idx ) \
__attribute__((__format__ (gnu_scanf, format_idx, arg_idx)))
#define G_GNUC_STRFTIME( format_idx ) \
__attribute__((__format__ (gnu_strftime, format_idx, 0)))
#else
#define G_GNUC_PRINTF( format_idx, arg_idx ) \
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
#define G_GNUC_SCANF( format_idx, arg_idx ) \
__attribute__((__format__ (__scanf__, format_idx, arg_idx)))
#define G_GNUC_STRFTIME( format_idx ) \
__attribute__((__format__ (__strftime__, format_idx, 0)))
#endif
#define G_GNUC_FORMAT( arg_idx ) \
__attribute__((__format_arg__ (arg_idx)))
#define G_GNUC_NORETURN \
__attribute__((__noreturn__))
#define G_GNUC_CONST \
__attribute__((__const__))
#define G_GNUC_UNUSED \
__attribute__((__unused__))
#define G_GNUC_NO_INSTRUMENT \
__attribute__((__no_instrument_function__))
#else /* !__GNUC__ */
#define G_GNUC_PRINTF( format_idx, arg_idx )
#define G_GNUC_SCANF( format_idx, arg_idx )
#define G_GNUC_STRFTIME( format_idx )
#define G_GNUC_FORMAT( arg_idx )
/* NOTE: MSVC has __declspec(noreturn) but unlike GCC __attribute__,
* __declspec can only be placed at the start of the function prototype
* and not at the end, so we can't use it without breaking API.
*/
#define G_GNUC_NORETURN
#define G_GNUC_CONST
#define G_GNUC_UNUSED
#define G_GNUC_NO_INSTRUMENT
#endif /* !__GNUC__ */
/**
* G_GNUC_FALLTHROUGH:
*
* Expands to the GNU C `fallthrough` statement attribute if the compiler supports it.
* This allows declaring case statement to explicitly fall through in switch
* statements. To enable this feature, use `-Wimplicit-fallthrough` during
* compilation.
*
* Put the attribute right before the case statement you want to fall through
* to.
*
* |[
* switch (foo)
* {
* case 1:
* g_message ("it's 1");
* G_GNUC_FALLTHROUGH;
* case 2:
* g_message ("it's either 1 or 2");
* break;
* }
* ]|
*
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html#index-fallthrough-statement-attribute) for more details.
*
* Since: 2.60
*/
#if __GNUC__ > 6
#define G_GNUC_FALLTHROUGH __attribute__((fallthrough))
#elif g_macro__has_attribute (fallthrough)
#define G_GNUC_FALLTHROUGH __attribute__((fallthrough))
#else
#define G_GNUC_FALLTHROUGH
#endif /* __GNUC__ */
/**
* G_GNUC_DEPRECATED:
*
* Expands to the GNU C `deprecated` attribute if the compiler is gcc.
* It can be used to mark `typedef`s, variables and functions as deprecated.
* When called with the `-Wdeprecated-declarations` option,
* gcc will generate warnings when deprecated interfaces are used.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* int my_mistake (void) G_GNUC_DEPRECATED;
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-deprecated-function-attribute) for more details.
*
* Since: 2.2
*/
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined (__clang__)
#define G_GNUC_DEPRECATED __attribute__((__deprecated__))
#else
#define G_GNUC_DEPRECATED
#endif /* __GNUC__ */
/**
* G_GNUC_DEPRECATED_FOR:
* @f: the intended replacement for the deprecated symbol,
* such as the name of a function
*
* Like %G_GNUC_DEPRECATED, but names the intended replacement for the
* deprecated symbol if the version of gcc in use is new enough to support
* custom deprecation messages.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* int my_mistake (void) G_GNUC_DEPRECATED_FOR(my_replacement);
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-deprecated-function-attribute) for more details.
*
* Note that if @f is a macro, it will be expanded in the warning message.
* You can enclose it in quotes to prevent this. (The quotes will show up
* in the warning, but it's better than showing the macro expansion.)
*
* Since: 2.26
*/
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || defined (__clang__)
#define G_GNUC_DEPRECATED_FOR(f) \
__attribute__((deprecated("Use " #f " instead")))
#else
#define G_GNUC_DEPRECATED_FOR(f) G_GNUC_DEPRECATED
#endif /* __GNUC__ */
#ifdef __ICC
#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
_Pragma ("warning (push)") \
_Pragma ("warning (disable:1478)")
#define G_GNUC_END_IGNORE_DEPRECATIONS \
_Pragma ("warning (pop)")
#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
#define G_GNUC_END_IGNORE_DEPRECATIONS \
_Pragma ("GCC diagnostic pop")
#elif defined (_MSC_VER) && (_MSC_VER >= 1500) && !defined (__clang__)
#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
__pragma (warning (push)) \
__pragma (warning (disable : 4996))
#define G_GNUC_END_IGNORE_DEPRECATIONS \
__pragma (warning (pop))
#elif defined (__clang__)
#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
#define G_GNUC_END_IGNORE_DEPRECATIONS \
_Pragma("clang diagnostic pop")
#else
#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS
#define G_GNUC_END_IGNORE_DEPRECATIONS
#endif
/**
* G_GNUC_MAY_ALIAS:
*
* Expands to the GNU C `may_alias` type attribute if the compiler is gcc.
* Types with this attribute will not be subjected to type-based alias
* analysis, but are assumed to alias with any other type, just like `char`.
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html#index-may_005falias-type-attribute) for details.
*
* Since: 2.14
*/
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
#define G_GNUC_MAY_ALIAS __attribute__((may_alias))
#else
#define G_GNUC_MAY_ALIAS
#endif
/**
* G_GNUC_WARN_UNUSED_RESULT:
*
* Expands to the GNU C `warn_unused_result` function attribute if the compiler
* is gcc. This function attribute makes the compiler emit a warning if the
* result of a function call is ignored.
*
* Place the attribute after the declaration, just before the semicolon.
*
* |[
* GList *g_list_append (GList *list,
* gpointer data) G_GNUC_WARN_UNUSED_RESULT;
* ]|
*
* See the [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-warn_005funused_005fresult-function-attribute) for more details.
*
* Since: 2.10
*/
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
#define G_GNUC_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
#define G_GNUC_WARN_UNUSED_RESULT
#endif /* __GNUC__ */
/**
* G_GNUC_FUNCTION:
*
* Expands to "" on all modern compilers, and to __FUNCTION__ on gcc
* version 2.x. Don't use it.
*
* Deprecated: 2.16: Use G_STRFUNC() instead
*/
/**
* G_GNUC_PRETTY_FUNCTION:
*
* Expands to "" on all modern compilers, and to __PRETTY_FUNCTION__
* on gcc version 2.x. Don't use it.
*
* Deprecated: 2.16: Use G_STRFUNC() instead
*/
/* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with
* macros, so we can refer to them as strings unconditionally.
* usage not-recommended since gcc-3.0
*
* Mark them as deprecated since 2.26, since that’s when version macros were
* introduced.
*/
#if defined (__GNUC__) && (__GNUC__ < 3)
#define G_GNUC_FUNCTION __FUNCTION__ GLIB_DEPRECATED_MACRO_IN_2_26_FOR(G_STRFUNC)
#define G_GNUC_PRETTY_FUNCTION __PRETTY_FUNCTION__ GLIB_DEPRECATED_MACRO_IN_2_26_FOR(G_STRFUNC)
#else /* !__GNUC__ */
#define G_GNUC_FUNCTION "" GLIB_DEPRECATED_MACRO_IN_2_26_FOR(G_STRFUNC)
#define G_GNUC_PRETTY_FUNCTION "" GLIB_DEPRECATED_MACRO_IN_2_26_FOR(G_STRFUNC)
#endif /* !__GNUC__ */
#if g_macro__has_feature(attribute_analyzer_noreturn) && defined(__clang_analyzer__)
#define G_ANALYZER_ANALYZING 1
#define G_ANALYZER_NORETURN __attribute__((analyzer_noreturn))
#else
#define G_ANALYZER_ANALYZING 0
#define G_ANALYZER_NORETURN
#endif
#define G_STRINGIFY(macro_or_string) G_STRINGIFY_ARG (macro_or_string)
#define G_STRINGIFY_ARG(contents) #contents
#ifndef __GI_SCANNER__ /* The static assert macro really confuses the introspection parser */
#define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2
#define G_PASTE(identifier1,identifier2) G_PASTE_ARGS (identifier1, identifier2)
#if !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
#elif (defined(__cplusplus) && __cplusplus >= 201103L) || \
(defined(__cplusplus) && defined (_MSC_VER) && (_MSC_VER >= 1600)) || \
(defined (_MSC_VER) && (_MSC_VER >= 1800))
#define G_STATIC_ASSERT(expr) static_assert (expr, "Expression evaluates to false")
#else
#ifdef __COUNTER__
#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
#else
#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __LINE__)[(expr) ? 1 : -1] G_GNUC_UNUSED
#endif
#endif /* __STDC_VERSION__ */
#define G_STATIC_ASSERT_EXPR(expr) ((void) sizeof (char[(expr) ? 1 : -1]))
#endif /* !__GI_SCANNER__ */
/* Provide a string identifying the current code position */
#if defined(__GNUC__) && (__GNUC__ < 3) && !defined(__cplusplus)
#define G_STRLOC __FILE__ ":" G_STRINGIFY (__LINE__) ":" __PRETTY_FUNCTION__ "()"
#else
#define G_STRLOC __FILE__ ":" G_STRINGIFY (__LINE__)
#endif
/* Provide a string identifying the current function, non-concatenatable */
#if defined (__GNUC__) && defined (__cplusplus)
#define G_STRFUNC ((const char*) (__PRETTY_FUNCTION__))
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define G_STRFUNC ((const char*) (__func__))
#elif defined (__GNUC__) || (defined(_MSC_VER) && (_MSC_VER > 1300))
#define G_STRFUNC ((const char*) (__FUNCTION__))
#else
#define G_STRFUNC ((const char*) ("???"))
#endif
/* Guard C code in headers, while including them from C++ */
#ifdef __cplusplus
#define G_BEGIN_DECLS extern "C" {
#define G_END_DECLS }
#else
#define G_BEGIN_DECLS
#define G_END_DECLS
#endif
/* Provide definitions for some commonly used macros.
* Some of them are only provided if they haven't already
* been defined. It is assumed that if they are already
* defined then the current definition is correct.
*/
#ifndef NULL
# ifdef __cplusplus
# define NULL (0L)
# else /* !__cplusplus */
# define NULL ((void*) 0)
# endif /* !__cplusplus */
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (!FALSE)
#endif
#undef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#undef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#undef ABS
#define ABS(a) (((a) < 0) ? -(a) : (a))
#undef CLAMP
#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
#define G_APPROX_VALUE(a, b, epsilon) \
(((a) > (b) ? (a) - (b) : (b) - (a)) < (epsilon))
/* Count the number of elements in an array. The array must be defined
* as such; using this with a dynamically allocated array will give
* incorrect results.
*/
#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))
/* Macros by analogy to GINT_TO_POINTER, GPOINTER_TO_INT
*/
#define GPOINTER_TO_SIZE(p) ((gsize) (p))
#define GSIZE_TO_POINTER(s) ((gpointer) (gsize) (s))
/* Provide convenience macros for handling structure
* fields through their offsets.
*/
#if (defined(__GNUC__) && __GNUC__ >= 4) || defined (_MSC_VER)
#define G_STRUCT_OFFSET(struct_type, member) \
((glong) offsetof (struct_type, member))
#else
#define G_STRUCT_OFFSET(struct_type, member) \
((glong) ((guint8*) &((struct_type*) 0)->member))
#endif
#define G_STRUCT_MEMBER_P(struct_p, struct_offset) \
((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
#define G_STRUCT_MEMBER(member_type, struct_p, struct_offset) \
(*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
/* Provide simple macro statement wrappers:
* G_STMT_START { statements; } G_STMT_END;
* This can be used as a single statement, like:
* if (x) G_STMT_START { ... } G_STMT_END; else ...
* This intentionally does not use compiler extensions like GCC's '({...})' to
* avoid portability issue or side effects when compiled with different compilers.
* MSVC complains about "while(0)": C4127: "Conditional expression is constant",
* so we use __pragma to avoid the warning since the use here is intentional.
*/
#if !(defined (G_STMT_START) && defined (G_STMT_END))
#define G_STMT_START do
#if defined (_MSC_VER) && (_MSC_VER >= 1500)
#define G_STMT_END \
__pragma(warning(push)) \
__pragma(warning(disable:4127)) \
while(0) \
__pragma(warning(pop))
#else
#define G_STMT_END while (0)
#endif
#endif
/* Provide G_ALIGNOF alignment macro.
*
* Note we cannot use the gcc __alignof__ operator here, as that returns the
* preferred alignment rather than the minimal alignment. See
* https://gitlab.gnome.org/GNOME/glib/merge_requests/538/diffs#note_390790.
*/
/**
* G_ALIGNOF
* @type: a type-name
*
* Return the minimal alignment required by the platform ABI for values of the given
* type. The address of a variable or struct member of the given type must always be
* a multiple of this alignment. For example, most platforms require int variables
* to be aligned at a 4-byte boundary, so `G_ALIGNOF (int)` is 4 on most platforms.
*
* Note this is not necessarily the same as the value returned by GCC’s
* `__alignof__` operator, which returns the preferred alignment for a type.
* The preferred alignment may be a stricter alignment than the minimal
* alignment.
*
* Since: 2.60
*/
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__cplusplus)
#define G_ALIGNOF(type) _Alignof (type)
#else
#define G_ALIGNOF(type) (G_STRUCT_OFFSET (struct { char a; type b; }, b))
#endif
/**
* G_CONST_RETURN:
*
* If %G_DISABLE_CONST_RETURNS is defined, this macro expands
* to nothing. By default, the macro expands to const. The macro
* can be used in place of const for functions that return a value
* that should not be modified. The purpose of this macro is to allow
* us to turn on const for returned constant strings by default, while
* allowing programmers who find that annoying to turn it off. This macro
* should only be used for return values and for "out" parameters, it
* doesn't make sense for "in" parameters.
*
* Deprecated: 2.30: API providers should replace all existing uses with
* const and API consumers should adjust their code accordingly
*/
#ifdef G_DISABLE_CONST_RETURNS
#define G_CONST_RETURN GLIB_DEPRECATED_MACRO_IN_2_30_FOR(const)
#else
#define G_CONST_RETURN const GLIB_DEPRECATED_MACRO_IN_2_30_FOR(const)
#endif
/**
* G_NORETURN:
*
* Expands to the GNU C or MSVC `noreturn` function attribute depending on
* the compiler. It is used for declaring functions which never return.
* Enables optimization of the function, and avoids possible compiler warnings.
*
* Note that %G_NORETURN supersedes the previous %G_GNUC_NORETURN macro, which
* will eventually be deprecated. %G_NORETURN supports more platforms.
*
* Place the attribute before the function declaration as follows:
*
* |[
* G_NORETURN void g_abort (void);
* ]|
*
* Since: 2.68
*/
/* Note: We can’t annotate this with GLIB_AVAILABLE_MACRO_IN_2_68 because it’s
* used within the GLib headers in function declarations which are always
* evaluated when a header is included. This results in warnings in third party
* code which includes glib.h, even if the third party code doesn’t use the new
* macro itself. */
#if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__)) || (0x5110 <= __SUNPRO_C)
/* For compatibility with G_NORETURN_FUNCPTR on clang, use
__attribute__((__noreturn__)), not _Noreturn. */
# define G_NORETURN __attribute__ ((__noreturn__))
#elif defined (_MSC_VER) && (1200 <= _MSC_VER)
/* Use MSVC specific syntax. */
# define G_NORETURN __declspec (noreturn)
/* Use ISO C++11 syntax when the compiler supports it. */
#elif (defined (__cplusplus) && __cplusplus >= 201103 && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) || defined (_MSC_VER) && (_MSC_VER >= 1900)
# define G_NORETURN [[noreturn]]
/* Use ISO C11 syntax when the compiler supports it. */
#elif (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)
# define G_NORETURN _Noreturn
#else
# define G_NORETURN /* empty */
#endif
/**
* G_NORETURN_FUNCPTR:
*
* Expands to the GNU C or MSVC `noreturn` function attribute depending on
* the compiler. It is used for declaring function pointers which never return.
* Enables optimization of the function, and avoids possible compiler warnings.
*
* Place the attribute before the function declaration as follows:
*
* |[
* G_NORETURN_FUNCPTR void (*funcptr) (void);
* ]|
*
* Note that if the function is not a function pointer, you can simply use
* the %G_NORETURN macro as follows:
*
* |[
* G_NORETURN void g_abort (void);
* ]|
*
* Since: 2.68
*/
#if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__)) || (0x5110 <= __SUNPRO_C)
# define G_NORETURN_FUNCPTR __attribute__ ((__noreturn__)) \
GLIB_AVAILABLE_MACRO_IN_2_68
#else
# define G_NORETURN_FUNCPTR /* empty */ \
GLIB_AVAILABLE_MACRO_IN_2_68
#endif
/*
* The G_LIKELY and G_UNLIKELY macros let the programmer give hints to
* the compiler about the expected result of an expression. Some compilers
* can use this information for optimizations.
*
* The _G_BOOLEAN_EXPR macro is intended to trigger a gcc warning when
* putting assignments in g_return_if_fail ().
*/
#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
#define _G_BOOLEAN_EXPR(expr) \
G_GNUC_EXTENSION ({ \
int _g_boolean_var_; \
if (expr) \
_g_boolean_var_ = 1; \
else \
_g_boolean_var_ = 0; \
_g_boolean_var_; \
})
#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
#else
#define G_LIKELY(expr) (expr)
#define G_UNLIKELY(expr) (expr)
#endif
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined (__clang__)
#define G_DEPRECATED __attribute__((__deprecated__))
#elif defined(_MSC_VER) && (_MSC_VER >= 1300)
#define G_DEPRECATED __declspec(deprecated)
#else
#define G_DEPRECATED
#endif
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || defined (__clang__)
#define G_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead")))
#elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320)
#define G_DEPRECATED_FOR(f) __declspec(deprecated("is deprecated. Use '" #f "' instead"))
#else
#define G_DEPRECATED_FOR(f) G_DEPRECATED
#endif
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || defined (__clang__)
#define G_UNAVAILABLE(maj,min) __attribute__((deprecated("Not available before " #maj "." #min)))
#elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320)
#define G_UNAVAILABLE(maj,min) __declspec(deprecated("is not available before " #maj "." #min))
#else
#define G_UNAVAILABLE(maj,min) G_DEPRECATED
#endif
#ifndef _GLIB_EXTERN
#define _GLIB_EXTERN extern
#endif
/* These macros are used to mark deprecated symbols in GLib headers,
* and thus have to be exposed in installed headers. But please
* do *not* use them in other projects. Instead, use G_DEPRECATED
* or define your own wrappers around it.
*/
#ifdef GLIB_DISABLE_DEPRECATION_WARNINGS
#define GLIB_DEPRECATED _GLIB_EXTERN
#define GLIB_DEPRECATED_FOR(f) _GLIB_EXTERN
#define GLIB_UNAVAILABLE(maj,min) _GLIB_EXTERN
#define GLIB_UNAVAILABLE_STATIC_INLINE(maj,min)
#else
#define GLIB_DEPRECATED G_DEPRECATED _GLIB_EXTERN
#define GLIB_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _GLIB_EXTERN
#define GLIB_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _GLIB_EXTERN
#define GLIB_UNAVAILABLE_STATIC_INLINE(maj,min) G_UNAVAILABLE(maj,min)
#endif
#if !defined(GLIB_DISABLE_DEPRECATION_WARNINGS) && \
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || \
__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4))
#define _GLIB_GNUC_DO_PRAGMA(x) _Pragma(G_STRINGIFY (x))
#define GLIB_DEPRECATED_MACRO _GLIB_GNUC_DO_PRAGMA(GCC warning "Deprecated pre-processor symbol")
#define GLIB_DEPRECATED_MACRO_FOR(f) _GLIB_GNUC_DO_PRAGMA(GCC warning "Deprecated pre-processor symbol, replace with " #f)
#define GLIB_UNAVAILABLE_MACRO(maj,min) _GLIB_GNUC_DO_PRAGMA(GCC warning "Not available before " #maj "." #min)
#else
#define GLIB_DEPRECATED_MACRO
#define GLIB_DEPRECATED_MACRO_FOR(f)
#define GLIB_UNAVAILABLE_MACRO(maj,min)
#endif
#if !defined(GLIB_DISABLE_DEPRECATION_WARNINGS) && \
((defined (__GNUC__) && (__GNUC__ > 6 || (__GNUC__ == 6 && __GNUC_MINOR__ >= 1))) || \
(defined (__clang_major__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 0))))
#define GLIB_DEPRECATED_ENUMERATOR G_DEPRECATED
#define GLIB_DEPRECATED_ENUMERATOR_FOR(f) G_DEPRECATED_FOR(f)
#define GLIB_UNAVAILABLE_ENUMERATOR(maj,min) G_UNAVAILABLE(maj,min)
#else
#define GLIB_DEPRECATED_ENUMERATOR
#define GLIB_DEPRECATED_ENUMERATOR_FOR(f)
#define GLIB_UNAVAILABLE_ENUMERATOR(maj,min)
#endif
#if !defined(GLIB_DISABLE_DEPRECATION_WARNINGS) && \
((defined (__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))) || \
(defined (__clang_major__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 0))))
#define GLIB_DEPRECATED_TYPE G_DEPRECATED
#define GLIB_DEPRECATED_TYPE_FOR(f) G_DEPRECATED_FOR(f)
#define GLIB_UNAVAILABLE_TYPE(maj,min) G_UNAVAILABLE(maj,min)
#else
#define GLIB_DEPRECATED_TYPE
#define GLIB_DEPRECATED_TYPE_FOR(f)
#define GLIB_UNAVAILABLE_TYPE(maj,min)
#endif
#ifndef __GI_SCANNER__
#if defined (__GNUC__) || defined (__clang__)
/* these macros are private */
#define _GLIB_AUTOPTR_FUNC_NAME(TypeName) glib_autoptr_cleanup_##TypeName
#define _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) glib_autoptr_clear_##TypeName
#define _GLIB_AUTOPTR_TYPENAME(TypeName) TypeName##_autoptr
#define _GLIB_AUTOPTR_LIST_FUNC_NAME(TypeName) glib_listautoptr_cleanup_##TypeName
#define _GLIB_AUTOPTR_LIST_TYPENAME(TypeName) TypeName##_listautoptr
#define _GLIB_AUTOPTR_SLIST_FUNC_NAME(TypeName) glib_slistautoptr_cleanup_##TypeName
#define _GLIB_AUTOPTR_SLIST_TYPENAME(TypeName) TypeName##_slistautoptr
#define _GLIB_AUTOPTR_QUEUE_FUNC_NAME(TypeName) glib_queueautoptr_cleanup_##TypeName
#define _GLIB_AUTOPTR_QUEUE_TYPENAME(TypeName) TypeName##_queueautoptr
#define _GLIB_AUTO_FUNC_NAME(TypeName) glib_auto_cleanup_##TypeName
#define _GLIB_CLEANUP(func) __attribute__((cleanup(func)))
#define _GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS(TypeName, ParentName, cleanup) \
typedef TypeName *_GLIB_AUTOPTR_TYPENAME(TypeName); \
typedef GList *_GLIB_AUTOPTR_LIST_TYPENAME(TypeName); \
typedef GSList *_GLIB_AUTOPTR_SLIST_TYPENAME(TypeName); \
typedef GQueue *_GLIB_AUTOPTR_QUEUE_TYPENAME(TypeName); \
G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
static G_GNUC_UNUSED inline void _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) (TypeName *_ptr) \
{ if (_ptr) (cleanup) ((ParentName *) _ptr); } \
static G_GNUC_UNUSED inline void _GLIB_AUTOPTR_FUNC_NAME(TypeName) (TypeName **_ptr) \
{ _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) (*_ptr); } \
static G_GNUC_UNUSED inline void _GLIB_AUTOPTR_LIST_FUNC_NAME(TypeName) (GList **_l) \
{ g_list_free_full (*_l, (GDestroyNotify) (void(*)(void)) cleanup); } \
static G_GNUC_UNUSED inline void _GLIB_AUTOPTR_SLIST_FUNC_NAME(TypeName) (GSList **_l) \
{ g_slist_free_full (*_l, (GDestroyNotify) (void(*)(void)) cleanup); } \
static G_GNUC_UNUSED inline void _GLIB_AUTOPTR_QUEUE_FUNC_NAME(TypeName) (GQueue **_q) \
{ if (*_q) g_queue_free_full (*_q, (GDestroyNotify) (void(*)(void)) cleanup); } \
G_GNUC_END_IGNORE_DEPRECATIONS
#define _GLIB_DEFINE_AUTOPTR_CHAINUP(ModuleObjName, ParentName) \
_GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS(ModuleObjName, ParentName, _GLIB_AUTOPTR_CLEAR_FUNC_NAME(ParentName))
/* these macros are API */
#define G_DEFINE_AUTOPTR_CLEANUP_FUNC(TypeName, func) \
_GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS(TypeName, TypeName, func)
#define G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(TypeName, func) \
G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
static G_GNUC_UNUSED inline void _GLIB_AUTO_FUNC_NAME(TypeName) (TypeName *_ptr) { (func) (_ptr); } \
G_GNUC_END_IGNORE_DEPRECATIONS
#define G_DEFINE_AUTO_CLEANUP_FREE_FUNC(TypeName, func, none) \
G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
static G_GNUC_UNUSED inline void _GLIB_AUTO_FUNC_NAME(TypeName) (TypeName *_ptr) { if (*_ptr != none) (func) (*_ptr); } \
G_GNUC_END_IGNORE_DEPRECATIONS
#define g_autoptr(TypeName) _GLIB_CLEANUP(_GLIB_AUTOPTR_FUNC_NAME(TypeName)) _GLIB_AUTOPTR_TYPENAME(TypeName)
#define g_autolist(TypeName) _GLIB_CLEANUP(_GLIB_AUTOPTR_LIST_FUNC_NAME(TypeName)) _GLIB_AUTOPTR_LIST_TYPENAME(TypeName)
#define g_autoslist(TypeName) _GLIB_CLEANUP(_GLIB_AUTOPTR_SLIST_FUNC_NAME(TypeName)) _GLIB_AUTOPTR_SLIST_TYPENAME(TypeName)
#define g_autoqueue(TypeName) _GLIB_CLEANUP(_GLIB_AUTOPTR_QUEUE_FUNC_NAME(TypeName)) _GLIB_AUTOPTR_QUEUE_TYPENAME(TypeName)
#define g_auto(TypeName) _GLIB_CLEANUP(_GLIB_AUTO_FUNC_NAME(TypeName)) TypeName
#define g_autofree _GLIB_CLEANUP(g_autoptr_cleanup_generic_gfree)
#else /* not GNU C */
/* this (dummy) macro is private */
#define _GLIB_DEFINE_AUTOPTR_CHAINUP(ModuleObjName, ParentName)
/* these (dummy) macros are API */
#define G_DEFINE_AUTOPTR_CLEANUP_FUNC(TypeName, func)
#define G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(TypeName, func)
#define G_DEFINE_AUTO_CLEANUP_FREE_FUNC(TypeName, func, none)
/* no declaration of g_auto() or g_autoptr() here */
#endif /* __GNUC__ */
#else
#define _GLIB_DEFINE_AUTOPTR_CHAINUP(ModuleObjName, ParentName)
#define G_DEFINE_AUTOPTR_CLEANUP_FUNC(TypeName, func)
#define G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(TypeName, func)
#define G_DEFINE_AUTO_CLEANUP_FREE_FUNC(TypeName, func, none)
#endif /* __GI_SCANNER__ */
/**
* G_SIZEOF_MEMBER:
* @struct_type: a structure type, e.g. #GOutputVector
* @member: a field in the structure, e.g. `size`
*
* Returns the size of @member in the struct definition without having a
* declared instance of @struct_type.
*
* Returns: the size of @member in bytes.
*
* Since: 2.64
*/
#define G_SIZEOF_MEMBER(struct_type, member) \
GLIB_AVAILABLE_MACRO_IN_2_64 \
sizeof (((struct_type *) 0)->member)
#endif /* __G_MACROS_H__ */
ghook.h 0000644 00000014326 15021467762 0006044 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_HOOK_H__
#define __G_HOOK_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
/* --- typedefs --- */
typedef struct _GHook GHook;
typedef struct _GHookList GHookList;
typedef gint (*GHookCompareFunc) (GHook *new_hook,
GHook *sibling);
typedef gboolean (*GHookFindFunc) (GHook *hook,
gpointer data);
typedef void (*GHookMarshaller) (GHook *hook,
gpointer marshal_data);
typedef gboolean (*GHookCheckMarshaller) (GHook *hook,
gpointer marshal_data);
typedef void (*GHookFunc) (gpointer data);
typedef gboolean (*GHookCheckFunc) (gpointer data);
typedef void (*GHookFinalizeFunc) (GHookList *hook_list,
GHook *hook);
typedef enum
{
G_HOOK_FLAG_ACTIVE = 1 << 0,
G_HOOK_FLAG_IN_CALL = 1 << 1,
G_HOOK_FLAG_MASK = 0x0f
} GHookFlagMask;
#define G_HOOK_FLAG_USER_SHIFT (4)
/* --- structures --- */
struct _GHookList
{
gulong seq_id;
guint hook_size : 16;
guint is_setup : 1;
GHook *hooks;
gpointer dummy3;
GHookFinalizeFunc finalize_hook;
gpointer dummy[2];
};
struct _GHook
{
gpointer data;
GHook *next;
GHook *prev;
guint ref_count;
gulong hook_id;
guint flags;
gpointer func;
GDestroyNotify destroy;
};
/* --- macros --- */
#define G_HOOK(hook) ((GHook*) (hook))
#define G_HOOK_FLAGS(hook) (G_HOOK (hook)->flags)
#define G_HOOK_ACTIVE(hook) ((G_HOOK_FLAGS (hook) & \
G_HOOK_FLAG_ACTIVE) != 0)
#define G_HOOK_IN_CALL(hook) ((G_HOOK_FLAGS (hook) & \
G_HOOK_FLAG_IN_CALL) != 0)
#define G_HOOK_IS_VALID(hook) (G_HOOK (hook)->hook_id != 0 && \
(G_HOOK_FLAGS (hook) & \
G_HOOK_FLAG_ACTIVE))
#define G_HOOK_IS_UNLINKED(hook) (G_HOOK (hook)->next == NULL && \
G_HOOK (hook)->prev == NULL && \
G_HOOK (hook)->hook_id == 0 && \
G_HOOK (hook)->ref_count == 0)
/* --- prototypes --- */
/* callback maintenance functions */
GLIB_AVAILABLE_IN_ALL
void g_hook_list_init (GHookList *hook_list,
guint hook_size);
GLIB_AVAILABLE_IN_ALL
void g_hook_list_clear (GHookList *hook_list);
GLIB_AVAILABLE_IN_ALL
GHook* g_hook_alloc (GHookList *hook_list);
GLIB_AVAILABLE_IN_ALL
void g_hook_free (GHookList *hook_list,
GHook *hook);
GLIB_AVAILABLE_IN_ALL
GHook * g_hook_ref (GHookList *hook_list,
GHook *hook);
GLIB_AVAILABLE_IN_ALL
void g_hook_unref (GHookList *hook_list,
GHook *hook);
GLIB_AVAILABLE_IN_ALL
gboolean g_hook_destroy (GHookList *hook_list,
gulong hook_id);
GLIB_AVAILABLE_IN_ALL
void g_hook_destroy_link (GHookList *hook_list,
GHook *hook);
GLIB_AVAILABLE_IN_ALL
void g_hook_prepend (GHookList *hook_list,
GHook *hook);
GLIB_AVAILABLE_IN_ALL
void g_hook_insert_before (GHookList *hook_list,
GHook *sibling,
GHook *hook);
GLIB_AVAILABLE_IN_ALL
void g_hook_insert_sorted (GHookList *hook_list,
GHook *hook,
GHookCompareFunc func);
GLIB_AVAILABLE_IN_ALL
GHook* g_hook_get (GHookList *hook_list,
gulong hook_id);
GLIB_AVAILABLE_IN_ALL
GHook* g_hook_find (GHookList *hook_list,
gboolean need_valids,
GHookFindFunc func,
gpointer data);
GLIB_AVAILABLE_IN_ALL
GHook* g_hook_find_data (GHookList *hook_list,
gboolean need_valids,
gpointer data);
GLIB_AVAILABLE_IN_ALL
GHook* g_hook_find_func (GHookList *hook_list,
gboolean need_valids,
gpointer func);
GLIB_AVAILABLE_IN_ALL
GHook* g_hook_find_func_data (GHookList *hook_list,
gboolean need_valids,
gpointer func,
gpointer data);
/* return the first valid hook, and increment its reference count */
GLIB_AVAILABLE_IN_ALL
GHook* g_hook_first_valid (GHookList *hook_list,
gboolean may_be_in_call);
/* return the next valid hook with incremented reference count, and
* decrement the reference count of the original hook
*/
GLIB_AVAILABLE_IN_ALL
GHook* g_hook_next_valid (GHookList *hook_list,
GHook *hook,
gboolean may_be_in_call);
/* GHookCompareFunc implementation to insert hooks sorted by their id */
GLIB_AVAILABLE_IN_ALL
gint g_hook_compare_ids (GHook *new_hook,
GHook *sibling);
/* convenience macros */
#define g_hook_append( hook_list, hook ) \
g_hook_insert_before ((hook_list), NULL, (hook))
/* invoke all valid hooks with the (*GHookFunc) signature.
*/
GLIB_AVAILABLE_IN_ALL
void g_hook_list_invoke (GHookList *hook_list,
gboolean may_recurse);
/* invoke all valid hooks with the (*GHookCheckFunc) signature,
* and destroy the hook if FALSE is returned.
*/
GLIB_AVAILABLE_IN_ALL
void g_hook_list_invoke_check (GHookList *hook_list,
gboolean may_recurse);
/* invoke a marshaller on all valid hooks.
*/
GLIB_AVAILABLE_IN_ALL
void g_hook_list_marshal (GHookList *hook_list,
gboolean may_recurse,
GHookMarshaller marshaller,
gpointer marshal_data);
GLIB_AVAILABLE_IN_ALL
void g_hook_list_marshal_check (GHookList *hook_list,
gboolean may_recurse,
GHookCheckMarshaller marshaller,
gpointer marshal_data);
G_END_DECLS
#endif /* __G_HOOK_H__ */
gbytes.h 0000644 00000006406 15021467762 0006232 0 ustar 00 /*
* Copyright © 2009, 2010 Codethink Limited
* Copyright © 2011 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*
* Author: Ryan Lortie
* Stef Walter
*/
#ifndef __G_BYTES_H__
#define __G_BYTES_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
GBytes * g_bytes_new (gconstpointer data,
gsize size);
GLIB_AVAILABLE_IN_ALL
GBytes * g_bytes_new_take (gpointer data,
gsize size);
GLIB_AVAILABLE_IN_ALL
GBytes * g_bytes_new_static (gconstpointer data,
gsize size);
GLIB_AVAILABLE_IN_ALL
GBytes * g_bytes_new_with_free_func (gconstpointer data,
gsize size,
GDestroyNotify free_func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
GBytes * g_bytes_new_from_bytes (GBytes *bytes,
gsize offset,
gsize length);
GLIB_AVAILABLE_IN_ALL
gconstpointer g_bytes_get_data (GBytes *bytes,
gsize *size);
GLIB_AVAILABLE_IN_ALL
gsize g_bytes_get_size (GBytes *bytes);
GLIB_AVAILABLE_IN_ALL
GBytes * g_bytes_ref (GBytes *bytes);
GLIB_AVAILABLE_IN_ALL
void g_bytes_unref (GBytes *bytes);
GLIB_AVAILABLE_IN_ALL
gpointer g_bytes_unref_to_data (GBytes *bytes,
gsize *size);
GLIB_AVAILABLE_IN_ALL
GByteArray * g_bytes_unref_to_array (GBytes *bytes);
GLIB_AVAILABLE_IN_ALL
guint g_bytes_hash (gconstpointer bytes);
GLIB_AVAILABLE_IN_ALL
gboolean g_bytes_equal (gconstpointer bytes1,
gconstpointer bytes2);
GLIB_AVAILABLE_IN_ALL
gint g_bytes_compare (gconstpointer bytes1,
gconstpointer bytes2);
G_END_DECLS
#endif /* __G_BYTES_H__ */
gdir.h 0000644 00000003151 15021467762 0005654 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* gdir.c: Simplified wrapper around the DIRENT functions.
*
* Copyright 2001 Hans Breuer
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_DIR_H__
#define __G_DIR_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#ifdef G_OS_UNIX
#include
#endif
G_BEGIN_DECLS
typedef struct _GDir GDir;
GLIB_AVAILABLE_IN_ALL
GDir * g_dir_open (const gchar *path,
guint flags,
GError **error);
GLIB_AVAILABLE_IN_ALL
const gchar * g_dir_read_name (GDir *dir);
GLIB_AVAILABLE_IN_ALL
void g_dir_rewind (GDir *dir);
GLIB_AVAILABLE_IN_ALL
void g_dir_close (GDir *dir);
G_END_DECLS
#endif /* __G_DIR_H__ */
gunicode.h 0000644 00000120374 15021467762 0006533 0 ustar 00 /* gunicode.h - Unicode manipulation functions
*
* Copyright (C) 1999, 2000 Tom Tromey
* Copyright 2000, 2005 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_UNICODE_H__
#define __G_UNICODE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
/**
* gunichar:
*
* A type which can hold any UTF-32 or UCS-4 character code,
* also known as a Unicode code point.
*
* If you want to produce the UTF-8 representation of a #gunichar,
* use g_ucs4_to_utf8(). See also g_utf8_to_ucs4() for the reverse
* process.
*
* To print/scan values of this type as integer, use
* %G_GINT32_MODIFIER and/or %G_GUINT32_FORMAT.
*
* The notation to express a Unicode code point in running text is
* as a hexadecimal number with four to six digits and uppercase
* letters, prefixed by the string "U+". Leading zeros are omitted,
* unless the code point would have fewer than four hexadecimal digits.
* For example, "U+0041 LATIN CAPITAL LETTER A". To print a code point
* in the U+-notation, use the format string "U+\%04"G_GINT32_FORMAT"X".
* To scan, use the format string "U+\%06"G_GINT32_FORMAT"X".
*
* |[
* gunichar c;
* sscanf ("U+0041", "U+%06"G_GINT32_FORMAT"X", &c)
* g_print ("Read U+%04"G_GINT32_FORMAT"X", c);
* ]|
*/
typedef guint32 gunichar;
/**
* gunichar2:
*
* A type which can hold any UTF-16 code
* pointUTF-16 also has so called
* surrogate pairs to encode characters beyond
* the BMP as pairs of 16bit numbers. Surrogate pairs cannot be stored
* in a single gunichar2 field, but all GLib functions accepting gunichar2
* arrays will correctly interpret surrogate pairs..
*
* To print/scan values of this type to/from text you need to convert
* to/from UTF-8, using g_utf16_to_utf8()/g_utf8_to_utf16().
*
* To print/scan values of this type as integer, use
* %G_GINT16_MODIFIER and/or %G_GUINT16_FORMAT.
*/
typedef guint16 gunichar2;
/**
* GUnicodeType:
* @G_UNICODE_CONTROL: General category "Other, Control" (Cc)
* @G_UNICODE_FORMAT: General category "Other, Format" (Cf)
* @G_UNICODE_UNASSIGNED: General category "Other, Not Assigned" (Cn)
* @G_UNICODE_PRIVATE_USE: General category "Other, Private Use" (Co)
* @G_UNICODE_SURROGATE: General category "Other, Surrogate" (Cs)
* @G_UNICODE_LOWERCASE_LETTER: General category "Letter, Lowercase" (Ll)
* @G_UNICODE_MODIFIER_LETTER: General category "Letter, Modifier" (Lm)
* @G_UNICODE_OTHER_LETTER: General category "Letter, Other" (Lo)
* @G_UNICODE_TITLECASE_LETTER: General category "Letter, Titlecase" (Lt)
* @G_UNICODE_UPPERCASE_LETTER: General category "Letter, Uppercase" (Lu)
* @G_UNICODE_SPACING_MARK: General category "Mark, Spacing" (Mc)
* @G_UNICODE_ENCLOSING_MARK: General category "Mark, Enclosing" (Me)
* @G_UNICODE_NON_SPACING_MARK: General category "Mark, Nonspacing" (Mn)
* @G_UNICODE_DECIMAL_NUMBER: General category "Number, Decimal Digit" (Nd)
* @G_UNICODE_LETTER_NUMBER: General category "Number, Letter" (Nl)
* @G_UNICODE_OTHER_NUMBER: General category "Number, Other" (No)
* @G_UNICODE_CONNECT_PUNCTUATION: General category "Punctuation, Connector" (Pc)
* @G_UNICODE_DASH_PUNCTUATION: General category "Punctuation, Dash" (Pd)
* @G_UNICODE_CLOSE_PUNCTUATION: General category "Punctuation, Close" (Pe)
* @G_UNICODE_FINAL_PUNCTUATION: General category "Punctuation, Final quote" (Pf)
* @G_UNICODE_INITIAL_PUNCTUATION: General category "Punctuation, Initial quote" (Pi)
* @G_UNICODE_OTHER_PUNCTUATION: General category "Punctuation, Other" (Po)
* @G_UNICODE_OPEN_PUNCTUATION: General category "Punctuation, Open" (Ps)
* @G_UNICODE_CURRENCY_SYMBOL: General category "Symbol, Currency" (Sc)
* @G_UNICODE_MODIFIER_SYMBOL: General category "Symbol, Modifier" (Sk)
* @G_UNICODE_MATH_SYMBOL: General category "Symbol, Math" (Sm)
* @G_UNICODE_OTHER_SYMBOL: General category "Symbol, Other" (So)
* @G_UNICODE_LINE_SEPARATOR: General category "Separator, Line" (Zl)
* @G_UNICODE_PARAGRAPH_SEPARATOR: General category "Separator, Paragraph" (Zp)
* @G_UNICODE_SPACE_SEPARATOR: General category "Separator, Space" (Zs)
*
* These are the possible character classifications from the
* Unicode specification.
* See [Unicode Character Database](http://www.unicode.org/reports/tr44/#General_Category_Values).
*/
typedef enum
{
G_UNICODE_CONTROL,
G_UNICODE_FORMAT,
G_UNICODE_UNASSIGNED,
G_UNICODE_PRIVATE_USE,
G_UNICODE_SURROGATE,
G_UNICODE_LOWERCASE_LETTER,
G_UNICODE_MODIFIER_LETTER,
G_UNICODE_OTHER_LETTER,
G_UNICODE_TITLECASE_LETTER,
G_UNICODE_UPPERCASE_LETTER,
G_UNICODE_SPACING_MARK,
G_UNICODE_ENCLOSING_MARK,
G_UNICODE_NON_SPACING_MARK,
G_UNICODE_DECIMAL_NUMBER,
G_UNICODE_LETTER_NUMBER,
G_UNICODE_OTHER_NUMBER,
G_UNICODE_CONNECT_PUNCTUATION,
G_UNICODE_DASH_PUNCTUATION,
G_UNICODE_CLOSE_PUNCTUATION,
G_UNICODE_FINAL_PUNCTUATION,
G_UNICODE_INITIAL_PUNCTUATION,
G_UNICODE_OTHER_PUNCTUATION,
G_UNICODE_OPEN_PUNCTUATION,
G_UNICODE_CURRENCY_SYMBOL,
G_UNICODE_MODIFIER_SYMBOL,
G_UNICODE_MATH_SYMBOL,
G_UNICODE_OTHER_SYMBOL,
G_UNICODE_LINE_SEPARATOR,
G_UNICODE_PARAGRAPH_SEPARATOR,
G_UNICODE_SPACE_SEPARATOR
} GUnicodeType;
/**
* G_UNICODE_COMBINING_MARK:
*
* Older name for %G_UNICODE_SPACING_MARK.
*
* Deprecated: 2.30: Use %G_UNICODE_SPACING_MARK.
*/
#define G_UNICODE_COMBINING_MARK G_UNICODE_SPACING_MARK GLIB_DEPRECATED_MACRO_IN_2_30_FOR(G_UNICODE_SPACING_MARK)
/**
* GUnicodeBreakType:
* @G_UNICODE_BREAK_MANDATORY: Mandatory Break (BK)
* @G_UNICODE_BREAK_CARRIAGE_RETURN: Carriage Return (CR)
* @G_UNICODE_BREAK_LINE_FEED: Line Feed (LF)
* @G_UNICODE_BREAK_COMBINING_MARK: Attached Characters and Combining Marks (CM)
* @G_UNICODE_BREAK_SURROGATE: Surrogates (SG)
* @G_UNICODE_BREAK_ZERO_WIDTH_SPACE: Zero Width Space (ZW)
* @G_UNICODE_BREAK_INSEPARABLE: Inseparable (IN)
* @G_UNICODE_BREAK_NON_BREAKING_GLUE: Non-breaking ("Glue") (GL)
* @G_UNICODE_BREAK_CONTINGENT: Contingent Break Opportunity (CB)
* @G_UNICODE_BREAK_SPACE: Space (SP)
* @G_UNICODE_BREAK_AFTER: Break Opportunity After (BA)
* @G_UNICODE_BREAK_BEFORE: Break Opportunity Before (BB)
* @G_UNICODE_BREAK_BEFORE_AND_AFTER: Break Opportunity Before and After (B2)
* @G_UNICODE_BREAK_HYPHEN: Hyphen (HY)
* @G_UNICODE_BREAK_NON_STARTER: Nonstarter (NS)
* @G_UNICODE_BREAK_OPEN_PUNCTUATION: Opening Punctuation (OP)
* @G_UNICODE_BREAK_CLOSE_PUNCTUATION: Closing Punctuation (CL)
* @G_UNICODE_BREAK_QUOTATION: Ambiguous Quotation (QU)
* @G_UNICODE_BREAK_EXCLAMATION: Exclamation/Interrogation (EX)
* @G_UNICODE_BREAK_IDEOGRAPHIC: Ideographic (ID)
* @G_UNICODE_BREAK_NUMERIC: Numeric (NU)
* @G_UNICODE_BREAK_INFIX_SEPARATOR: Infix Separator (Numeric) (IS)
* @G_UNICODE_BREAK_SYMBOL: Symbols Allowing Break After (SY)
* @G_UNICODE_BREAK_ALPHABETIC: Ordinary Alphabetic and Symbol Characters (AL)
* @G_UNICODE_BREAK_PREFIX: Prefix (Numeric) (PR)
* @G_UNICODE_BREAK_POSTFIX: Postfix (Numeric) (PO)
* @G_UNICODE_BREAK_COMPLEX_CONTEXT: Complex Content Dependent (South East Asian) (SA)
* @G_UNICODE_BREAK_AMBIGUOUS: Ambiguous (Alphabetic or Ideographic) (AI)
* @G_UNICODE_BREAK_UNKNOWN: Unknown (XX)
* @G_UNICODE_BREAK_NEXT_LINE: Next Line (NL)
* @G_UNICODE_BREAK_WORD_JOINER: Word Joiner (WJ)
* @G_UNICODE_BREAK_HANGUL_L_JAMO: Hangul L Jamo (JL)
* @G_UNICODE_BREAK_HANGUL_V_JAMO: Hangul V Jamo (JV)
* @G_UNICODE_BREAK_HANGUL_T_JAMO: Hangul T Jamo (JT)
* @G_UNICODE_BREAK_HANGUL_LV_SYLLABLE: Hangul LV Syllable (H2)
* @G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE: Hangul LVT Syllable (H3)
* @G_UNICODE_BREAK_CLOSE_PARANTHESIS: Closing Parenthesis (CP). Since 2.28
* @G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER: Conditional Japanese Starter (CJ). Since: 2.32
* @G_UNICODE_BREAK_HEBREW_LETTER: Hebrew Letter (HL). Since: 2.32
* @G_UNICODE_BREAK_REGIONAL_INDICATOR: Regional Indicator (RI). Since: 2.36
* @G_UNICODE_BREAK_EMOJI_BASE: Emoji Base (EB). Since: 2.50
* @G_UNICODE_BREAK_EMOJI_MODIFIER: Emoji Modifier (EM). Since: 2.50
* @G_UNICODE_BREAK_ZERO_WIDTH_JOINER: Zero Width Joiner (ZWJ). Since: 2.50
*
* These are the possible line break classifications.
*
* Since new unicode versions may add new types here, applications should be ready
* to handle unknown values. They may be regarded as %G_UNICODE_BREAK_UNKNOWN.
*
* See [Unicode Line Breaking Algorithm](http://www.unicode.org/unicode/reports/tr14/).
*/
typedef enum
{
G_UNICODE_BREAK_MANDATORY,
G_UNICODE_BREAK_CARRIAGE_RETURN,
G_UNICODE_BREAK_LINE_FEED,
G_UNICODE_BREAK_COMBINING_MARK,
G_UNICODE_BREAK_SURROGATE,
G_UNICODE_BREAK_ZERO_WIDTH_SPACE,
G_UNICODE_BREAK_INSEPARABLE,
G_UNICODE_BREAK_NON_BREAKING_GLUE,
G_UNICODE_BREAK_CONTINGENT,
G_UNICODE_BREAK_SPACE,
G_UNICODE_BREAK_AFTER,
G_UNICODE_BREAK_BEFORE,
G_UNICODE_BREAK_BEFORE_AND_AFTER,
G_UNICODE_BREAK_HYPHEN,
G_UNICODE_BREAK_NON_STARTER,
G_UNICODE_BREAK_OPEN_PUNCTUATION,
G_UNICODE_BREAK_CLOSE_PUNCTUATION,
G_UNICODE_BREAK_QUOTATION,
G_UNICODE_BREAK_EXCLAMATION,
G_UNICODE_BREAK_IDEOGRAPHIC,
G_UNICODE_BREAK_NUMERIC,
G_UNICODE_BREAK_INFIX_SEPARATOR,
G_UNICODE_BREAK_SYMBOL,
G_UNICODE_BREAK_ALPHABETIC,
G_UNICODE_BREAK_PREFIX,
G_UNICODE_BREAK_POSTFIX,
G_UNICODE_BREAK_COMPLEX_CONTEXT,
G_UNICODE_BREAK_AMBIGUOUS,
G_UNICODE_BREAK_UNKNOWN,
G_UNICODE_BREAK_NEXT_LINE,
G_UNICODE_BREAK_WORD_JOINER,
G_UNICODE_BREAK_HANGUL_L_JAMO,
G_UNICODE_BREAK_HANGUL_V_JAMO,
G_UNICODE_BREAK_HANGUL_T_JAMO,
G_UNICODE_BREAK_HANGUL_LV_SYLLABLE,
G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE,
G_UNICODE_BREAK_CLOSE_PARANTHESIS,
G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER,
G_UNICODE_BREAK_HEBREW_LETTER,
G_UNICODE_BREAK_REGIONAL_INDICATOR,
G_UNICODE_BREAK_EMOJI_BASE,
G_UNICODE_BREAK_EMOJI_MODIFIER,
G_UNICODE_BREAK_ZERO_WIDTH_JOINER
} GUnicodeBreakType;
/**
* GUnicodeScript:
* @G_UNICODE_SCRIPT_INVALID_CODE:
* a value never returned from g_unichar_get_script()
* @G_UNICODE_SCRIPT_COMMON: a character used by multiple different scripts
* @G_UNICODE_SCRIPT_INHERITED: a mark glyph that takes its script from the
* base glyph to which it is attached
* @G_UNICODE_SCRIPT_ARABIC: Arabic
* @G_UNICODE_SCRIPT_ARMENIAN: Armenian
* @G_UNICODE_SCRIPT_BENGALI: Bengali
* @G_UNICODE_SCRIPT_BOPOMOFO: Bopomofo
* @G_UNICODE_SCRIPT_CHEROKEE: Cherokee
* @G_UNICODE_SCRIPT_COPTIC: Coptic
* @G_UNICODE_SCRIPT_CYRILLIC: Cyrillic
* @G_UNICODE_SCRIPT_DESERET: Deseret
* @G_UNICODE_SCRIPT_DEVANAGARI: Devanagari
* @G_UNICODE_SCRIPT_ETHIOPIC: Ethiopic
* @G_UNICODE_SCRIPT_GEORGIAN: Georgian
* @G_UNICODE_SCRIPT_GOTHIC: Gothic
* @G_UNICODE_SCRIPT_GREEK: Greek
* @G_UNICODE_SCRIPT_GUJARATI: Gujarati
* @G_UNICODE_SCRIPT_GURMUKHI: Gurmukhi
* @G_UNICODE_SCRIPT_HAN: Han
* @G_UNICODE_SCRIPT_HANGUL: Hangul
* @G_UNICODE_SCRIPT_HEBREW: Hebrew
* @G_UNICODE_SCRIPT_HIRAGANA: Hiragana
* @G_UNICODE_SCRIPT_KANNADA: Kannada
* @G_UNICODE_SCRIPT_KATAKANA: Katakana
* @G_UNICODE_SCRIPT_KHMER: Khmer
* @G_UNICODE_SCRIPT_LAO: Lao
* @G_UNICODE_SCRIPT_LATIN: Latin
* @G_UNICODE_SCRIPT_MALAYALAM: Malayalam
* @G_UNICODE_SCRIPT_MONGOLIAN: Mongolian
* @G_UNICODE_SCRIPT_MYANMAR: Myanmar
* @G_UNICODE_SCRIPT_OGHAM: Ogham
* @G_UNICODE_SCRIPT_OLD_ITALIC: Old Italic
* @G_UNICODE_SCRIPT_ORIYA: Oriya
* @G_UNICODE_SCRIPT_RUNIC: Runic
* @G_UNICODE_SCRIPT_SINHALA: Sinhala
* @G_UNICODE_SCRIPT_SYRIAC: Syriac
* @G_UNICODE_SCRIPT_TAMIL: Tamil
* @G_UNICODE_SCRIPT_TELUGU: Telugu
* @G_UNICODE_SCRIPT_THAANA: Thaana
* @G_UNICODE_SCRIPT_THAI: Thai
* @G_UNICODE_SCRIPT_TIBETAN: Tibetan
* @G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL:
* Canadian Aboriginal
* @G_UNICODE_SCRIPT_YI: Yi
* @G_UNICODE_SCRIPT_TAGALOG: Tagalog
* @G_UNICODE_SCRIPT_HANUNOO: Hanunoo
* @G_UNICODE_SCRIPT_BUHID: Buhid
* @G_UNICODE_SCRIPT_TAGBANWA: Tagbanwa
* @G_UNICODE_SCRIPT_BRAILLE: Braille
* @G_UNICODE_SCRIPT_CYPRIOT: Cypriot
* @G_UNICODE_SCRIPT_LIMBU: Limbu
* @G_UNICODE_SCRIPT_OSMANYA: Osmanya
* @G_UNICODE_SCRIPT_SHAVIAN: Shavian
* @G_UNICODE_SCRIPT_LINEAR_B: Linear B
* @G_UNICODE_SCRIPT_TAI_LE: Tai Le
* @G_UNICODE_SCRIPT_UGARITIC: Ugaritic
* @G_UNICODE_SCRIPT_NEW_TAI_LUE:
* New Tai Lue
* @G_UNICODE_SCRIPT_BUGINESE: Buginese
* @G_UNICODE_SCRIPT_GLAGOLITIC: Glagolitic
* @G_UNICODE_SCRIPT_TIFINAGH: Tifinagh
* @G_UNICODE_SCRIPT_SYLOTI_NAGRI:
* Syloti Nagri
* @G_UNICODE_SCRIPT_OLD_PERSIAN:
* Old Persian
* @G_UNICODE_SCRIPT_KHAROSHTHI: Kharoshthi
* @G_UNICODE_SCRIPT_UNKNOWN: an unassigned code point
* @G_UNICODE_SCRIPT_BALINESE: Balinese
* @G_UNICODE_SCRIPT_CUNEIFORM: Cuneiform
* @G_UNICODE_SCRIPT_PHOENICIAN: Phoenician
* @G_UNICODE_SCRIPT_PHAGS_PA: Phags-pa
* @G_UNICODE_SCRIPT_NKO: N'Ko
* @G_UNICODE_SCRIPT_KAYAH_LI: Kayah Li. Since 2.16.3
* @G_UNICODE_SCRIPT_LEPCHA: Lepcha. Since 2.16.3
* @G_UNICODE_SCRIPT_REJANG: Rejang. Since 2.16.3
* @G_UNICODE_SCRIPT_SUNDANESE: Sundanese. Since 2.16.3
* @G_UNICODE_SCRIPT_SAURASHTRA: Saurashtra. Since 2.16.3
* @G_UNICODE_SCRIPT_CHAM: Cham. Since 2.16.3
* @G_UNICODE_SCRIPT_OL_CHIKI: Ol Chiki. Since 2.16.3
* @G_UNICODE_SCRIPT_VAI: Vai. Since 2.16.3
* @G_UNICODE_SCRIPT_CARIAN: Carian. Since 2.16.3
* @G_UNICODE_SCRIPT_LYCIAN: Lycian. Since 2.16.3
* @G_UNICODE_SCRIPT_LYDIAN: Lydian. Since 2.16.3
* @G_UNICODE_SCRIPT_AVESTAN: Avestan. Since 2.26
* @G_UNICODE_SCRIPT_BAMUM: Bamum. Since 2.26
* @G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS:
* Egyptian Hieroglpyhs. Since 2.26
* @G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC:
* Imperial Aramaic. Since 2.26
* @G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI:
* Inscriptional Pahlavi. Since 2.26
* @G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN:
* Inscriptional Parthian. Since 2.26
* @G_UNICODE_SCRIPT_JAVANESE: Javanese. Since 2.26
* @G_UNICODE_SCRIPT_KAITHI: Kaithi. Since 2.26
* @G_UNICODE_SCRIPT_LISU: Lisu. Since 2.26
* @G_UNICODE_SCRIPT_MEETEI_MAYEK:
* Meetei Mayek. Since 2.26
* @G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN:
* Old South Arabian. Since 2.26
* @G_UNICODE_SCRIPT_OLD_TURKIC: Old Turkic. Since 2.28
* @G_UNICODE_SCRIPT_SAMARITAN: Samaritan. Since 2.26
* @G_UNICODE_SCRIPT_TAI_THAM: Tai Tham. Since 2.26
* @G_UNICODE_SCRIPT_TAI_VIET: Tai Viet. Since 2.26
* @G_UNICODE_SCRIPT_BATAK: Batak. Since 2.28
* @G_UNICODE_SCRIPT_BRAHMI: Brahmi. Since 2.28
* @G_UNICODE_SCRIPT_MANDAIC: Mandaic. Since 2.28
* @G_UNICODE_SCRIPT_CHAKMA: Chakma. Since: 2.32
* @G_UNICODE_SCRIPT_MEROITIC_CURSIVE: Meroitic Cursive. Since: 2.32
* @G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS: Meroitic Hieroglyphs. Since: 2.32
* @G_UNICODE_SCRIPT_MIAO: Miao. Since: 2.32
* @G_UNICODE_SCRIPT_SHARADA: Sharada. Since: 2.32
* @G_UNICODE_SCRIPT_SORA_SOMPENG: Sora Sompeng. Since: 2.32
* @G_UNICODE_SCRIPT_TAKRI: Takri. Since: 2.32
* @G_UNICODE_SCRIPT_BASSA_VAH: Bassa. Since: 2.42
* @G_UNICODE_SCRIPT_CAUCASIAN_ALBANIAN: Caucasian Albanian. Since: 2.42
* @G_UNICODE_SCRIPT_DUPLOYAN: Duployan. Since: 2.42
* @G_UNICODE_SCRIPT_ELBASAN: Elbasan. Since: 2.42
* @G_UNICODE_SCRIPT_GRANTHA: Grantha. Since: 2.42
* @G_UNICODE_SCRIPT_KHOJKI: Kjohki. Since: 2.42
* @G_UNICODE_SCRIPT_KHUDAWADI: Khudawadi, Sindhi. Since: 2.42
* @G_UNICODE_SCRIPT_LINEAR_A: Linear A. Since: 2.42
* @G_UNICODE_SCRIPT_MAHAJANI: Mahajani. Since: 2.42
* @G_UNICODE_SCRIPT_MANICHAEAN: Manichaean. Since: 2.42
* @G_UNICODE_SCRIPT_MENDE_KIKAKUI: Mende Kikakui. Since: 2.42
* @G_UNICODE_SCRIPT_MODI: Modi. Since: 2.42
* @G_UNICODE_SCRIPT_MRO: Mro. Since: 2.42
* @G_UNICODE_SCRIPT_NABATAEAN: Nabataean. Since: 2.42
* @G_UNICODE_SCRIPT_OLD_NORTH_ARABIAN: Old North Arabian. Since: 2.42
* @G_UNICODE_SCRIPT_OLD_PERMIC: Old Permic. Since: 2.42
* @G_UNICODE_SCRIPT_PAHAWH_HMONG: Pahawh Hmong. Since: 2.42
* @G_UNICODE_SCRIPT_PALMYRENE: Palmyrene. Since: 2.42
* @G_UNICODE_SCRIPT_PAU_CIN_HAU: Pau Cin Hau. Since: 2.42
* @G_UNICODE_SCRIPT_PSALTER_PAHLAVI: Psalter Pahlavi. Since: 2.42
* @G_UNICODE_SCRIPT_SIDDHAM: Siddham. Since: 2.42
* @G_UNICODE_SCRIPT_TIRHUTA: Tirhuta. Since: 2.42
* @G_UNICODE_SCRIPT_WARANG_CITI: Warang Citi. Since: 2.42
* @G_UNICODE_SCRIPT_AHOM: Ahom. Since: 2.48
* @G_UNICODE_SCRIPT_ANATOLIAN_HIEROGLYPHS: Anatolian Hieroglyphs. Since: 2.48
* @G_UNICODE_SCRIPT_HATRAN: Hatran. Since: 2.48
* @G_UNICODE_SCRIPT_MULTANI: Multani. Since: 2.48
* @G_UNICODE_SCRIPT_OLD_HUNGARIAN: Old Hungarian. Since: 2.48
* @G_UNICODE_SCRIPT_SIGNWRITING: Signwriting. Since: 2.48
* @G_UNICODE_SCRIPT_ADLAM: Adlam. Since: 2.50
* @G_UNICODE_SCRIPT_BHAIKSUKI: Bhaiksuki. Since: 2.50
* @G_UNICODE_SCRIPT_MARCHEN: Marchen. Since: 2.50
* @G_UNICODE_SCRIPT_NEWA: Newa. Since: 2.50
* @G_UNICODE_SCRIPT_OSAGE: Osage. Since: 2.50
* @G_UNICODE_SCRIPT_TANGUT: Tangut. Since: 2.50
* @G_UNICODE_SCRIPT_MASARAM_GONDI: Masaram Gondi. Since: 2.54
* @G_UNICODE_SCRIPT_NUSHU: Nushu. Since: 2.54
* @G_UNICODE_SCRIPT_SOYOMBO: Soyombo. Since: 2.54
* @G_UNICODE_SCRIPT_ZANABAZAR_SQUARE: Zanabazar Square. Since: 2.54
* @G_UNICODE_SCRIPT_DOGRA: Dogra. Since: 2.58
* @G_UNICODE_SCRIPT_GUNJALA_GONDI: Gunjala Gondi. Since: 2.58
* @G_UNICODE_SCRIPT_HANIFI_ROHINGYA: Hanifi Rohingya. Since: 2.58
* @G_UNICODE_SCRIPT_MAKASAR: Makasar. Since: 2.58
* @G_UNICODE_SCRIPT_MEDEFAIDRIN: Medefaidrin. Since: 2.58
* @G_UNICODE_SCRIPT_OLD_SOGDIAN: Old Sogdian. Since: 2.58
* @G_UNICODE_SCRIPT_SOGDIAN: Sogdian. Since: 2.58
* @G_UNICODE_SCRIPT_ELYMAIC: Elym. Since: 2.62
* @G_UNICODE_SCRIPT_NANDINAGARI: Nand. Since: 2.62
* @G_UNICODE_SCRIPT_NYIAKENG_PUACHUE_HMONG: Rohg. Since: 2.62
* @G_UNICODE_SCRIPT_WANCHO: Wcho. Since: 2.62
* @G_UNICODE_SCRIPT_CHORASMIAN: Chorasmian. Since: 2.66
* @G_UNICODE_SCRIPT_DIVES_AKURU: Dives Akuru. Since: 2.66
* @G_UNICODE_SCRIPT_KHITAN_SMALL_SCRIPT: Khitan small script. Since: 2.66
* @G_UNICODE_SCRIPT_YEZIDI: Yezidi. Since: 2.66
*
* The #GUnicodeScript enumeration identifies different writing
* systems. The values correspond to the names as defined in the
* Unicode standard. The enumeration has been added in GLib 2.14,
* and is interchangeable with #PangoScript.
*
* Note that new types may be added in the future. Applications
* should be ready to handle unknown values.
* See [Unicode Standard Annex #24: Script names](http://www.unicode.org/reports/tr24/).
*/
typedef enum
{ /* ISO 15924 code */
G_UNICODE_SCRIPT_INVALID_CODE = -1,
G_UNICODE_SCRIPT_COMMON = 0, /* Zyyy */
G_UNICODE_SCRIPT_INHERITED, /* Zinh (Qaai) */
G_UNICODE_SCRIPT_ARABIC, /* Arab */
G_UNICODE_SCRIPT_ARMENIAN, /* Armn */
G_UNICODE_SCRIPT_BENGALI, /* Beng */
G_UNICODE_SCRIPT_BOPOMOFO, /* Bopo */
G_UNICODE_SCRIPT_CHEROKEE, /* Cher */
G_UNICODE_SCRIPT_COPTIC, /* Copt (Qaac) */
G_UNICODE_SCRIPT_CYRILLIC, /* Cyrl (Cyrs) */
G_UNICODE_SCRIPT_DESERET, /* Dsrt */
G_UNICODE_SCRIPT_DEVANAGARI, /* Deva */
G_UNICODE_SCRIPT_ETHIOPIC, /* Ethi */
G_UNICODE_SCRIPT_GEORGIAN, /* Geor (Geon, Geoa) */
G_UNICODE_SCRIPT_GOTHIC, /* Goth */
G_UNICODE_SCRIPT_GREEK, /* Grek */
G_UNICODE_SCRIPT_GUJARATI, /* Gujr */
G_UNICODE_SCRIPT_GURMUKHI, /* Guru */
G_UNICODE_SCRIPT_HAN, /* Hani */
G_UNICODE_SCRIPT_HANGUL, /* Hang */
G_UNICODE_SCRIPT_HEBREW, /* Hebr */
G_UNICODE_SCRIPT_HIRAGANA, /* Hira */
G_UNICODE_SCRIPT_KANNADA, /* Knda */
G_UNICODE_SCRIPT_KATAKANA, /* Kana */
G_UNICODE_SCRIPT_KHMER, /* Khmr */
G_UNICODE_SCRIPT_LAO, /* Laoo */
G_UNICODE_SCRIPT_LATIN, /* Latn (Latf, Latg) */
G_UNICODE_SCRIPT_MALAYALAM, /* Mlym */
G_UNICODE_SCRIPT_MONGOLIAN, /* Mong */
G_UNICODE_SCRIPT_MYANMAR, /* Mymr */
G_UNICODE_SCRIPT_OGHAM, /* Ogam */
G_UNICODE_SCRIPT_OLD_ITALIC, /* Ital */
G_UNICODE_SCRIPT_ORIYA, /* Orya */
G_UNICODE_SCRIPT_RUNIC, /* Runr */
G_UNICODE_SCRIPT_SINHALA, /* Sinh */
G_UNICODE_SCRIPT_SYRIAC, /* Syrc (Syrj, Syrn, Syre) */
G_UNICODE_SCRIPT_TAMIL, /* Taml */
G_UNICODE_SCRIPT_TELUGU, /* Telu */
G_UNICODE_SCRIPT_THAANA, /* Thaa */
G_UNICODE_SCRIPT_THAI, /* Thai */
G_UNICODE_SCRIPT_TIBETAN, /* Tibt */
G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
G_UNICODE_SCRIPT_YI, /* Yiii */
G_UNICODE_SCRIPT_TAGALOG, /* Tglg */
G_UNICODE_SCRIPT_HANUNOO, /* Hano */
G_UNICODE_SCRIPT_BUHID, /* Buhd */
G_UNICODE_SCRIPT_TAGBANWA, /* Tagb */
/* Unicode-4.0 additions */
G_UNICODE_SCRIPT_BRAILLE, /* Brai */
G_UNICODE_SCRIPT_CYPRIOT, /* Cprt */
G_UNICODE_SCRIPT_LIMBU, /* Limb */
G_UNICODE_SCRIPT_OSMANYA, /* Osma */
G_UNICODE_SCRIPT_SHAVIAN, /* Shaw */
G_UNICODE_SCRIPT_LINEAR_B, /* Linb */
G_UNICODE_SCRIPT_TAI_LE, /* Tale */
G_UNICODE_SCRIPT_UGARITIC, /* Ugar */
/* Unicode-4.1 additions */
G_UNICODE_SCRIPT_NEW_TAI_LUE, /* Talu */
G_UNICODE_SCRIPT_BUGINESE, /* Bugi */
G_UNICODE_SCRIPT_GLAGOLITIC, /* Glag */
G_UNICODE_SCRIPT_TIFINAGH, /* Tfng */
G_UNICODE_SCRIPT_SYLOTI_NAGRI, /* Sylo */
G_UNICODE_SCRIPT_OLD_PERSIAN, /* Xpeo */
G_UNICODE_SCRIPT_KHAROSHTHI, /* Khar */
/* Unicode-5.0 additions */
G_UNICODE_SCRIPT_UNKNOWN, /* Zzzz */
G_UNICODE_SCRIPT_BALINESE, /* Bali */
G_UNICODE_SCRIPT_CUNEIFORM, /* Xsux */
G_UNICODE_SCRIPT_PHOENICIAN, /* Phnx */
G_UNICODE_SCRIPT_PHAGS_PA, /* Phag */
G_UNICODE_SCRIPT_NKO, /* Nkoo */
/* Unicode-5.1 additions */
G_UNICODE_SCRIPT_KAYAH_LI, /* Kali */
G_UNICODE_SCRIPT_LEPCHA, /* Lepc */
G_UNICODE_SCRIPT_REJANG, /* Rjng */
G_UNICODE_SCRIPT_SUNDANESE, /* Sund */
G_UNICODE_SCRIPT_SAURASHTRA, /* Saur */
G_UNICODE_SCRIPT_CHAM, /* Cham */
G_UNICODE_SCRIPT_OL_CHIKI, /* Olck */
G_UNICODE_SCRIPT_VAI, /* Vaii */
G_UNICODE_SCRIPT_CARIAN, /* Cari */
G_UNICODE_SCRIPT_LYCIAN, /* Lyci */
G_UNICODE_SCRIPT_LYDIAN, /* Lydi */
/* Unicode-5.2 additions */
G_UNICODE_SCRIPT_AVESTAN, /* Avst */
G_UNICODE_SCRIPT_BAMUM, /* Bamu */
G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS, /* Egyp */
G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC, /* Armi */
G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI, /* Phli */
G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN, /* Prti */
G_UNICODE_SCRIPT_JAVANESE, /* Java */
G_UNICODE_SCRIPT_KAITHI, /* Kthi */
G_UNICODE_SCRIPT_LISU, /* Lisu */
G_UNICODE_SCRIPT_MEETEI_MAYEK, /* Mtei */
G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN, /* Sarb */
G_UNICODE_SCRIPT_OLD_TURKIC, /* Orkh */
G_UNICODE_SCRIPT_SAMARITAN, /* Samr */
G_UNICODE_SCRIPT_TAI_THAM, /* Lana */
G_UNICODE_SCRIPT_TAI_VIET, /* Tavt */
/* Unicode-6.0 additions */
G_UNICODE_SCRIPT_BATAK, /* Batk */
G_UNICODE_SCRIPT_BRAHMI, /* Brah */
G_UNICODE_SCRIPT_MANDAIC, /* Mand */
/* Unicode-6.1 additions */
G_UNICODE_SCRIPT_CHAKMA, /* Cakm */
G_UNICODE_SCRIPT_MEROITIC_CURSIVE, /* Merc */
G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS, /* Mero */
G_UNICODE_SCRIPT_MIAO, /* Plrd */
G_UNICODE_SCRIPT_SHARADA, /* Shrd */
G_UNICODE_SCRIPT_SORA_SOMPENG, /* Sora */
G_UNICODE_SCRIPT_TAKRI, /* Takr */
/* Unicode 7.0 additions */
G_UNICODE_SCRIPT_BASSA_VAH, /* Bass */
G_UNICODE_SCRIPT_CAUCASIAN_ALBANIAN, /* Aghb */
G_UNICODE_SCRIPT_DUPLOYAN, /* Dupl */
G_UNICODE_SCRIPT_ELBASAN, /* Elba */
G_UNICODE_SCRIPT_GRANTHA, /* Gran */
G_UNICODE_SCRIPT_KHOJKI, /* Khoj */
G_UNICODE_SCRIPT_KHUDAWADI, /* Sind */
G_UNICODE_SCRIPT_LINEAR_A, /* Lina */
G_UNICODE_SCRIPT_MAHAJANI, /* Mahj */
G_UNICODE_SCRIPT_MANICHAEAN, /* Mani */
G_UNICODE_SCRIPT_MENDE_KIKAKUI, /* Mend */
G_UNICODE_SCRIPT_MODI, /* Modi */
G_UNICODE_SCRIPT_MRO, /* Mroo */
G_UNICODE_SCRIPT_NABATAEAN, /* Nbat */
G_UNICODE_SCRIPT_OLD_NORTH_ARABIAN, /* Narb */
G_UNICODE_SCRIPT_OLD_PERMIC, /* Perm */
G_UNICODE_SCRIPT_PAHAWH_HMONG, /* Hmng */
G_UNICODE_SCRIPT_PALMYRENE, /* Palm */
G_UNICODE_SCRIPT_PAU_CIN_HAU, /* Pauc */
G_UNICODE_SCRIPT_PSALTER_PAHLAVI, /* Phlp */
G_UNICODE_SCRIPT_SIDDHAM, /* Sidd */
G_UNICODE_SCRIPT_TIRHUTA, /* Tirh */
G_UNICODE_SCRIPT_WARANG_CITI, /* Wara */
/* Unicode 8.0 additions */
G_UNICODE_SCRIPT_AHOM, /* Ahom */
G_UNICODE_SCRIPT_ANATOLIAN_HIEROGLYPHS, /* Hluw */
G_UNICODE_SCRIPT_HATRAN, /* Hatr */
G_UNICODE_SCRIPT_MULTANI, /* Mult */
G_UNICODE_SCRIPT_OLD_HUNGARIAN, /* Hung */
G_UNICODE_SCRIPT_SIGNWRITING, /* Sgnw */
/* Unicode 9.0 additions */
G_UNICODE_SCRIPT_ADLAM, /* Adlm */
G_UNICODE_SCRIPT_BHAIKSUKI, /* Bhks */
G_UNICODE_SCRIPT_MARCHEN, /* Marc */
G_UNICODE_SCRIPT_NEWA, /* Newa */
G_UNICODE_SCRIPT_OSAGE, /* Osge */
G_UNICODE_SCRIPT_TANGUT, /* Tang */
/* Unicode 10.0 additions */
G_UNICODE_SCRIPT_MASARAM_GONDI, /* Gonm */
G_UNICODE_SCRIPT_NUSHU, /* Nshu */
G_UNICODE_SCRIPT_SOYOMBO, /* Soyo */
G_UNICODE_SCRIPT_ZANABAZAR_SQUARE, /* Zanb */
/* Unicode 11.0 additions */
G_UNICODE_SCRIPT_DOGRA, /* Dogr */
G_UNICODE_SCRIPT_GUNJALA_GONDI, /* Gong */
G_UNICODE_SCRIPT_HANIFI_ROHINGYA, /* Rohg */
G_UNICODE_SCRIPT_MAKASAR, /* Maka */
G_UNICODE_SCRIPT_MEDEFAIDRIN, /* Medf */
G_UNICODE_SCRIPT_OLD_SOGDIAN, /* Sogo */
G_UNICODE_SCRIPT_SOGDIAN, /* Sogd */
/* Unicode 12.0 additions */
G_UNICODE_SCRIPT_ELYMAIC, /* Elym */
G_UNICODE_SCRIPT_NANDINAGARI, /* Nand */
G_UNICODE_SCRIPT_NYIAKENG_PUACHUE_HMONG, /* Rohg */
G_UNICODE_SCRIPT_WANCHO, /* Wcho */
/* Unicode 13.0 additions */
G_UNICODE_SCRIPT_CHORASMIAN, /* Chrs */
G_UNICODE_SCRIPT_DIVES_AKURU, /* Diak */
G_UNICODE_SCRIPT_KHITAN_SMALL_SCRIPT, /* Kits */
G_UNICODE_SCRIPT_YEZIDI /* Yezi */
} GUnicodeScript;
GLIB_AVAILABLE_IN_ALL
guint32 g_unicode_script_to_iso15924 (GUnicodeScript script);
GLIB_AVAILABLE_IN_ALL
GUnicodeScript g_unicode_script_from_iso15924 (guint32 iso15924);
/* These are all analogs of the functions.
*/
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isalnum (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isalpha (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_iscntrl (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isdigit (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isgraph (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_islower (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isprint (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_ispunct (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isspace (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isupper (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isxdigit (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_istitle (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_isdefined (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_iswide (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_iswide_cjk(gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_iszerowidth(gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_ismark (gunichar c) G_GNUC_CONST;
/* More functions. These convert between the three cases.
* See the Unicode book to understand title case. */
GLIB_AVAILABLE_IN_ALL
gunichar g_unichar_toupper (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gunichar g_unichar_tolower (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gunichar g_unichar_totitle (gunichar c) G_GNUC_CONST;
/* If C is a digit (according to 'g_unichar_isdigit'), then return its
numeric value. Otherwise return -1. */
GLIB_AVAILABLE_IN_ALL
gint g_unichar_digit_value (gunichar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gint g_unichar_xdigit_value (gunichar c) G_GNUC_CONST;
/* Return the Unicode character type of a given character. */
GLIB_AVAILABLE_IN_ALL
GUnicodeType g_unichar_type (gunichar c) G_GNUC_CONST;
/* Return the line break property for a given character */
GLIB_AVAILABLE_IN_ALL
GUnicodeBreakType g_unichar_break_type (gunichar c) G_GNUC_CONST;
/* Returns the combining class for a given character */
GLIB_AVAILABLE_IN_ALL
gint g_unichar_combining_class (gunichar uc) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_get_mirror_char (gunichar ch,
gunichar *mirrored_ch);
GLIB_AVAILABLE_IN_ALL
GUnicodeScript g_unichar_get_script (gunichar ch) G_GNUC_CONST;
/* Validate a Unicode character */
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_validate (gunichar ch) G_GNUC_CONST;
/* Pairwise canonical compose/decompose */
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_compose (gunichar a,
gunichar b,
gunichar *ch);
GLIB_AVAILABLE_IN_ALL
gboolean g_unichar_decompose (gunichar ch,
gunichar *a,
gunichar *b);
GLIB_AVAILABLE_IN_ALL
gsize g_unichar_fully_decompose (gunichar ch,
gboolean compat,
gunichar *result,
gsize result_len);
/**
* G_UNICHAR_MAX_DECOMPOSITION_LENGTH:
*
* The maximum length (in codepoints) of a compatibility or canonical
* decomposition of a single Unicode character.
*
* This is as defined by Unicode 6.1.
*
* Since: 2.32
*/
#define G_UNICHAR_MAX_DECOMPOSITION_LENGTH 18 /* codepoints */
/* Compute canonical ordering of a string in-place. This rearranges
decomposed characters in the string according to their combining
classes. See the Unicode manual for more information. */
GLIB_AVAILABLE_IN_ALL
void g_unicode_canonical_ordering (gunichar *string,
gsize len);
GLIB_DEPRECATED_IN_2_30
gunichar *g_unicode_canonical_decomposition (gunichar ch,
gsize *result_len) G_GNUC_MALLOC;
/* Array of skip-bytes-per-initial character.
*/
GLIB_VAR const gchar * const g_utf8_skip;
/**
* g_utf8_next_char:
* @p: Pointer to the start of a valid UTF-8 character
*
* Skips to the next character in a UTF-8 string. The string must be
* valid; this macro is as fast as possible, and has no error-checking.
* You would use this macro to iterate over a string character by
* character. The macro returns the start of the next UTF-8 character.
* Before using this macro, use g_utf8_validate() to validate strings
* that may contain invalid UTF-8.
*/
#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(const guchar *)(p)])
GLIB_AVAILABLE_IN_ALL
gunichar g_utf8_get_char (const gchar *p) G_GNUC_PURE;
GLIB_AVAILABLE_IN_ALL
gunichar g_utf8_get_char_validated (const gchar *p,
gssize max_len) G_GNUC_PURE;
GLIB_AVAILABLE_IN_ALL
gchar* g_utf8_offset_to_pointer (const gchar *str,
glong offset) G_GNUC_PURE;
GLIB_AVAILABLE_IN_ALL
glong g_utf8_pointer_to_offset (const gchar *str,
const gchar *pos) G_GNUC_PURE;
GLIB_AVAILABLE_IN_ALL
gchar* g_utf8_prev_char (const gchar *p) G_GNUC_PURE;
GLIB_AVAILABLE_IN_ALL
gchar* g_utf8_find_next_char (const gchar *p,
const gchar *end) G_GNUC_PURE;
GLIB_AVAILABLE_IN_ALL
gchar* g_utf8_find_prev_char (const gchar *str,
const gchar *p) G_GNUC_PURE;
GLIB_AVAILABLE_IN_ALL
glong g_utf8_strlen (const gchar *p,
gssize max) G_GNUC_PURE;
GLIB_AVAILABLE_IN_2_30
gchar *g_utf8_substring (const gchar *str,
glong start_pos,
glong end_pos) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_utf8_strncpy (gchar *dest,
const gchar *src,
gsize n);
/* Find the UTF-8 character corresponding to ch, in string p. These
functions are equivalants to strchr and strrchr */
GLIB_AVAILABLE_IN_ALL
gchar* g_utf8_strchr (const gchar *p,
gssize len,
gunichar c);
GLIB_AVAILABLE_IN_ALL
gchar* g_utf8_strrchr (const gchar *p,
gssize len,
gunichar c);
GLIB_AVAILABLE_IN_ALL
gchar* g_utf8_strreverse (const gchar *str,
gssize len);
GLIB_AVAILABLE_IN_ALL
gunichar2 *g_utf8_to_utf16 (const gchar *str,
glong len,
glong *items_read,
glong *items_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gunichar * g_utf8_to_ucs4 (const gchar *str,
glong len,
glong *items_read,
glong *items_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gunichar * g_utf8_to_ucs4_fast (const gchar *str,
glong len,
glong *items_written) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gunichar * g_utf16_to_ucs4 (const gunichar2 *str,
glong len,
glong *items_read,
glong *items_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_utf16_to_utf8 (const gunichar2 *str,
glong len,
glong *items_read,
glong *items_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gunichar2 *g_ucs4_to_utf16 (const gunichar *str,
glong len,
glong *items_read,
glong *items_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_ucs4_to_utf8 (const gunichar *str,
glong len,
glong *items_read,
glong *items_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gint g_unichar_to_utf8 (gunichar c,
gchar *outbuf);
GLIB_AVAILABLE_IN_ALL
gboolean g_utf8_validate (const gchar *str,
gssize max_len,
const gchar **end);
GLIB_AVAILABLE_IN_2_60
gboolean g_utf8_validate_len (const gchar *str,
gsize max_len,
const gchar **end);
GLIB_AVAILABLE_IN_ALL
gchar *g_utf8_strup (const gchar *str,
gssize len) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_utf8_strdown (const gchar *str,
gssize len) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_utf8_casefold (const gchar *str,
gssize len) G_GNUC_MALLOC;
/**
* GNormalizeMode:
* @G_NORMALIZE_DEFAULT: standardize differences that do not affect the
* text content, such as the above-mentioned accent representation
* @G_NORMALIZE_NFD: another name for %G_NORMALIZE_DEFAULT
* @G_NORMALIZE_DEFAULT_COMPOSE: like %G_NORMALIZE_DEFAULT, but with
* composed forms rather than a maximally decomposed form
* @G_NORMALIZE_NFC: another name for %G_NORMALIZE_DEFAULT_COMPOSE
* @G_NORMALIZE_ALL: beyond %G_NORMALIZE_DEFAULT also standardize the
* "compatibility" characters in Unicode, such as SUPERSCRIPT THREE
* to the standard forms (in this case DIGIT THREE). Formatting
* information may be lost but for most text operations such
* characters should be considered the same
* @G_NORMALIZE_NFKD: another name for %G_NORMALIZE_ALL
* @G_NORMALIZE_ALL_COMPOSE: like %G_NORMALIZE_ALL, but with composed
* forms rather than a maximally decomposed form
* @G_NORMALIZE_NFKC: another name for %G_NORMALIZE_ALL_COMPOSE
*
* Defines how a Unicode string is transformed in a canonical
* form, standardizing such issues as whether a character with
* an accent is represented as a base character and combining
* accent or as a single precomposed character. Unicode strings
* should generally be normalized before comparing them.
*/
typedef enum {
G_NORMALIZE_DEFAULT,
G_NORMALIZE_NFD = G_NORMALIZE_DEFAULT,
G_NORMALIZE_DEFAULT_COMPOSE,
G_NORMALIZE_NFC = G_NORMALIZE_DEFAULT_COMPOSE,
G_NORMALIZE_ALL,
G_NORMALIZE_NFKD = G_NORMALIZE_ALL,
G_NORMALIZE_ALL_COMPOSE,
G_NORMALIZE_NFKC = G_NORMALIZE_ALL_COMPOSE
} GNormalizeMode;
GLIB_AVAILABLE_IN_ALL
gchar *g_utf8_normalize (const gchar *str,
gssize len,
GNormalizeMode mode) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gint g_utf8_collate (const gchar *str1,
const gchar *str2) G_GNUC_PURE;
GLIB_AVAILABLE_IN_ALL
gchar *g_utf8_collate_key (const gchar *str,
gssize len) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_utf8_collate_key_for_filename (const gchar *str,
gssize len) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_2_52
gchar *g_utf8_make_valid (const gchar *str,
gssize len) G_GNUC_MALLOC;
G_END_DECLS
#endif /* __G_UNICODE_H__ */
gdate.h 0000644 00000030204 15021467762 0006012 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_DATE_H__
#define __G_DATE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
G_BEGIN_DECLS
/* GDate
*
* Date calculations (not time for now, to be resolved). These are a
* mutant combination of Steffen Beyer's DateCalc routines
* (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's
* date routines (written for in-house software). Written by Havoc
* Pennington
*/
typedef gint32 GTime GLIB_DEPRECATED_TYPE_IN_2_62_FOR(GDateTime);
typedef guint16 GDateYear;
typedef guint8 GDateDay; /* day of the month */
typedef struct _GDate GDate;
/* enum used to specify order of appearance in parsed date strings */
typedef enum
{
G_DATE_DAY = 0,
G_DATE_MONTH = 1,
G_DATE_YEAR = 2
} GDateDMY;
/* actual week and month values */
typedef enum
{
G_DATE_BAD_WEEKDAY = 0,
G_DATE_MONDAY = 1,
G_DATE_TUESDAY = 2,
G_DATE_WEDNESDAY = 3,
G_DATE_THURSDAY = 4,
G_DATE_FRIDAY = 5,
G_DATE_SATURDAY = 6,
G_DATE_SUNDAY = 7
} GDateWeekday;
typedef enum
{
G_DATE_BAD_MONTH = 0,
G_DATE_JANUARY = 1,
G_DATE_FEBRUARY = 2,
G_DATE_MARCH = 3,
G_DATE_APRIL = 4,
G_DATE_MAY = 5,
G_DATE_JUNE = 6,
G_DATE_JULY = 7,
G_DATE_AUGUST = 8,
G_DATE_SEPTEMBER = 9,
G_DATE_OCTOBER = 10,
G_DATE_NOVEMBER = 11,
G_DATE_DECEMBER = 12
} GDateMonth;
#define G_DATE_BAD_JULIAN 0U
#define G_DATE_BAD_DAY 0U
#define G_DATE_BAD_YEAR 0U
/* Note: directly manipulating structs is generally a bad idea, but
* in this case it's an *incredibly* bad idea, because all or part
* of this struct can be invalid at any given time. Use the functions,
* or you will get hosed, I promise.
*/
struct _GDate
{
guint julian_days : 32; /* julian days representation - we use a
* bitfield hoping that 64 bit platforms
* will pack this whole struct in one big
* int
*/
guint julian : 1; /* julian is valid */
guint dmy : 1; /* dmy is valid */
/* DMY representation */
guint day : 6;
guint month : 4;
guint year : 16;
};
/* g_date_new() returns an invalid date, you then have to _set() stuff
* to get a usable object. You can also allocate a GDate statically,
* then call g_date_clear() to initialize.
*/
GLIB_AVAILABLE_IN_ALL
GDate* g_date_new (void);
GLIB_AVAILABLE_IN_ALL
GDate* g_date_new_dmy (GDateDay day,
GDateMonth month,
GDateYear year);
GLIB_AVAILABLE_IN_ALL
GDate* g_date_new_julian (guint32 julian_day);
GLIB_AVAILABLE_IN_ALL
void g_date_free (GDate *date);
GLIB_AVAILABLE_IN_2_56
GDate* g_date_copy (const GDate *date);
/* check g_date_valid() after doing an operation that might fail, like
* _parse. Almost all g_date operations are undefined on invalid
* dates (the exceptions are the mutators, since you need those to
* return to validity).
*/
GLIB_AVAILABLE_IN_ALL
gboolean g_date_valid (const GDate *date);
GLIB_AVAILABLE_IN_ALL
gboolean g_date_valid_day (GDateDay day) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_date_valid_month (GDateMonth month) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_date_valid_year (GDateYear year) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_date_valid_weekday (GDateWeekday weekday) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_date_valid_julian (guint32 julian_date) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_date_valid_dmy (GDateDay day,
GDateMonth month,
GDateYear year) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
GDateWeekday g_date_get_weekday (const GDate *date);
GLIB_AVAILABLE_IN_ALL
GDateMonth g_date_get_month (const GDate *date);
GLIB_AVAILABLE_IN_ALL
GDateYear g_date_get_year (const GDate *date);
GLIB_AVAILABLE_IN_ALL
GDateDay g_date_get_day (const GDate *date);
GLIB_AVAILABLE_IN_ALL
guint32 g_date_get_julian (const GDate *date);
GLIB_AVAILABLE_IN_ALL
guint g_date_get_day_of_year (const GDate *date);
/* First monday/sunday is the start of week 1; if we haven't reached
* that day, return 0. These are not ISO weeks of the year; that
* routine needs to be added.
* these functions return the number of weeks, starting on the
* corrsponding day
*/
GLIB_AVAILABLE_IN_ALL
guint g_date_get_monday_week_of_year (const GDate *date);
GLIB_AVAILABLE_IN_ALL
guint g_date_get_sunday_week_of_year (const GDate *date);
GLIB_AVAILABLE_IN_ALL
guint g_date_get_iso8601_week_of_year (const GDate *date);
/* If you create a static date struct you need to clear it to get it
* in a safe state before use. You can clear a whole array at
* once with the ndates argument.
*/
GLIB_AVAILABLE_IN_ALL
void g_date_clear (GDate *date,
guint n_dates);
/* The parse routine is meant for dates typed in by a user, so it
* permits many formats but tries to catch common typos. If your data
* needs to be strictly validated, it is not an appropriate function.
*/
GLIB_AVAILABLE_IN_ALL
void g_date_set_parse (GDate *date,
const gchar *str);
GLIB_AVAILABLE_IN_ALL
void g_date_set_time_t (GDate *date,
time_t timet);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_IN_2_62_FOR(g_date_set_time_t)
void g_date_set_time_val (GDate *date,
GTimeVal *timeval);
GLIB_DEPRECATED_FOR(g_date_set_time_t)
void g_date_set_time (GDate *date,
GTime time_);
G_GNUC_END_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_ALL
void g_date_set_month (GDate *date,
GDateMonth month);
GLIB_AVAILABLE_IN_ALL
void g_date_set_day (GDate *date,
GDateDay day);
GLIB_AVAILABLE_IN_ALL
void g_date_set_year (GDate *date,
GDateYear year);
GLIB_AVAILABLE_IN_ALL
void g_date_set_dmy (GDate *date,
GDateDay day,
GDateMonth month,
GDateYear y);
GLIB_AVAILABLE_IN_ALL
void g_date_set_julian (GDate *date,
guint32 julian_date);
GLIB_AVAILABLE_IN_ALL
gboolean g_date_is_first_of_month (const GDate *date);
GLIB_AVAILABLE_IN_ALL
gboolean g_date_is_last_of_month (const GDate *date);
/* To go forward by some number of weeks just go forward weeks*7 days */
GLIB_AVAILABLE_IN_ALL
void g_date_add_days (GDate *date,
guint n_days);
GLIB_AVAILABLE_IN_ALL
void g_date_subtract_days (GDate *date,
guint n_days);
/* If you add/sub months while day > 28, the day might change */
GLIB_AVAILABLE_IN_ALL
void g_date_add_months (GDate *date,
guint n_months);
GLIB_AVAILABLE_IN_ALL
void g_date_subtract_months (GDate *date,
guint n_months);
/* If it's feb 29, changing years can move you to the 28th */
GLIB_AVAILABLE_IN_ALL
void g_date_add_years (GDate *date,
guint n_years);
GLIB_AVAILABLE_IN_ALL
void g_date_subtract_years (GDate *date,
guint n_years);
GLIB_AVAILABLE_IN_ALL
gboolean g_date_is_leap_year (GDateYear year) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
guint8 g_date_get_days_in_month (GDateMonth month,
GDateYear year) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
guint8 g_date_get_monday_weeks_in_year (GDateYear year) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
guint8 g_date_get_sunday_weeks_in_year (GDateYear year) G_GNUC_CONST;
/* Returns the number of days between the two dates. If date2 comes
before date1, a negative value is return. */
GLIB_AVAILABLE_IN_ALL
gint g_date_days_between (const GDate *date1,
const GDate *date2);
/* qsort-friendly (with a cast...) */
GLIB_AVAILABLE_IN_ALL
gint g_date_compare (const GDate *lhs,
const GDate *rhs);
GLIB_AVAILABLE_IN_ALL
void g_date_to_struct_tm (const GDate *date,
struct tm *tm);
GLIB_AVAILABLE_IN_ALL
void g_date_clamp (GDate *date,
const GDate *min_date,
const GDate *max_date);
/* Swap date1 and date2's values if date1 > date2. */
GLIB_AVAILABLE_IN_ALL
void g_date_order (GDate *date1, GDate *date2);
/* Just like strftime() except you can only use date-related formats.
* Using a time format is undefined.
*/
GLIB_AVAILABLE_IN_ALL
gsize g_date_strftime (gchar *s,
gsize slen,
const gchar *format,
const GDate *date);
#define g_date_weekday g_date_get_weekday GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_weekday)
#define g_date_month g_date_get_month GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_month)
#define g_date_year g_date_get_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_year)
#define g_date_day g_date_get_day GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_day)
#define g_date_julian g_date_get_julian GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_julian)
#define g_date_day_of_year g_date_get_day_of_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_day_of_year)
#define g_date_monday_week_of_year g_date_get_monday_week_of_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_monday_week_of_year)
#define g_date_sunday_week_of_year g_date_get_sunday_week_of_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_sunday_week_of_year)
#define g_date_days_in_month g_date_get_days_in_month GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_days_in_month)
#define g_date_monday_weeks_in_year g_date_get_monday_weeks_in_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_monday_weeks_in_year)
#define g_date_sunday_weeks_in_year g_date_get_sunday_weeks_in_year GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_date_get_sunday_weeks_in_year)
G_END_DECLS
#endif /* __G_DATE_H__ */
garray.h 0000644 00000026171 15021467762 0006223 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_ARRAY_H__
#define __G_ARRAY_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GBytes GBytes;
typedef struct _GArray GArray;
typedef struct _GByteArray GByteArray;
typedef struct _GPtrArray GPtrArray;
struct _GArray
{
gchar *data;
guint len;
};
struct _GByteArray
{
guint8 *data;
guint len;
};
struct _GPtrArray
{
gpointer *pdata;
guint len;
};
/* Resizable arrays. remove fills any cleared spot and shortens the
* array, while preserving the order. remove_fast will distort the
* order by moving the last element to the position of the removed.
*/
#define g_array_append_val(a,v) g_array_append_vals (a, &(v), 1)
#define g_array_prepend_val(a,v) g_array_prepend_vals (a, &(v), 1)
#define g_array_insert_val(a,i,v) g_array_insert_vals (a, i, &(v), 1)
#define g_array_index(a,t,i) (((t*) (void *) (a)->data) [(i)])
GLIB_AVAILABLE_IN_ALL
GArray* g_array_new (gboolean zero_terminated,
gboolean clear_,
guint element_size);
GLIB_AVAILABLE_IN_2_64
gpointer g_array_steal (GArray *array,
gsize *len);
GLIB_AVAILABLE_IN_ALL
GArray* g_array_sized_new (gboolean zero_terminated,
gboolean clear_,
guint element_size,
guint reserved_size);
GLIB_AVAILABLE_IN_2_62
GArray* g_array_copy (GArray *array);
GLIB_AVAILABLE_IN_ALL
gchar* g_array_free (GArray *array,
gboolean free_segment);
GLIB_AVAILABLE_IN_ALL
GArray *g_array_ref (GArray *array);
GLIB_AVAILABLE_IN_ALL
void g_array_unref (GArray *array);
GLIB_AVAILABLE_IN_ALL
guint g_array_get_element_size (GArray *array);
GLIB_AVAILABLE_IN_ALL
GArray* g_array_append_vals (GArray *array,
gconstpointer data,
guint len);
GLIB_AVAILABLE_IN_ALL
GArray* g_array_prepend_vals (GArray *array,
gconstpointer data,
guint len);
GLIB_AVAILABLE_IN_ALL
GArray* g_array_insert_vals (GArray *array,
guint index_,
gconstpointer data,
guint len);
GLIB_AVAILABLE_IN_ALL
GArray* g_array_set_size (GArray *array,
guint length);
GLIB_AVAILABLE_IN_ALL
GArray* g_array_remove_index (GArray *array,
guint index_);
GLIB_AVAILABLE_IN_ALL
GArray* g_array_remove_index_fast (GArray *array,
guint index_);
GLIB_AVAILABLE_IN_ALL
GArray* g_array_remove_range (GArray *array,
guint index_,
guint length);
GLIB_AVAILABLE_IN_ALL
void g_array_sort (GArray *array,
GCompareFunc compare_func);
GLIB_AVAILABLE_IN_ALL
void g_array_sort_with_data (GArray *array,
GCompareDataFunc compare_func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_62
gboolean g_array_binary_search (GArray *array,
gconstpointer target,
GCompareFunc compare_func,
guint *out_match_index);
GLIB_AVAILABLE_IN_ALL
void g_array_set_clear_func (GArray *array,
GDestroyNotify clear_func);
/* Resizable pointer array. This interface is much less complicated
* than the above. Add appends a pointer. Remove fills any cleared
* spot and shortens the array. remove_fast will again distort order.
*/
#define g_ptr_array_index(array,index_) ((array)->pdata)[index_]
GLIB_AVAILABLE_IN_ALL
GPtrArray* g_ptr_array_new (void);
GLIB_AVAILABLE_IN_ALL
GPtrArray* g_ptr_array_new_with_free_func (GDestroyNotify element_free_func);
GLIB_AVAILABLE_IN_2_64
gpointer* g_ptr_array_steal (GPtrArray *array,
gsize *len);
GLIB_AVAILABLE_IN_2_62
GPtrArray *g_ptr_array_copy (GPtrArray *array,
GCopyFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
GPtrArray* g_ptr_array_sized_new (guint reserved_size);
GLIB_AVAILABLE_IN_ALL
GPtrArray* g_ptr_array_new_full (guint reserved_size,
GDestroyNotify element_free_func);
GLIB_AVAILABLE_IN_ALL
gpointer* g_ptr_array_free (GPtrArray *array,
gboolean free_seg);
GLIB_AVAILABLE_IN_ALL
GPtrArray* g_ptr_array_ref (GPtrArray *array);
GLIB_AVAILABLE_IN_ALL
void g_ptr_array_unref (GPtrArray *array);
GLIB_AVAILABLE_IN_ALL
void g_ptr_array_set_free_func (GPtrArray *array,
GDestroyNotify element_free_func);
GLIB_AVAILABLE_IN_ALL
void g_ptr_array_set_size (GPtrArray *array,
gint length);
GLIB_AVAILABLE_IN_ALL
gpointer g_ptr_array_remove_index (GPtrArray *array,
guint index_);
GLIB_AVAILABLE_IN_ALL
gpointer g_ptr_array_remove_index_fast (GPtrArray *array,
guint index_);
GLIB_AVAILABLE_IN_2_58
gpointer g_ptr_array_steal_index (GPtrArray *array,
guint index_);
GLIB_AVAILABLE_IN_2_58
gpointer g_ptr_array_steal_index_fast (GPtrArray *array,
guint index_);
GLIB_AVAILABLE_IN_ALL
gboolean g_ptr_array_remove (GPtrArray *array,
gpointer data);
GLIB_AVAILABLE_IN_ALL
gboolean g_ptr_array_remove_fast (GPtrArray *array,
gpointer data);
GLIB_AVAILABLE_IN_ALL
GPtrArray *g_ptr_array_remove_range (GPtrArray *array,
guint index_,
guint length);
GLIB_AVAILABLE_IN_ALL
void g_ptr_array_add (GPtrArray *array,
gpointer data);
GLIB_AVAILABLE_IN_2_62
void g_ptr_array_extend (GPtrArray *array_to_extend,
GPtrArray *array,
GCopyFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_62
void g_ptr_array_extend_and_steal (GPtrArray *array_to_extend,
GPtrArray *array);
GLIB_AVAILABLE_IN_2_40
void g_ptr_array_insert (GPtrArray *array,
gint index_,
gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_ptr_array_sort (GPtrArray *array,
GCompareFunc compare_func);
GLIB_AVAILABLE_IN_ALL
void g_ptr_array_sort_with_data (GPtrArray *array,
GCompareDataFunc compare_func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
void g_ptr_array_foreach (GPtrArray *array,
GFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_54
gboolean g_ptr_array_find (GPtrArray *haystack,
gconstpointer needle,
guint *index_);
GLIB_AVAILABLE_IN_2_54
gboolean g_ptr_array_find_with_equal_func (GPtrArray *haystack,
gconstpointer needle,
GEqualFunc equal_func,
guint *index_);
/* Byte arrays, an array of guint8. Implemented as a GArray,
* but type-safe.
*/
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_new (void);
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_new_take (guint8 *data,
gsize len);
GLIB_AVAILABLE_IN_2_64
guint8* g_byte_array_steal (GByteArray *array,
gsize *len);
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_sized_new (guint reserved_size);
GLIB_AVAILABLE_IN_ALL
guint8* g_byte_array_free (GByteArray *array,
gboolean free_segment);
GLIB_AVAILABLE_IN_ALL
GBytes* g_byte_array_free_to_bytes (GByteArray *array);
GLIB_AVAILABLE_IN_ALL
GByteArray *g_byte_array_ref (GByteArray *array);
GLIB_AVAILABLE_IN_ALL
void g_byte_array_unref (GByteArray *array);
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_append (GByteArray *array,
const guint8 *data,
guint len);
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_prepend (GByteArray *array,
const guint8 *data,
guint len);
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_set_size (GByteArray *array,
guint length);
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_remove_index (GByteArray *array,
guint index_);
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_remove_index_fast (GByteArray *array,
guint index_);
GLIB_AVAILABLE_IN_ALL
GByteArray* g_byte_array_remove_range (GByteArray *array,
guint index_,
guint length);
GLIB_AVAILABLE_IN_ALL
void g_byte_array_sort (GByteArray *array,
GCompareFunc compare_func);
GLIB_AVAILABLE_IN_ALL
void g_byte_array_sort_with_data (GByteArray *array,
GCompareDataFunc compare_func,
gpointer user_data);
G_END_DECLS
#endif /* __G_ARRAY_H__ */
gi18n.h 0000644 00000002217 15021467762 0005657 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997, 2002 Peter Mattis, Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_I18N_H__
#define __G_I18N_H__
#include
#include
#include
#define _(String) gettext (String)
#define Q_(String) g_dpgettext (NULL, String, 0)
#define N_(String) (String)
#define C_(Context,String) g_dpgettext (NULL, Context "\004" String, strlen (Context) + 1)
#define NC_(Context, String) (String)
#endif /* __G_I18N_H__ */
gwin32.h 0000644 00000011073 15021467762 0006042 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_WIN32_H__
#define __G_WIN32_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#ifdef G_PLATFORM_WIN32
G_BEGIN_DECLS
#ifndef MAXPATHLEN
#define MAXPATHLEN 1024
#endif
#ifdef G_OS_WIN32
/*
* To get prototypes for the following POSIXish functions, you have to
* include the indicated non-POSIX headers. The functions are defined
* in OLDNAMES.LIB (MSVC) or -lmoldname-msvc (mingw32). But note that
* for POSIX functions that take or return file names in the system
* codepage, in many cases you would want to use the GLib wrappers in
* gstdio.h and UTF-8 instead.
*
* getcwd: (MSVC), (mingw32)
* getpid:
* access:
* unlink: or
* open, read, write, lseek, close:
* rmdir:
* pipe: (actually, _pipe())
*/
/* For some POSIX functions that are not provided by the MS runtime,
* we provide emulation functions in glib, which are prefixed with
* g_win32_. Or that was the idea at some time, but there is just one
* of those:
*/
GLIB_AVAILABLE_IN_ALL
gint g_win32_ftruncate (gint f,
guint size);
#endif /* G_OS_WIN32 */
/* The MS setlocale uses locale names of the form "English_United
* States.1252" etc. We want the Unixish standard form "en", "zh_TW"
* etc. This function gets the current thread locale from Windows and
* returns it as a string of the above form for use in forming file
* names etc. The returned string should be deallocated with g_free().
*/
GLIB_AVAILABLE_IN_ALL
gchar* g_win32_getlocale (void);
/* Translate a Win32 error code (as returned by GetLastError()) into
* the corresponding message. The returned string should be deallocated
* with g_free().
*/
GLIB_AVAILABLE_IN_ALL
gchar* g_win32_error_message (gint error);
GLIB_DEPRECATED
gchar* g_win32_get_package_installation_directory (const gchar *package,
const gchar *dll_name);
GLIB_DEPRECATED
gchar* g_win32_get_package_installation_subdirectory (const gchar *package,
const gchar *dll_name,
const gchar *subdir);
GLIB_AVAILABLE_IN_ALL
gchar* g_win32_get_package_installation_directory_of_module (gpointer hmodule);
GLIB_DEPRECATED_IN_2_44_FOR(g_win32_check_windows_version)
guint g_win32_get_windows_version (void);
GLIB_AVAILABLE_IN_ALL
gchar* g_win32_locale_filename_from_utf8 (const gchar *utf8filename);
GLIB_AVAILABLE_IN_2_40
gchar ** g_win32_get_command_line (void);
/* As of GLib 2.14 we only support NT-based Windows */
#define G_WIN32_IS_NT_BASED() TRUE
#define G_WIN32_HAVE_WIDECHAR_API() TRUE
/**
* GWin32OSType:
* @G_WIN32_OS_ANY: The running system can be a workstation or a server edition of
* Windows. The type of the running system is therefore not checked.
* @G_WIN32_OS_WORKSTATION: The running system is a workstation edition of Windows,
* such as Windows 7 Professional.
* @G_WIN32_OS_SERVER: The running system is a server edition of Windows, such as
* Windows Server 2008 R2.
*
* Type of Windows edition to check for at run-time.
**/
typedef enum
{
G_WIN32_OS_ANY,
G_WIN32_OS_WORKSTATION,
G_WIN32_OS_SERVER,
} GWin32OSType;
GLIB_AVAILABLE_IN_2_44
gboolean g_win32_check_windows_version (const gint major,
const gint minor,
const gint spver,
const GWin32OSType os_type);
G_END_DECLS
#endif /* G_PLATFORM_WIN32 */
#endif /* __G_WIN32_H__ */
gthread.h 0000644 00000044506 15021467762 0006356 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_THREAD_H__
#define __G_THREAD_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
G_BEGIN_DECLS
#define G_THREAD_ERROR g_thread_error_quark ()
GLIB_AVAILABLE_IN_ALL
GQuark g_thread_error_quark (void);
typedef enum
{
G_THREAD_ERROR_AGAIN /* Resource temporarily unavailable */
} GThreadError;
typedef gpointer (*GThreadFunc) (gpointer data);
typedef struct _GThread GThread;
typedef union _GMutex GMutex;
typedef struct _GRecMutex GRecMutex;
typedef struct _GRWLock GRWLock;
typedef struct _GCond GCond;
typedef struct _GPrivate GPrivate;
typedef struct _GOnce GOnce;
union _GMutex
{
/*< private >*/
gpointer p;
guint i[2];
};
struct _GRWLock
{
/*< private >*/
gpointer p;
guint i[2];
};
struct _GCond
{
/*< private >*/
gpointer p;
guint i[2];
};
struct _GRecMutex
{
/*< private >*/
gpointer p;
guint i[2];
};
#define G_PRIVATE_INIT(notify) { NULL, (notify), { NULL, NULL } }
struct _GPrivate
{
/*< private >*/
gpointer p;
GDestroyNotify notify;
gpointer future[2];
};
typedef enum
{
G_ONCE_STATUS_NOTCALLED,
G_ONCE_STATUS_PROGRESS,
G_ONCE_STATUS_READY
} GOnceStatus;
#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
struct _GOnce
{
volatile GOnceStatus status;
volatile gpointer retval;
};
#define G_LOCK_NAME(name) g__ ## name ## _lock
#define G_LOCK_DEFINE_STATIC(name) static G_LOCK_DEFINE (name)
#define G_LOCK_DEFINE(name) GMutex G_LOCK_NAME (name)
#define G_LOCK_EXTERN(name) extern GMutex G_LOCK_NAME (name)
#ifdef G_DEBUG_LOCKS
# define G_LOCK(name) G_STMT_START{ \
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
"file %s: line %d (%s): locking: %s ", \
__FILE__, __LINE__, G_STRFUNC, \
#name); \
g_mutex_lock (&G_LOCK_NAME (name)); \
}G_STMT_END
# define G_UNLOCK(name) G_STMT_START{ \
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
"file %s: line %d (%s): unlocking: %s ", \
__FILE__, __LINE__, G_STRFUNC, \
#name); \
g_mutex_unlock (&G_LOCK_NAME (name)); \
}G_STMT_END
# define G_TRYLOCK(name) \
(g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
"file %s: line %d (%s): try locking: %s ", \
__FILE__, __LINE__, G_STRFUNC, \
#name), g_mutex_trylock (&G_LOCK_NAME (name)))
#else /* !G_DEBUG_LOCKS */
# define G_LOCK(name) g_mutex_lock (&G_LOCK_NAME (name))
# define G_UNLOCK(name) g_mutex_unlock (&G_LOCK_NAME (name))
# define G_TRYLOCK(name) g_mutex_trylock (&G_LOCK_NAME (name))
#endif /* !G_DEBUG_LOCKS */
GLIB_AVAILABLE_IN_2_32
GThread * g_thread_ref (GThread *thread);
GLIB_AVAILABLE_IN_2_32
void g_thread_unref (GThread *thread);
GLIB_AVAILABLE_IN_2_32
GThread * g_thread_new (const gchar *name,
GThreadFunc func,
gpointer data);
GLIB_AVAILABLE_IN_2_32
GThread * g_thread_try_new (const gchar *name,
GThreadFunc func,
gpointer data,
GError **error);
GLIB_AVAILABLE_IN_ALL
GThread * g_thread_self (void);
GLIB_AVAILABLE_IN_ALL
void g_thread_exit (gpointer retval);
GLIB_AVAILABLE_IN_ALL
gpointer g_thread_join (GThread *thread);
GLIB_AVAILABLE_IN_ALL
void g_thread_yield (void);
GLIB_AVAILABLE_IN_2_32
void g_mutex_init (GMutex *mutex);
GLIB_AVAILABLE_IN_2_32
void g_mutex_clear (GMutex *mutex);
GLIB_AVAILABLE_IN_ALL
void g_mutex_lock (GMutex *mutex);
GLIB_AVAILABLE_IN_ALL
gboolean g_mutex_trylock (GMutex *mutex);
GLIB_AVAILABLE_IN_ALL
void g_mutex_unlock (GMutex *mutex);
GLIB_AVAILABLE_IN_2_32
void g_rw_lock_init (GRWLock *rw_lock);
GLIB_AVAILABLE_IN_2_32
void g_rw_lock_clear (GRWLock *rw_lock);
GLIB_AVAILABLE_IN_2_32
void g_rw_lock_writer_lock (GRWLock *rw_lock);
GLIB_AVAILABLE_IN_2_32
gboolean g_rw_lock_writer_trylock (GRWLock *rw_lock);
GLIB_AVAILABLE_IN_2_32
void g_rw_lock_writer_unlock (GRWLock *rw_lock);
GLIB_AVAILABLE_IN_2_32
void g_rw_lock_reader_lock (GRWLock *rw_lock);
GLIB_AVAILABLE_IN_2_32
gboolean g_rw_lock_reader_trylock (GRWLock *rw_lock);
GLIB_AVAILABLE_IN_2_32
void g_rw_lock_reader_unlock (GRWLock *rw_lock);
GLIB_AVAILABLE_IN_2_32
void g_rec_mutex_init (GRecMutex *rec_mutex);
GLIB_AVAILABLE_IN_2_32
void g_rec_mutex_clear (GRecMutex *rec_mutex);
GLIB_AVAILABLE_IN_2_32
void g_rec_mutex_lock (GRecMutex *rec_mutex);
GLIB_AVAILABLE_IN_2_32
gboolean g_rec_mutex_trylock (GRecMutex *rec_mutex);
GLIB_AVAILABLE_IN_2_32
void g_rec_mutex_unlock (GRecMutex *rec_mutex);
GLIB_AVAILABLE_IN_2_32
void g_cond_init (GCond *cond);
GLIB_AVAILABLE_IN_2_32
void g_cond_clear (GCond *cond);
GLIB_AVAILABLE_IN_ALL
void g_cond_wait (GCond *cond,
GMutex *mutex);
GLIB_AVAILABLE_IN_ALL
void g_cond_signal (GCond *cond);
GLIB_AVAILABLE_IN_ALL
void g_cond_broadcast (GCond *cond);
GLIB_AVAILABLE_IN_2_32
gboolean g_cond_wait_until (GCond *cond,
GMutex *mutex,
gint64 end_time);
GLIB_AVAILABLE_IN_ALL
gpointer g_private_get (GPrivate *key);
GLIB_AVAILABLE_IN_ALL
void g_private_set (GPrivate *key,
gpointer value);
GLIB_AVAILABLE_IN_2_32
void g_private_replace (GPrivate *key,
gpointer value);
GLIB_AVAILABLE_IN_ALL
gpointer g_once_impl (GOnce *once,
GThreadFunc func,
gpointer arg);
GLIB_AVAILABLE_IN_ALL
gboolean g_once_init_enter (volatile void *location);
GLIB_AVAILABLE_IN_ALL
void g_once_init_leave (volatile void *location,
gsize result);
/* Use C11-style atomic extensions to check the fast path for status=ready. If
* they are not available, fall back to using a mutex and condition variable in
* g_once_impl().
*
* On the C11-style codepath, only the load of once->status needs to be atomic,
* as the writes to it and once->retval in g_once_impl() are related by a
* happens-before relation. Release-acquire semantics are defined such that any
* atomic/non-atomic write which happens-before a store/release is guaranteed to
* be seen by the load/acquire of the same atomic variable. */
#if defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) && defined(__ATOMIC_SEQ_CST)
# define g_once(once, func, arg) \
((__atomic_load_n (&(once)->status, __ATOMIC_ACQUIRE) == G_ONCE_STATUS_READY) ? \
(once)->retval : \
g_once_impl ((once), (func), (arg)))
#else
# define g_once(once, func, arg) g_once_impl ((once), (func), (arg))
#endif
#ifdef __GNUC__
# define g_once_init_enter(location) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(location) : NULL); \
(!g_atomic_pointer_get (location) && \
g_once_init_enter (location)); \
}))
# define g_once_init_leave(location, result) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer)); \
0 ? (void) (*(location) = (result)) : (void) 0; \
g_once_init_leave ((location), (gsize) (result)); \
}))
#else
# define g_once_init_enter(location) \
(g_once_init_enter((location)))
# define g_once_init_leave(location, result) \
(g_once_init_leave((location), (gsize) (result)))
#endif
GLIB_AVAILABLE_IN_2_36
guint g_get_num_processors (void);
/**
* GMutexLocker:
*
* Opaque type. See g_mutex_locker_new() for details.
* Since: 2.44
*/
typedef void GMutexLocker;
/**
* g_mutex_locker_new:
* @mutex: a mutex to lock
*
* Lock @mutex and return a new #GMutexLocker. Unlock with
* g_mutex_locker_free(). Using g_mutex_unlock() on @mutex
* while a #GMutexLocker exists can lead to undefined behaviour.
*
* No allocation is performed, it is equivalent to a g_mutex_lock() call.
*
* This is intended to be used with g_autoptr(). Note that g_autoptr()
* is only available when using GCC or clang, so the following example
* will only work with those compilers:
* |[
* typedef struct
* {
* ...
* GMutex mutex;
* ...
* } MyObject;
*
* static void
* my_object_do_stuff (MyObject *self)
* {
* g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&self->mutex);
*
* // Code with mutex locked here
*
* if (cond)
* // No need to unlock
* return;
*
* // Optionally early unlock
* g_clear_pointer (&locker, g_mutex_locker_free);
*
* // Code with mutex unlocked here
* }
* ]|
*
* Returns: a #GMutexLocker
* Since: 2.44
*/
GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
static inline GMutexLocker *
g_mutex_locker_new (GMutex *mutex)
{
g_mutex_lock (mutex);
return (GMutexLocker *) mutex;
}
/**
* g_mutex_locker_free:
* @locker: a GMutexLocker
*
* Unlock @locker's mutex. See g_mutex_locker_new() for details.
*
* No memory is freed, it is equivalent to a g_mutex_unlock() call.
*
* Since: 2.44
*/
GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
static inline void
g_mutex_locker_free (GMutexLocker *locker)
{
g_mutex_unlock ((GMutex *) locker);
}
/**
* GRecMutexLocker:
*
* Opaque type. See g_rec_mutex_locker_new() for details.
* Since: 2.60
*/
typedef void GRecMutexLocker;
/**
* g_rec_mutex_locker_new:
* @rec_mutex: a recursive mutex to lock
*
* Lock @rec_mutex and return a new #GRecMutexLocker. Unlock with
* g_rec_mutex_locker_free(). Using g_rec_mutex_unlock() on @rec_mutex
* while a #GRecMutexLocker exists can lead to undefined behaviour.
*
* No allocation is performed, it is equivalent to a g_rec_mutex_lock() call.
*
* This is intended to be used with g_autoptr(). Note that g_autoptr()
* is only available when using GCC or clang, so the following example
* will only work with those compilers:
* |[
* typedef struct
* {
* ...
* GRecMutex rec_mutex;
* ...
* } MyObject;
*
* static void
* my_object_do_stuff (MyObject *self)
* {
* g_autoptr(GRecMutexLocker) locker = g_rec_mutex_locker_new (&self->rec_mutex);
*
* // Code with rec_mutex locked here
*
* if (cond)
* // No need to unlock
* return;
*
* // Optionally early unlock
* g_clear_pointer (&locker, g_rec_mutex_locker_free);
*
* // Code with rec_mutex unlocked here
* }
* ]|
*
* Returns: a #GRecMutexLocker
* Since: 2.60
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_STATIC_INLINE_IN_2_60
static inline GRecMutexLocker *
g_rec_mutex_locker_new (GRecMutex *rec_mutex)
{
g_rec_mutex_lock (rec_mutex);
return (GRecMutexLocker *) rec_mutex;
}
G_GNUC_END_IGNORE_DEPRECATIONS
/**
* g_rec_mutex_locker_free:
* @locker: a GRecMutexLocker
*
* Unlock @locker's recursive mutex. See g_rec_mutex_locker_new() for details.
*
* No memory is freed, it is equivalent to a g_rec_mutex_unlock() call.
*
* Since: 2.60
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_STATIC_INLINE_IN_2_60
static inline void
g_rec_mutex_locker_free (GRecMutexLocker *locker)
{
g_rec_mutex_unlock ((GRecMutex *) locker);
}
G_GNUC_END_IGNORE_DEPRECATIONS
/**
* GRWLockWriterLocker:
*
* Opaque type. See g_rw_lock_writer_locker_new() for details.
* Since: 2.62
*/
typedef void GRWLockWriterLocker;
/**
* g_rw_lock_writer_locker_new:
* @rw_lock: a #GRWLock
*
* Obtain a write lock on @rw_lock and return a new #GRWLockWriterLocker.
* Unlock with g_rw_lock_writer_locker_free(). Using g_rw_lock_writer_unlock()
* on @rw_lock while a #GRWLockWriterLocker exists can lead to undefined
* behaviour.
*
* No allocation is performed, it is equivalent to a g_rw_lock_writer_lock() call.
*
* This is intended to be used with g_autoptr(). Note that g_autoptr()
* is only available when using GCC or clang, so the following example
* will only work with those compilers:
* |[
* typedef struct
* {
* ...
* GRWLock rw_lock;
* GPtrArray *array;
* ...
* } MyObject;
*
* static gchar *
* my_object_get_data (MyObject *self, guint index)
* {
* g_autoptr(GRWLockReaderLocker) locker = g_rw_lock_reader_locker_new (&self->rw_lock);
*
* // Code with a read lock obtained on rw_lock here
*
* if (self->array == NULL)
* // No need to unlock
* return NULL;
*
* if (index < self->array->len)
* // No need to unlock
* return g_ptr_array_index (self->array, index);
*
* // Optionally early unlock
* g_clear_pointer (&locker, g_rw_lock_reader_locker_free);
*
* // Code with rw_lock unlocked here
* return NULL;
* }
*
* static void
* my_object_set_data (MyObject *self, guint index, gpointer data)
* {
* g_autoptr(GRWLockWriterLocker) locker = g_rw_lock_writer_locker_new (&self->rw_lock);
*
* // Code with a write lock obtained on rw_lock here
*
* if (self->array == NULL)
* self->array = g_ptr_array_new ();
*
* if (cond)
* // No need to unlock
* return;
*
* if (index >= self->array->len)
* g_ptr_array_set_size (self->array, index+1);
* g_ptr_array_index (self->array, index) = data;
*
* // Optionally early unlock
* g_clear_pointer (&locker, g_rw_lock_writer_locker_free);
*
* // Code with rw_lock unlocked here
* }
* ]|
*
* Returns: a #GRWLockWriterLocker
* Since: 2.62
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
static inline GRWLockWriterLocker *
g_rw_lock_writer_locker_new (GRWLock *rw_lock)
{
g_rw_lock_writer_lock (rw_lock);
return (GRWLockWriterLocker *) rw_lock;
}
G_GNUC_END_IGNORE_DEPRECATIONS
/**
* g_rw_lock_writer_locker_free:
* @locker: a GRWLockWriterLocker
*
* Release a write lock on @locker's read-write lock. See
* g_rw_lock_writer_locker_new() for details.
*
* No memory is freed, it is equivalent to a g_rw_lock_writer_unlock() call.
*
* Since: 2.62
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
static inline void
g_rw_lock_writer_locker_free (GRWLockWriterLocker *locker)
{
g_rw_lock_writer_unlock ((GRWLock *) locker);
}
G_GNUC_END_IGNORE_DEPRECATIONS
/**
* GRWLockReaderLocker:
*
* Opaque type. See g_rw_lock_reader_locker_new() for details.
* Since: 2.62
*/
typedef void GRWLockReaderLocker;
/**
* g_rw_lock_reader_locker_new:
* @rw_lock: a #GRWLock
*
* Obtain a read lock on @rw_lock and return a new #GRWLockReaderLocker.
* Unlock with g_rw_lock_reader_locker_free(). Using g_rw_lock_reader_unlock()
* on @rw_lock while a #GRWLockReaderLocker exists can lead to undefined
* behaviour.
*
* No allocation is performed, it is equivalent to a g_rw_lock_reader_lock() call.
*
* This is intended to be used with g_autoptr(). For a code sample, see
* g_rw_lock_writer_locker_new().
*
* Returns: a #GRWLockReaderLocker
* Since: 2.62
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
static inline GRWLockReaderLocker *
g_rw_lock_reader_locker_new (GRWLock *rw_lock)
{
g_rw_lock_reader_lock (rw_lock);
return (GRWLockReaderLocker *) rw_lock;
}
G_GNUC_END_IGNORE_DEPRECATIONS
/**
* g_rw_lock_reader_locker_free:
* @locker: a GRWLockReaderLocker
*
* Release a read lock on @locker's read-write lock. See
* g_rw_lock_reader_locker_new() for details.
*
* No memory is freed, it is equivalent to a g_rw_lock_reader_unlock() call.
*
* Since: 2.62
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
static inline void
g_rw_lock_reader_locker_free (GRWLockReaderLocker *locker)
{
g_rw_lock_reader_unlock ((GRWLock *) locker);
}
G_GNUC_END_IGNORE_DEPRECATIONS
G_END_DECLS
#endif /* __G_THREAD_H__ */
gasyncqueue.h 0000644 00000013136 15021467762 0007264 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_ASYNCQUEUE_H__
#define __G_ASYNCQUEUE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GAsyncQueue GAsyncQueue;
GLIB_AVAILABLE_IN_ALL
GAsyncQueue *g_async_queue_new (void);
GLIB_AVAILABLE_IN_ALL
GAsyncQueue *g_async_queue_new_full (GDestroyNotify item_free_func);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_lock (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_unlock (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
GAsyncQueue *g_async_queue_ref (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_unref (GAsyncQueue *queue);
GLIB_DEPRECATED_FOR(g_async_queue_ref)
void g_async_queue_ref_unlocked (GAsyncQueue *queue);
GLIB_DEPRECATED_FOR(g_async_queue_unref)
void g_async_queue_unref_and_unlock (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_push (GAsyncQueue *queue,
gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_push_unlocked (GAsyncQueue *queue,
gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_push_sorted (GAsyncQueue *queue,
gpointer data,
GCompareDataFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_push_sorted_unlocked (GAsyncQueue *queue,
gpointer data,
GCompareDataFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
gpointer g_async_queue_pop (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
gpointer g_async_queue_pop_unlocked (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
gpointer g_async_queue_try_pop (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
gpointer g_async_queue_try_pop_unlocked (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
gpointer g_async_queue_timeout_pop (GAsyncQueue *queue,
guint64 timeout);
GLIB_AVAILABLE_IN_ALL
gpointer g_async_queue_timeout_pop_unlocked (GAsyncQueue *queue,
guint64 timeout);
GLIB_AVAILABLE_IN_ALL
gint g_async_queue_length (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
gint g_async_queue_length_unlocked (GAsyncQueue *queue);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_sort (GAsyncQueue *queue,
GCompareDataFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
void g_async_queue_sort_unlocked (GAsyncQueue *queue,
GCompareDataFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_46
gboolean g_async_queue_remove (GAsyncQueue *queue,
gpointer item);
GLIB_AVAILABLE_IN_2_46
gboolean g_async_queue_remove_unlocked (GAsyncQueue *queue,
gpointer item);
GLIB_AVAILABLE_IN_2_46
void g_async_queue_push_front (GAsyncQueue *queue,
gpointer item);
GLIB_AVAILABLE_IN_2_46
void g_async_queue_push_front_unlocked (GAsyncQueue *queue,
gpointer item);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop)
gpointer g_async_queue_timed_pop (GAsyncQueue *queue,
GTimeVal *end_time);
GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop_unlocked)
gpointer g_async_queue_timed_pop_unlocked (GAsyncQueue *queue,
GTimeVal *end_time);
G_GNUC_END_IGNORE_DEPRECATIONS
G_END_DECLS
#endif /* __G_ASYNCQUEUE_H__ */
gerror.h 0000644 00000025604 15021467762 0006236 0 ustar 00 /* gerror.h - Error reporting system
*
* Copyright 2000 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_ERROR_H__
#define __G_ERROR_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
/**
* GError:
* @domain: error domain, e.g. #G_FILE_ERROR
* @code: error code, e.g. %G_FILE_ERROR_NOENT
* @message: human-readable informative error message
*
* The `GError` structure contains information about
* an error that has occurred.
*/
typedef struct _GError GError;
struct _GError
{
GQuark domain;
gint code;
gchar *message;
};
/**
* G_DEFINE_EXTENDED_ERROR:
* @ErrorType: name to return a #GQuark for
* @error_type: prefix for the function name
*
* A convenience macro which defines two functions. First, returning
* the #GQuark for the extended error type @ErrorType; it is called
* `error_type_quark()`. Second, returning the private data from a
* passed #GError; it is called `error_type_get_private()`.
*
* For this macro to work, a type named `ErrorTypePrivate` should be
* defined, `error_type_private_init()`, `error_type_private_copy()`
* and `error_type_private_clear()` functions need to be either
* declared or defined. The functions should be similar to
* #GErrorInitFunc, #GErrorCopyFunc and #GErrorClearFunc,
* respectively, but they should receive the private data type instead
* of #GError.
*
* See [Extended #GError Domains][gerror-extended-domains] for an example.
*
* Since: 2.68
*/
#define G_DEFINE_EXTENDED_ERROR(ErrorType, error_type) \
static inline ErrorType ## Private * \
error_type ## _get_private (const GError *error) \
{ \
/* Copied from gtype.c (STRUCT_ALIGNMENT and ALIGN_STRUCT macros). */ \
const gsize sa = 2 * sizeof (gsize); \
const gsize as = (sizeof (ErrorType ## Private) + (sa - 1)) & -sa; \
g_return_val_if_fail (error != NULL, NULL); \
g_return_val_if_fail (error->domain == error_type ## _quark (), NULL); \
return (ErrorType ## Private *) (((guint8 *)error) - as); \
} \
\
static void \
g_error_with_ ## error_type ## _private_init (GError *error) \
{ \
ErrorType ## Private *priv = error_type ## _get_private (error); \
error_type ## _private_init (priv); \
} \
\
static void \
g_error_with_ ## error_type ## _private_copy (const GError *src_error, \
GError *dest_error) \
{ \
const ErrorType ## Private *src_priv = error_type ## _get_private (src_error); \
ErrorType ## Private *dest_priv = error_type ## _get_private (dest_error); \
error_type ## _private_copy (src_priv, dest_priv); \
} \
\
static void \
g_error_with_ ## error_type ## _private_clear (GError *error) \
{ \
ErrorType ## Private *priv = error_type ## _get_private (error); \
error_type ## _private_clear (priv); \
} \
\
GQuark \
error_type ## _quark (void) \
{ \
static GQuark q; \
static gsize initialized = 0; \
\
if (g_once_init_enter (&initialized)) \
{ \
q = g_error_domain_register_static (#ErrorType, \
sizeof (ErrorType ## Private), \
g_error_with_ ## error_type ## _private_init, \
g_error_with_ ## error_type ## _private_copy, \
g_error_with_ ## error_type ## _private_clear); \
g_once_init_leave (&initialized, 1); \
} \
\
return q; \
}
/**
* GErrorInitFunc:
* @error: extended error
*
* Specifies the type of function which is called just after an
* extended error instance is created and its fields filled. It should
* only initialize the fields in the private data, which can be
* received with the generated `*_get_private()` function.
*
* Normally, it is better to use G_DEFINE_EXTENDED_ERROR(), as it
* already takes care of getting the private data from @error.
*
* Since: 2.68
*/
typedef void (*GErrorInitFunc) (GError *error);
/**
* GErrorCopyFunc:
* @src_error: source extended error
* @dest_error: destination extended error
*
* Specifies the type of function which is called when an extended
* error instance is copied. It is passed the pointer to the
* destination error and source error, and should copy only the fields
* of the private data from @src_error to @dest_error.
*
* Normally, it is better to use G_DEFINE_EXTENDED_ERROR(), as it
* already takes care of getting the private data from @src_error and
* @dest_error.
*
* Since: 2.68
*/
typedef void (*GErrorCopyFunc) (const GError *src_error, GError *dest_error);
/**
* GErrorClearFunc:
* @error: extended error to clear
*
* Specifies the type of function which is called when an extended
* error instance is freed. It is passed the error pointer about to be
* freed, and should free the error's private data fields.
*
* Normally, it is better to use G_DEFINE_EXTENDED_ERROR(), as it
* already takes care of getting the private data from @error.
*
* Since: 2.68
*/
typedef void (*GErrorClearFunc) (GError *error);
GLIB_AVAILABLE_IN_2_68
GQuark g_error_domain_register_static (const char *error_type_name,
gsize error_type_private_size,
GErrorInitFunc error_type_init,
GErrorCopyFunc error_type_copy,
GErrorClearFunc error_type_clear);
GLIB_AVAILABLE_IN_2_68
GQuark g_error_domain_register (const char *error_type_name,
gsize error_type_private_size,
GErrorInitFunc error_type_init,
GErrorCopyFunc error_type_copy,
GErrorClearFunc error_type_clear);
GLIB_AVAILABLE_IN_ALL
GError* g_error_new (GQuark domain,
gint code,
const gchar *format,
...) G_GNUC_PRINTF (3, 4);
GLIB_AVAILABLE_IN_ALL
GError* g_error_new_literal (GQuark domain,
gint code,
const gchar *message);
GLIB_AVAILABLE_IN_ALL
GError* g_error_new_valist (GQuark domain,
gint code,
const gchar *format,
va_list args) G_GNUC_PRINTF(3, 0);
GLIB_AVAILABLE_IN_ALL
void g_error_free (GError *error);
GLIB_AVAILABLE_IN_ALL
GError* g_error_copy (const GError *error);
GLIB_AVAILABLE_IN_ALL
gboolean g_error_matches (const GError *error,
GQuark domain,
gint code);
/* if (err) *err = g_error_new(domain, code, format, ...), also has
* some sanity checks.
*/
GLIB_AVAILABLE_IN_ALL
void g_set_error (GError **err,
GQuark domain,
gint code,
const gchar *format,
...) G_GNUC_PRINTF (4, 5);
GLIB_AVAILABLE_IN_ALL
void g_set_error_literal (GError **err,
GQuark domain,
gint code,
const gchar *message);
/* if (dest) *dest = src; also has some sanity checks.
*/
GLIB_AVAILABLE_IN_ALL
void g_propagate_error (GError **dest,
GError *src);
/* if (err && *err) { g_error_free(*err); *err = NULL; } */
GLIB_AVAILABLE_IN_ALL
void g_clear_error (GError **err);
/* if (err) prefix the formatted string to the ->message */
GLIB_AVAILABLE_IN_ALL
void g_prefix_error (GError **err,
const gchar *format,
...) G_GNUC_PRINTF (2, 3);
/* g_propagate_error then g_error_prefix on dest */
GLIB_AVAILABLE_IN_ALL
void g_propagate_prefixed_error (GError **dest,
GError *src,
const gchar *format,
...) G_GNUC_PRINTF (3, 4);
G_END_DECLS
#endif /* __G_ERROR_H__ */
guri.h 0000644 00000040076 15021467762 0005704 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright © 2020 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, see
* .
*/
#pragma once
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
typedef struct _GUri GUri;
GLIB_AVAILABLE_IN_2_66
GUri * g_uri_ref (GUri *uri);
GLIB_AVAILABLE_IN_2_66
void g_uri_unref (GUri *uri);
/**
* GUriFlags:
* @G_URI_FLAGS_NONE: No flags set.
* @G_URI_FLAGS_PARSE_RELAXED: Parse the URI more relaxedly than the
* [RFC 3986](https://tools.ietf.org/html/rfc3986) grammar specifies,
* fixing up or ignoring common mistakes in URIs coming from external
* sources. This is also needed for some obscure URI schemes where `;`
* separates the host from the path. Don’t use this flag unless you need to.
* @G_URI_FLAGS_HAS_PASSWORD: The userinfo field may contain a password,
* which will be separated from the username by `:`.
* @G_URI_FLAGS_HAS_AUTH_PARAMS: The userinfo may contain additional
* authentication-related parameters, which will be separated from
* the username and/or password by `;`.
* @G_URI_FLAGS_NON_DNS: The host component should not be assumed to be a
* DNS hostname or IP address (for example, for `smb` URIs with NetBIOS
* hostnames).
* @G_URI_FLAGS_ENCODED: When parsing a URI, this indicates that `%`-encoded
* characters in the userinfo, path, query, and fragment fields
* should not be decoded. (And likewise the host field if
* %G_URI_FLAGS_NON_DNS is also set.) When building a URI, it indicates
* that you have already `%`-encoded the components, and so #GUri
* should not do any encoding itself.
* @G_URI_FLAGS_ENCODED_QUERY: Same as %G_URI_FLAGS_ENCODED, for the query
* field only.
* @G_URI_FLAGS_ENCODED_PATH: Same as %G_URI_FLAGS_ENCODED, for the path only.
* @G_URI_FLAGS_ENCODED_FRAGMENT: Same as %G_URI_FLAGS_ENCODED, for the
* fragment only.
* @G_URI_FLAGS_SCHEME_NORMALIZE: A scheme-based normalization will be applied.
* For example, when parsing an HTTP URI changing omitted path to `/` and
* omitted port to `80`; and when building a URI, changing empty path to `/`
* and default port `80`). This only supports a subset of known schemes. (Since: 2.68)
*
* Flags that describe a URI.
*
* When parsing a URI, if you need to choose different flags based on
* the type of URI, you can use g_uri_peek_scheme() on the URI string
* to check the scheme first, and use that to decide what flags to
* parse it with.
*
* Since: 2.66
*/
GLIB_AVAILABLE_TYPE_IN_2_66
typedef enum {
G_URI_FLAGS_NONE = 0,
G_URI_FLAGS_PARSE_RELAXED = 1 << 0,
G_URI_FLAGS_HAS_PASSWORD = 1 << 1,
G_URI_FLAGS_HAS_AUTH_PARAMS = 1 << 2,
G_URI_FLAGS_ENCODED = 1 << 3,
G_URI_FLAGS_NON_DNS = 1 << 4,
G_URI_FLAGS_ENCODED_QUERY = 1 << 5,
G_URI_FLAGS_ENCODED_PATH = 1 << 6,
G_URI_FLAGS_ENCODED_FRAGMENT = 1 << 7,
G_URI_FLAGS_SCHEME_NORMALIZE GLIB_AVAILABLE_ENUMERATOR_IN_2_68 = 1 << 8,
} GUriFlags;
GLIB_AVAILABLE_IN_2_66
gboolean g_uri_split (const gchar *uri_ref,
GUriFlags flags,
gchar **scheme,
gchar **userinfo,
gchar **host,
gint *port,
gchar **path,
gchar **query,
gchar **fragment,
GError **error);
GLIB_AVAILABLE_IN_2_66
gboolean g_uri_split_with_user (const gchar *uri_ref,
GUriFlags flags,
gchar **scheme,
gchar **user,
gchar **password,
gchar **auth_params,
gchar **host,
gint *port,
gchar **path,
gchar **query,
gchar **fragment,
GError **error);
GLIB_AVAILABLE_IN_2_66
gboolean g_uri_split_network (const gchar *uri_string,
GUriFlags flags,
gchar **scheme,
gchar **host,
gint *port,
GError **error);
GLIB_AVAILABLE_IN_2_66
gboolean g_uri_is_valid (const gchar *uri_string,
GUriFlags flags,
GError **error);
GLIB_AVAILABLE_IN_2_66
gchar * g_uri_join (GUriFlags flags,
const gchar *scheme,
const gchar *userinfo,
const gchar *host,
gint port,
const gchar *path,
const gchar *query,
const gchar *fragment);
GLIB_AVAILABLE_IN_2_66
gchar * g_uri_join_with_user (GUriFlags flags,
const gchar *scheme,
const gchar *user,
const gchar *password,
const gchar *auth_params,
const gchar *host,
gint port,
const gchar *path,
const gchar *query,
const gchar *fragment);
GLIB_AVAILABLE_IN_2_66
GUri * g_uri_parse (const gchar *uri_string,
GUriFlags flags,
GError **error);
GLIB_AVAILABLE_IN_2_66
GUri * g_uri_parse_relative (GUri *base_uri,
const gchar *uri_ref,
GUriFlags flags,
GError **error);
GLIB_AVAILABLE_IN_2_66
gchar * g_uri_resolve_relative (const gchar *base_uri_string,
const gchar *uri_ref,
GUriFlags flags,
GError **error);
GLIB_AVAILABLE_IN_2_66
GUri * g_uri_build (GUriFlags flags,
const gchar *scheme,
const gchar *userinfo,
const gchar *host,
gint port,
const gchar *path,
const gchar *query,
const gchar *fragment);
GLIB_AVAILABLE_IN_2_66
GUri * g_uri_build_with_user (GUriFlags flags,
const gchar *scheme,
const gchar *user,
const gchar *password,
const gchar *auth_params,
const gchar *host,
gint port,
const gchar *path,
const gchar *query,
const gchar *fragment);
/**
* GUriHideFlags:
* @G_URI_HIDE_NONE: No flags set.
* @G_URI_HIDE_USERINFO: Hide the userinfo.
* @G_URI_HIDE_PASSWORD: Hide the password.
* @G_URI_HIDE_AUTH_PARAMS: Hide the auth_params.
* @G_URI_HIDE_QUERY: Hide the query.
* @G_URI_HIDE_FRAGMENT: Hide the fragment.
*
* Flags describing what parts of the URI to hide in
* g_uri_to_string_partial(). Note that %G_URI_HIDE_PASSWORD and
* %G_URI_HIDE_AUTH_PARAMS will only work if the #GUri was parsed with
* the corresponding flags.
*
* Since: 2.66
*/
GLIB_AVAILABLE_TYPE_IN_2_66
typedef enum {
G_URI_HIDE_NONE = 0,
G_URI_HIDE_USERINFO = 1 << 0,
G_URI_HIDE_PASSWORD = 1 << 1,
G_URI_HIDE_AUTH_PARAMS = 1 << 2,
G_URI_HIDE_QUERY = 1 << 3,
G_URI_HIDE_FRAGMENT = 1 << 4,
} GUriHideFlags;
GLIB_AVAILABLE_IN_2_66
char * g_uri_to_string (GUri *uri);
GLIB_AVAILABLE_IN_2_66
char * g_uri_to_string_partial (GUri *uri,
GUriHideFlags flags);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_scheme (GUri *uri);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_userinfo (GUri *uri);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_user (GUri *uri);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_password (GUri *uri);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_auth_params (GUri *uri);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_host (GUri *uri);
GLIB_AVAILABLE_IN_2_66
gint g_uri_get_port (GUri *uri);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_path (GUri *uri);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_query (GUri *uri);
GLIB_AVAILABLE_IN_2_66
const gchar *g_uri_get_fragment (GUri *uri);
GLIB_AVAILABLE_IN_2_66
GUriFlags g_uri_get_flags (GUri *uri);
/**
* GUriParamsFlags:
* @G_URI_PARAMS_NONE: No flags set.
* @G_URI_PARAMS_CASE_INSENSITIVE: Parameter names are case insensitive.
* @G_URI_PARAMS_WWW_FORM: Replace `+` with space character. Only useful for
* URLs on the web, using the `https` or `http` schemas.
* @G_URI_PARAMS_PARSE_RELAXED: See %G_URI_FLAGS_PARSE_RELAXED.
*
* Flags modifying the way parameters are handled by g_uri_parse_params() and
* #GUriParamsIter.
*
* Since: 2.66
*/
GLIB_AVAILABLE_TYPE_IN_2_66
typedef enum {
G_URI_PARAMS_NONE = 0,
G_URI_PARAMS_CASE_INSENSITIVE = 1 << 0,
G_URI_PARAMS_WWW_FORM = 1 << 1,
G_URI_PARAMS_PARSE_RELAXED = 1 << 2,
} GUriParamsFlags;
GLIB_AVAILABLE_IN_2_66
GHashTable *g_uri_parse_params (const gchar *params,
gssize length,
const gchar *separators,
GUriParamsFlags flags,
GError **error);
typedef struct _GUriParamsIter GUriParamsIter;
struct _GUriParamsIter
{
/*< private >*/
gint dummy0;
gpointer dummy1;
gpointer dummy2;
guint8 dummy3[256];
};
GLIB_AVAILABLE_IN_2_66
void g_uri_params_iter_init (GUriParamsIter *iter,
const gchar *params,
gssize length,
const gchar *separators,
GUriParamsFlags flags);
GLIB_AVAILABLE_IN_2_66
gboolean g_uri_params_iter_next (GUriParamsIter *iter,
gchar **attribute,
gchar **value,
GError **error);
/**
* G_URI_ERROR:
*
* Error domain for URI methods. Errors in this domain will be from
* the #GUriError enumeration. See #GError for information on error
* domains.
*
* Since: 2.66
*/
#define G_URI_ERROR (g_uri_error_quark ()) GLIB_AVAILABLE_MACRO_IN_2_66
GLIB_AVAILABLE_IN_2_66
GQuark g_uri_error_quark (void);
/**
* GUriError:
* @G_URI_ERROR_FAILED: Generic error if no more specific error is available.
* See the error message for details.
* @G_URI_ERROR_BAD_SCHEME: The scheme of a URI could not be parsed.
* @G_URI_ERROR_BAD_USER: The user/userinfo of a URI could not be parsed.
* @G_URI_ERROR_BAD_PASSWORD: The password of a URI could not be parsed.
* @G_URI_ERROR_BAD_AUTH_PARAMS: The authentication parameters of a URI could not be parsed.
* @G_URI_ERROR_BAD_HOST: The host of a URI could not be parsed.
* @G_URI_ERROR_BAD_PORT: The port of a URI could not be parsed.
* @G_URI_ERROR_BAD_PATH: The path of a URI could not be parsed.
* @G_URI_ERROR_BAD_QUERY: The query of a URI could not be parsed.
* @G_URI_ERROR_BAD_FRAGMENT: The fragment of a URI could not be parsed.
*
* Error codes returned by #GUri methods.
*
* Since: 2.66
*/
typedef enum {
G_URI_ERROR_FAILED,
G_URI_ERROR_BAD_SCHEME,
G_URI_ERROR_BAD_USER,
G_URI_ERROR_BAD_PASSWORD,
G_URI_ERROR_BAD_AUTH_PARAMS,
G_URI_ERROR_BAD_HOST,
G_URI_ERROR_BAD_PORT,
G_URI_ERROR_BAD_PATH,
G_URI_ERROR_BAD_QUERY,
G_URI_ERROR_BAD_FRAGMENT,
} GUriError;
/**
* G_URI_RESERVED_CHARS_GENERIC_DELIMITERS:
*
* Generic delimiters characters as defined in
* [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `:/?#[]@`.
*
* Since: 2.16
**/
#define G_URI_RESERVED_CHARS_GENERIC_DELIMITERS ":/?#[]@"
/**
* G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS:
*
* Subcomponent delimiter characters as defined in
* [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `!$&'()*+,;=`.
*
* Since: 2.16
**/
#define G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS "!$&'()*+,;="
/**
* G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT:
*
* Allowed characters in path elements. Includes `!$&'()*+,;=:@`.
*
* Since: 2.16
**/
#define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":@"
/**
* G_URI_RESERVED_CHARS_ALLOWED_IN_PATH:
*
* Allowed characters in a path. Includes `!$&'()*+,;=:@/`.
*
* Since: 2.16
**/
#define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/"
/**
* G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO:
*
* Allowed characters in userinfo as defined in
* [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `!$&'()*+,;=:`.
*
* Since: 2.16
**/
#define G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":"
GLIB_AVAILABLE_IN_ALL
char * g_uri_unescape_string (const char *escaped_string,
const char *illegal_characters);
GLIB_AVAILABLE_IN_ALL
char * g_uri_unescape_segment (const char *escaped_string,
const char *escaped_string_end,
const char *illegal_characters);
GLIB_AVAILABLE_IN_ALL
char * g_uri_parse_scheme (const char *uri);
GLIB_AVAILABLE_IN_2_66
const char *g_uri_peek_scheme (const char *uri);
GLIB_AVAILABLE_IN_ALL
char * g_uri_escape_string (const char *unescaped,
const char *reserved_chars_allowed,
gboolean allow_utf8);
GLIB_AVAILABLE_IN_2_66
GBytes * g_uri_unescape_bytes (const char *escaped_string,
gssize length,
const char *illegal_characters,
GError **error);
GLIB_AVAILABLE_IN_2_66
char * g_uri_escape_bytes (const guint8 *unescaped,
gsize length,
const char *reserved_chars_allowed);
G_GNUC_END_IGNORE_DEPRECATIONS
G_END_DECLS
gmessages.h 0000644 00000065071 15021467762 0006716 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_MESSAGES_H__
#define __G_MESSAGES_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
#include
#include
G_BEGIN_DECLS
/* calculate a string size, guaranteed to fit format + args.
*/
GLIB_AVAILABLE_IN_ALL
gsize g_printf_string_upper_bound (const gchar* format,
va_list args) G_GNUC_PRINTF(1, 0);
/* Log level shift offset for user defined
* log levels (0-7 are used by GLib).
*/
#define G_LOG_LEVEL_USER_SHIFT (8)
/* Glib log levels and flags.
*/
typedef enum
{
/* log flags */
G_LOG_FLAG_RECURSION = 1 << 0,
G_LOG_FLAG_FATAL = 1 << 1,
/* GLib log levels */
G_LOG_LEVEL_ERROR = 1 << 2, /* always fatal */
G_LOG_LEVEL_CRITICAL = 1 << 3,
G_LOG_LEVEL_WARNING = 1 << 4,
G_LOG_LEVEL_MESSAGE = 1 << 5,
G_LOG_LEVEL_INFO = 1 << 6,
G_LOG_LEVEL_DEBUG = 1 << 7,
G_LOG_LEVEL_MASK = ~(G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL)
} GLogLevelFlags;
/* GLib log levels that are considered fatal by default */
#define G_LOG_FATAL_MASK (G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR)
typedef void (*GLogFunc) (const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *message,
gpointer user_data);
/* Logging mechanism
*/
GLIB_AVAILABLE_IN_ALL
guint g_log_set_handler (const gchar *log_domain,
GLogLevelFlags log_levels,
GLogFunc log_func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_46
guint g_log_set_handler_full (const gchar *log_domain,
GLogLevelFlags log_levels,
GLogFunc log_func,
gpointer user_data,
GDestroyNotify destroy);
GLIB_AVAILABLE_IN_ALL
void g_log_remove_handler (const gchar *log_domain,
guint handler_id);
GLIB_AVAILABLE_IN_ALL
void g_log_default_handler (const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *message,
gpointer unused_data);
GLIB_AVAILABLE_IN_ALL
GLogFunc g_log_set_default_handler (GLogFunc log_func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
void g_log (const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *format,
...) G_GNUC_PRINTF (3, 4);
GLIB_AVAILABLE_IN_ALL
void g_logv (const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *format,
va_list args) G_GNUC_PRINTF(3, 0);
GLIB_AVAILABLE_IN_ALL
GLogLevelFlags g_log_set_fatal_mask (const gchar *log_domain,
GLogLevelFlags fatal_mask);
GLIB_AVAILABLE_IN_ALL
GLogLevelFlags g_log_set_always_fatal (GLogLevelFlags fatal_mask);
/* Structured logging mechanism. */
/**
* GLogWriterOutput:
* @G_LOG_WRITER_HANDLED: Log writer has handled the log entry.
* @G_LOG_WRITER_UNHANDLED: Log writer could not handle the log entry.
*
* Return values from #GLogWriterFuncs to indicate whether the given log entry
* was successfully handled by the writer, or whether there was an error in
* handling it (and hence a fallback writer should be used).
*
* If a #GLogWriterFunc ignores a log entry, it should return
* %G_LOG_WRITER_HANDLED.
*
* Since: 2.50
*/
typedef enum
{
G_LOG_WRITER_HANDLED = 1,
G_LOG_WRITER_UNHANDLED = 0,
} GLogWriterOutput;
/**
* GLogField:
* @key: field name (UTF-8 string)
* @value: field value (arbitrary bytes)
* @length: length of @value, in bytes, or -1 if it is nul-terminated
*
* Structure representing a single field in a structured log entry. See
* g_log_structured() for details.
*
* Log fields may contain arbitrary values, including binary with embedded nul
* bytes. If the field contains a string, the string must be UTF-8 encoded and
* have a trailing nul byte. Otherwise, @length must be set to a non-negative
* value.
*
* Since: 2.50
*/
typedef struct _GLogField GLogField;
struct _GLogField
{
const gchar *key;
gconstpointer value;
gssize length;
};
/**
* GLogWriterFunc:
* @log_level: log level of the message
* @fields: (array length=n_fields): fields forming the message
* @n_fields: number of @fields
* @user_data: user data passed to g_log_set_writer_func()
*
* Writer function for log entries. A log entry is a collection of one or more
* #GLogFields, using the standard [field names from journal
* specification](https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html).
* See g_log_structured() for more information.
*
* Writer functions must ignore fields which they do not recognise, unless they
* can write arbitrary binary output, as field values may be arbitrary binary.
*
* @log_level is guaranteed to be included in @fields as the `PRIORITY` field,
* but is provided separately for convenience of deciding whether or where to
* output the log entry.
*
* Writer functions should return %G_LOG_WRITER_HANDLED if they handled the log
* message successfully or if they deliberately ignored it. If there was an
* error handling the message (for example, if the writer function is meant to
* send messages to a remote logging server and there is a network error), it
* should return %G_LOG_WRITER_UNHANDLED. This allows writer functions to be
* chained and fall back to simpler handlers in case of failure.
*
* Returns: %G_LOG_WRITER_HANDLED if the log entry was handled successfully;
* %G_LOG_WRITER_UNHANDLED otherwise
* Since: 2.50
*/
typedef GLogWriterOutput (*GLogWriterFunc) (GLogLevelFlags log_level,
const GLogField *fields,
gsize n_fields,
gpointer user_data);
GLIB_AVAILABLE_IN_2_50
void g_log_structured (const gchar *log_domain,
GLogLevelFlags log_level,
...);
GLIB_AVAILABLE_IN_2_50
void g_log_structured_array (GLogLevelFlags log_level,
const GLogField *fields,
gsize n_fields);
GLIB_AVAILABLE_IN_2_50
void g_log_variant (const gchar *log_domain,
GLogLevelFlags log_level,
GVariant *fields);
GLIB_AVAILABLE_IN_2_50
void g_log_set_writer_func (GLogWriterFunc func,
gpointer user_data,
GDestroyNotify user_data_free);
GLIB_AVAILABLE_IN_2_50
gboolean g_log_writer_supports_color (gint output_fd);
GLIB_AVAILABLE_IN_2_50
gboolean g_log_writer_is_journald (gint output_fd);
GLIB_AVAILABLE_IN_2_50
gchar *g_log_writer_format_fields (GLogLevelFlags log_level,
const GLogField *fields,
gsize n_fields,
gboolean use_color);
GLIB_AVAILABLE_IN_2_50
GLogWriterOutput g_log_writer_journald (GLogLevelFlags log_level,
const GLogField *fields,
gsize n_fields,
gpointer user_data);
GLIB_AVAILABLE_IN_2_50
GLogWriterOutput g_log_writer_standard_streams (GLogLevelFlags log_level,
const GLogField *fields,
gsize n_fields,
gpointer user_data);
GLIB_AVAILABLE_IN_2_50
GLogWriterOutput g_log_writer_default (GLogLevelFlags log_level,
const GLogField *fields,
gsize n_fields,
gpointer user_data);
GLIB_AVAILABLE_IN_2_68
void g_log_writer_default_set_use_stderr (gboolean use_stderr);
GLIB_AVAILABLE_IN_2_68
gboolean g_log_writer_default_would_drop (GLogLevelFlags log_level,
const char *log_domain);
/**
* G_DEBUG_HERE:
*
* A convenience form of g_log_structured(), recommended to be added to
* functions when debugging. It prints the current monotonic time and the code
* location using %G_STRLOC.
*
* Since: 2.50
*/
#define G_DEBUG_HERE() \
g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
"CODE_FILE", __FILE__, \
"CODE_LINE", G_STRINGIFY (__LINE__), \
"CODE_FUNC", G_STRFUNC, \
"MESSAGE", "%" G_GINT64_FORMAT ": %s", \
g_get_monotonic_time (), G_STRLOC)
/* internal */
void _g_log_fallback_handler (const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *message,
gpointer unused_data);
/* Internal functions, used to implement the following macros */
GLIB_AVAILABLE_IN_ALL
void g_return_if_fail_warning (const char *log_domain,
const char *pretty_function,
const char *expression) G_ANALYZER_NORETURN;
GLIB_AVAILABLE_IN_ALL
void g_warn_message (const char *domain,
const char *file,
int line,
const char *func,
const char *warnexpr) G_ANALYZER_NORETURN;
GLIB_DEPRECATED
G_NORETURN
void g_assert_warning (const char *log_domain,
const char *file,
const int line,
const char *pretty_function,
const char *expression);
GLIB_AVAILABLE_IN_2_56
void g_log_structured_standard (const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *file,
const gchar *line,
const gchar *func,
const gchar *message_format,
...) G_GNUC_PRINTF (6, 7);
#ifndef G_LOG_DOMAIN
#define G_LOG_DOMAIN ((gchar*) 0)
#endif /* G_LOG_DOMAIN */
#if defined(G_HAVE_ISO_VARARGS) && !G_ANALYZER_ANALYZING
#if defined(G_LOG_USE_STRUCTURED) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_56
#define g_error(...) G_STMT_START { \
g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, __VA_ARGS__); \
for (;;) ; \
} G_STMT_END
#define g_message(...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, __VA_ARGS__)
#define g_critical(...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, __VA_ARGS__)
#define g_warning(...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, __VA_ARGS__)
#define g_info(...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, __VA_ARGS__)
#define g_debug(...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, __VA_ARGS__)
#else
/* for(;;) ; so that GCC knows that control doesn't go past g_error().
* Put space before ending semicolon to avoid C++ build warnings.
*/
#define g_error(...) G_STMT_START { \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_ERROR, \
__VA_ARGS__); \
for (;;) ; \
} G_STMT_END
#define g_message(...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_MESSAGE, \
__VA_ARGS__)
#define g_critical(...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
__VA_ARGS__)
#define g_warning(...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_WARNING, \
__VA_ARGS__)
#define g_info(...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_INFO, \
__VA_ARGS__)
#define g_debug(...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_DEBUG, \
__VA_ARGS__)
#endif
#elif defined(G_HAVE_GNUC_VARARGS) && !G_ANALYZER_ANALYZING
#if defined(G_LOG_USE_STRUCTURED) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_56
#define g_error(format...) G_STMT_START { \
g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, format); \
for (;;) ; \
} G_STMT_END
#define g_message(format...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, format)
#define g_critical(format...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, format)
#define g_warning(format...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, format)
#define g_info(format...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, format)
#define g_debug(format...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
__FILE__, G_STRINGIFY (__LINE__), \
G_STRFUNC, format)
#else
#define g_error(format...) G_STMT_START { \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_ERROR, \
format); \
for (;;) ; \
} G_STMT_END
#define g_message(format...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_MESSAGE, \
format)
#define g_critical(format...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
format)
#define g_warning(format...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_WARNING, \
format)
#define g_info(format...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_INFO, \
format)
#define g_debug(format...) g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_DEBUG, \
format)
#endif
#else /* no varargs macros */
static G_NORETURN void g_error (const gchar *format, ...) G_ANALYZER_NORETURN;
static void g_critical (const gchar *format, ...) G_ANALYZER_NORETURN;
static inline void
g_error (const gchar *format,
...)
{
va_list args;
va_start (args, format);
g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args);
va_end (args);
for(;;) ;
}
static inline void
g_message (const gchar *format,
...)
{
va_list args;
va_start (args, format);
g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, args);
va_end (args);
}
static inline void
g_critical (const gchar *format,
...)
{
va_list args;
va_start (args, format);
g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, format, args);
va_end (args);
}
static inline void
g_warning (const gchar *format,
...)
{
va_list args;
va_start (args, format);
g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, format, args);
va_end (args);
}
static inline void
g_info (const gchar *format,
...)
{
va_list args;
va_start (args, format);
g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format, args);
va_end (args);
}
static inline void
g_debug (const gchar *format,
...)
{
va_list args;
va_start (args, format);
g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args);
va_end (args);
}
#endif /* !__GNUC__ */
/**
* g_warning_once:
* @...: format string, followed by parameters to insert
* into the format string (as with printf())
*
* Logs a warning only once.
*
* g_warning_once() calls g_warning() with the passed message the first time
* the statement is executed; subsequent times it is a no-op.
*
* Note! On platforms where the compiler doesn't support variadic macros, the
* warning is printed each time instead of only once.
*
* Since: 2.64
*/
#if defined(G_HAVE_ISO_VARARGS) && !G_ANALYZER_ANALYZING
#define g_warning_once(...) \
G_STMT_START { \
static int G_PASTE (_GWarningOnceBoolean, __LINE__) = 0; /* (atomic) */ \
if (g_atomic_int_compare_and_exchange (&G_PASTE (_GWarningOnceBoolean, __LINE__), \
0, 1)) \
g_warning (__VA_ARGS__); \
} G_STMT_END \
GLIB_AVAILABLE_MACRO_IN_2_64
#elif defined(G_HAVE_GNUC_VARARGS) && !G_ANALYZER_ANALYZING
#define g_warning_once(format...) \
G_STMT_START { \
static int G_PASTE (_GWarningOnceBoolean, __LINE__) = 0; /* (atomic) */ \
if (g_atomic_int_compare_and_exchange (&G_PASTE (_GWarningOnceBoolean, __LINE__), \
0, 1)) \
g_warning (format); \
} G_STMT_END \
GLIB_AVAILABLE_MACRO_IN_2_64
#else
#define g_warning_once g_warning
#endif
/**
* GPrintFunc:
* @string: the message to output
*
* Specifies the type of the print handler functions.
* These are called with the complete formatted string to output.
*/
typedef void (*GPrintFunc) (const gchar *string);
GLIB_AVAILABLE_IN_ALL
void g_print (const gchar *format,
...) G_GNUC_PRINTF (1, 2);
GLIB_AVAILABLE_IN_ALL
GPrintFunc g_set_print_handler (GPrintFunc func);
GLIB_AVAILABLE_IN_ALL
void g_printerr (const gchar *format,
...) G_GNUC_PRINTF (1, 2);
GLIB_AVAILABLE_IN_ALL
GPrintFunc g_set_printerr_handler (GPrintFunc func);
/**
* g_warn_if_reached:
*
* Logs a warning.
*
* Since: 2.16
*/
#define g_warn_if_reached() \
do { \
g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); \
} while (0)
/**
* g_warn_if_fail:
* @expr: the expression to check
*
* Logs a warning if the expression is not true.
*
* Since: 2.16
*/
#define g_warn_if_fail(expr) \
do { \
if G_LIKELY (expr) ; \
else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, #expr); \
} while (0)
#ifdef G_DISABLE_CHECKS
/**
* g_return_if_fail:
* @expr: the expression to check
*
* Verifies that the expression @expr, usually representing a precondition,
* evaluates to %TRUE. If the function returns a value, use
* g_return_val_if_fail() instead.
*
* If @expr evaluates to %FALSE, the current function should be considered to
* have undefined behaviour (a programmer error). The only correct solution
* to such an error is to change the module that is calling the current
* function, so that it avoids this incorrect call.
*
* To make this undefined behaviour visible, if @expr evaluates to %FALSE,
* the result is usually that a critical message is logged and the current
* function returns.
*
* If `G_DISABLE_CHECKS` is defined then the check is not performed. You
* should therefore not depend on any side effects of @expr.
*
* To debug failure of a g_return_if_fail() check, run the code under a debugger
* with `G_DEBUG=fatal-criticals` or `G_DEBUG=fatal-warnings` defined in the
* environment (see [Running GLib Applications](glib-running.html)):
*
* |[
* G_DEBUG=fatal-warnings gdb ./my-program
* ]|
*
* Any unrelated failures can be skipped over in
* [gdb](https://www.gnu.org/software/gdb/) using the `continue` command.
*/
#define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
/**
* g_return_val_if_fail:
* @expr: the expression to check
* @val: the value to return from the current function
* if the expression is not true
*
* Verifies that the expression @expr, usually representing a precondition,
* evaluates to %TRUE. If the function does not return a value, use
* g_return_if_fail() instead.
*
* If @expr evaluates to %FALSE, the current function should be considered to
* have undefined behaviour (a programmer error). The only correct solution
* to such an error is to change the module that is calling the current
* function, so that it avoids this incorrect call.
*
* To make this undefined behaviour visible, if @expr evaluates to %FALSE,
* the result is usually that a critical message is logged and @val is
* returned from the current function.
*
* If `G_DISABLE_CHECKS` is defined then the check is not performed. You
* should therefore not depend on any side effects of @expr.
*
* See g_return_if_fail() for guidance on how to debug failure of this check.
*/
#define g_return_val_if_fail(expr,val) G_STMT_START{ (void)0; }G_STMT_END
/**
* g_return_if_reached:
*
* Logs a critical message and returns from the current function.
* This can only be used in functions which do not return a value.
*
* See g_return_if_fail() for guidance on how to debug failure of this check.
*/
#define g_return_if_reached() G_STMT_START{ return; }G_STMT_END
/**
* g_return_val_if_reached:
* @val: the value to return from the current function
*
* Logs a critical message and returns @val.
*
* See g_return_if_fail() for guidance on how to debug failure of this check.
*/
#define g_return_val_if_reached(val) G_STMT_START{ return (val); }G_STMT_END
#else /* !G_DISABLE_CHECKS */
#define g_return_if_fail(expr) \
G_STMT_START { \
if (G_LIKELY (expr)) \
{ } \
else \
{ \
g_return_if_fail_warning (G_LOG_DOMAIN, \
G_STRFUNC, \
#expr); \
return; \
} \
} G_STMT_END
#define g_return_val_if_fail(expr, val) \
G_STMT_START { \
if (G_LIKELY (expr)) \
{ } \
else \
{ \
g_return_if_fail_warning (G_LOG_DOMAIN, \
G_STRFUNC, \
#expr); \
return (val); \
} \
} G_STMT_END
#define g_return_if_reached() \
G_STMT_START { \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
"file %s: line %d (%s): should not be reached", \
__FILE__, \
__LINE__, \
G_STRFUNC); \
return; \
} G_STMT_END
#define g_return_val_if_reached(val) \
G_STMT_START { \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
"file %s: line %d (%s): should not be reached", \
__FILE__, \
__LINE__, \
G_STRFUNC); \
return (val); \
} G_STMT_END
#endif /* !G_DISABLE_CHECKS */
G_END_DECLS
#endif /* __G_MESSAGES_H__ */
gbookmarkfile.h 0000644 00000030521 15021467762 0007544 0 ustar 00 /* gbookmarkfile.h: parsing and building desktop bookmarks
*
* Copyright (C) 2005-2006 Emmanuele Bassi
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_BOOKMARK_FILE_H__
#define __G_BOOKMARK_FILE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
G_BEGIN_DECLS
/**
* G_BOOKMARK_FILE_ERROR:
*
* Error domain for bookmark file parsing.
* Errors in this domain will be from the #GBookmarkFileError
* enumeration. See #GError for information on error domains.
*/
#define G_BOOKMARK_FILE_ERROR (g_bookmark_file_error_quark ())
/**
* GBookmarkFileError:
* @G_BOOKMARK_FILE_ERROR_INVALID_URI: URI was ill-formed
* @G_BOOKMARK_FILE_ERROR_INVALID_VALUE: a requested field was not found
* @G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED: a requested application did
* not register a bookmark
* @G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND: a requested URI was not found
* @G_BOOKMARK_FILE_ERROR_READ: document was ill formed
* @G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING: the text being parsed was
* in an unknown encoding
* @G_BOOKMARK_FILE_ERROR_WRITE: an error occurred while writing
* @G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND: requested file was not found
*
* Error codes returned by bookmark file parsing.
*/
typedef enum
{
G_BOOKMARK_FILE_ERROR_INVALID_URI,
G_BOOKMARK_FILE_ERROR_INVALID_VALUE,
G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED,
G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND,
G_BOOKMARK_FILE_ERROR_READ,
G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING,
G_BOOKMARK_FILE_ERROR_WRITE,
G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND
} GBookmarkFileError;
GLIB_AVAILABLE_IN_ALL
GQuark g_bookmark_file_error_quark (void);
/**
* GBookmarkFile:
*
* The `GBookmarkFile` structure contains only
* private data and should not be directly accessed.
*/
typedef struct _GBookmarkFile GBookmarkFile;
GLIB_AVAILABLE_IN_ALL
GBookmarkFile *g_bookmark_file_new (void);
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_free (GBookmarkFile *bookmark);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_load_from_file (GBookmarkFile *bookmark,
const gchar *filename,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_load_from_data (GBookmarkFile *bookmark,
const gchar *data,
gsize length,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_load_from_data_dirs (GBookmarkFile *bookmark,
const gchar *file,
gchar **full_path,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar * g_bookmark_file_to_data (GBookmarkFile *bookmark,
gsize *length,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_to_file (GBookmarkFile *bookmark,
const gchar *filename,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_set_title (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *title);
GLIB_AVAILABLE_IN_ALL
gchar * g_bookmark_file_get_title (GBookmarkFile *bookmark,
const gchar *uri,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_set_description (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *description);
GLIB_AVAILABLE_IN_ALL
gchar * g_bookmark_file_get_description (GBookmarkFile *bookmark,
const gchar *uri,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_set_mime_type (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *mime_type);
GLIB_AVAILABLE_IN_ALL
gchar * g_bookmark_file_get_mime_type (GBookmarkFile *bookmark,
const gchar *uri,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_set_groups (GBookmarkFile *bookmark,
const gchar *uri,
const gchar **groups,
gsize length);
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_add_group (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *group);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_has_group (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *group,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar ** g_bookmark_file_get_groups (GBookmarkFile *bookmark,
const gchar *uri,
gsize *length,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_add_application (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *name,
const gchar *exec);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_has_application (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *name,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar ** g_bookmark_file_get_applications (GBookmarkFile *bookmark,
const gchar *uri,
gsize *length,
GError **error);
GLIB_DEPRECATED_IN_2_66_FOR(g_bookmark_file_set_application_info)
gboolean g_bookmark_file_set_app_info (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *name,
const gchar *exec,
gint count,
time_t stamp,
GError **error);
GLIB_AVAILABLE_IN_2_66
gboolean g_bookmark_file_set_application_info (GBookmarkFile *bookmark,
const char *uri,
const char *name,
const char *exec,
int count,
GDateTime *stamp,
GError **error);
GLIB_DEPRECATED_IN_2_66_FOR(g_bookmark_file_get_application_info)
gboolean g_bookmark_file_get_app_info (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *name,
gchar **exec,
guint *count,
time_t *stamp,
GError **error);
GLIB_AVAILABLE_IN_2_66
gboolean g_bookmark_file_get_application_info (GBookmarkFile *bookmark,
const char *uri,
const char *name,
char **exec,
unsigned int *count,
GDateTime **stamp,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_set_is_private (GBookmarkFile *bookmark,
const gchar *uri,
gboolean is_private);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_get_is_private (GBookmarkFile *bookmark,
const gchar *uri,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_bookmark_file_set_icon (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *href,
const gchar *mime_type);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_get_icon (GBookmarkFile *bookmark,
const gchar *uri,
gchar **href,
gchar **mime_type,
GError **error);
GLIB_DEPRECATED_IN_2_66_FOR(g_bookmark_file_set_added_date_time)
void g_bookmark_file_set_added (GBookmarkFile *bookmark,
const gchar *uri,
time_t added);
GLIB_AVAILABLE_IN_2_66
void g_bookmark_file_set_added_date_time (GBookmarkFile *bookmark,
const char *uri,
GDateTime *added);
GLIB_DEPRECATED_IN_2_66_FOR(g_bookmark_file_get_added_date_time)
time_t g_bookmark_file_get_added (GBookmarkFile *bookmark,
const gchar *uri,
GError **error);
GLIB_AVAILABLE_IN_2_66
GDateTime *g_bookmark_file_get_added_date_time (GBookmarkFile *bookmark,
const char *uri,
GError **error);
GLIB_DEPRECATED_IN_2_66_FOR(g_bookmark_file_set_modified_date_time)
void g_bookmark_file_set_modified (GBookmarkFile *bookmark,
const gchar *uri,
time_t modified);
GLIB_AVAILABLE_IN_2_66
void g_bookmark_file_set_modified_date_time (GBookmarkFile *bookmark,
const char *uri,
GDateTime *modified);
GLIB_DEPRECATED_IN_2_66_FOR(g_bookmark_file_get_modified_date_time)
time_t g_bookmark_file_get_modified (GBookmarkFile *bookmark,
const gchar *uri,
GError **error);
GLIB_AVAILABLE_IN_2_66
GDateTime *g_bookmark_file_get_modified_date_time (GBookmarkFile *bookmark,
const char *uri,
GError **error);
GLIB_DEPRECATED_IN_2_66_FOR(g_bookmark_file_set_visited_date_time)
void g_bookmark_file_set_visited (GBookmarkFile *bookmark,
const gchar *uri,
time_t visited);
GLIB_AVAILABLE_IN_2_66
void g_bookmark_file_set_visited_date_time (GBookmarkFile *bookmark,
const char *uri,
GDateTime *visited);
GLIB_DEPRECATED_IN_2_66_FOR(g_bookmark_file_get_visited_date_time)
time_t g_bookmark_file_get_visited (GBookmarkFile *bookmark,
const gchar *uri,
GError **error);
GLIB_AVAILABLE_IN_2_66
GDateTime *g_bookmark_file_get_visited_date_time (GBookmarkFile *bookmark,
const char *uri,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_has_item (GBookmarkFile *bookmark,
const gchar *uri);
GLIB_AVAILABLE_IN_ALL
gint g_bookmark_file_get_size (GBookmarkFile *bookmark);
GLIB_AVAILABLE_IN_ALL
gchar ** g_bookmark_file_get_uris (GBookmarkFile *bookmark,
gsize *length);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_remove_group (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *group,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_remove_application (GBookmarkFile *bookmark,
const gchar *uri,
const gchar *name,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_remove_item (GBookmarkFile *bookmark,
const gchar *uri,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_bookmark_file_move_item (GBookmarkFile *bookmark,
const gchar *old_uri,
const gchar *new_uri,
GError **error);
G_END_DECLS
#endif /* __G_BOOKMARK_FILE_H__ */
giochannel.h 0000644 00000033202 15021467762 0007036 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_IOCHANNEL_H__
#define __G_IOCHANNEL_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
G_BEGIN_DECLS
/* GIOChannel
*/
typedef struct _GIOChannel GIOChannel;
typedef struct _GIOFuncs GIOFuncs;
typedef enum
{
G_IO_ERROR_NONE,
G_IO_ERROR_AGAIN,
G_IO_ERROR_INVAL,
G_IO_ERROR_UNKNOWN
} GIOError;
#define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
typedef enum
{
/* Derived from errno */
G_IO_CHANNEL_ERROR_FBIG,
G_IO_CHANNEL_ERROR_INVAL,
G_IO_CHANNEL_ERROR_IO,
G_IO_CHANNEL_ERROR_ISDIR,
G_IO_CHANNEL_ERROR_NOSPC,
G_IO_CHANNEL_ERROR_NXIO,
G_IO_CHANNEL_ERROR_OVERFLOW,
G_IO_CHANNEL_ERROR_PIPE,
/* Other */
G_IO_CHANNEL_ERROR_FAILED
} GIOChannelError;
typedef enum
{
G_IO_STATUS_ERROR,
G_IO_STATUS_NORMAL,
G_IO_STATUS_EOF,
G_IO_STATUS_AGAIN
} GIOStatus;
typedef enum
{
G_SEEK_CUR,
G_SEEK_SET,
G_SEEK_END
} GSeekType;
typedef enum
{
G_IO_FLAG_APPEND = 1 << 0,
G_IO_FLAG_NONBLOCK = 1 << 1,
G_IO_FLAG_IS_READABLE = 1 << 2, /* Read only flag */
G_IO_FLAG_IS_WRITABLE = 1 << 3, /* Read only flag */
G_IO_FLAG_IS_WRITEABLE = 1 << 3, /* Misspelling in 2.29.10 and earlier */
G_IO_FLAG_IS_SEEKABLE = 1 << 4, /* Read only flag */
G_IO_FLAG_MASK = (1 << 5) - 1,
G_IO_FLAG_GET_MASK = G_IO_FLAG_MASK,
G_IO_FLAG_SET_MASK = G_IO_FLAG_APPEND | G_IO_FLAG_NONBLOCK
} GIOFlags;
struct _GIOChannel
{
/*< private >*/
gint ref_count;
GIOFuncs *funcs;
gchar *encoding;
GIConv read_cd;
GIConv write_cd;
gchar *line_term; /* String which indicates the end of a line of text */
guint line_term_len; /* So we can have null in the line term */
gsize buf_size;
GString *read_buf; /* Raw data from the channel */
GString *encoded_read_buf; /* Channel data converted to UTF-8 */
GString *write_buf; /* Data ready to be written to the file */
gchar partial_write_buf[6]; /* UTF-8 partial characters, null terminated */
/* Group the flags together, immediately after partial_write_buf, to save memory */
guint use_buffer : 1; /* The encoding uses the buffers */
guint do_encode : 1; /* The encoding uses the GIConv coverters */
guint close_on_unref : 1; /* Close the channel on final unref */
guint is_readable : 1; /* Cached GIOFlag */
guint is_writeable : 1; /* ditto */
guint is_seekable : 1; /* ditto */
gpointer reserved1;
gpointer reserved2;
};
typedef gboolean (*GIOFunc) (GIOChannel *source,
GIOCondition condition,
gpointer data);
struct _GIOFuncs
{
GIOStatus (*io_read) (GIOChannel *channel,
gchar *buf,
gsize count,
gsize *bytes_read,
GError **err);
GIOStatus (*io_write) (GIOChannel *channel,
const gchar *buf,
gsize count,
gsize *bytes_written,
GError **err);
GIOStatus (*io_seek) (GIOChannel *channel,
gint64 offset,
GSeekType type,
GError **err);
GIOStatus (*io_close) (GIOChannel *channel,
GError **err);
GSource* (*io_create_watch) (GIOChannel *channel,
GIOCondition condition);
void (*io_free) (GIOChannel *channel);
GIOStatus (*io_set_flags) (GIOChannel *channel,
GIOFlags flags,
GError **err);
GIOFlags (*io_get_flags) (GIOChannel *channel);
};
GLIB_AVAILABLE_IN_ALL
void g_io_channel_init (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
GIOChannel *g_io_channel_ref (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
void g_io_channel_unref (GIOChannel *channel);
GLIB_DEPRECATED_FOR(g_io_channel_read_chars)
GIOError g_io_channel_read (GIOChannel *channel,
gchar *buf,
gsize count,
gsize *bytes_read);
GLIB_DEPRECATED_FOR(g_io_channel_write_chars)
GIOError g_io_channel_write (GIOChannel *channel,
const gchar *buf,
gsize count,
gsize *bytes_written);
GLIB_DEPRECATED_FOR(g_io_channel_seek_position)
GIOError g_io_channel_seek (GIOChannel *channel,
gint64 offset,
GSeekType type);
GLIB_DEPRECATED_FOR(g_io_channel_shutdown)
void g_io_channel_close (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_shutdown (GIOChannel *channel,
gboolean flush,
GError **err);
GLIB_AVAILABLE_IN_ALL
guint g_io_add_watch_full (GIOChannel *channel,
gint priority,
GIOCondition condition,
GIOFunc func,
gpointer user_data,
GDestroyNotify notify);
GLIB_AVAILABLE_IN_ALL
GSource * g_io_create_watch (GIOChannel *channel,
GIOCondition condition);
GLIB_AVAILABLE_IN_ALL
guint g_io_add_watch (GIOChannel *channel,
GIOCondition condition,
GIOFunc func,
gpointer user_data);
/* character encoding conversion involved functions.
*/
GLIB_AVAILABLE_IN_ALL
void g_io_channel_set_buffer_size (GIOChannel *channel,
gsize size);
GLIB_AVAILABLE_IN_ALL
gsize g_io_channel_get_buffer_size (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
GIOCondition g_io_channel_get_buffer_condition (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_set_flags (GIOChannel *channel,
GIOFlags flags,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOFlags g_io_channel_get_flags (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
void g_io_channel_set_line_term (GIOChannel *channel,
const gchar *line_term,
gint length);
GLIB_AVAILABLE_IN_ALL
const gchar * g_io_channel_get_line_term (GIOChannel *channel,
gint *length);
GLIB_AVAILABLE_IN_ALL
void g_io_channel_set_buffered (GIOChannel *channel,
gboolean buffered);
GLIB_AVAILABLE_IN_ALL
gboolean g_io_channel_get_buffered (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_set_encoding (GIOChannel *channel,
const gchar *encoding,
GError **error);
GLIB_AVAILABLE_IN_ALL
const gchar * g_io_channel_get_encoding (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
void g_io_channel_set_close_on_unref (GIOChannel *channel,
gboolean do_close);
GLIB_AVAILABLE_IN_ALL
gboolean g_io_channel_get_close_on_unref (GIOChannel *channel);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_flush (GIOChannel *channel,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_read_line (GIOChannel *channel,
gchar **str_return,
gsize *length,
gsize *terminator_pos,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_read_line_string (GIOChannel *channel,
GString *buffer,
gsize *terminator_pos,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_read_to_end (GIOChannel *channel,
gchar **str_return,
gsize *length,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_read_chars (GIOChannel *channel,
gchar *buf,
gsize count,
gsize *bytes_read,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_read_unichar (GIOChannel *channel,
gunichar *thechar,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_write_chars (GIOChannel *channel,
const gchar *buf,
gssize count,
gsize *bytes_written,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_write_unichar (GIOChannel *channel,
gunichar thechar,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOStatus g_io_channel_seek_position (GIOChannel *channel,
gint64 offset,
GSeekType type,
GError **error);
GLIB_AVAILABLE_IN_ALL
GIOChannel* g_io_channel_new_file (const gchar *filename,
const gchar *mode,
GError **error);
/* Error handling */
GLIB_AVAILABLE_IN_ALL
GQuark g_io_channel_error_quark (void);
GLIB_AVAILABLE_IN_ALL
GIOChannelError g_io_channel_error_from_errno (gint en);
/* On Unix, IO channels created with this function for any file
* descriptor or socket.
*
* On Win32, this can be used either for files opened with the MSVCRT
* (the Microsoft run-time C library) _open() or _pipe, including file
* descriptors 0, 1 and 2 (corresponding to stdin, stdout and stderr),
* or for Winsock SOCKETs. If the parameter is a legal file
* descriptor, it is assumed to be such, otherwise it should be a
* SOCKET. This relies on SOCKETs and file descriptors not
* overlapping. If you want to be certain, call either
* g_io_channel_win32_new_fd() or g_io_channel_win32_new_socket()
* instead as appropriate.
*
* The term file descriptor as used in the context of Win32 refers to
* the emulated Unix-like file descriptors MSVCRT provides. The native
* corresponding concept is file HANDLE. There isn't as of yet a way to
* get GIOChannels for Win32 file HANDLEs.
*/
GLIB_AVAILABLE_IN_ALL
GIOChannel* g_io_channel_unix_new (int fd);
GLIB_AVAILABLE_IN_ALL
gint g_io_channel_unix_get_fd (GIOChannel *channel);
/* Hook for GClosure / GSource integration. Don't touch */
GLIB_VAR GSourceFuncs g_io_watch_funcs;
#ifdef G_OS_WIN32
/* You can use this "pseudo file descriptor" in a GPollFD to add
* polling for Windows messages. GTK applications should not do that.
*/
#define G_WIN32_MSG_HANDLE 19981206
/* Use this to get a GPollFD from a GIOChannel, so that you can call
* g_io_channel_win32_poll(). After calling this you should only use
* g_io_channel_read() to read from the GIOChannel, i.e. never read()
* from the underlying file descriptor. For SOCKETs, it is possible to call
* recv().
*/
GLIB_AVAILABLE_IN_ALL
void g_io_channel_win32_make_pollfd (GIOChannel *channel,
GIOCondition condition,
GPollFD *fd);
/* This can be used to wait until at least one of the channels is readable.
* On Unix you would do a select() on the file descriptors of the channels.
*/
GLIB_AVAILABLE_IN_ALL
gint g_io_channel_win32_poll (GPollFD *fds,
gint n_fds,
gint timeout_);
/* Create an IO channel for Windows messages for window handle hwnd. */
#if GLIB_SIZEOF_VOID_P == 8
/* We use gsize here so that it is still an integer type and not a
* pointer, like the guint in the traditional prototype. We can't use
* intptr_t as that is not portable enough.
*/
GLIB_AVAILABLE_IN_ALL
GIOChannel *g_io_channel_win32_new_messages (gsize hwnd);
#else
GLIB_AVAILABLE_IN_ALL
GIOChannel *g_io_channel_win32_new_messages (guint hwnd);
#endif
/* Create an IO channel for C runtime (emulated Unix-like) file
* descriptors. After calling g_io_add_watch() on a IO channel
* returned by this function, you shouldn't call read() on the file
* descriptor. This is because adding polling for a file descriptor is
* implemented on Win32 by starting a thread that sits blocked in a
* read() from the file descriptor most of the time. All reads from
* the file descriptor should be done by this internal GLib
* thread. Your code should call only g_io_channel_read_chars().
*/
GLIB_AVAILABLE_IN_ALL
GIOChannel* g_io_channel_win32_new_fd (gint fd);
/* Get the C runtime file descriptor of a channel. */
GLIB_AVAILABLE_IN_ALL
gint g_io_channel_win32_get_fd (GIOChannel *channel);
/* Create an IO channel for a winsock socket. The parameter should be
* a SOCKET. Contrary to IO channels for file descriptors (on *Win32),
* you can use normal recv() or recvfrom() on sockets even if GLib
* is polling them.
*/
GLIB_AVAILABLE_IN_ALL
GIOChannel *g_io_channel_win32_new_socket (gint socket);
GLIB_DEPRECATED_FOR(g_io_channel_win32_new_socket)
GIOChannel *g_io_channel_win32_new_stream_socket (gint socket);
GLIB_AVAILABLE_IN_ALL
void g_io_channel_win32_set_debug (GIOChannel *channel,
gboolean flag);
#endif
G_END_DECLS
#endif /* __G_IOCHANNEL_H__ */
gvariant.h 0000644 00000071570 15021467762 0006554 0 ustar 00 /*
* Copyright © 2007, 2008 Ryan Lortie
* Copyright © 2009, 2010 Codethink Limited
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*
* Author: Ryan Lortie
*/
#ifndef __G_VARIANT_H__
#define __G_VARIANT_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
G_BEGIN_DECLS
typedef struct _GVariant GVariant;
typedef enum
{
G_VARIANT_CLASS_BOOLEAN = 'b',
G_VARIANT_CLASS_BYTE = 'y',
G_VARIANT_CLASS_INT16 = 'n',
G_VARIANT_CLASS_UINT16 = 'q',
G_VARIANT_CLASS_INT32 = 'i',
G_VARIANT_CLASS_UINT32 = 'u',
G_VARIANT_CLASS_INT64 = 'x',
G_VARIANT_CLASS_UINT64 = 't',
G_VARIANT_CLASS_HANDLE = 'h',
G_VARIANT_CLASS_DOUBLE = 'd',
G_VARIANT_CLASS_STRING = 's',
G_VARIANT_CLASS_OBJECT_PATH = 'o',
G_VARIANT_CLASS_SIGNATURE = 'g',
G_VARIANT_CLASS_VARIANT = 'v',
G_VARIANT_CLASS_MAYBE = 'm',
G_VARIANT_CLASS_ARRAY = 'a',
G_VARIANT_CLASS_TUPLE = '(',
G_VARIANT_CLASS_DICT_ENTRY = '{'
} GVariantClass;
GLIB_AVAILABLE_IN_ALL
void g_variant_unref (GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_ref (GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_ref_sink (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_is_floating (GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_take_ref (GVariant *value);
GLIB_AVAILABLE_IN_ALL
const GVariantType * g_variant_get_type (GVariant *value);
GLIB_AVAILABLE_IN_ALL
const gchar * g_variant_get_type_string (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_is_of_type (GVariant *value,
const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_is_container (GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariantClass g_variant_classify (GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_boolean (gboolean value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_byte (guint8 value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_int16 (gint16 value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_uint16 (guint16 value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_int32 (gint32 value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_uint32 (guint32 value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_int64 (gint64 value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_uint64 (guint64 value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_handle (gint32 value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_double (gdouble value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_string (const gchar *string);
GLIB_AVAILABLE_IN_2_38
GVariant * g_variant_new_take_string (gchar *string);
GLIB_AVAILABLE_IN_2_38
GVariant * g_variant_new_printf (const gchar *format_string,
...) G_GNUC_PRINTF (1, 2);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_object_path (const gchar *object_path);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_is_object_path (const gchar *string);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_signature (const gchar *signature);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_is_signature (const gchar *string);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_variant (GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_strv (const gchar * const *strv,
gssize length);
GLIB_AVAILABLE_IN_2_30
GVariant * g_variant_new_objv (const gchar * const *strv,
gssize length);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_bytestring (const gchar *string);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_bytestring_array (const gchar * const *strv,
gssize length);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_fixed_array (const GVariantType *element_type,
gconstpointer elements,
gsize n_elements,
gsize element_size);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_get_boolean (GVariant *value);
GLIB_AVAILABLE_IN_ALL
guint8 g_variant_get_byte (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gint16 g_variant_get_int16 (GVariant *value);
GLIB_AVAILABLE_IN_ALL
guint16 g_variant_get_uint16 (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gint32 g_variant_get_int32 (GVariant *value);
GLIB_AVAILABLE_IN_ALL
guint32 g_variant_get_uint32 (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gint64 g_variant_get_int64 (GVariant *value);
GLIB_AVAILABLE_IN_ALL
guint64 g_variant_get_uint64 (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gint32 g_variant_get_handle (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gdouble g_variant_get_double (GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_get_variant (GVariant *value);
GLIB_AVAILABLE_IN_ALL
const gchar * g_variant_get_string (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_ALL
gchar * g_variant_dup_string (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_ALL
const gchar ** g_variant_get_strv (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_ALL
gchar ** g_variant_dup_strv (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_2_30
const gchar ** g_variant_get_objv (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_ALL
gchar ** g_variant_dup_objv (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_ALL
const gchar * g_variant_get_bytestring (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gchar * g_variant_dup_bytestring (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_ALL
const gchar ** g_variant_get_bytestring_array (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_ALL
gchar ** g_variant_dup_bytestring_array (GVariant *value,
gsize *length);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_maybe (const GVariantType *child_type,
GVariant *child);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_array (const GVariantType *child_type,
GVariant * const *children,
gsize n_children);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_tuple (GVariant * const *children,
gsize n_children);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_dict_entry (GVariant *key,
GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_get_maybe (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gsize g_variant_n_children (GVariant *value);
GLIB_AVAILABLE_IN_ALL
void g_variant_get_child (GVariant *value,
gsize index_,
const gchar *format_string,
...);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_get_child_value (GVariant *value,
gsize index_);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_lookup (GVariant *dictionary,
const gchar *key,
const gchar *format_string,
...);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_lookup_value (GVariant *dictionary,
const gchar *key,
const GVariantType *expected_type);
GLIB_AVAILABLE_IN_ALL
gconstpointer g_variant_get_fixed_array (GVariant *value,
gsize *n_elements,
gsize element_size);
GLIB_AVAILABLE_IN_ALL
gsize g_variant_get_size (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gconstpointer g_variant_get_data (GVariant *value);
GLIB_AVAILABLE_IN_2_36
GBytes * g_variant_get_data_as_bytes (GVariant *value);
GLIB_AVAILABLE_IN_ALL
void g_variant_store (GVariant *value,
gpointer data);
GLIB_AVAILABLE_IN_ALL
gchar * g_variant_print (GVariant *value,
gboolean type_annotate);
GLIB_AVAILABLE_IN_ALL
GString * g_variant_print_string (GVariant *value,
GString *string,
gboolean type_annotate);
GLIB_AVAILABLE_IN_ALL
guint g_variant_hash (gconstpointer value);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_equal (gconstpointer one,
gconstpointer two);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_get_normal_form (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_is_normal_form (GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_byteswap (GVariant *value);
GLIB_AVAILABLE_IN_2_36
GVariant * g_variant_new_from_bytes (const GVariantType *type,
GBytes *bytes,
gboolean trusted);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_from_data (const GVariantType *type,
gconstpointer data,
gsize size,
gboolean trusted,
GDestroyNotify notify,
gpointer user_data);
typedef struct _GVariantIter GVariantIter;
struct _GVariantIter {
/*< private >*/
gsize x[16];
};
GLIB_AVAILABLE_IN_ALL
GVariantIter * g_variant_iter_new (GVariant *value);
GLIB_AVAILABLE_IN_ALL
gsize g_variant_iter_init (GVariantIter *iter,
GVariant *value);
GLIB_AVAILABLE_IN_ALL
GVariantIter * g_variant_iter_copy (GVariantIter *iter);
GLIB_AVAILABLE_IN_ALL
gsize g_variant_iter_n_children (GVariantIter *iter);
GLIB_AVAILABLE_IN_ALL
void g_variant_iter_free (GVariantIter *iter);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_iter_next_value (GVariantIter *iter);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_iter_next (GVariantIter *iter,
const gchar *format_string,
...);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_iter_loop (GVariantIter *iter,
const gchar *format_string,
...);
typedef struct _GVariantBuilder GVariantBuilder;
struct _GVariantBuilder {
/*< private >*/
union
{
struct {
gsize partial_magic;
const GVariantType *type;
gsize y[14];
} s;
gsize x[16];
} u;
};
typedef enum
{
G_VARIANT_PARSE_ERROR_FAILED,
G_VARIANT_PARSE_ERROR_BASIC_TYPE_EXPECTED,
G_VARIANT_PARSE_ERROR_CANNOT_INFER_TYPE,
G_VARIANT_PARSE_ERROR_DEFINITE_TYPE_EXPECTED,
G_VARIANT_PARSE_ERROR_INPUT_NOT_AT_END,
G_VARIANT_PARSE_ERROR_INVALID_CHARACTER,
G_VARIANT_PARSE_ERROR_INVALID_FORMAT_STRING,
G_VARIANT_PARSE_ERROR_INVALID_OBJECT_PATH,
G_VARIANT_PARSE_ERROR_INVALID_SIGNATURE,
G_VARIANT_PARSE_ERROR_INVALID_TYPE_STRING,
G_VARIANT_PARSE_ERROR_NO_COMMON_TYPE,
G_VARIANT_PARSE_ERROR_NUMBER_OUT_OF_RANGE,
G_VARIANT_PARSE_ERROR_NUMBER_TOO_BIG,
G_VARIANT_PARSE_ERROR_TYPE_ERROR,
G_VARIANT_PARSE_ERROR_UNEXPECTED_TOKEN,
G_VARIANT_PARSE_ERROR_UNKNOWN_KEYWORD,
G_VARIANT_PARSE_ERROR_UNTERMINATED_STRING_CONSTANT,
G_VARIANT_PARSE_ERROR_VALUE_EXPECTED,
G_VARIANT_PARSE_ERROR_RECURSION
} GVariantParseError;
#define G_VARIANT_PARSE_ERROR (g_variant_parse_error_quark ())
GLIB_DEPRECATED_IN_2_38_FOR(g_variant_parse_error_quark)
GQuark g_variant_parser_get_error_quark (void);
GLIB_AVAILABLE_IN_ALL
GQuark g_variant_parse_error_quark (void);
/**
* G_VARIANT_BUILDER_INIT:
* @variant_type: a const GVariantType*
*
* A stack-allocated #GVariantBuilder must be initialized if it is
* used together with g_auto() to avoid warnings or crashes if
* function returns before g_variant_builder_init() is called on the
* builder. This macro can be used as initializer instead of an
* explicit zeroing a variable when declaring it and a following
* g_variant_builder_init(), but it cannot be assigned to a variable.
*
* The passed @variant_type should be a static GVariantType to avoid
* lifetime issues, as copying the @variant_type does not happen in
* the G_VARIANT_BUILDER_INIT() call, but rather in functions that
* make sure that #GVariantBuilder is valid.
*
* |[
* g_auto(GVariantBuilder) builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE_BYTESTRING);
* ]|
*
* Since: 2.50
*/
#define G_VARIANT_BUILDER_INIT(variant_type) { { { 2942751021u, variant_type, { 0, } } } }
GLIB_AVAILABLE_IN_ALL
GVariantBuilder * g_variant_builder_new (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
void g_variant_builder_unref (GVariantBuilder *builder);
GLIB_AVAILABLE_IN_ALL
GVariantBuilder * g_variant_builder_ref (GVariantBuilder *builder);
GLIB_AVAILABLE_IN_ALL
void g_variant_builder_init (GVariantBuilder *builder,
const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_builder_end (GVariantBuilder *builder);
GLIB_AVAILABLE_IN_ALL
void g_variant_builder_clear (GVariantBuilder *builder);
GLIB_AVAILABLE_IN_ALL
void g_variant_builder_open (GVariantBuilder *builder,
const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
void g_variant_builder_close (GVariantBuilder *builder);
GLIB_AVAILABLE_IN_ALL
void g_variant_builder_add_value (GVariantBuilder *builder,
GVariant *value);
GLIB_AVAILABLE_IN_ALL
void g_variant_builder_add (GVariantBuilder *builder,
const gchar *format_string,
...);
GLIB_AVAILABLE_IN_ALL
void g_variant_builder_add_parsed (GVariantBuilder *builder,
const gchar *format,
...);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new (const gchar *format_string,
...);
GLIB_AVAILABLE_IN_ALL
void g_variant_get (GVariant *value,
const gchar *format_string,
...);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_va (const gchar *format_string,
const gchar **endptr,
va_list *app);
GLIB_AVAILABLE_IN_ALL
void g_variant_get_va (GVariant *value,
const gchar *format_string,
const gchar **endptr,
va_list *app);
GLIB_AVAILABLE_IN_2_34
gboolean g_variant_check_format_string (GVariant *value,
const gchar *format_string,
gboolean copy_only);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_parse (const GVariantType *type,
const gchar *text,
const gchar *limit,
const gchar **endptr,
GError **error);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_parsed (const gchar *format,
...);
GLIB_AVAILABLE_IN_ALL
GVariant * g_variant_new_parsed_va (const gchar *format,
va_list *app);
GLIB_AVAILABLE_IN_2_40
gchar * g_variant_parse_error_print_context (GError *error,
const gchar *source_str);
GLIB_AVAILABLE_IN_ALL
gint g_variant_compare (gconstpointer one,
gconstpointer two);
typedef struct _GVariantDict GVariantDict;
struct _GVariantDict {
/*< private >*/
union
{
struct {
GVariant *asv;
gsize partial_magic;
gsize y[14];
} s;
gsize x[16];
} u;
};
/**
* G_VARIANT_DICT_INIT:
* @asv: (nullable): a GVariant*
*
* A stack-allocated #GVariantDict must be initialized if it is used
* together with g_auto() to avoid warnings or crashes if function
* returns before g_variant_dict_init() is called on the builder.
* This macro can be used as initializer instead of an explicit
* zeroing a variable when declaring it and a following
* g_variant_dict_init(), but it cannot be assigned to a variable.
*
* The passed @asv has to live long enough for #GVariantDict to gather
* the entries from, as the gathering does not happen in the
* G_VARIANT_DICT_INIT() call, but rather in functions that make sure
* that #GVariantDict is valid. In context where the initialization
* value has to be a constant expression, the only possible value of
* @asv is %NULL. It is still possible to call g_variant_dict_init()
* safely with a different @asv right after the variable was
* initialized with G_VARIANT_DICT_INIT().
*
* |[
* g_autoptr(GVariant) variant = get_asv_variant ();
* g_auto(GVariantDict) dict = G_VARIANT_DICT_INIT (variant);
* ]|
*
* Since: 2.50
*/
#define G_VARIANT_DICT_INIT(asv) { { { asv, 3488698669u, { 0, } } } }
GLIB_AVAILABLE_IN_2_40
GVariantDict * g_variant_dict_new (GVariant *from_asv);
GLIB_AVAILABLE_IN_2_40
void g_variant_dict_init (GVariantDict *dict,
GVariant *from_asv);
GLIB_AVAILABLE_IN_2_40
gboolean g_variant_dict_lookup (GVariantDict *dict,
const gchar *key,
const gchar *format_string,
...);
GLIB_AVAILABLE_IN_2_40
GVariant * g_variant_dict_lookup_value (GVariantDict *dict,
const gchar *key,
const GVariantType *expected_type);
GLIB_AVAILABLE_IN_2_40
gboolean g_variant_dict_contains (GVariantDict *dict,
const gchar *key);
GLIB_AVAILABLE_IN_2_40
void g_variant_dict_insert (GVariantDict *dict,
const gchar *key,
const gchar *format_string,
...);
GLIB_AVAILABLE_IN_2_40
void g_variant_dict_insert_value (GVariantDict *dict,
const gchar *key,
GVariant *value);
GLIB_AVAILABLE_IN_2_40
gboolean g_variant_dict_remove (GVariantDict *dict,
const gchar *key);
GLIB_AVAILABLE_IN_2_40
void g_variant_dict_clear (GVariantDict *dict);
GLIB_AVAILABLE_IN_2_40
GVariant * g_variant_dict_end (GVariantDict *dict);
GLIB_AVAILABLE_IN_2_40
GVariantDict * g_variant_dict_ref (GVariantDict *dict);
GLIB_AVAILABLE_IN_2_40
void g_variant_dict_unref (GVariantDict *dict);
G_END_DECLS
#endif /* __G_VARIANT_H__ */
gvarianttype.h 0000644 00000031674 15021467762 0007457 0 ustar 00 /*
* Copyright © 2007, 2008 Ryan Lortie
* Copyright © 2009, 2010 Codethink Limited
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*
* Author: Ryan Lortie
*/
#ifndef __G_VARIANT_TYPE_H__
#define __G_VARIANT_TYPE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
/**
* GVariantType:
*
* A type in the GVariant type system.
*
* Two types may not be compared by value; use g_variant_type_equal() or
* g_variant_type_is_subtype_of(). May be copied using
* g_variant_type_copy() and freed using g_variant_type_free().
**/
typedef struct _GVariantType GVariantType;
/**
* G_VARIANT_TYPE_BOOLEAN:
*
* The type of a value that can be either %TRUE or %FALSE.
**/
#define G_VARIANT_TYPE_BOOLEAN ((const GVariantType *) "b")
/**
* G_VARIANT_TYPE_BYTE:
*
* The type of an integer value that can range from 0 to 255.
**/
#define G_VARIANT_TYPE_BYTE ((const GVariantType *) "y")
/**
* G_VARIANT_TYPE_INT16:
*
* The type of an integer value that can range from -32768 to 32767.
**/
#define G_VARIANT_TYPE_INT16 ((const GVariantType *) "n")
/**
* G_VARIANT_TYPE_UINT16:
*
* The type of an integer value that can range from 0 to 65535.
* There were about this many people living in Toronto in the 1870s.
**/
#define G_VARIANT_TYPE_UINT16 ((const GVariantType *) "q")
/**
* G_VARIANT_TYPE_INT32:
*
* The type of an integer value that can range from -2147483648 to
* 2147483647.
**/
#define G_VARIANT_TYPE_INT32 ((const GVariantType *) "i")
/**
* G_VARIANT_TYPE_UINT32:
*
* The type of an integer value that can range from 0 to 4294967295.
* That's one number for everyone who was around in the late 1970s.
**/
#define G_VARIANT_TYPE_UINT32 ((const GVariantType *) "u")
/**
* G_VARIANT_TYPE_INT64:
*
* The type of an integer value that can range from
* -9223372036854775808 to 9223372036854775807.
**/
#define G_VARIANT_TYPE_INT64 ((const GVariantType *) "x")
/**
* G_VARIANT_TYPE_UINT64:
*
* The type of an integer value that can range from 0
* to 18446744073709551615 (inclusive). That's a really big number,
* but a Rubik's cube can have a bit more than twice as many possible
* positions.
**/
#define G_VARIANT_TYPE_UINT64 ((const GVariantType *) "t")
/**
* G_VARIANT_TYPE_DOUBLE:
*
* The type of a double precision IEEE754 floating point number.
* These guys go up to about 1.80e308 (plus and minus) but miss out on
* some numbers in between. In any case, that's far greater than the
* estimated number of fundamental particles in the observable
* universe.
**/
#define G_VARIANT_TYPE_DOUBLE ((const GVariantType *) "d")
/**
* G_VARIANT_TYPE_STRING:
*
* The type of a string. "" is a string. %NULL is not a string.
**/
#define G_VARIANT_TYPE_STRING ((const GVariantType *) "s")
/**
* G_VARIANT_TYPE_OBJECT_PATH:
*
* The type of a D-Bus object reference. These are strings of a
* specific format used to identify objects at a given destination on
* the bus.
*
* If you are not interacting with D-Bus, then there is no reason to make
* use of this type. If you are, then the D-Bus specification contains a
* precise description of valid object paths.
**/
#define G_VARIANT_TYPE_OBJECT_PATH ((const GVariantType *) "o")
/**
* G_VARIANT_TYPE_SIGNATURE:
*
* The type of a D-Bus type signature. These are strings of a specific
* format used as type signatures for D-Bus methods and messages.
*
* If you are not interacting with D-Bus, then there is no reason to make
* use of this type. If you are, then the D-Bus specification contains a
* precise description of valid signature strings.
**/
#define G_VARIANT_TYPE_SIGNATURE ((const GVariantType *) "g")
/**
* G_VARIANT_TYPE_VARIANT:
*
* The type of a box that contains any other value (including another
* variant).
**/
#define G_VARIANT_TYPE_VARIANT ((const GVariantType *) "v")
/**
* G_VARIANT_TYPE_HANDLE:
*
* The type of a 32bit signed integer value, that by convention, is used
* as an index into an array of file descriptors that are sent alongside
* a D-Bus message.
*
* If you are not interacting with D-Bus, then there is no reason to make
* use of this type.
**/
#define G_VARIANT_TYPE_HANDLE ((const GVariantType *) "h")
/**
* G_VARIANT_TYPE_UNIT:
*
* The empty tuple type. Has only one instance. Known also as "triv"
* or "void".
**/
#define G_VARIANT_TYPE_UNIT ((const GVariantType *) "()")
/**
* G_VARIANT_TYPE_ANY:
*
* An indefinite type that is a supertype of every type (including
* itself).
**/
#define G_VARIANT_TYPE_ANY ((const GVariantType *) "*")
/**
* G_VARIANT_TYPE_BASIC:
*
* An indefinite type that is a supertype of every basic (ie:
* non-container) type.
**/
#define G_VARIANT_TYPE_BASIC ((const GVariantType *) "?")
/**
* G_VARIANT_TYPE_MAYBE:
*
* An indefinite type that is a supertype of every maybe type.
**/
#define G_VARIANT_TYPE_MAYBE ((const GVariantType *) "m*")
/**
* G_VARIANT_TYPE_ARRAY:
*
* An indefinite type that is a supertype of every array type.
**/
#define G_VARIANT_TYPE_ARRAY ((const GVariantType *) "a*")
/**
* G_VARIANT_TYPE_TUPLE:
*
* An indefinite type that is a supertype of every tuple type,
* regardless of the number of items in the tuple.
**/
#define G_VARIANT_TYPE_TUPLE ((const GVariantType *) "r")
/**
* G_VARIANT_TYPE_DICT_ENTRY:
*
* An indefinite type that is a supertype of every dictionary entry
* type.
**/
#define G_VARIANT_TYPE_DICT_ENTRY ((const GVariantType *) "{?*}")
/**
* G_VARIANT_TYPE_DICTIONARY:
*
* An indefinite type that is a supertype of every dictionary type --
* that is, any array type that has an element type equal to any
* dictionary entry type.
**/
#define G_VARIANT_TYPE_DICTIONARY ((const GVariantType *) "a{?*}")
/**
* G_VARIANT_TYPE_STRING_ARRAY:
*
* The type of an array of strings.
**/
#define G_VARIANT_TYPE_STRING_ARRAY ((const GVariantType *) "as")
/**
* G_VARIANT_TYPE_OBJECT_PATH_ARRAY:
*
* The type of an array of object paths.
**/
#define G_VARIANT_TYPE_OBJECT_PATH_ARRAY ((const GVariantType *) "ao")
/**
* G_VARIANT_TYPE_BYTESTRING:
*
* The type of an array of bytes. This type is commonly used to pass
* around strings that may not be valid utf8. In that case, the
* convention is that the nul terminator character should be included as
* the last character in the array.
**/
#define G_VARIANT_TYPE_BYTESTRING ((const GVariantType *) "ay")
/**
* G_VARIANT_TYPE_BYTESTRING_ARRAY:
*
* The type of an array of byte strings (an array of arrays of bytes).
**/
#define G_VARIANT_TYPE_BYTESTRING_ARRAY ((const GVariantType *) "aay")
/**
* G_VARIANT_TYPE_VARDICT:
*
* The type of a dictionary mapping strings to variants (the ubiquitous
* "a{sv}" type).
*
* Since: 2.30
**/
#define G_VARIANT_TYPE_VARDICT ((const GVariantType *) "a{sv}")
/**
* G_VARIANT_TYPE:
* @type_string: a well-formed #GVariantType type string
*
* Converts a string to a const #GVariantType. Depending on the
* current debugging level, this function may perform a runtime check
* to ensure that @string is a valid GVariant type string.
*
* It is always a programmer error to use this macro with an invalid
* type string. If in doubt, use g_variant_type_string_is_valid() to
* check if the string is valid.
*
* Since 2.24
**/
#ifndef G_DISABLE_CHECKS
# define G_VARIANT_TYPE(type_string) (g_variant_type_checked_ ((type_string)))
#else
# define G_VARIANT_TYPE(type_string) ((const GVariantType *) (type_string))
#endif
/* type string checking */
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_string_is_valid (const gchar *type_string);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_string_scan (const gchar *string,
const gchar *limit,
const gchar **endptr);
/* create/destroy */
GLIB_AVAILABLE_IN_ALL
void g_variant_type_free (GVariantType *type);
GLIB_AVAILABLE_IN_ALL
GVariantType * g_variant_type_copy (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
GVariantType * g_variant_type_new (const gchar *type_string);
/* getters */
GLIB_AVAILABLE_IN_ALL
gsize g_variant_type_get_string_length (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
const gchar * g_variant_type_peek_string (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gchar * g_variant_type_dup_string (const GVariantType *type);
/* classification */
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_definite (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_container (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_basic (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_maybe (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_array (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_tuple (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_dict_entry (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_variant (const GVariantType *type);
/* for hash tables */
GLIB_AVAILABLE_IN_ALL
guint g_variant_type_hash (gconstpointer type);
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_equal (gconstpointer type1,
gconstpointer type2);
/* subtypes */
GLIB_AVAILABLE_IN_ALL
gboolean g_variant_type_is_subtype_of (const GVariantType *type,
const GVariantType *supertype);
/* type iterator interface */
GLIB_AVAILABLE_IN_ALL
const GVariantType * g_variant_type_element (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
const GVariantType * g_variant_type_first (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
const GVariantType * g_variant_type_next (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
gsize g_variant_type_n_items (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
const GVariantType * g_variant_type_key (const GVariantType *type);
GLIB_AVAILABLE_IN_ALL
const GVariantType * g_variant_type_value (const GVariantType *type);
/* constructors */
GLIB_AVAILABLE_IN_ALL
GVariantType * g_variant_type_new_array (const GVariantType *element);
GLIB_AVAILABLE_IN_ALL
GVariantType * g_variant_type_new_maybe (const GVariantType *element);
GLIB_AVAILABLE_IN_ALL
GVariantType * g_variant_type_new_tuple (const GVariantType * const *items,
gint length);
GLIB_AVAILABLE_IN_ALL
GVariantType * g_variant_type_new_dict_entry (const GVariantType *key,
const GVariantType *value);
/*< private >*/
GLIB_AVAILABLE_IN_ALL
const GVariantType * g_variant_type_checked_ (const gchar *);
GLIB_AVAILABLE_IN_2_60
gsize g_variant_type_string_get_depth_ (const gchar *type_string);
G_END_DECLS
#endif /* __G_VARIANT_TYPE_H__ */
grcbox.h 0000644 00000007630 15021467762 0006221 0 ustar 00 /* grcbox.h: Reference counted data
*
* Copyright 2018 Emmanuele Bassi
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#pragma once
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#if defined(glib_typeof_2_68) && GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68
/* for glib_typeof */
#include
#endif
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_2_58
gpointer g_rc_box_alloc (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_2_58
gpointer g_rc_box_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_2_58
gpointer g_rc_box_dup (gsize block_size,
gconstpointer mem_block) G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_2_58
gpointer g_rc_box_acquire (gpointer mem_block);
GLIB_AVAILABLE_IN_2_58
void g_rc_box_release (gpointer mem_block);
GLIB_AVAILABLE_IN_2_58
void g_rc_box_release_full (gpointer mem_block,
GDestroyNotify clear_func);
GLIB_AVAILABLE_IN_2_58
gsize g_rc_box_get_size (gpointer mem_block);
GLIB_AVAILABLE_IN_2_58
gpointer g_atomic_rc_box_alloc (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_2_58
gpointer g_atomic_rc_box_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_2_58
gpointer g_atomic_rc_box_dup (gsize block_size,
gconstpointer mem_block) G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_2_58
gpointer g_atomic_rc_box_acquire (gpointer mem_block);
GLIB_AVAILABLE_IN_2_58
void g_atomic_rc_box_release (gpointer mem_block);
GLIB_AVAILABLE_IN_2_58
void g_atomic_rc_box_release_full (gpointer mem_block,
GDestroyNotify clear_func);
GLIB_AVAILABLE_IN_2_58
gsize g_atomic_rc_box_get_size (gpointer mem_block);
#define g_rc_box_new(type) \
((type *) g_rc_box_alloc (sizeof (type)))
#define g_rc_box_new0(type) \
((type *) g_rc_box_alloc0 (sizeof (type)))
#define g_atomic_rc_box_new(type) \
((type *) g_atomic_rc_box_alloc (sizeof (type)))
#define g_atomic_rc_box_new0(type) \
((type *) g_atomic_rc_box_alloc0 (sizeof (type)))
#if defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)
/* Type check to avoid assigning references to different types */
#define g_rc_box_acquire(mem_block) \
((glib_typeof (mem_block)) (g_rc_box_acquire) (mem_block))
#define g_atomic_rc_box_acquire(mem_block) \
((glib_typeof (mem_block)) (g_atomic_rc_box_acquire) (mem_block))
/* Type check to avoid duplicating data to different types */
#define g_rc_box_dup(block_size, mem_block) \
((glib_typeof (mem_block)) (g_rc_box_dup) (block_size, mem_block))
#define g_atomic_rc_box_dup(block_size, mem_block) \
((glib_typeof (mem_block)) (g_atomic_rc_box_dup) (block_size, mem_block))
#endif
G_END_DECLS
gmarkup.h 0000644 00000025174 15021467762 0006406 0 ustar 00 /* gmarkup.h - Simple XML-like string parser/writer
*
* Copyright 2000 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_MARKUP_H__
#define __G_MARKUP_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
G_BEGIN_DECLS
/**
* GMarkupError:
* @G_MARKUP_ERROR_BAD_UTF8: text being parsed was not valid UTF-8
* @G_MARKUP_ERROR_EMPTY: document contained nothing, or only whitespace
* @G_MARKUP_ERROR_PARSE: document was ill-formed
* @G_MARKUP_ERROR_UNKNOWN_ELEMENT: error should be set by #GMarkupParser
* functions; element wasn't known
* @G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: error should be set by #GMarkupParser
* functions; attribute wasn't known
* @G_MARKUP_ERROR_INVALID_CONTENT: error should be set by #GMarkupParser
* functions; content was invalid
* @G_MARKUP_ERROR_MISSING_ATTRIBUTE: error should be set by #GMarkupParser
* functions; a required attribute was missing
*
* Error codes returned by markup parsing.
*/
typedef enum
{
G_MARKUP_ERROR_BAD_UTF8,
G_MARKUP_ERROR_EMPTY,
G_MARKUP_ERROR_PARSE,
/* The following are primarily intended for specific GMarkupParser
* implementations to set.
*/
G_MARKUP_ERROR_UNKNOWN_ELEMENT,
G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
G_MARKUP_ERROR_INVALID_CONTENT,
G_MARKUP_ERROR_MISSING_ATTRIBUTE
} GMarkupError;
/**
* G_MARKUP_ERROR:
*
* Error domain for markup parsing.
* Errors in this domain will be from the #GMarkupError enumeration.
* See #GError for information on error domains.
*/
#define G_MARKUP_ERROR g_markup_error_quark ()
GLIB_AVAILABLE_IN_ALL
GQuark g_markup_error_quark (void);
/**
* GMarkupParseFlags:
* @G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: flag you should not use
* @G_MARKUP_TREAT_CDATA_AS_TEXT: When this flag is set, CDATA marked
* sections are not passed literally to the @passthrough function of
* the parser. Instead, the content of the section (without the
* ``) is
* passed to the @text function. This flag was added in GLib 2.12
* @G_MARKUP_PREFIX_ERROR_POSITION: Normally errors caught by GMarkup
* itself have line/column information prefixed to them to let the
* caller know the location of the error. When this flag is set the
* location information is also prefixed to errors generated by the
* #GMarkupParser implementation functions
* @G_MARKUP_IGNORE_QUALIFIED: Ignore (don't report) qualified
* attributes and tags, along with their contents. A qualified
* attribute or tag is one that contains ':' in its name (ie: is in
* another namespace). Since: 2.40.
*
* Flags that affect the behaviour of the parser.
*/
typedef enum
{
G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0,
G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1,
G_MARKUP_PREFIX_ERROR_POSITION = 1 << 2,
G_MARKUP_IGNORE_QUALIFIED = 1 << 3
} GMarkupParseFlags;
/**
* GMarkupParseContext:
*
* A parse context is used to parse a stream of bytes that
* you expect to contain marked-up text.
*
* See g_markup_parse_context_new(), #GMarkupParser, and so
* on for more details.
*/
typedef struct _GMarkupParseContext GMarkupParseContext;
typedef struct _GMarkupParser GMarkupParser;
/**
* GMarkupParser:
* @start_element: Callback to invoke when the opening tag of an element
* is seen. The callback's @attribute_names and @attribute_values parameters
* are %NULL-terminated.
* @end_element: Callback to invoke when the closing tag of an element
* is seen. Note that this is also called for empty tags like
* ``.
* @text: Callback to invoke when some text is seen (text is always
* inside an element). Note that the text of an element may be spread
* over multiple calls of this function. If the
* %G_MARKUP_TREAT_CDATA_AS_TEXT flag is set, this function is also
* called for the content of CDATA marked sections.
* @passthrough: Callback to invoke for comments, processing instructions
* and doctype declarations; if you're re-writing the parsed document,
* write the passthrough text back out in the same position. If the
* %G_MARKUP_TREAT_CDATA_AS_TEXT flag is not set, this function is also
* called for CDATA marked sections.
* @error: Callback to invoke when an error occurs.
*
* Any of the fields in #GMarkupParser can be %NULL, in which case they
* will be ignored. Except for the @error function, any of these callbacks
* can set an error; in particular the %G_MARKUP_ERROR_UNKNOWN_ELEMENT,
* %G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, and %G_MARKUP_ERROR_INVALID_CONTENT
* errors are intended to be set from these callbacks. If you set an error
* from a callback, g_markup_parse_context_parse() will report that error
* back to its caller.
*/
struct _GMarkupParser
{
/* Called for open tags */
void (*start_element) (GMarkupParseContext *context,
const gchar *element_name,
const gchar **attribute_names,
const gchar **attribute_values,
gpointer user_data,
GError **error);
/* Called for close tags */
void (*end_element) (GMarkupParseContext *context,
const gchar *element_name,
gpointer user_data,
GError **error);
/* Called for character data */
/* text is not nul-terminated */
void (*text) (GMarkupParseContext *context,
const gchar *text,
gsize text_len,
gpointer user_data,
GError **error);
/* Called for strings that should be re-saved verbatim in this same
* position, but are not otherwise interpretable. At the moment
* this includes comments and processing instructions.
*/
/* text is not nul-terminated. */
void (*passthrough) (GMarkupParseContext *context,
const gchar *passthrough_text,
gsize text_len,
gpointer user_data,
GError **error);
/* Called on error, including one set by other
* methods in the vtable. The GError should not be freed.
*/
void (*error) (GMarkupParseContext *context,
GError *error,
gpointer user_data);
};
GLIB_AVAILABLE_IN_ALL
GMarkupParseContext *g_markup_parse_context_new (const GMarkupParser *parser,
GMarkupParseFlags flags,
gpointer user_data,
GDestroyNotify user_data_dnotify);
GLIB_AVAILABLE_IN_2_36
GMarkupParseContext *g_markup_parse_context_ref (GMarkupParseContext *context);
GLIB_AVAILABLE_IN_2_36
void g_markup_parse_context_unref (GMarkupParseContext *context);
GLIB_AVAILABLE_IN_ALL
void g_markup_parse_context_free (GMarkupParseContext *context);
GLIB_AVAILABLE_IN_ALL
gboolean g_markup_parse_context_parse (GMarkupParseContext *context,
const gchar *text,
gssize text_len,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_markup_parse_context_push (GMarkupParseContext *context,
const GMarkupParser *parser,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
gpointer g_markup_parse_context_pop (GMarkupParseContext *context);
GLIB_AVAILABLE_IN_ALL
gboolean g_markup_parse_context_end_parse (GMarkupParseContext *context,
GError **error);
GLIB_AVAILABLE_IN_ALL
const gchar * g_markup_parse_context_get_element (GMarkupParseContext *context);
GLIB_AVAILABLE_IN_ALL
const GSList * g_markup_parse_context_get_element_stack (GMarkupParseContext *context);
/* For user-constructed error messages, has no precise semantics */
GLIB_AVAILABLE_IN_ALL
void g_markup_parse_context_get_position (GMarkupParseContext *context,
gint *line_number,
gint *char_number);
GLIB_AVAILABLE_IN_ALL
gpointer g_markup_parse_context_get_user_data (GMarkupParseContext *context);
/* useful when saving */
GLIB_AVAILABLE_IN_ALL
gchar* g_markup_escape_text (const gchar *text,
gssize length);
GLIB_AVAILABLE_IN_ALL
gchar *g_markup_printf_escaped (const char *format,
...) G_GNUC_PRINTF (1, 2);
GLIB_AVAILABLE_IN_ALL
gchar *g_markup_vprintf_escaped (const char *format,
va_list args) G_GNUC_PRINTF(1, 0);
typedef enum
{
G_MARKUP_COLLECT_INVALID,
G_MARKUP_COLLECT_STRING,
G_MARKUP_COLLECT_STRDUP,
G_MARKUP_COLLECT_BOOLEAN,
G_MARKUP_COLLECT_TRISTATE,
G_MARKUP_COLLECT_OPTIONAL = (1 << 16)
} GMarkupCollectType;
/* useful from start_element */
GLIB_AVAILABLE_IN_ALL
gboolean g_markup_collect_attributes (const gchar *element_name,
const gchar **attribute_names,
const gchar **attribute_values,
GError **error,
GMarkupCollectType first_type,
const gchar *first_attr,
...);
G_END_DECLS
#endif /* __G_MARKUP_H__ */
goption.h 0000644 00000037343 15021467762 0006420 0 ustar 00 /* goption.h - Option parser
*
* Copyright (C) 2004 Anders Carlsson
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_OPTION_H__
#define __G_OPTION_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
/**
* GOptionContext:
*
* A `GOptionContext` struct defines which options
* are accepted by the commandline option parser. The struct has only private
* fields and should not be directly accessed.
*/
typedef struct _GOptionContext GOptionContext;
/**
* GOptionGroup:
*
* A `GOptionGroup` struct defines the options in a single
* group. The struct has only private fields and should not be directly accessed.
*
* All options in a group share the same translation function. Libraries which
* need to parse commandline options are expected to provide a function for
* getting a `GOptionGroup` holding their options, which
* the application can then add to its #GOptionContext.
*/
typedef struct _GOptionGroup GOptionGroup;
typedef struct _GOptionEntry GOptionEntry;
/**
* GOptionFlags:
* @G_OPTION_FLAG_NONE: No flags. Since: 2.42.
* @G_OPTION_FLAG_HIDDEN: The option doesn't appear in `--help` output.
* @G_OPTION_FLAG_IN_MAIN: The option appears in the main section of the
* `--help` output, even if it is defined in a group.
* @G_OPTION_FLAG_REVERSE: For options of the %G_OPTION_ARG_NONE kind, this
* flag indicates that the sense of the option is reversed.
* @G_OPTION_FLAG_NO_ARG: For options of the %G_OPTION_ARG_CALLBACK kind,
* this flag indicates that the callback does not take any argument
* (like a %G_OPTION_ARG_NONE option). Since 2.8
* @G_OPTION_FLAG_FILENAME: For options of the %G_OPTION_ARG_CALLBACK
* kind, this flag indicates that the argument should be passed to the
* callback in the GLib filename encoding rather than UTF-8. Since 2.8
* @G_OPTION_FLAG_OPTIONAL_ARG: For options of the %G_OPTION_ARG_CALLBACK
* kind, this flag indicates that the argument supply is optional.
* If no argument is given then data of %GOptionParseFunc will be
* set to NULL. Since 2.8
* @G_OPTION_FLAG_NOALIAS: This flag turns off the automatic conflict
* resolution which prefixes long option names with `groupname-` if
* there is a conflict. This option should only be used in situations
* where aliasing is necessary to model some legacy commandline interface.
* It is not safe to use this option, unless all option groups are under
* your direct control. Since 2.8.
*
* Flags which modify individual options.
*/
typedef enum
{
G_OPTION_FLAG_NONE = 0,
G_OPTION_FLAG_HIDDEN = 1 << 0,
G_OPTION_FLAG_IN_MAIN = 1 << 1,
G_OPTION_FLAG_REVERSE = 1 << 2,
G_OPTION_FLAG_NO_ARG = 1 << 3,
G_OPTION_FLAG_FILENAME = 1 << 4,
G_OPTION_FLAG_OPTIONAL_ARG = 1 << 5,
G_OPTION_FLAG_NOALIAS = 1 << 6
} GOptionFlags;
/**
* GOptionArg:
* @G_OPTION_ARG_NONE: No extra argument. This is useful for simple flags.
* @G_OPTION_ARG_STRING: The option takes a UTF-8 string argument.
* @G_OPTION_ARG_INT: The option takes an integer argument.
* @G_OPTION_ARG_CALLBACK: The option provides a callback (of type
* #GOptionArgFunc) to parse the extra argument.
* @G_OPTION_ARG_FILENAME: The option takes a filename as argument, which will
be in the GLib filename encoding rather than UTF-8.
* @G_OPTION_ARG_STRING_ARRAY: The option takes a string argument, multiple
* uses of the option are collected into an array of strings.
* @G_OPTION_ARG_FILENAME_ARRAY: The option takes a filename as argument,
* multiple uses of the option are collected into an array of strings.
* @G_OPTION_ARG_DOUBLE: The option takes a double argument. The argument
* can be formatted either for the user's locale or for the "C" locale.
* Since 2.12
* @G_OPTION_ARG_INT64: The option takes a 64-bit integer. Like
* %G_OPTION_ARG_INT but for larger numbers. The number can be in
* decimal base, or in hexadecimal (when prefixed with `0x`, for
* example, `0xffffffff`). Since 2.12
*
* The #GOptionArg enum values determine which type of extra argument the
* options expect to find. If an option expects an extra argument, it can
* be specified in several ways; with a short option: `-x arg`, with a long
* option: `--name arg` or combined in a single argument: `--name=arg`.
*/
typedef enum
{
G_OPTION_ARG_NONE,
G_OPTION_ARG_STRING,
G_OPTION_ARG_INT,
G_OPTION_ARG_CALLBACK,
G_OPTION_ARG_FILENAME,
G_OPTION_ARG_STRING_ARRAY,
G_OPTION_ARG_FILENAME_ARRAY,
G_OPTION_ARG_DOUBLE,
G_OPTION_ARG_INT64
} GOptionArg;
/**
* GOptionArgFunc:
* @option_name: The name of the option being parsed. This will be either a
* single dash followed by a single letter (for a short name) or two dashes
* followed by a long option name.
* @value: The value to be parsed.
* @data: User data added to the #GOptionGroup containing the option when it
* was created with g_option_group_new()
* @error: A return location for errors. The error code %G_OPTION_ERROR_FAILED
* is intended to be used for errors in #GOptionArgFunc callbacks.
*
* The type of function to be passed as callback for %G_OPTION_ARG_CALLBACK
* options.
*
* Returns: %TRUE if the option was successfully parsed, %FALSE if an error
* occurred, in which case @error should be set with g_set_error()
*/
typedef gboolean (*GOptionArgFunc) (const gchar *option_name,
const gchar *value,
gpointer data,
GError **error);
/**
* GOptionParseFunc:
* @context: The active #GOptionContext
* @group: The group to which the function belongs
* @data: User data added to the #GOptionGroup containing the option when it
* was created with g_option_group_new()
* @error: A return location for error details
*
* The type of function that can be called before and after parsing.
*
* Returns: %TRUE if the function completed successfully, %FALSE if an error
* occurred, in which case @error should be set with g_set_error()
*/
typedef gboolean (*GOptionParseFunc) (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error);
/**
* GOptionErrorFunc:
* @context: The active #GOptionContext
* @group: The group to which the function belongs
* @data: User data added to the #GOptionGroup containing the option when it
* was created with g_option_group_new()
* @error: The #GError containing details about the parse error
*
* The type of function to be used as callback when a parse error occurs.
*/
typedef void (*GOptionErrorFunc) (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error);
/**
* G_OPTION_ERROR:
*
* Error domain for option parsing. Errors in this domain will
* be from the #GOptionError enumeration. See #GError for information on
* error domains.
*/
#define G_OPTION_ERROR (g_option_error_quark ())
/**
* GOptionError:
* @G_OPTION_ERROR_UNKNOWN_OPTION: An option was not known to the parser.
* This error will only be reported, if the parser hasn't been instructed
* to ignore unknown options, see g_option_context_set_ignore_unknown_options().
* @G_OPTION_ERROR_BAD_VALUE: A value couldn't be parsed.
* @G_OPTION_ERROR_FAILED: A #GOptionArgFunc callback failed.
*
* Error codes returned by option parsing.
*/
typedef enum
{
G_OPTION_ERROR_UNKNOWN_OPTION,
G_OPTION_ERROR_BAD_VALUE,
G_OPTION_ERROR_FAILED
} GOptionError;
GLIB_AVAILABLE_IN_ALL
GQuark g_option_error_quark (void);
/**
* GOptionEntry:
* @long_name: The long name of an option can be used to specify it
* in a commandline as `--long_name`. Every option must have a
* long name. To resolve conflicts if multiple option groups contain
* the same long name, it is also possible to specify the option as
* `--groupname-long_name`.
* @short_name: If an option has a short name, it can be specified
* `-short_name` in a commandline. @short_name must be a printable
* ASCII character different from '-', or zero if the option has no
* short name.
* @flags: Flags from #GOptionFlags
* @arg: The type of the option, as a #GOptionArg
* @arg_data: If the @arg type is %G_OPTION_ARG_CALLBACK, then @arg_data
* must point to a #GOptionArgFunc callback function, which will be
* called to handle the extra argument. Otherwise, @arg_data is a
* pointer to a location to store the value, the required type of
* the location depends on the @arg type:
* - %G_OPTION_ARG_NONE: %gboolean
* - %G_OPTION_ARG_STRING: %gchar*
* - %G_OPTION_ARG_INT: %gint
* - %G_OPTION_ARG_FILENAME: %gchar*
* - %G_OPTION_ARG_STRING_ARRAY: %gchar**
* - %G_OPTION_ARG_FILENAME_ARRAY: %gchar**
* - %G_OPTION_ARG_DOUBLE: %gdouble
* If @arg type is %G_OPTION_ARG_STRING or %G_OPTION_ARG_FILENAME,
* the location will contain a newly allocated string if the option
* was given. That string needs to be freed by the callee using g_free().
* Likewise if @arg type is %G_OPTION_ARG_STRING_ARRAY or
* %G_OPTION_ARG_FILENAME_ARRAY, the data should be freed using g_strfreev().
* @description: the description for the option in `--help`
* output. The @description is translated using the @translate_func
* of the group, see g_option_group_set_translation_domain().
* @arg_description: The placeholder to use for the extra argument parsed
* by the option in `--help` output. The @arg_description is translated
* using the @translate_func of the group, see
* g_option_group_set_translation_domain().
*
* A GOptionEntry struct defines a single option. To have an effect, they
* must be added to a #GOptionGroup with g_option_context_add_main_entries()
* or g_option_group_add_entries().
*/
struct _GOptionEntry
{
const gchar *long_name;
gchar short_name;
gint flags;
GOptionArg arg;
gpointer arg_data;
const gchar *description;
const gchar *arg_description;
};
/**
* G_OPTION_REMAINING:
*
* If a long option in the main group has this name, it is not treated as a
* regular option. Instead it collects all non-option arguments which would
* otherwise be left in `argv`. The option must be of type
* %G_OPTION_ARG_CALLBACK, %G_OPTION_ARG_STRING_ARRAY
* or %G_OPTION_ARG_FILENAME_ARRAY.
*
*
* Using #G_OPTION_REMAINING instead of simply scanning `argv`
* for leftover arguments has the advantage that GOption takes care of
* necessary encoding conversions for strings or filenames.
*
* Since: 2.6
*/
#define G_OPTION_REMAINING ""
GLIB_AVAILABLE_IN_ALL
GOptionContext *g_option_context_new (const gchar *parameter_string);
GLIB_AVAILABLE_IN_ALL
void g_option_context_set_summary (GOptionContext *context,
const gchar *summary);
GLIB_AVAILABLE_IN_ALL
const gchar * g_option_context_get_summary (GOptionContext *context);
GLIB_AVAILABLE_IN_ALL
void g_option_context_set_description (GOptionContext *context,
const gchar *description);
GLIB_AVAILABLE_IN_ALL
const gchar * g_option_context_get_description (GOptionContext *context);
GLIB_AVAILABLE_IN_ALL
void g_option_context_free (GOptionContext *context);
GLIB_AVAILABLE_IN_ALL
void g_option_context_set_help_enabled (GOptionContext *context,
gboolean help_enabled);
GLIB_AVAILABLE_IN_ALL
gboolean g_option_context_get_help_enabled (GOptionContext *context);
GLIB_AVAILABLE_IN_ALL
void g_option_context_set_ignore_unknown_options (GOptionContext *context,
gboolean ignore_unknown);
GLIB_AVAILABLE_IN_ALL
gboolean g_option_context_get_ignore_unknown_options (GOptionContext *context);
GLIB_AVAILABLE_IN_2_44
void g_option_context_set_strict_posix (GOptionContext *context,
gboolean strict_posix);
GLIB_AVAILABLE_IN_2_44
gboolean g_option_context_get_strict_posix (GOptionContext *context);
GLIB_AVAILABLE_IN_ALL
void g_option_context_add_main_entries (GOptionContext *context,
const GOptionEntry *entries,
const gchar *translation_domain);
GLIB_AVAILABLE_IN_ALL
gboolean g_option_context_parse (GOptionContext *context,
gint *argc,
gchar ***argv,
GError **error);
GLIB_AVAILABLE_IN_2_40
gboolean g_option_context_parse_strv (GOptionContext *context,
gchar ***arguments,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_option_context_set_translate_func (GOptionContext *context,
GTranslateFunc func,
gpointer data,
GDestroyNotify destroy_notify);
GLIB_AVAILABLE_IN_ALL
void g_option_context_set_translation_domain (GOptionContext *context,
const gchar *domain);
GLIB_AVAILABLE_IN_ALL
void g_option_context_add_group (GOptionContext *context,
GOptionGroup *group);
GLIB_AVAILABLE_IN_ALL
void g_option_context_set_main_group (GOptionContext *context,
GOptionGroup *group);
GLIB_AVAILABLE_IN_ALL
GOptionGroup *g_option_context_get_main_group (GOptionContext *context);
GLIB_AVAILABLE_IN_ALL
gchar *g_option_context_get_help (GOptionContext *context,
gboolean main_help,
GOptionGroup *group);
GLIB_AVAILABLE_IN_ALL
GOptionGroup *g_option_group_new (const gchar *name,
const gchar *description,
const gchar *help_description,
gpointer user_data,
GDestroyNotify destroy);
GLIB_AVAILABLE_IN_ALL
void g_option_group_set_parse_hooks (GOptionGroup *group,
GOptionParseFunc pre_parse_func,
GOptionParseFunc post_parse_func);
GLIB_AVAILABLE_IN_ALL
void g_option_group_set_error_hook (GOptionGroup *group,
GOptionErrorFunc error_func);
GLIB_DEPRECATED_IN_2_44
void g_option_group_free (GOptionGroup *group);
GLIB_AVAILABLE_IN_2_44
GOptionGroup *g_option_group_ref (GOptionGroup *group);
GLIB_AVAILABLE_IN_2_44
void g_option_group_unref (GOptionGroup *group);
GLIB_AVAILABLE_IN_ALL
void g_option_group_add_entries (GOptionGroup *group,
const GOptionEntry *entries);
GLIB_AVAILABLE_IN_ALL
void g_option_group_set_translate_func (GOptionGroup *group,
GTranslateFunc func,
gpointer data,
GDestroyNotify destroy_notify);
GLIB_AVAILABLE_IN_ALL
void g_option_group_set_translation_domain (GOptionGroup *group,
const gchar *domain);
G_END_DECLS
#endif /* __G_OPTION_H__ */
gshell.h 0000644 00000003330 15021467762 0006204 0 ustar 00 /* gshell.h - Shell-related utilities
*
* Copyright 2000 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_SHELL_H__
#define __G_SHELL_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
#define G_SHELL_ERROR g_shell_error_quark ()
typedef enum
{
/* mismatched or otherwise mangled quoting */
G_SHELL_ERROR_BAD_QUOTING,
/* string to be parsed was empty */
G_SHELL_ERROR_EMPTY_STRING,
G_SHELL_ERROR_FAILED
} GShellError;
GLIB_AVAILABLE_IN_ALL
GQuark g_shell_error_quark (void);
GLIB_AVAILABLE_IN_ALL
gchar* g_shell_quote (const gchar *unquoted_string);
GLIB_AVAILABLE_IN_ALL
gchar* g_shell_unquote (const gchar *quoted_string,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_shell_parse_argv (const gchar *command_line,
gint *argcp,
gchar ***argvp,
GError **error);
G_END_DECLS
#endif /* __G_SHELL_H__ */
gspawn.h 0000644 00000031622 15021467762 0006232 0 ustar 00 /* gspawn.h - Process launching
*
* Copyright 2000 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_SPAWN_H__
#define __G_SPAWN_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
/* I'm not sure I remember our proposed naming convention here. */
/**
* G_SPAWN_ERROR:
*
* Error domain for spawning processes. Errors in this domain will
* be from the #GSpawnError enumeration. See #GError for information on
* error domains.
*/
#define G_SPAWN_ERROR g_spawn_error_quark ()
/**
* GSpawnError:
* @G_SPAWN_ERROR_FORK: Fork failed due to lack of memory.
* @G_SPAWN_ERROR_READ: Read or select on pipes failed.
* @G_SPAWN_ERROR_CHDIR: Changing to working directory failed.
* @G_SPAWN_ERROR_ACCES: execv() returned `EACCES`
* @G_SPAWN_ERROR_PERM: execv() returned `EPERM`
* @G_SPAWN_ERROR_TOO_BIG: execv() returned `E2BIG`
* @G_SPAWN_ERROR_2BIG: deprecated alias for %G_SPAWN_ERROR_TOO_BIG (deprecated since GLib 2.32)
* @G_SPAWN_ERROR_NOEXEC: execv() returned `ENOEXEC`
* @G_SPAWN_ERROR_NAMETOOLONG: execv() returned `ENAMETOOLONG`
* @G_SPAWN_ERROR_NOENT: execv() returned `ENOENT`
* @G_SPAWN_ERROR_NOMEM: execv() returned `ENOMEM`
* @G_SPAWN_ERROR_NOTDIR: execv() returned `ENOTDIR`
* @G_SPAWN_ERROR_LOOP: execv() returned `ELOOP`
* @G_SPAWN_ERROR_TXTBUSY: execv() returned `ETXTBUSY`
* @G_SPAWN_ERROR_IO: execv() returned `EIO`
* @G_SPAWN_ERROR_NFILE: execv() returned `ENFILE`
* @G_SPAWN_ERROR_MFILE: execv() returned `EMFILE`
* @G_SPAWN_ERROR_INVAL: execv() returned `EINVAL`
* @G_SPAWN_ERROR_ISDIR: execv() returned `EISDIR`
* @G_SPAWN_ERROR_LIBBAD: execv() returned `ELIBBAD`
* @G_SPAWN_ERROR_FAILED: Some other fatal failure,
* `error->message` should explain.
*
* Error codes returned by spawning processes.
*/
typedef enum
{
G_SPAWN_ERROR_FORK, /* fork failed due to lack of memory */
G_SPAWN_ERROR_READ, /* read or select on pipes failed */
G_SPAWN_ERROR_CHDIR, /* changing to working dir failed */
G_SPAWN_ERROR_ACCES, /* execv() returned EACCES */
G_SPAWN_ERROR_PERM, /* execv() returned EPERM */
G_SPAWN_ERROR_TOO_BIG,/* execv() returned E2BIG */
G_SPAWN_ERROR_2BIG GLIB_DEPRECATED_ENUMERATOR_IN_2_32_FOR(G_SPAWN_ERROR_TOO_BIG) = G_SPAWN_ERROR_TOO_BIG,
G_SPAWN_ERROR_NOEXEC, /* execv() returned ENOEXEC */
G_SPAWN_ERROR_NAMETOOLONG, /* "" "" ENAMETOOLONG */
G_SPAWN_ERROR_NOENT, /* "" "" ENOENT */
G_SPAWN_ERROR_NOMEM, /* "" "" ENOMEM */
G_SPAWN_ERROR_NOTDIR, /* "" "" ENOTDIR */
G_SPAWN_ERROR_LOOP, /* "" "" ELOOP */
G_SPAWN_ERROR_TXTBUSY, /* "" "" ETXTBUSY */
G_SPAWN_ERROR_IO, /* "" "" EIO */
G_SPAWN_ERROR_NFILE, /* "" "" ENFILE */
G_SPAWN_ERROR_MFILE, /* "" "" EMFLE */
G_SPAWN_ERROR_INVAL, /* "" "" EINVAL */
G_SPAWN_ERROR_ISDIR, /* "" "" EISDIR */
G_SPAWN_ERROR_LIBBAD, /* "" "" ELIBBAD */
G_SPAWN_ERROR_FAILED /* other fatal failure, error->message
* should explain
*/
} GSpawnError;
/**
* G_SPAWN_EXIT_ERROR:
*
* Error domain used by g_spawn_check_exit_status(). The code
* will be the program exit code.
*/
#define G_SPAWN_EXIT_ERROR g_spawn_exit_error_quark ()
/**
* GSpawnChildSetupFunc:
* @user_data: (closure): user data to pass to the function.
*
* Specifies the type of the setup function passed to g_spawn_async(),
* g_spawn_sync() and g_spawn_async_with_pipes(), which can, in very
* limited ways, be used to affect the child's execution.
*
* On POSIX platforms, the function is called in the child after GLib
* has performed all the setup it plans to perform, but before calling
* exec(). Actions taken in this function will only affect the child,
* not the parent.
*
* On Windows, the function is called in the parent. Its usefulness on
* Windows is thus questionable. In many cases executing the child setup
* function in the parent can have ill effects, and you should be very
* careful when porting software to Windows that uses child setup
* functions.
*
* However, even on POSIX, you are extremely limited in what you can
* safely do from a #GSpawnChildSetupFunc, because any mutexes that were
* held by other threads in the parent process at the time of the fork()
* will still be locked in the child process, and they will never be
* unlocked (since the threads that held them don't exist in the child).
* POSIX allows only async-signal-safe functions (see signal(7)) to be
* called in the child between fork() and exec(), which drastically limits
* the usefulness of child setup functions.
*
* In particular, it is not safe to call any function which may
* call malloc(), which includes POSIX functions such as setenv().
* If you need to set up the child environment differently from
* the parent, you should use g_get_environ(), g_environ_setenv(),
* and g_environ_unsetenv(), and then pass the complete environment
* list to the `g_spawn...` function.
*/
typedef void (* GSpawnChildSetupFunc) (gpointer user_data);
/**
* GSpawnFlags:
* @G_SPAWN_DEFAULT: no flags, default behaviour
* @G_SPAWN_LEAVE_DESCRIPTORS_OPEN: the parent's open file descriptors will
* be inherited by the child; otherwise all descriptors except stdin,
* stdout and stderr will be closed before calling exec() in the child.
* @G_SPAWN_DO_NOT_REAP_CHILD: the child will not be automatically reaped;
* you must use g_child_watch_add() yourself (or call waitpid() or handle
* `SIGCHLD` yourself), or the child will become a zombie.
* @G_SPAWN_SEARCH_PATH: `argv[0]` need not be an absolute path, it will be
* looked for in the user's `PATH`.
* @G_SPAWN_STDOUT_TO_DEV_NULL: the child's standard output will be discarded,
* instead of going to the same location as the parent's standard output.
* @G_SPAWN_STDERR_TO_DEV_NULL: the child's standard error will be discarded.
* @G_SPAWN_CHILD_INHERITS_STDIN: the child will inherit the parent's standard
* input (by default, the child's standard input is attached to `/dev/null`).
* @G_SPAWN_FILE_AND_ARGV_ZERO: the first element of `argv` is the file to
* execute, while the remaining elements are the actual argument vector
* to pass to the file. Normally g_spawn_async_with_pipes() uses `argv[0]`
* as the file to execute, and passes all of `argv` to the child.
* @G_SPAWN_SEARCH_PATH_FROM_ENVP: if `argv[0]` is not an absolute path,
* it will be looked for in the `PATH` from the passed child environment.
* Since: 2.34
* @G_SPAWN_CLOEXEC_PIPES: create all pipes with the `O_CLOEXEC` flag set.
* Since: 2.40
*
* Flags passed to g_spawn_sync(), g_spawn_async() and g_spawn_async_with_pipes().
*/
typedef enum
{
G_SPAWN_DEFAULT = 0,
G_SPAWN_LEAVE_DESCRIPTORS_OPEN = 1 << 0,
G_SPAWN_DO_NOT_REAP_CHILD = 1 << 1,
/* look for argv[0] in the path i.e. use execvp() */
G_SPAWN_SEARCH_PATH = 1 << 2,
/* Dump output to /dev/null */
G_SPAWN_STDOUT_TO_DEV_NULL = 1 << 3,
G_SPAWN_STDERR_TO_DEV_NULL = 1 << 4,
G_SPAWN_CHILD_INHERITS_STDIN = 1 << 5,
G_SPAWN_FILE_AND_ARGV_ZERO = 1 << 6,
G_SPAWN_SEARCH_PATH_FROM_ENVP = 1 << 7,
G_SPAWN_CLOEXEC_PIPES = 1 << 8
} GSpawnFlags;
GLIB_AVAILABLE_IN_ALL
GQuark g_spawn_error_quark (void);
GLIB_AVAILABLE_IN_ALL
GQuark g_spawn_exit_error_quark (void);
GLIB_AVAILABLE_IN_ALL
gboolean g_spawn_async (const gchar *working_directory,
gchar **argv,
gchar **envp,
GSpawnFlags flags,
GSpawnChildSetupFunc child_setup,
gpointer user_data,
GPid *child_pid,
GError **error);
/* Opens pipes for non-NULL standard_output, standard_input, standard_error,
* and returns the parent's end of the pipes.
*/
GLIB_AVAILABLE_IN_ALL
gboolean g_spawn_async_with_pipes (const gchar *working_directory,
gchar **argv,
gchar **envp,
GSpawnFlags flags,
GSpawnChildSetupFunc child_setup,
gpointer user_data,
GPid *child_pid,
gint *standard_input,
gint *standard_output,
gint *standard_error,
GError **error);
GLIB_AVAILABLE_IN_2_68
gboolean g_spawn_async_with_pipes_and_fds (const gchar *working_directory,
const gchar * const *argv,
const gchar * const *envp,
GSpawnFlags flags,
GSpawnChildSetupFunc child_setup,
gpointer user_data,
gint stdin_fd,
gint stdout_fd,
gint stderr_fd,
const gint *source_fds,
const gint *target_fds,
gsize n_fds,
GPid *child_pid_out,
gint *stdin_pipe_out,
gint *stdout_pipe_out,
gint *stderr_pipe_out,
GError **error);
/* Lets you provide fds for stdin/stdout/stderr */
GLIB_AVAILABLE_IN_2_58
gboolean g_spawn_async_with_fds (const gchar *working_directory,
gchar **argv,
gchar **envp,
GSpawnFlags flags,
GSpawnChildSetupFunc child_setup,
gpointer user_data,
GPid *child_pid,
gint stdin_fd,
gint stdout_fd,
gint stderr_fd,
GError **error);
/* If standard_output or standard_error are non-NULL, the full
* standard output or error of the command will be placed there.
*/
GLIB_AVAILABLE_IN_ALL
gboolean g_spawn_sync (const gchar *working_directory,
gchar **argv,
gchar **envp,
GSpawnFlags flags,
GSpawnChildSetupFunc child_setup,
gpointer user_data,
gchar **standard_output,
gchar **standard_error,
gint *exit_status,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_spawn_command_line_sync (const gchar *command_line,
gchar **standard_output,
gchar **standard_error,
gint *exit_status,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_spawn_command_line_async (const gchar *command_line,
GError **error);
GLIB_AVAILABLE_IN_2_34
gboolean g_spawn_check_exit_status (gint exit_status,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_spawn_close_pid (GPid pid);
G_END_DECLS
#endif /* __G_SPAWN_H__ */
glib-autocleanups.h 0000644 00000011447 15021467762 0010354 0 ustar 00 /*
* Copyright © 2015 Canonical Limited
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*
* Author: Ryan Lortie
*/
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
static inline void
g_autoptr_cleanup_generic_gfree (void *p)
{
void **pp = (void**)p;
g_free (*pp);
}
static inline void
g_autoptr_cleanup_gstring_free (GString *string)
{
if (string)
g_string_free (string, TRUE);
}
/* Ignore deprecations in case we refer to a type which was added in a more
* recent GLib version than the user’s #GLIB_VERSION_MAX_ALLOWED definition. */
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
/* If adding a cleanup here, please also add a test case to
* glib/tests/autoptr.c
*/
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GAsyncQueue, g_async_queue_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GBookmarkFile, g_bookmark_file_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GBytes, g_bytes_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GChecksum, g_checksum_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDateTime, g_date_time_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDate, g_date_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDir, g_dir_close)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GError, g_error_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GHashTable, g_hash_table_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GHmac, g_hmac_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GIOChannel, g_io_channel_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GKeyFile, g_key_file_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GList, g_list_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GArray, g_array_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GPtrArray, g_ptr_array_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GByteArray, g_byte_array_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMainContext, g_main_context_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMainContextPusher, g_main_context_pusher_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMainLoop, g_main_loop_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSource, g_source_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMappedFile, g_mapped_file_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMarkupParseContext, g_markup_parse_context_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GNode, g_node_destroy)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GOptionContext, g_option_context_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GOptionGroup, g_option_group_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GPatternSpec, g_pattern_spec_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GQueue, g_queue_free)
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GQueue, g_queue_clear)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRand, g_rand_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRegex, g_regex_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMatchInfo, g_match_info_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GScanner, g_scanner_destroy)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSequence, g_sequence_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSList, g_slist_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GString, g_autoptr_cleanup_gstring_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GStringChunk, g_string_chunk_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GStrvBuilder, g_strv_builder_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GThread, g_thread_unref)
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GMutex, g_mutex_clear)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMutexLocker, g_mutex_locker_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRecMutexLocker, g_rec_mutex_locker_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRWLockWriterLocker, g_rw_lock_writer_locker_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRWLockReaderLocker, g_rw_lock_reader_locker_free)
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GCond, g_cond_clear)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTimer, g_timer_destroy)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTimeZone, g_time_zone_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTree, g_tree_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariant, g_variant_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantBuilder, g_variant_builder_unref)
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GVariantBuilder, g_variant_builder_clear)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantIter, g_variant_iter_free)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantDict, g_variant_dict_unref)
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GVariantDict, g_variant_dict_clear)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantType, g_variant_type_free)
G_DEFINE_AUTO_CLEANUP_FREE_FUNC(GStrv, g_strfreev, NULL)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRefString, g_ref_string_release)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GUri, g_uri_unref)
G_GNUC_END_IGNORE_DEPRECATIONS
gstringchunk.h 0000644 00000004122 15021467762 0007434 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_STRINGCHUNK_H__
#define __G_STRINGCHUNK_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GStringChunk GStringChunk;
GLIB_AVAILABLE_IN_ALL
GStringChunk* g_string_chunk_new (gsize size);
GLIB_AVAILABLE_IN_ALL
void g_string_chunk_free (GStringChunk *chunk);
GLIB_AVAILABLE_IN_ALL
void g_string_chunk_clear (GStringChunk *chunk);
GLIB_AVAILABLE_IN_ALL
gchar* g_string_chunk_insert (GStringChunk *chunk,
const gchar *string);
GLIB_AVAILABLE_IN_ALL
gchar* g_string_chunk_insert_len (GStringChunk *chunk,
const gchar *string,
gssize len);
GLIB_AVAILABLE_IN_ALL
gchar* g_string_chunk_insert_const (GStringChunk *chunk,
const gchar *string);
G_END_DECLS
#endif /* __G_STRING_H__ */
gpoll.h 0000644 00000010035 15021467762 0006043 0 ustar 00 /* gpoll.h - poll(2) support
* Copyright (C) 2008 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_POLL_H__
#define __G_POLL_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (__G_MAIN_H__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
/* Any definitions using GPollFD or GPollFunc are primarily
* for Unix and not guaranteed to be the compatible on all
* operating systems on which GLib runs. Right now, the
* GLib does use these functions on Win32 as well, but interprets
* them in a fairly different way than on Unix. If you use
* these definitions, you are should be prepared to recode
* for different operating systems.
*
* Note that on systems with a working poll(2), that function is used
* in place of g_poll(). Thus g_poll() must have the same signature as
* poll(), meaning GPollFD must have the same layout as struct pollfd.
*
* On Win32, the fd in a GPollFD should be Win32 HANDLE (*not* a file
* descriptor as provided by the C runtime) that can be used by
* MsgWaitForMultipleObjects. This does *not* include file handles
* from CreateFile, SOCKETs, nor pipe handles. (But you can use
* WSAEventSelect to signal events when a SOCKET is readable).
*
* On Win32, fd can also be the special value G_WIN32_MSG_HANDLE to
* indicate polling for messages.
*
* But note that G_WIN32_MSG_HANDLE GPollFDs should not be used by GDK
* (GTK) programs, as GDK itself wants to read messages and convert them
* to GDK events.
*
* So, unless you really know what you are doing, it's best not to try
* to use the main loop polling stuff for your own needs on
* Windows.
*/
typedef struct _GPollFD GPollFD;
/**
* GPollFunc:
* @ufds: an array of #GPollFD elements
* @nfsd: the number of elements in @ufds
* @timeout_: the maximum time to wait for an event of the file descriptors.
* A negative value indicates an infinite timeout.
*
* Specifies the type of function passed to g_main_context_set_poll_func().
* The semantics of the function should match those of the poll() system call.
*
* Returns: the number of #GPollFD elements which have events or errors
* reported, or -1 if an error occurred.
*/
typedef gint (*GPollFunc) (GPollFD *ufds,
guint nfsd,
gint timeout_);
/**
* GPollFD:
* @fd: the file descriptor to poll (or a HANDLE on Win32)
* @events: a bitwise combination from #GIOCondition, specifying which
* events should be polled for. Typically for reading from a file
* descriptor you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and
* for writing you would use %G_IO_OUT | %G_IO_ERR.
* @revents: a bitwise combination of flags from #GIOCondition, returned
* from the poll() function to indicate which events occurred.
*
* Represents a file descriptor, which events to poll for, and which events
* occurred.
*/
struct _GPollFD
{
#if defined (G_OS_WIN32) && GLIB_SIZEOF_VOID_P == 8
#ifndef __GTK_DOC_IGNORE__
gint64 fd;
#endif
#else
gint fd;
#endif
gushort events;
gushort revents;
};
/**
* G_POLLFD_FORMAT:
*
* A format specifier that can be used in printf()-style format strings
* when printing the @fd member of a #GPollFD.
*/
/* defined in glibconfig.h */
GLIB_AVAILABLE_IN_ALL
gint
g_poll (GPollFD *fds,
guint nfds,
gint timeout);
G_END_DECLS
#endif /* __G_POLL_H__ */
gmain.h 0000644 00000067064 15021467762 0006037 0 ustar 00 /* gmain.h - the GLib Main loop
* Copyright (C) 1998-2000 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_MAIN_H__
#define __G_MAIN_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
G_BEGIN_DECLS
typedef enum /*< flags >*/
{
G_IO_IN GLIB_SYSDEF_POLLIN,
G_IO_OUT GLIB_SYSDEF_POLLOUT,
G_IO_PRI GLIB_SYSDEF_POLLPRI,
G_IO_ERR GLIB_SYSDEF_POLLERR,
G_IO_HUP GLIB_SYSDEF_POLLHUP,
G_IO_NVAL GLIB_SYSDEF_POLLNVAL
} GIOCondition;
/**
* GMainContext:
*
* The `GMainContext` struct is an opaque data
* type representing a set of sources to be handled in a main loop.
*/
typedef struct _GMainContext GMainContext;
/**
* GMainLoop:
*
* The `GMainLoop` struct is an opaque data type
* representing the main event loop of a GLib or GTK+ application.
*/
typedef struct _GMainLoop GMainLoop;
/**
* GSource:
*
* The `GSource` struct is an opaque data type
* representing an event source.
*/
typedef struct _GSource GSource;
typedef struct _GSourcePrivate GSourcePrivate;
/**
* GSourceCallbackFuncs:
* @ref: Called when a reference is added to the callback object
* @unref: Called when a reference to the callback object is dropped
* @get: Called to extract the callback function and data from the
* callback object.
*
* The `GSourceCallbackFuncs` struct contains
* functions for managing callback objects.
*/
typedef struct _GSourceCallbackFuncs GSourceCallbackFuncs;
/**
* GSourceFuncs:
* @prepare: Called before all the file descriptors are polled. If the
* source can determine that it is ready here (without waiting for the
* results of the poll() call) it should return %TRUE. It can also return
* a @timeout_ value which should be the maximum timeout (in milliseconds)
* which should be passed to the poll() call. The actual timeout used will
* be -1 if all sources returned -1, or it will be the minimum of all
* the @timeout_ values returned which were >= 0. Since 2.36 this may
* be %NULL, in which case the effect is as if the function always returns
* %FALSE with a timeout of -1. If @prepare returns a
* timeout and the source also has a ready time set, then the
* lower of the two will be used.
* @check: Called after all the file descriptors are polled. The source
* should return %TRUE if it is ready to be dispatched. Note that some
* time may have passed since the previous prepare function was called,
* so the source should be checked again here. Since 2.36 this may
* be %NULL, in which case the effect is as if the function always returns
* %FALSE.
* @dispatch: Called to dispatch the event source, after it has returned
* %TRUE in either its @prepare or its @check function, or if a ready time
* has been reached. The @dispatch function receives a callback function and
* user data. The callback function may be %NULL if the source was never
* connected to a callback using g_source_set_callback(). The @dispatch
* function should call the callback function with @user_data and whatever
* additional parameters are needed for this type of event source. The
* return value of the @dispatch function should be #G_SOURCE_REMOVE if the
* source should be removed or #G_SOURCE_CONTINUE to keep it.
* @finalize: Called when the source is finalized. At this point, the source
* will have been destroyed, had its callback cleared, and have been removed
* from its #GMainContext, but it will still have its final reference count,
* so methods can be called on it from within this function.
*
* The `GSourceFuncs` struct contains a table of
* functions used to handle event sources in a generic manner.
*
* For idle sources, the prepare and check functions always return %TRUE
* to indicate that the source is always ready to be processed. The prepare
* function also returns a timeout value of 0 to ensure that the poll() call
* doesn't block (since that would be time wasted which could have been spent
* running the idle function).
*
* For timeout sources, the prepare and check functions both return %TRUE
* if the timeout interval has expired. The prepare function also returns
* a timeout value to ensure that the poll() call doesn't block too long
* and miss the next timeout.
*
* For file descriptor sources, the prepare function typically returns %FALSE,
* since it must wait until poll() has been called before it knows whether
* any events need to be processed. It sets the returned timeout to -1 to
* indicate that it doesn't mind how long the poll() call blocks. In the
* check function, it tests the results of the poll() call to see if the
* required condition has been met, and returns %TRUE if so.
*/
typedef struct _GSourceFuncs GSourceFuncs;
/**
* GPid:
*
* A type which is used to hold a process identification.
*
* On UNIX, processes are identified by a process id (an integer),
* while Windows uses process handles (which are pointers).
*
* GPid is used in GLib only for descendant processes spawned with
* the g_spawn functions.
*/
/* defined in glibconfig.h */
/**
* G_PID_FORMAT:
*
* A format specifier that can be used in printf()-style format strings
* when printing a #GPid.
*
* Since: 2.50
*/
/* defined in glibconfig.h */
/**
* GSourceFunc:
* @user_data: data passed to the function, set when the source was
* created with one of the above functions
*
* Specifies the type of function passed to g_timeout_add(),
* g_timeout_add_full(), g_idle_add(), and g_idle_add_full().
*
* When calling g_source_set_callback(), you may need to cast a function of a
* different type to this type. Use G_SOURCE_FUNC() to avoid warnings about
* incompatible function types.
*
* Returns: %FALSE if the source should be removed. #G_SOURCE_CONTINUE and
* #G_SOURCE_REMOVE are more memorable names for the return value.
*/
typedef gboolean (*GSourceFunc) (gpointer user_data);
/**
* G_SOURCE_FUNC:
* @f: a function pointer.
*
* Cast a function pointer to a #GSourceFunc, suppressing warnings from GCC 8
* onwards with `-Wextra` or `-Wcast-function-type` enabled about the function
* types being incompatible.
*
* For example, the correct type of callback for a source created by
* g_child_watch_source_new() is #GChildWatchFunc, which accepts more arguments
* than #GSourceFunc. Casting the function with `(GSourceFunc)` to call
* g_source_set_callback() will trigger a warning, even though it will be cast
* back to the correct type before it is called by the source.
*
* Since: 2.58
*/
#define G_SOURCE_FUNC(f) ((GSourceFunc) (void (*)(void)) (f)) GLIB_AVAILABLE_MACRO_IN_2_58
/**
* GChildWatchFunc:
* @pid: the process id of the child process
* @status: Status information about the child process, encoded
* in a platform-specific manner
* @user_data: user data passed to g_child_watch_add()
*
* Prototype of a #GChildWatchSource callback, called when a child
* process has exited. To interpret @status, see the documentation
* for g_spawn_check_exit_status().
*/
typedef void (*GChildWatchFunc) (GPid pid,
gint status,
gpointer user_data);
/**
* GSourceDisposeFunc:
* @source: #GSource that is currently being disposed
*
* Dispose function for @source. See g_source_set_dispose_function() for
* details.
*
* Since: 2.64
*/
GLIB_AVAILABLE_TYPE_IN_2_64
typedef void (*GSourceDisposeFunc) (GSource *source);
struct _GSource
{
/*< private >*/
gpointer callback_data;
GSourceCallbackFuncs *callback_funcs;
const GSourceFuncs *source_funcs;
guint ref_count;
GMainContext *context;
gint priority;
guint flags;
guint source_id;
GSList *poll_fds;
GSource *prev;
GSource *next;
char *name;
GSourcePrivate *priv;
};
struct _GSourceCallbackFuncs
{
void (*ref) (gpointer cb_data);
void (*unref) (gpointer cb_data);
void (*get) (gpointer cb_data,
GSource *source,
GSourceFunc *func,
gpointer *data);
};
/**
* GSourceDummyMarshal:
*
* This is just a placeholder for #GClosureMarshal,
* which cannot be used here for dependency reasons.
*/
typedef void (*GSourceDummyMarshal) (void);
struct _GSourceFuncs
{
gboolean (*prepare) (GSource *source,
gint *timeout_);
gboolean (*check) (GSource *source);
gboolean (*dispatch) (GSource *source,
GSourceFunc callback,
gpointer user_data);
void (*finalize) (GSource *source); /* Can be NULL */
/*< private >*/
/* For use by g_source_set_closure */
GSourceFunc closure_callback;
GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */
};
/* Standard priorities */
/**
* G_PRIORITY_HIGH:
*
* Use this for high priority event sources.
*
* It is not used within GLib or GTK+.
*/
#define G_PRIORITY_HIGH -100
/**
* G_PRIORITY_DEFAULT:
*
* Use this for default priority event sources.
*
* In GLib this priority is used when adding timeout functions
* with g_timeout_add(). In GDK this priority is used for events
* from the X server.
*/
#define G_PRIORITY_DEFAULT 0
/**
* G_PRIORITY_HIGH_IDLE:
*
* Use this for high priority idle functions.
*
* GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations,
* and #G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is
* done to ensure that any pending resizes are processed before any
* pending redraws, so that widgets are not redrawn twice unnecessarily.)
*/
#define G_PRIORITY_HIGH_IDLE 100
/**
* G_PRIORITY_DEFAULT_IDLE:
*
* Use this for default priority idle functions.
*
* In GLib this priority is used when adding idle functions with
* g_idle_add().
*/
#define G_PRIORITY_DEFAULT_IDLE 200
/**
* G_PRIORITY_LOW:
*
* Use this for very low priority background tasks.
*
* It is not used within GLib or GTK+.
*/
#define G_PRIORITY_LOW 300
/**
* G_SOURCE_REMOVE:
*
* Use this macro as the return value of a #GSourceFunc to remove
* the #GSource from the main loop.
*
* Since: 2.32
*/
#define G_SOURCE_REMOVE FALSE
/**
* G_SOURCE_CONTINUE:
*
* Use this macro as the return value of a #GSourceFunc to leave
* the #GSource in the main loop.
*
* Since: 2.32
*/
#define G_SOURCE_CONTINUE TRUE
/* GMainContext: */
GLIB_AVAILABLE_IN_ALL
GMainContext *g_main_context_new (void);
GLIB_AVAILABLE_IN_ALL
GMainContext *g_main_context_ref (GMainContext *context);
GLIB_AVAILABLE_IN_ALL
void g_main_context_unref (GMainContext *context);
GLIB_AVAILABLE_IN_ALL
GMainContext *g_main_context_default (void);
GLIB_AVAILABLE_IN_ALL
gboolean g_main_context_iteration (GMainContext *context,
gboolean may_block);
GLIB_AVAILABLE_IN_ALL
gboolean g_main_context_pending (GMainContext *context);
/* For implementation of legacy interfaces
*/
GLIB_AVAILABLE_IN_ALL
GSource *g_main_context_find_source_by_id (GMainContext *context,
guint source_id);
GLIB_AVAILABLE_IN_ALL
GSource *g_main_context_find_source_by_user_data (GMainContext *context,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
GSource *g_main_context_find_source_by_funcs_user_data (GMainContext *context,
GSourceFuncs *funcs,
gpointer user_data);
/* Low level functions for implementing custom main loops.
*/
GLIB_AVAILABLE_IN_ALL
void g_main_context_wakeup (GMainContext *context);
GLIB_AVAILABLE_IN_ALL
gboolean g_main_context_acquire (GMainContext *context);
GLIB_AVAILABLE_IN_ALL
void g_main_context_release (GMainContext *context);
GLIB_AVAILABLE_IN_ALL
gboolean g_main_context_is_owner (GMainContext *context);
GLIB_DEPRECATED_IN_2_58_FOR(g_main_context_is_owner)
gboolean g_main_context_wait (GMainContext *context,
GCond *cond,
GMutex *mutex);
GLIB_AVAILABLE_IN_ALL
gboolean g_main_context_prepare (GMainContext *context,
gint *priority);
GLIB_AVAILABLE_IN_ALL
gint g_main_context_query (GMainContext *context,
gint max_priority,
gint *timeout_,
GPollFD *fds,
gint n_fds);
GLIB_AVAILABLE_IN_ALL
gboolean g_main_context_check (GMainContext *context,
gint max_priority,
GPollFD *fds,
gint n_fds);
GLIB_AVAILABLE_IN_ALL
void g_main_context_dispatch (GMainContext *context);
GLIB_AVAILABLE_IN_ALL
void g_main_context_set_poll_func (GMainContext *context,
GPollFunc func);
GLIB_AVAILABLE_IN_ALL
GPollFunc g_main_context_get_poll_func (GMainContext *context);
/* Low level functions for use by source implementations
*/
GLIB_AVAILABLE_IN_ALL
void g_main_context_add_poll (GMainContext *context,
GPollFD *fd,
gint priority);
GLIB_AVAILABLE_IN_ALL
void g_main_context_remove_poll (GMainContext *context,
GPollFD *fd);
GLIB_AVAILABLE_IN_ALL
gint g_main_depth (void);
GLIB_AVAILABLE_IN_ALL
GSource *g_main_current_source (void);
/* GMainContexts for other threads
*/
GLIB_AVAILABLE_IN_ALL
void g_main_context_push_thread_default (GMainContext *context);
GLIB_AVAILABLE_IN_ALL
void g_main_context_pop_thread_default (GMainContext *context);
GLIB_AVAILABLE_IN_ALL
GMainContext *g_main_context_get_thread_default (void);
GLIB_AVAILABLE_IN_ALL
GMainContext *g_main_context_ref_thread_default (void);
/**
* GMainContextPusher:
*
* Opaque type. See g_main_context_pusher_new() for details.
*
* Since: 2.64
*/
typedef void GMainContextPusher GLIB_AVAILABLE_TYPE_IN_2_64;
/**
* g_main_context_pusher_new:
* @main_context: (transfer none): a main context to push
*
* Push @main_context as the new thread-default main context for the current
* thread, using g_main_context_push_thread_default(), and return a new
* #GMainContextPusher. Pop with g_main_context_pusher_free(). Using
* g_main_context_pop_thread_default() on @main_context while a
* #GMainContextPusher exists for it can lead to undefined behaviour.
*
* Using two #GMainContextPushers in the same scope is not allowed, as it leads
* to an undefined pop order.
*
* This is intended to be used with g_autoptr(). Note that g_autoptr()
* is only available when using GCC or clang, so the following example
* will only work with those compilers:
* |[
* typedef struct
* {
* ...
* GMainContext *context;
* ...
* } MyObject;
*
* static void
* my_object_do_stuff (MyObject *self)
* {
* g_autoptr(GMainContextPusher) pusher = g_main_context_pusher_new (self->context);
*
* // Code with main context as the thread default here
*
* if (cond)
* // No need to pop
* return;
*
* // Optionally early pop
* g_clear_pointer (&pusher, g_main_context_pusher_free);
*
* // Code with main context no longer the thread default here
* }
* ]|
*
* Returns: (transfer full): a #GMainContextPusher
* Since: 2.64
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_STATIC_INLINE_IN_2_64
static inline GMainContextPusher *
g_main_context_pusher_new (GMainContext *main_context)
{
g_main_context_push_thread_default (main_context);
return (GMainContextPusher *) main_context;
}
G_GNUC_END_IGNORE_DEPRECATIONS
/**
* g_main_context_pusher_free:
* @pusher: (transfer full): a #GMainContextPusher
*
* Pop @pusher’s main context as the thread default main context.
* See g_main_context_pusher_new() for details.
*
* This will pop the #GMainContext as the current thread-default main context,
* but will not call g_main_context_unref() on it.
*
* Since: 2.64
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_STATIC_INLINE_IN_2_64
static inline void
g_main_context_pusher_free (GMainContextPusher *pusher)
{
g_main_context_pop_thread_default ((GMainContext *) pusher);
}
G_GNUC_END_IGNORE_DEPRECATIONS
/* GMainLoop: */
GLIB_AVAILABLE_IN_ALL
GMainLoop *g_main_loop_new (GMainContext *context,
gboolean is_running);
GLIB_AVAILABLE_IN_ALL
void g_main_loop_run (GMainLoop *loop);
GLIB_AVAILABLE_IN_ALL
void g_main_loop_quit (GMainLoop *loop);
GLIB_AVAILABLE_IN_ALL
GMainLoop *g_main_loop_ref (GMainLoop *loop);
GLIB_AVAILABLE_IN_ALL
void g_main_loop_unref (GMainLoop *loop);
GLIB_AVAILABLE_IN_ALL
gboolean g_main_loop_is_running (GMainLoop *loop);
GLIB_AVAILABLE_IN_ALL
GMainContext *g_main_loop_get_context (GMainLoop *loop);
/* GSource: */
GLIB_AVAILABLE_IN_ALL
GSource *g_source_new (GSourceFuncs *source_funcs,
guint struct_size);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_2_64
void g_source_set_dispose_function (GSource *source,
GSourceDisposeFunc dispose);
G_GNUC_END_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_ALL
GSource *g_source_ref (GSource *source);
GLIB_AVAILABLE_IN_ALL
void g_source_unref (GSource *source);
GLIB_AVAILABLE_IN_ALL
guint g_source_attach (GSource *source,
GMainContext *context);
GLIB_AVAILABLE_IN_ALL
void g_source_destroy (GSource *source);
GLIB_AVAILABLE_IN_ALL
void g_source_set_priority (GSource *source,
gint priority);
GLIB_AVAILABLE_IN_ALL
gint g_source_get_priority (GSource *source);
GLIB_AVAILABLE_IN_ALL
void g_source_set_can_recurse (GSource *source,
gboolean can_recurse);
GLIB_AVAILABLE_IN_ALL
gboolean g_source_get_can_recurse (GSource *source);
GLIB_AVAILABLE_IN_ALL
guint g_source_get_id (GSource *source);
GLIB_AVAILABLE_IN_ALL
GMainContext *g_source_get_context (GSource *source);
GLIB_AVAILABLE_IN_ALL
void g_source_set_callback (GSource *source,
GSourceFunc func,
gpointer data,
GDestroyNotify notify);
GLIB_AVAILABLE_IN_ALL
void g_source_set_funcs (GSource *source,
GSourceFuncs *funcs);
GLIB_AVAILABLE_IN_ALL
gboolean g_source_is_destroyed (GSource *source);
GLIB_AVAILABLE_IN_ALL
void g_source_set_name (GSource *source,
const char *name);
GLIB_AVAILABLE_IN_ALL
const char * g_source_get_name (GSource *source);
GLIB_AVAILABLE_IN_ALL
void g_source_set_name_by_id (guint tag,
const char *name);
GLIB_AVAILABLE_IN_2_36
void g_source_set_ready_time (GSource *source,
gint64 ready_time);
GLIB_AVAILABLE_IN_2_36
gint64 g_source_get_ready_time (GSource *source);
#ifdef G_OS_UNIX
GLIB_AVAILABLE_IN_2_36
gpointer g_source_add_unix_fd (GSource *source,
gint fd,
GIOCondition events);
GLIB_AVAILABLE_IN_2_36
void g_source_modify_unix_fd (GSource *source,
gpointer tag,
GIOCondition new_events);
GLIB_AVAILABLE_IN_2_36
void g_source_remove_unix_fd (GSource *source,
gpointer tag);
GLIB_AVAILABLE_IN_2_36
GIOCondition g_source_query_unix_fd (GSource *source,
gpointer tag);
#endif
/* Used to implement g_source_connect_closure and internally*/
GLIB_AVAILABLE_IN_ALL
void g_source_set_callback_indirect (GSource *source,
gpointer callback_data,
GSourceCallbackFuncs *callback_funcs);
GLIB_AVAILABLE_IN_ALL
void g_source_add_poll (GSource *source,
GPollFD *fd);
GLIB_AVAILABLE_IN_ALL
void g_source_remove_poll (GSource *source,
GPollFD *fd);
GLIB_AVAILABLE_IN_ALL
void g_source_add_child_source (GSource *source,
GSource *child_source);
GLIB_AVAILABLE_IN_ALL
void g_source_remove_child_source (GSource *source,
GSource *child_source);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_IN_2_28_FOR(g_source_get_time)
void g_source_get_current_time (GSource *source,
GTimeVal *timeval);
G_GNUC_END_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_ALL
gint64 g_source_get_time (GSource *source);
/* void g_source_connect_closure (GSource *source,
GClosure *closure);
*/
/* Specific source types
*/
GLIB_AVAILABLE_IN_ALL
GSource *g_idle_source_new (void);
GLIB_AVAILABLE_IN_ALL
GSource *g_child_watch_source_new (GPid pid);
GLIB_AVAILABLE_IN_ALL
GSource *g_timeout_source_new (guint interval);
GLIB_AVAILABLE_IN_ALL
GSource *g_timeout_source_new_seconds (guint interval);
/* Miscellaneous functions
*/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_IN_2_62_FOR(g_get_real_time)
void g_get_current_time (GTimeVal *result);
G_GNUC_END_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_ALL
gint64 g_get_monotonic_time (void);
GLIB_AVAILABLE_IN_ALL
gint64 g_get_real_time (void);
/* Source manipulation by ID */
GLIB_AVAILABLE_IN_ALL
gboolean g_source_remove (guint tag);
GLIB_AVAILABLE_IN_ALL
gboolean g_source_remove_by_user_data (gpointer user_data);
GLIB_AVAILABLE_IN_ALL
gboolean g_source_remove_by_funcs_user_data (GSourceFuncs *funcs,
gpointer user_data);
/**
* GClearHandleFunc:
* @handle_id: the handle ID to clear
*
* Specifies the type of function passed to g_clear_handle_id().
* The implementation is expected to free the resource identified
* by @handle_id; for instance, if @handle_id is a #GSource ID,
* g_source_remove() can be used.
*
* Since: 2.56
*/
typedef void (* GClearHandleFunc) (guint handle_id);
GLIB_AVAILABLE_IN_2_56
void g_clear_handle_id (guint *tag_ptr,
GClearHandleFunc clear_func);
#define g_clear_handle_id(tag_ptr, clear_func) \
G_STMT_START { \
G_STATIC_ASSERT (sizeof *(tag_ptr) == sizeof (guint)); \
guint *_tag_ptr = (guint *) (tag_ptr); \
guint _handle_id; \
\
_handle_id = *_tag_ptr; \
if (_handle_id > 0) \
{ \
*_tag_ptr = 0; \
clear_func (_handle_id); \
} \
} G_STMT_END \
GLIB_AVAILABLE_MACRO_IN_2_56
/* Idles, child watchers and timeouts */
GLIB_AVAILABLE_IN_ALL
guint g_timeout_add_full (gint priority,
guint interval,
GSourceFunc function,
gpointer data,
GDestroyNotify notify);
GLIB_AVAILABLE_IN_ALL
guint g_timeout_add (guint interval,
GSourceFunc function,
gpointer data);
GLIB_AVAILABLE_IN_ALL
guint g_timeout_add_seconds_full (gint priority,
guint interval,
GSourceFunc function,
gpointer data,
GDestroyNotify notify);
GLIB_AVAILABLE_IN_ALL
guint g_timeout_add_seconds (guint interval,
GSourceFunc function,
gpointer data);
GLIB_AVAILABLE_IN_ALL
guint g_child_watch_add_full (gint priority,
GPid pid,
GChildWatchFunc function,
gpointer data,
GDestroyNotify notify);
GLIB_AVAILABLE_IN_ALL
guint g_child_watch_add (GPid pid,
GChildWatchFunc function,
gpointer data);
GLIB_AVAILABLE_IN_ALL
guint g_idle_add (GSourceFunc function,
gpointer data);
GLIB_AVAILABLE_IN_ALL
guint g_idle_add_full (gint priority,
GSourceFunc function,
gpointer data,
GDestroyNotify notify);
GLIB_AVAILABLE_IN_ALL
gboolean g_idle_remove_by_data (gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_main_context_invoke_full (GMainContext *context,
gint priority,
GSourceFunc function,
gpointer data,
GDestroyNotify notify);
GLIB_AVAILABLE_IN_ALL
void g_main_context_invoke (GMainContext *context,
GSourceFunc function,
gpointer data);
/* Hook for GClosure / GSource integration. Don't touch */
GLIB_VAR GSourceFuncs g_timeout_funcs;
GLIB_VAR GSourceFuncs g_child_watch_funcs;
GLIB_VAR GSourceFuncs g_idle_funcs;
#ifdef G_OS_UNIX
GLIB_VAR GSourceFuncs g_unix_signal_funcs;
GLIB_VAR GSourceFuncs g_unix_fd_source_funcs;
#endif
G_END_DECLS
#endif /* __G_MAIN_H__ */
gstrfuncs.h 0000644 00000032221 15021467762 0006745 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_STRFUNCS_H__
#define __G_STRFUNCS_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
#include
G_BEGIN_DECLS
/* Functions like the ones in that are not affected by locale. */
typedef enum {
G_ASCII_ALNUM = 1 << 0,
G_ASCII_ALPHA = 1 << 1,
G_ASCII_CNTRL = 1 << 2,
G_ASCII_DIGIT = 1 << 3,
G_ASCII_GRAPH = 1 << 4,
G_ASCII_LOWER = 1 << 5,
G_ASCII_PRINT = 1 << 6,
G_ASCII_PUNCT = 1 << 7,
G_ASCII_SPACE = 1 << 8,
G_ASCII_UPPER = 1 << 9,
G_ASCII_XDIGIT = 1 << 10
} GAsciiType;
GLIB_VAR const guint16 * const g_ascii_table;
#define g_ascii_isalnum(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_ALNUM) != 0)
#define g_ascii_isalpha(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_ALPHA) != 0)
#define g_ascii_iscntrl(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_CNTRL) != 0)
#define g_ascii_isdigit(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_DIGIT) != 0)
#define g_ascii_isgraph(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_GRAPH) != 0)
#define g_ascii_islower(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_LOWER) != 0)
#define g_ascii_isprint(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_PRINT) != 0)
#define g_ascii_ispunct(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_PUNCT) != 0)
#define g_ascii_isspace(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
#define g_ascii_isupper(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_UPPER) != 0)
#define g_ascii_isxdigit(c) \
((g_ascii_table[(guchar) (c)] & G_ASCII_XDIGIT) != 0)
GLIB_AVAILABLE_IN_ALL
gchar g_ascii_tolower (gchar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gchar g_ascii_toupper (gchar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gint g_ascii_digit_value (gchar c) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gint g_ascii_xdigit_value (gchar c) G_GNUC_CONST;
/* String utility functions that modify a string argument or
* return a constant string that must not be freed.
*/
#define G_STR_DELIMITERS "_-|> <."
GLIB_AVAILABLE_IN_ALL
gchar* g_strdelimit (gchar *string,
const gchar *delimiters,
gchar new_delimiter);
GLIB_AVAILABLE_IN_ALL
gchar* g_strcanon (gchar *string,
const gchar *valid_chars,
gchar substitutor);
GLIB_AVAILABLE_IN_ALL
const gchar * g_strerror (gint errnum) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
const gchar * g_strsignal (gint signum) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gchar * g_strreverse (gchar *string);
GLIB_AVAILABLE_IN_ALL
gsize g_strlcpy (gchar *dest,
const gchar *src,
gsize dest_size);
GLIB_AVAILABLE_IN_ALL
gsize g_strlcat (gchar *dest,
const gchar *src,
gsize dest_size);
GLIB_AVAILABLE_IN_ALL
gchar * g_strstr_len (const gchar *haystack,
gssize haystack_len,
const gchar *needle);
GLIB_AVAILABLE_IN_ALL
gchar * g_strrstr (const gchar *haystack,
const gchar *needle);
GLIB_AVAILABLE_IN_ALL
gchar * g_strrstr_len (const gchar *haystack,
gssize haystack_len,
const gchar *needle);
GLIB_AVAILABLE_IN_ALL
gboolean g_str_has_suffix (const gchar *str,
const gchar *suffix);
GLIB_AVAILABLE_IN_ALL
gboolean g_str_has_prefix (const gchar *str,
const gchar *prefix);
/* String to/from double conversion functions */
GLIB_AVAILABLE_IN_ALL
gdouble g_strtod (const gchar *nptr,
gchar **endptr);
GLIB_AVAILABLE_IN_ALL
gdouble g_ascii_strtod (const gchar *nptr,
gchar **endptr);
GLIB_AVAILABLE_IN_ALL
guint64 g_ascii_strtoull (const gchar *nptr,
gchar **endptr,
guint base);
GLIB_AVAILABLE_IN_ALL
gint64 g_ascii_strtoll (const gchar *nptr,
gchar **endptr,
guint base);
/* 29 bytes should enough for all possible values that
* g_ascii_dtostr can produce.
* Then add 10 for good measure */
#define G_ASCII_DTOSTR_BUF_SIZE (29 + 10)
GLIB_AVAILABLE_IN_ALL
gchar * g_ascii_dtostr (gchar *buffer,
gint buf_len,
gdouble d);
GLIB_AVAILABLE_IN_ALL
gchar * g_ascii_formatd (gchar *buffer,
gint buf_len,
const gchar *format,
gdouble d);
/* removes leading spaces */
GLIB_AVAILABLE_IN_ALL
gchar* g_strchug (gchar *string);
/* removes trailing spaces */
GLIB_AVAILABLE_IN_ALL
gchar* g_strchomp (gchar *string);
/* removes leading & trailing spaces */
#define g_strstrip( string ) g_strchomp (g_strchug (string))
GLIB_AVAILABLE_IN_ALL
gint g_ascii_strcasecmp (const gchar *s1,
const gchar *s2);
GLIB_AVAILABLE_IN_ALL
gint g_ascii_strncasecmp (const gchar *s1,
const gchar *s2,
gsize n);
GLIB_AVAILABLE_IN_ALL
gchar* g_ascii_strdown (const gchar *str,
gssize len) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_ascii_strup (const gchar *str,
gssize len) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_2_40
gboolean g_str_is_ascii (const gchar *str);
GLIB_DEPRECATED
gint g_strcasecmp (const gchar *s1,
const gchar *s2);
GLIB_DEPRECATED
gint g_strncasecmp (const gchar *s1,
const gchar *s2,
guint n);
GLIB_DEPRECATED
gchar* g_strdown (gchar *string);
GLIB_DEPRECATED
gchar* g_strup (gchar *string);
/* String utility functions that return a newly allocated string which
* ought to be freed with g_free from the caller at some point.
*/
GLIB_AVAILABLE_IN_ALL
gchar* g_strdup (const gchar *str) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_strdup_printf (const gchar *format,
...) G_GNUC_PRINTF (1, 2) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_strdup_vprintf (const gchar *format,
va_list args) G_GNUC_PRINTF(1, 0) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_strndup (const gchar *str,
gsize n) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_strnfill (gsize length,
gchar fill_char) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_strconcat (const gchar *string1,
...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
GLIB_AVAILABLE_IN_ALL
gchar* g_strjoin (const gchar *separator,
...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
/* Make a copy of a string interpreting C string -style escape
* sequences. Inverse of g_strescape. The recognized sequences are \b
* \f \n \r \t \\ \" and the octal format.
*/
GLIB_AVAILABLE_IN_ALL
gchar* g_strcompress (const gchar *source) G_GNUC_MALLOC;
/* Copy a string escaping nonprintable characters like in C strings.
* Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
* to a string containing characters that are not to be escaped.
*
* Deprecated API: gchar* g_strescape (const gchar *source);
* Luckily this function wasn't used much, using NULL as second parameter
* provides mostly identical semantics.
*/
GLIB_AVAILABLE_IN_ALL
gchar* g_strescape (const gchar *source,
const gchar *exceptions) G_GNUC_MALLOC;
GLIB_DEPRECATED_IN_2_68_FOR (g_memdup2)
gpointer g_memdup (gconstpointer mem,
guint byte_size) G_GNUC_ALLOC_SIZE(2);
GLIB_AVAILABLE_IN_2_68
gpointer g_memdup2 (gconstpointer mem,
gsize byte_size) G_GNUC_ALLOC_SIZE(2);
/* NULL terminated string arrays.
* g_strsplit(), g_strsplit_set() split up string into max_tokens tokens
* at delim and return a newly allocated string array.
* g_strjoinv() concatenates all of str_array's strings, sliding in an
* optional separator, the returned string is newly allocated.
* g_strfreev() frees the array itself and all of its strings.
* g_strdupv() copies a NULL-terminated array of strings
* g_strv_length() returns the length of a NULL-terminated array of strings
*/
typedef gchar** GStrv;
GLIB_AVAILABLE_IN_ALL
gchar** g_strsplit (const gchar *string,
const gchar *delimiter,
gint max_tokens);
GLIB_AVAILABLE_IN_ALL
gchar ** g_strsplit_set (const gchar *string,
const gchar *delimiters,
gint max_tokens);
GLIB_AVAILABLE_IN_ALL
gchar* g_strjoinv (const gchar *separator,
gchar **str_array) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_strfreev (gchar **str_array);
GLIB_AVAILABLE_IN_ALL
gchar** g_strdupv (gchar **str_array);
GLIB_AVAILABLE_IN_ALL
guint g_strv_length (gchar **str_array);
GLIB_AVAILABLE_IN_ALL
gchar* g_stpcpy (gchar *dest,
const char *src);
GLIB_AVAILABLE_IN_2_40
gchar * g_str_to_ascii (const gchar *str,
const gchar *from_locale);
GLIB_AVAILABLE_IN_2_40
gchar ** g_str_tokenize_and_fold (const gchar *string,
const gchar *translit_locale,
gchar ***ascii_alternates);
GLIB_AVAILABLE_IN_2_40
gboolean g_str_match_string (const gchar *search_term,
const gchar *potential_hit,
gboolean accept_alternates);
GLIB_AVAILABLE_IN_2_44
gboolean g_strv_contains (const gchar * const *strv,
const gchar *str);
GLIB_AVAILABLE_IN_2_60
gboolean g_strv_equal (const gchar * const *strv1,
const gchar * const *strv2);
/* Convenience ASCII string to number API */
/**
* GNumberParserError:
* @G_NUMBER_PARSER_ERROR_INVALID: String was not a valid number.
* @G_NUMBER_PARSER_ERROR_OUT_OF_BOUNDS: String was a number, but out of bounds.
*
* Error codes returned by functions converting a string to a number.
*
* Since: 2.54
*/
typedef enum
{
G_NUMBER_PARSER_ERROR_INVALID,
G_NUMBER_PARSER_ERROR_OUT_OF_BOUNDS,
} GNumberParserError;
/**
* G_NUMBER_PARSER_ERROR:
*
* Domain for errors returned by functions converting a string to a
* number.
*
* Since: 2.54
*/
#define G_NUMBER_PARSER_ERROR (g_number_parser_error_quark ())
GLIB_AVAILABLE_IN_2_54
GQuark g_number_parser_error_quark (void);
GLIB_AVAILABLE_IN_2_54
gboolean g_ascii_string_to_signed (const gchar *str,
guint base,
gint64 min,
gint64 max,
gint64 *out_num,
GError **error);
GLIB_AVAILABLE_IN_2_54
gboolean g_ascii_string_to_unsigned (const gchar *str,
guint base,
guint64 min,
guint64 max,
guint64 *out_num,
GError **error);
G_END_DECLS
#endif /* __G_STRFUNCS_H__ */
guuid.h 0000644 00000002413 15021467762 0006044 0 ustar 00 /* guuid.h - UUID functions
*
* Copyright (C) 2013-2015, 2017 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* licence, or (at your option) any later version.
*
* This is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA.
*
* Authors: Marc-André Lureau
*/
#ifndef __G_UUID_H__
#define __G_UUID_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_2_52
gboolean g_uuid_string_is_valid (const gchar *str);
GLIB_AVAILABLE_IN_2_52
gchar * g_uuid_string_random (void);
G_END_DECLS
#endif /* __G_UUID_H__ */
gquark.h 0000644 00000005200 15021467762 0006216 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_QUARK_H__
#define __G_QUARK_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef guint32 GQuark;
/* Quarks (string<->id association)
*/
GLIB_AVAILABLE_IN_ALL
GQuark g_quark_try_string (const gchar *string);
GLIB_AVAILABLE_IN_ALL
GQuark g_quark_from_static_string (const gchar *string);
GLIB_AVAILABLE_IN_ALL
GQuark g_quark_from_string (const gchar *string);
GLIB_AVAILABLE_IN_ALL
const gchar * g_quark_to_string (GQuark quark) G_GNUC_CONST;
#define G_DEFINE_QUARK(QN, q_n) \
GQuark \
q_n##_quark (void) \
{ \
static GQuark q; \
\
if G_UNLIKELY (q == 0) \
q = g_quark_from_static_string (#QN); \
\
return q; \
}
GLIB_AVAILABLE_IN_ALL
const gchar * g_intern_string (const gchar *string);
GLIB_AVAILABLE_IN_ALL
const gchar * g_intern_static_string (const gchar *string);
G_END_DECLS
#endif /* __G_QUARK_H__ */
gthreadpool.h 0000644 00000007360 15021467762 0007245 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_THREADPOOL_H__
#define __G_THREADPOOL_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GThreadPool GThreadPool;
/* Thread Pools
*/
struct _GThreadPool
{
GFunc func;
gpointer user_data;
gboolean exclusive;
};
GLIB_AVAILABLE_IN_ALL
GThreadPool * g_thread_pool_new (GFunc func,
gpointer user_data,
gint max_threads,
gboolean exclusive,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_thread_pool_free (GThreadPool *pool,
gboolean immediate,
gboolean wait_);
GLIB_AVAILABLE_IN_ALL
gboolean g_thread_pool_push (GThreadPool *pool,
gpointer data,
GError **error);
GLIB_AVAILABLE_IN_ALL
guint g_thread_pool_unprocessed (GThreadPool *pool);
GLIB_AVAILABLE_IN_ALL
void g_thread_pool_set_sort_function (GThreadPool *pool,
GCompareDataFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_46
gboolean g_thread_pool_move_to_front (GThreadPool *pool,
gpointer data);
GLIB_AVAILABLE_IN_ALL
gboolean g_thread_pool_set_max_threads (GThreadPool *pool,
gint max_threads,
GError **error);
GLIB_AVAILABLE_IN_ALL
gint g_thread_pool_get_max_threads (GThreadPool *pool);
GLIB_AVAILABLE_IN_ALL
guint g_thread_pool_get_num_threads (GThreadPool *pool);
GLIB_AVAILABLE_IN_ALL
void g_thread_pool_set_max_unused_threads (gint max_threads);
GLIB_AVAILABLE_IN_ALL
gint g_thread_pool_get_max_unused_threads (void);
GLIB_AVAILABLE_IN_ALL
guint g_thread_pool_get_num_unused_threads (void);
GLIB_AVAILABLE_IN_ALL
void g_thread_pool_stop_unused_threads (void);
GLIB_AVAILABLE_IN_ALL
void g_thread_pool_set_max_idle_time (guint interval);
GLIB_AVAILABLE_IN_ALL
guint g_thread_pool_get_max_idle_time (void);
G_END_DECLS
#endif /* __G_THREADPOOL_H__ */
ghmac.h 0000644 00000006615 15021467762 0006016 0 ustar 00 /* ghmac.h - secure data hashing
*
* Copyright (C) 2011 Stef Walter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_HMAC_H__
#define __G_HMAC_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include "gchecksum.h"
G_BEGIN_DECLS
/**
* GHmac:
*
* An opaque structure representing a HMAC operation.
* To create a new GHmac, use g_hmac_new(). To free
* a GHmac, use g_hmac_unref().
*
* Since: 2.30
*/
typedef struct _GHmac GHmac;
GLIB_AVAILABLE_IN_2_30
GHmac * g_hmac_new (GChecksumType digest_type,
const guchar *key,
gsize key_len);
GLIB_AVAILABLE_IN_2_30
GHmac * g_hmac_copy (const GHmac *hmac);
GLIB_AVAILABLE_IN_2_30
GHmac * g_hmac_ref (GHmac *hmac);
GLIB_AVAILABLE_IN_2_30
void g_hmac_unref (GHmac *hmac);
GLIB_AVAILABLE_IN_2_30
void g_hmac_update (GHmac *hmac,
const guchar *data,
gssize length);
GLIB_AVAILABLE_IN_2_30
const gchar * g_hmac_get_string (GHmac *hmac);
GLIB_AVAILABLE_IN_2_30
void g_hmac_get_digest (GHmac *hmac,
guint8 *buffer,
gsize *digest_len);
GLIB_AVAILABLE_IN_2_30
gchar *g_compute_hmac_for_data (GChecksumType digest_type,
const guchar *key,
gsize key_len,
const guchar *data,
gsize length);
GLIB_AVAILABLE_IN_2_30
gchar *g_compute_hmac_for_string (GChecksumType digest_type,
const guchar *key,
gsize key_len,
const gchar *str,
gssize length);
GLIB_AVAILABLE_IN_2_50
gchar *g_compute_hmac_for_bytes (GChecksumType digest_type,
GBytes *key,
GBytes *data);
G_END_DECLS
#endif /* __G_CHECKSUM_H__ */
gi18n-lib.h 0000644 00000002532 15021467762 0006423 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997, 2002 Peter Mattis, Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_I18N_LIB_H__
#define __G_I18N_LIB_H__
#include
#include
#include
#ifndef GETTEXT_PACKAGE
#error You must define GETTEXT_PACKAGE before including gi18n-lib.h. Did you forget to include config.h?
#endif
#define _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
#define Q_(String) g_dpgettext (GETTEXT_PACKAGE, String, 0)
#define N_(String) (String)
#define C_(Context,String) g_dpgettext (GETTEXT_PACKAGE, Context "\004" String, strlen (Context) + 1)
#define NC_(Context, String) (String)
#endif /* __G_I18N_LIB_H__ */
ghash.h 0000644 00000017316 15021467762 0006031 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_HASH_H__
#define __G_HASH_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
typedef struct _GHashTable GHashTable;
typedef gboolean (*GHRFunc) (gpointer key,
gpointer value,
gpointer user_data);
typedef struct _GHashTableIter GHashTableIter;
struct _GHashTableIter
{
/*< private >*/
gpointer dummy1;
gpointer dummy2;
gpointer dummy3;
int dummy4;
gboolean dummy5;
gpointer dummy6;
};
GLIB_AVAILABLE_IN_ALL
GHashTable* g_hash_table_new (GHashFunc hash_func,
GEqualFunc key_equal_func);
GLIB_AVAILABLE_IN_ALL
GHashTable* g_hash_table_new_full (GHashFunc hash_func,
GEqualFunc key_equal_func,
GDestroyNotify key_destroy_func,
GDestroyNotify value_destroy_func);
GLIB_AVAILABLE_IN_ALL
void g_hash_table_destroy (GHashTable *hash_table);
GLIB_AVAILABLE_IN_ALL
gboolean g_hash_table_insert (GHashTable *hash_table,
gpointer key,
gpointer value);
GLIB_AVAILABLE_IN_ALL
gboolean g_hash_table_replace (GHashTable *hash_table,
gpointer key,
gpointer value);
GLIB_AVAILABLE_IN_ALL
gboolean g_hash_table_add (GHashTable *hash_table,
gpointer key);
GLIB_AVAILABLE_IN_ALL
gboolean g_hash_table_remove (GHashTable *hash_table,
gconstpointer key);
GLIB_AVAILABLE_IN_ALL
void g_hash_table_remove_all (GHashTable *hash_table);
GLIB_AVAILABLE_IN_ALL
gboolean g_hash_table_steal (GHashTable *hash_table,
gconstpointer key);
GLIB_AVAILABLE_IN_2_58
gboolean g_hash_table_steal_extended (GHashTable *hash_table,
gconstpointer lookup_key,
gpointer *stolen_key,
gpointer *stolen_value);
GLIB_AVAILABLE_IN_ALL
void g_hash_table_steal_all (GHashTable *hash_table);
GLIB_AVAILABLE_IN_ALL
gpointer g_hash_table_lookup (GHashTable *hash_table,
gconstpointer key);
GLIB_AVAILABLE_IN_ALL
gboolean g_hash_table_contains (GHashTable *hash_table,
gconstpointer key);
GLIB_AVAILABLE_IN_ALL
gboolean g_hash_table_lookup_extended (GHashTable *hash_table,
gconstpointer lookup_key,
gpointer *orig_key,
gpointer *value);
GLIB_AVAILABLE_IN_ALL
void g_hash_table_foreach (GHashTable *hash_table,
GHFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
gpointer g_hash_table_find (GHashTable *hash_table,
GHRFunc predicate,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
guint g_hash_table_foreach_remove (GHashTable *hash_table,
GHRFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
guint g_hash_table_foreach_steal (GHashTable *hash_table,
GHRFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
guint g_hash_table_size (GHashTable *hash_table);
GLIB_AVAILABLE_IN_ALL
GList * g_hash_table_get_keys (GHashTable *hash_table);
GLIB_AVAILABLE_IN_ALL
GList * g_hash_table_get_values (GHashTable *hash_table);
GLIB_AVAILABLE_IN_2_40
gpointer * g_hash_table_get_keys_as_array (GHashTable *hash_table,
guint *length);
GLIB_AVAILABLE_IN_ALL
void g_hash_table_iter_init (GHashTableIter *iter,
GHashTable *hash_table);
GLIB_AVAILABLE_IN_ALL
gboolean g_hash_table_iter_next (GHashTableIter *iter,
gpointer *key,
gpointer *value);
GLIB_AVAILABLE_IN_ALL
GHashTable* g_hash_table_iter_get_hash_table (GHashTableIter *iter);
GLIB_AVAILABLE_IN_ALL
void g_hash_table_iter_remove (GHashTableIter *iter);
GLIB_AVAILABLE_IN_2_30
void g_hash_table_iter_replace (GHashTableIter *iter,
gpointer value);
GLIB_AVAILABLE_IN_ALL
void g_hash_table_iter_steal (GHashTableIter *iter);
GLIB_AVAILABLE_IN_ALL
GHashTable* g_hash_table_ref (GHashTable *hash_table);
GLIB_AVAILABLE_IN_ALL
void g_hash_table_unref (GHashTable *hash_table);
#define g_hash_table_freeze(hash_table) ((void)0) GLIB_DEPRECATED_MACRO_IN_2_26
#define g_hash_table_thaw(hash_table) ((void)0) GLIB_DEPRECATED_MACRO_IN_2_26
/* Hash Functions
*/
GLIB_AVAILABLE_IN_ALL
gboolean g_str_equal (gconstpointer v1,
gconstpointer v2);
GLIB_AVAILABLE_IN_ALL
guint g_str_hash (gconstpointer v);
GLIB_AVAILABLE_IN_ALL
gboolean g_int_equal (gconstpointer v1,
gconstpointer v2);
GLIB_AVAILABLE_IN_ALL
guint g_int_hash (gconstpointer v);
GLIB_AVAILABLE_IN_ALL
gboolean g_int64_equal (gconstpointer v1,
gconstpointer v2);
GLIB_AVAILABLE_IN_ALL
guint g_int64_hash (gconstpointer v);
GLIB_AVAILABLE_IN_ALL
gboolean g_double_equal (gconstpointer v1,
gconstpointer v2);
GLIB_AVAILABLE_IN_ALL
guint g_double_hash (gconstpointer v);
GLIB_AVAILABLE_IN_ALL
guint g_direct_hash (gconstpointer v) G_GNUC_CONST;
GLIB_AVAILABLE_IN_ALL
gboolean g_direct_equal (gconstpointer v1,
gconstpointer v2) G_GNUC_CONST;
G_END_DECLS
#endif /* __G_HASH_H__ */
grefstring.h 0000644 00000003514 15021467762 0007104 0 ustar 00 /* grefstring.h: Reference counted strings
*
* Copyright 2018 Emmanuele Bassi
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#pragma once
#include "gmem.h"
#include "gmacros.h"
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_2_58
char * g_ref_string_new (const char *str);
GLIB_AVAILABLE_IN_2_58
char * g_ref_string_new_len (const char *str,
gssize len);
GLIB_AVAILABLE_IN_2_58
char * g_ref_string_new_intern (const char *str);
GLIB_AVAILABLE_IN_2_58
char * g_ref_string_acquire (char *str);
GLIB_AVAILABLE_IN_2_58
void g_ref_string_release (char *str);
GLIB_AVAILABLE_IN_2_58
gsize g_ref_string_length (char *str);
/**
* GRefString:
*
* A typedef for a reference-counted string. A pointer to a #GRefString can be
* treated like a standard `char*` array by all code, but can additionally have
* `g_ref_string_*()` methods called on it. `g_ref_string_*()` methods cannot be
* called on `char*` arrays not allocated using g_ref_string_new().
*
* If using #GRefString with autocleanups, g_autoptr() must be used rather than
* g_autofree(), so that the reference counting metadata is also freed.
*
* Since: 2.58
*/
typedef char GRefString;
G_END_DECLS
gdatetime.h 0000644 00000030702 15021467762 0006674 0 ustar 00 /*
* Copyright (C) 2009-2010 Christian Hergert
* Copyright © 2010 Codethink Limited
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* licence, or (at your option) any later version.
*
* This is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*
* Authors: Christian Hergert
* Thiago Santos
* Emmanuele Bassi
* Ryan Lortie
*/
#ifndef __G_DATE_TIME_H__
#define __G_DATE_TIME_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
/**
* G_TIME_SPAN_DAY:
*
* Evaluates to a time span of one day.
*
* Since: 2.26
*/
#define G_TIME_SPAN_DAY (G_GINT64_CONSTANT (86400000000))
/**
* G_TIME_SPAN_HOUR:
*
* Evaluates to a time span of one hour.
*
* Since: 2.26
*/
#define G_TIME_SPAN_HOUR (G_GINT64_CONSTANT (3600000000))
/**
* G_TIME_SPAN_MINUTE:
*
* Evaluates to a time span of one minute.
*
* Since: 2.26
*/
#define G_TIME_SPAN_MINUTE (G_GINT64_CONSTANT (60000000))
/**
* G_TIME_SPAN_SECOND:
*
* Evaluates to a time span of one second.
*
* Since: 2.26
*/
#define G_TIME_SPAN_SECOND (G_GINT64_CONSTANT (1000000))
/**
* G_TIME_SPAN_MILLISECOND:
*
* Evaluates to a time span of one millisecond.
*
* Since: 2.26
*/
#define G_TIME_SPAN_MILLISECOND (G_GINT64_CONSTANT (1000))
/**
* GTimeSpan:
*
* A value representing an interval of time, in microseconds.
*
* Since: 2.26
*/
typedef gint64 GTimeSpan;
/**
* GDateTime:
*
* `GDateTime` is an opaque structure whose members
* cannot be accessed directly.
*
* Since: 2.26
*/
typedef struct _GDateTime GDateTime;
GLIB_AVAILABLE_IN_ALL
void g_date_time_unref (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_ref (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_new_now (GTimeZone *tz);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_new_now_local (void);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_new_now_utc (void);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_new_from_unix_local (gint64 t);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_new_from_unix_utc (gint64 t);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_IN_2_62_FOR(g_date_time_new_from_unix_local)
GDateTime * g_date_time_new_from_timeval_local (const GTimeVal *tv);
GLIB_DEPRECATED_IN_2_62_FOR(g_date_time_new_from_unix_utc)
GDateTime * g_date_time_new_from_timeval_utc (const GTimeVal *tv);
G_GNUC_END_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_2_56
GDateTime * g_date_time_new_from_iso8601 (const gchar *text,
GTimeZone *default_tz);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_new (GTimeZone *tz,
gint year,
gint month,
gint day,
gint hour,
gint minute,
gdouble seconds);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_new_local (gint year,
gint month,
gint day,
gint hour,
gint minute,
gdouble seconds);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_new_utc (gint year,
gint month,
gint day,
gint hour,
gint minute,
gdouble seconds);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add (GDateTime *datetime,
GTimeSpan timespan);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add_years (GDateTime *datetime,
gint years);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add_months (GDateTime *datetime,
gint months);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add_weeks (GDateTime *datetime,
gint weeks);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add_days (GDateTime *datetime,
gint days);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add_hours (GDateTime *datetime,
gint hours);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add_minutes (GDateTime *datetime,
gint minutes);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add_seconds (GDateTime *datetime,
gdouble seconds);
GLIB_AVAILABLE_IN_ALL
G_GNUC_WARN_UNUSED_RESULT
GDateTime * g_date_time_add_full (GDateTime *datetime,
gint years,
gint months,
gint days,
gint hours,
gint minutes,
gdouble seconds);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_compare (gconstpointer dt1,
gconstpointer dt2);
GLIB_AVAILABLE_IN_ALL
GTimeSpan g_date_time_difference (GDateTime *end,
GDateTime *begin);
GLIB_AVAILABLE_IN_ALL
guint g_date_time_hash (gconstpointer datetime);
GLIB_AVAILABLE_IN_ALL
gboolean g_date_time_equal (gconstpointer dt1,
gconstpointer dt2);
GLIB_AVAILABLE_IN_ALL
void g_date_time_get_ymd (GDateTime *datetime,
gint *year,
gint *month,
gint *day);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_year (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_month (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_day_of_month (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_week_numbering_year (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_week_of_year (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_day_of_week (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_day_of_year (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_hour (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_minute (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_second (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint g_date_time_get_microsecond (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gdouble g_date_time_get_seconds (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gint64 g_date_time_to_unix (GDateTime *datetime);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_DEPRECATED_IN_2_62_FOR(g_date_time_to_unix)
gboolean g_date_time_to_timeval (GDateTime *datetime,
GTimeVal *tv);
G_GNUC_END_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_ALL
GTimeSpan g_date_time_get_utc_offset (GDateTime *datetime);
GLIB_AVAILABLE_IN_2_58
GTimeZone * g_date_time_get_timezone (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
const gchar * g_date_time_get_timezone_abbreviation (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gboolean g_date_time_is_daylight_savings (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_to_timezone (GDateTime *datetime,
GTimeZone *tz);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_to_local (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
GDateTime * g_date_time_to_utc (GDateTime *datetime);
GLIB_AVAILABLE_IN_ALL
gchar * g_date_time_format (GDateTime *datetime,
const gchar *format) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_2_62
gchar * g_date_time_format_iso8601 (GDateTime *datetime) G_GNUC_MALLOC;
G_END_DECLS
#endif /* __G_DATE_TIME_H__ */
gbitlock.h 0000644 00000005526 15021467762 0006535 0 ustar 00 /*
* Copyright © 2008 Ryan Lortie
* Copyright © 2010 Codethink Limited
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*
* Author: Ryan Lortie
*/
#ifndef __G_BITLOCK_H__
#define __G_BITLOCK_H__
#include
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
void g_bit_lock (volatile gint *address,
gint lock_bit);
GLIB_AVAILABLE_IN_ALL
gboolean g_bit_trylock (volatile gint *address,
gint lock_bit);
GLIB_AVAILABLE_IN_ALL
void g_bit_unlock (volatile gint *address,
gint lock_bit);
GLIB_AVAILABLE_IN_ALL
void g_pointer_bit_lock (volatile void *address,
gint lock_bit);
GLIB_AVAILABLE_IN_ALL
gboolean g_pointer_bit_trylock (volatile void *address,
gint lock_bit);
GLIB_AVAILABLE_IN_ALL
void g_pointer_bit_unlock (volatile void *address,
gint lock_bit);
#ifdef __GNUC__
#define g_pointer_bit_lock(address, lock_bit) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \
g_pointer_bit_lock ((address), (lock_bit)); \
}))
#define g_pointer_bit_trylock(address, lock_bit) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \
g_pointer_bit_trylock ((address), (lock_bit)); \
}))
#define g_pointer_bit_unlock(address, lock_bit) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \
g_pointer_bit_unlock ((address), (lock_bit)); \
}))
#endif
G_END_DECLS
#endif /* __G_BITLOCK_H_ */
gmem.h 0000644 00000035011 15021467762 0005654 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_MEM_H__
#define __G_MEM_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#if defined(glib_typeof_2_68) && GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68
/* for glib_typeof */
#include
#endif
G_BEGIN_DECLS
/**
* GMemVTable:
* @malloc: function to use for allocating memory.
* @realloc: function to use for reallocating memory.
* @free: function to use to free memory.
* @calloc: function to use for allocating zero-filled memory.
* @try_malloc: function to use for allocating memory without a default error handler.
* @try_realloc: function to use for reallocating memory without a default error handler.
*
* A set of functions used to perform memory allocation. The same #GMemVTable must
* be used for all allocations in the same program; a call to g_mem_set_vtable(),
* if it exists, should be prior to any use of GLib.
*
* This functions related to this has been deprecated in 2.46, and no longer work.
*/
typedef struct _GMemVTable GMemVTable;
#if GLIB_SIZEOF_VOID_P > GLIB_SIZEOF_LONG
/**
* G_MEM_ALIGN:
*
* Indicates the number of bytes to which memory will be aligned on the
* current platform.
*/
# define G_MEM_ALIGN GLIB_SIZEOF_VOID_P
#else /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */
# define G_MEM_ALIGN GLIB_SIZEOF_LONG
#endif /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */
/* Memory allocation functions
*/
GLIB_AVAILABLE_IN_ALL
void g_free (gpointer mem);
GLIB_AVAILABLE_IN_2_34
void g_clear_pointer (gpointer *pp,
GDestroyNotify destroy);
GLIB_AVAILABLE_IN_ALL
gpointer g_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_ALL
gpointer g_malloc0 (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_ALL
gpointer g_realloc (gpointer mem,
gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
gpointer g_try_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_ALL
gpointer g_try_malloc0 (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_ALL
gpointer g_try_realloc (gpointer mem,
gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
gpointer g_malloc_n (gsize n_blocks,
gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2);
GLIB_AVAILABLE_IN_ALL
gpointer g_malloc0_n (gsize n_blocks,
gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2);
GLIB_AVAILABLE_IN_ALL
gpointer g_realloc_n (gpointer mem,
gsize n_blocks,
gsize n_block_bytes) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
gpointer g_try_malloc_n (gsize n_blocks,
gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2);
GLIB_AVAILABLE_IN_ALL
gpointer g_try_malloc0_n (gsize n_blocks,
gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2);
GLIB_AVAILABLE_IN_ALL
gpointer g_try_realloc_n (gpointer mem,
gsize n_blocks,
gsize n_block_bytes) G_GNUC_WARN_UNUSED_RESULT;
#if defined(glib_typeof) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_58 && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)
#define g_clear_pointer(pp, destroy) \
G_STMT_START \
{ \
G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
glib_typeof ((pp)) _pp = (pp); \
glib_typeof (*(pp)) _ptr = *_pp; \
*_pp = NULL; \
if (_ptr) \
(destroy) (_ptr); \
} \
G_STMT_END \
GLIB_AVAILABLE_MACRO_IN_2_34
#else /* __GNUC__ */
#define g_clear_pointer(pp, destroy) \
G_STMT_START { \
G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
/* Only one access, please; work around type aliasing */ \
union { char *in; gpointer *out; } _pp; \
gpointer _p; \
/* This assignment is needed to avoid a gcc warning */ \
GDestroyNotify _destroy = (GDestroyNotify) (destroy); \
\
_pp.in = (char *) (pp); \
_p = *_pp.out; \
if (_p) \
{ \
*_pp.out = NULL; \
_destroy (_p); \
} \
} G_STMT_END \
GLIB_AVAILABLE_MACRO_IN_2_34
#endif /* __GNUC__ */
/**
* g_steal_pointer:
* @pp: (not nullable): a pointer to a pointer
*
* Sets @pp to %NULL, returning the value that was there before.
*
* Conceptually, this transfers the ownership of the pointer from the
* referenced variable to the "caller" of the macro (ie: "steals" the
* reference).
*
* The return value will be properly typed, according to the type of
* @pp.
*
* This can be very useful when combined with g_autoptr() to prevent the
* return value of a function from being automatically freed. Consider
* the following example (which only works on GCC and clang):
*
* |[
* GObject *
* create_object (void)
* {
* g_autoptr(GObject) obj = g_object_new (G_TYPE_OBJECT, NULL);
*
* if (early_error_case)
* return NULL;
*
* return g_steal_pointer (&obj);
* }
* ]|
*
* It can also be used in similar ways for 'out' parameters and is
* particularly useful for dealing with optional out parameters:
*
* |[
* gboolean
* get_object (GObject **obj_out)
* {
* g_autoptr(GObject) obj = g_object_new (G_TYPE_OBJECT, NULL);
*
* if (early_error_case)
* return FALSE;
*
* if (obj_out)
* *obj_out = g_steal_pointer (&obj);
*
* return TRUE;
* }
* ]|
*
* In the above example, the object will be automatically freed in the
* early error case and also in the case that %NULL was given for
* @obj_out.
*
* Since: 2.44
*/
GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
static inline gpointer
g_steal_pointer (gpointer pp)
{
gpointer *ptr = (gpointer *) pp;
gpointer ref;
ref = *ptr;
*ptr = NULL;
return ref;
}
/* type safety */
#if defined(glib_typeof) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_58 && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)
#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
#else /* __GNUC__ */
/* This version does not depend on gcc extensions, but gcc does not warn
* about incompatible-pointer-types: */
#define g_steal_pointer(pp) \
(0 ? (*(pp)) : (g_steal_pointer) (pp))
#endif /* __GNUC__ */
/* Optimise: avoid the call to the (slower) _n function if we can
* determine at compile-time that no overflow happens.
*/
#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__)
# define _G_NEW(struct_type, n_structs, func) \
(struct_type *) (G_GNUC_EXTENSION ({ \
gsize __n = (gsize) (n_structs); \
gsize __s = sizeof (struct_type); \
gpointer __p; \
if (__s == 1) \
__p = g_##func (__n); \
else if (__builtin_constant_p (__n) && \
(__s == 0 || __n <= G_MAXSIZE / __s)) \
__p = g_##func (__n * __s); \
else \
__p = g_##func##_n (__n, __s); \
__p; \
}))
# define _G_RENEW(struct_type, mem, n_structs, func) \
(struct_type *) (G_GNUC_EXTENSION ({ \
gsize __n = (gsize) (n_structs); \
gsize __s = sizeof (struct_type); \
gpointer __p = (gpointer) (mem); \
if (__s == 1) \
__p = g_##func (__p, __n); \
else if (__builtin_constant_p (__n) && \
(__s == 0 || __n <= G_MAXSIZE / __s)) \
__p = g_##func (__p, __n * __s); \
else \
__p = g_##func##_n (__p, __n, __s); \
__p; \
}))
#else
/* Unoptimised version: always call the _n() function. */
#define _G_NEW(struct_type, n_structs, func) \
((struct_type *) g_##func##_n ((n_structs), sizeof (struct_type)))
#define _G_RENEW(struct_type, mem, n_structs, func) \
((struct_type *) g_##func##_n (mem, (n_structs), sizeof (struct_type)))
#endif
/**
* g_new:
* @struct_type: the type of the elements to allocate
* @n_structs: the number of elements to allocate
*
* Allocates @n_structs elements of type @struct_type.
* The returned pointer is cast to a pointer to the given type.
* If @n_structs is 0 it returns %NULL.
* Care is taken to avoid overflow when calculating the size of the allocated block.
*
* Since the returned pointer is already casted to the right type,
* it is normally unnecessary to cast it explicitly, and doing
* so might hide memory allocation errors.
*
* Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
*/
#define g_new(struct_type, n_structs) _G_NEW (struct_type, n_structs, malloc)
/**
* g_new0:
* @struct_type: the type of the elements to allocate.
* @n_structs: the number of elements to allocate.
*
* Allocates @n_structs elements of type @struct_type, initialized to 0's.
* The returned pointer is cast to a pointer to the given type.
* If @n_structs is 0 it returns %NULL.
* Care is taken to avoid overflow when calculating the size of the allocated block.
*
* Since the returned pointer is already casted to the right type,
* it is normally unnecessary to cast it explicitly, and doing
* so might hide memory allocation errors.
*
* Returns: a pointer to the allocated memory, cast to a pointer to @struct_type.
*/
#define g_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, malloc0)
/**
* g_renew:
* @struct_type: the type of the elements to allocate
* @mem: the currently allocated memory
* @n_structs: the number of elements to allocate
*
* Reallocates the memory pointed to by @mem, so that it now has space for
* @n_structs elements of type @struct_type. It returns the new address of
* the memory, which may have been moved.
* Care is taken to avoid overflow when calculating the size of the allocated block.
*
* Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type
*/
#define g_renew(struct_type, mem, n_structs) _G_RENEW (struct_type, mem, n_structs, realloc)
/**
* g_try_new:
* @struct_type: the type of the elements to allocate
* @n_structs: the number of elements to allocate
*
* Attempts to allocate @n_structs elements of type @struct_type, and returns
* %NULL on failure. Contrast with g_new(), which aborts the program on failure.
* The returned pointer is cast to a pointer to the given type.
* The function returns %NULL when @n_structs is 0 of if an overflow occurs.
*
* Since: 2.8
* Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
*/
#define g_try_new(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc)
/**
* g_try_new0:
* @struct_type: the type of the elements to allocate
* @n_structs: the number of elements to allocate
*
* Attempts to allocate @n_structs elements of type @struct_type, initialized
* to 0's, and returns %NULL on failure. Contrast with g_new0(), which aborts
* the program on failure.
* The returned pointer is cast to a pointer to the given type.
* The function returns %NULL when @n_structs is 0 or if an overflow occurs.
*
* Since: 2.8
* Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
*/
#define g_try_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc0)
/**
* g_try_renew:
* @struct_type: the type of the elements to allocate
* @mem: the currently allocated memory
* @n_structs: the number of elements to allocate
*
* Attempts to reallocate the memory pointed to by @mem, so that it now has
* space for @n_structs elements of type @struct_type, and returns %NULL on
* failure. Contrast with g_renew(), which aborts the program on failure.
* It returns the new address of the memory, which may have been moved.
* The function returns %NULL if an overflow occurs.
*
* Since: 2.8
* Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type
*/
#define g_try_renew(struct_type, mem, n_structs) _G_RENEW (struct_type, mem, n_structs, try_realloc)
/* Memory allocation virtualization for debugging purposes
* g_mem_set_vtable() has to be the very first GLib function called
* if being used
*/
struct _GMemVTable {
gpointer (*malloc) (gsize n_bytes);
gpointer (*realloc) (gpointer mem,
gsize n_bytes);
void (*free) (gpointer mem);
/* optional; set to NULL if not used ! */
gpointer (*calloc) (gsize n_blocks,
gsize n_block_bytes);
gpointer (*try_malloc) (gsize n_bytes);
gpointer (*try_realloc) (gpointer mem,
gsize n_bytes);
};
GLIB_DEPRECATED_IN_2_46
void g_mem_set_vtable (GMemVTable *vtable);
GLIB_DEPRECATED_IN_2_46
gboolean g_mem_is_system_malloc (void);
GLIB_VAR gboolean g_mem_gc_friendly;
/* Memory profiler and checker, has to be enabled via g_mem_set_vtable()
*/
GLIB_VAR GMemVTable *glib_mem_profiler_table;
GLIB_DEPRECATED_IN_2_46
void g_mem_profile (void);
G_END_DECLS
#endif /* __G_MEM_H__ */
gstring.h 0000644 00000020213 15021467762 0006402 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_STRING_H__
#define __G_STRING_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
#include /* for G_CAN_INLINE */
G_BEGIN_DECLS
typedef struct _GString GString;
struct _GString
{
gchar *str;
gsize len;
gsize allocated_len;
};
GLIB_AVAILABLE_IN_ALL
GString* g_string_new (const gchar *init);
GLIB_AVAILABLE_IN_ALL
GString* g_string_new_len (const gchar *init,
gssize len);
GLIB_AVAILABLE_IN_ALL
GString* g_string_sized_new (gsize dfl_size);
GLIB_AVAILABLE_IN_ALL
gchar* g_string_free (GString *string,
gboolean free_segment);
GLIB_AVAILABLE_IN_2_34
GBytes* g_string_free_to_bytes (GString *string);
GLIB_AVAILABLE_IN_ALL
gboolean g_string_equal (const GString *v,
const GString *v2);
GLIB_AVAILABLE_IN_ALL
guint g_string_hash (const GString *str);
GLIB_AVAILABLE_IN_ALL
GString* g_string_assign (GString *string,
const gchar *rval);
GLIB_AVAILABLE_IN_ALL
GString* g_string_truncate (GString *string,
gsize len);
GLIB_AVAILABLE_IN_ALL
GString* g_string_set_size (GString *string,
gsize len);
GLIB_AVAILABLE_IN_ALL
GString* g_string_insert_len (GString *string,
gssize pos,
const gchar *val,
gssize len);
GLIB_AVAILABLE_IN_ALL
GString* g_string_append (GString *string,
const gchar *val);
GLIB_AVAILABLE_IN_ALL
GString* g_string_append_len (GString *string,
const gchar *val,
gssize len);
GLIB_AVAILABLE_IN_ALL
GString* g_string_append_c (GString *string,
gchar c);
GLIB_AVAILABLE_IN_ALL
GString* g_string_append_unichar (GString *string,
gunichar wc);
GLIB_AVAILABLE_IN_ALL
GString* g_string_prepend (GString *string,
const gchar *val);
GLIB_AVAILABLE_IN_ALL
GString* g_string_prepend_c (GString *string,
gchar c);
GLIB_AVAILABLE_IN_ALL
GString* g_string_prepend_unichar (GString *string,
gunichar wc);
GLIB_AVAILABLE_IN_ALL
GString* g_string_prepend_len (GString *string,
const gchar *val,
gssize len);
GLIB_AVAILABLE_IN_ALL
GString* g_string_insert (GString *string,
gssize pos,
const gchar *val);
GLIB_AVAILABLE_IN_ALL
GString* g_string_insert_c (GString *string,
gssize pos,
gchar c);
GLIB_AVAILABLE_IN_ALL
GString* g_string_insert_unichar (GString *string,
gssize pos,
gunichar wc);
GLIB_AVAILABLE_IN_ALL
GString* g_string_overwrite (GString *string,
gsize pos,
const gchar *val);
GLIB_AVAILABLE_IN_ALL
GString* g_string_overwrite_len (GString *string,
gsize pos,
const gchar *val,
gssize len);
GLIB_AVAILABLE_IN_ALL
GString* g_string_erase (GString *string,
gssize pos,
gssize len);
GLIB_AVAILABLE_IN_2_68
guint g_string_replace (GString *string,
const gchar *find,
const gchar *replace,
guint limit);
GLIB_AVAILABLE_IN_ALL
GString* g_string_ascii_down (GString *string);
GLIB_AVAILABLE_IN_ALL
GString* g_string_ascii_up (GString *string);
GLIB_AVAILABLE_IN_ALL
void g_string_vprintf (GString *string,
const gchar *format,
va_list args)
G_GNUC_PRINTF(2, 0);
GLIB_AVAILABLE_IN_ALL
void g_string_printf (GString *string,
const gchar *format,
...) G_GNUC_PRINTF (2, 3);
GLIB_AVAILABLE_IN_ALL
void g_string_append_vprintf (GString *string,
const gchar *format,
va_list args)
G_GNUC_PRINTF(2, 0);
GLIB_AVAILABLE_IN_ALL
void g_string_append_printf (GString *string,
const gchar *format,
...) G_GNUC_PRINTF (2, 3);
GLIB_AVAILABLE_IN_ALL
GString* g_string_append_uri_escaped (GString *string,
const gchar *unescaped,
const gchar *reserved_chars_allowed,
gboolean allow_utf8);
/* -- optimize g_strig_append_c --- */
#ifdef G_CAN_INLINE
static inline GString*
g_string_append_c_inline (GString *gstring,
gchar c)
{
if (gstring->len + 1 < gstring->allocated_len)
{
gstring->str[gstring->len++] = c;
gstring->str[gstring->len] = 0;
}
else
g_string_insert_c (gstring, -1, c);
return gstring;
}
#define g_string_append_c(gstr,c) g_string_append_c_inline (gstr, c)
#endif /* G_CAN_INLINE */
GLIB_DEPRECATED
GString *g_string_down (GString *string);
GLIB_DEPRECATED
GString *g_string_up (GString *string);
#define g_string_sprintf g_string_printf GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_string_printf)
#define g_string_sprintfa g_string_append_printf GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_string_append_printf)
G_END_DECLS
#endif /* __G_STRING_H__ */
gregex.h 0000644 00000066677 15021467762 0006236 0 ustar 00 /* GRegex -- regular expression API wrapper around PCRE.
*
* Copyright (C) 1999, 2000 Scott Wimer
* Copyright (C) 2004, Matthias Clasen
* Copyright (C) 2005 - 2007, Marco Barisione
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_REGEX_H__
#define __G_REGEX_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
/**
* GRegexError:
* @G_REGEX_ERROR_COMPILE: Compilation of the regular expression failed.
* @G_REGEX_ERROR_OPTIMIZE: Optimization of the regular expression failed.
* @G_REGEX_ERROR_REPLACE: Replacement failed due to an ill-formed replacement
* string.
* @G_REGEX_ERROR_MATCH: The match process failed.
* @G_REGEX_ERROR_INTERNAL: Internal error of the regular expression engine.
* Since 2.16
* @G_REGEX_ERROR_STRAY_BACKSLASH: "\\" at end of pattern. Since 2.16
* @G_REGEX_ERROR_MISSING_CONTROL_CHAR: "\\c" at end of pattern. Since 2.16
* @G_REGEX_ERROR_UNRECOGNIZED_ESCAPE: Unrecognized character follows "\\".
* Since 2.16
* @G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER: Numbers out of order in "{}"
* quantifier. Since 2.16
* @G_REGEX_ERROR_QUANTIFIER_TOO_BIG: Number too big in "{}" quantifier.
* Since 2.16
* @G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS: Missing terminating "]" for
* character class. Since 2.16
* @G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS: Invalid escape sequence
* in character class. Since 2.16
* @G_REGEX_ERROR_RANGE_OUT_OF_ORDER: Range out of order in character class.
* Since 2.16
* @G_REGEX_ERROR_NOTHING_TO_REPEAT: Nothing to repeat. Since 2.16
* @G_REGEX_ERROR_UNRECOGNIZED_CHARACTER: Unrecognized character after "(?",
* "(?<" or "(?P". Since 2.16
* @G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS: POSIX named classes are
* supported only within a class. Since 2.16
* @G_REGEX_ERROR_UNMATCHED_PARENTHESIS: Missing terminating ")" or ")"
* without opening "(". Since 2.16
* @G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE: Reference to non-existent
* subpattern. Since 2.16
* @G_REGEX_ERROR_UNTERMINATED_COMMENT: Missing terminating ")" after comment.
* Since 2.16
* @G_REGEX_ERROR_EXPRESSION_TOO_LARGE: Regular expression too large.
* Since 2.16
* @G_REGEX_ERROR_MEMORY_ERROR: Failed to get memory. Since 2.16
* @G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND: Lookbehind assertion is not
* fixed length. Since 2.16
* @G_REGEX_ERROR_MALFORMED_CONDITION: Malformed number or name after "(?(".
* Since 2.16
* @G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES: Conditional group contains
* more than two branches. Since 2.16
* @G_REGEX_ERROR_ASSERTION_EXPECTED: Assertion expected after "(?(".
* Since 2.16
* @G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME: Unknown POSIX class name.
* Since 2.16
* @G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: POSIX collating
* elements are not supported. Since 2.16
* @G_REGEX_ERROR_HEX_CODE_TOO_LARGE: Character value in "\\x{...}" sequence
* is too large. Since 2.16
* @G_REGEX_ERROR_INVALID_CONDITION: Invalid condition "(?(0)". Since 2.16
* @G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND: \\C not allowed in
* lookbehind assertion. Since 2.16
* @G_REGEX_ERROR_INFINITE_LOOP: Recursive call could loop indefinitely.
* Since 2.16
* @G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR: Missing terminator
* in subpattern name. Since 2.16
* @G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME: Two named subpatterns have
* the same name. Since 2.16
* @G_REGEX_ERROR_MALFORMED_PROPERTY: Malformed "\\P" or "\\p" sequence.
* Since 2.16
* @G_REGEX_ERROR_UNKNOWN_PROPERTY: Unknown property name after "\\P" or
* "\\p". Since 2.16
* @G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG: Subpattern name is too long
* (maximum 32 characters). Since 2.16
* @G_REGEX_ERROR_TOO_MANY_SUBPATTERNS: Too many named subpatterns (maximum
* 10,000). Since 2.16
* @G_REGEX_ERROR_INVALID_OCTAL_VALUE: Octal value is greater than "\\377".
* Since 2.16
* @G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE: "DEFINE" group contains more
* than one branch. Since 2.16
* @G_REGEX_ERROR_DEFINE_REPETION: Repeating a "DEFINE" group is not allowed.
* This error is never raised. Since: 2.16 Deprecated: 2.34
* @G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS: Inconsistent newline options.
* Since 2.16
* @G_REGEX_ERROR_MISSING_BACK_REFERENCE: "\\g" is not followed by a braced,
* angle-bracketed, or quoted name or number, or by a plain number. Since: 2.16
* @G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE: relative reference must not be zero. Since: 2.34
* @G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN: the backtracing
* control verb used does not allow an argument. Since: 2.34
* @G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB: unknown backtracing
* control verb. Since: 2.34
* @G_REGEX_ERROR_NUMBER_TOO_BIG: number is too big in escape sequence. Since: 2.34
* @G_REGEX_ERROR_MISSING_SUBPATTERN_NAME: Missing subpattern name. Since: 2.34
* @G_REGEX_ERROR_MISSING_DIGIT: Missing digit. Since 2.34
* @G_REGEX_ERROR_INVALID_DATA_CHARACTER: In JavaScript compatibility mode,
* "[" is an invalid data character. Since: 2.34
* @G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME: different names for subpatterns of the
* same number are not allowed. Since: 2.34
* @G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED: the backtracing control
* verb requires an argument. Since: 2.34
* @G_REGEX_ERROR_INVALID_CONTROL_CHAR: "\\c" must be followed by an ASCII
* character. Since: 2.34
* @G_REGEX_ERROR_MISSING_NAME: "\\k" is not followed by a braced, angle-bracketed, or
* quoted name. Since: 2.34
* @G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS: "\\N" is not supported in a class. Since: 2.34
* @G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES: too many forward references. Since: 2.34
* @G_REGEX_ERROR_NAME_TOO_LONG: the name is too long in "(*MARK)", "(*PRUNE)",
* "(*SKIP)", or "(*THEN)". Since: 2.34
* @G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE: the character value in the \\u sequence is
* too large. Since: 2.34
*
* Error codes returned by regular expressions functions.
*
* Since: 2.14
*/
typedef enum
{
G_REGEX_ERROR_COMPILE,
G_REGEX_ERROR_OPTIMIZE,
G_REGEX_ERROR_REPLACE,
G_REGEX_ERROR_MATCH,
G_REGEX_ERROR_INTERNAL,
/* These are the error codes from PCRE + 100 */
G_REGEX_ERROR_STRAY_BACKSLASH = 101,
G_REGEX_ERROR_MISSING_CONTROL_CHAR = 102,
G_REGEX_ERROR_UNRECOGNIZED_ESCAPE = 103,
G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER = 104,
G_REGEX_ERROR_QUANTIFIER_TOO_BIG = 105,
G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS = 106,
G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS = 107,
G_REGEX_ERROR_RANGE_OUT_OF_ORDER = 108,
G_REGEX_ERROR_NOTHING_TO_REPEAT = 109,
G_REGEX_ERROR_UNRECOGNIZED_CHARACTER = 112,
G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS = 113,
G_REGEX_ERROR_UNMATCHED_PARENTHESIS = 114,
G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE = 115,
G_REGEX_ERROR_UNTERMINATED_COMMENT = 118,
G_REGEX_ERROR_EXPRESSION_TOO_LARGE = 120,
G_REGEX_ERROR_MEMORY_ERROR = 121,
G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND = 125,
G_REGEX_ERROR_MALFORMED_CONDITION = 126,
G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES = 127,
G_REGEX_ERROR_ASSERTION_EXPECTED = 128,
G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME = 130,
G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED = 131,
G_REGEX_ERROR_HEX_CODE_TOO_LARGE = 134,
G_REGEX_ERROR_INVALID_CONDITION = 135,
G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND = 136,
G_REGEX_ERROR_INFINITE_LOOP = 140,
G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR = 142,
G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME = 143,
G_REGEX_ERROR_MALFORMED_PROPERTY = 146,
G_REGEX_ERROR_UNKNOWN_PROPERTY = 147,
G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG = 148,
G_REGEX_ERROR_TOO_MANY_SUBPATTERNS = 149,
G_REGEX_ERROR_INVALID_OCTAL_VALUE = 151,
G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE = 154,
G_REGEX_ERROR_DEFINE_REPETION = 155,
G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS = 156,
G_REGEX_ERROR_MISSING_BACK_REFERENCE = 157,
G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE = 158,
G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN = 159,
G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB = 160,
G_REGEX_ERROR_NUMBER_TOO_BIG = 161,
G_REGEX_ERROR_MISSING_SUBPATTERN_NAME = 162,
G_REGEX_ERROR_MISSING_DIGIT = 163,
G_REGEX_ERROR_INVALID_DATA_CHARACTER = 164,
G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME = 165,
G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED = 166,
G_REGEX_ERROR_INVALID_CONTROL_CHAR = 168,
G_REGEX_ERROR_MISSING_NAME = 169,
G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS = 171,
G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES = 172,
G_REGEX_ERROR_NAME_TOO_LONG = 175,
G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE = 176
} GRegexError;
/**
* G_REGEX_ERROR:
*
* Error domain for regular expressions. Errors in this domain will be
* from the #GRegexError enumeration. See #GError for information on
* error domains.
*
* Since: 2.14
*/
#define G_REGEX_ERROR g_regex_error_quark ()
GLIB_AVAILABLE_IN_ALL
GQuark g_regex_error_quark (void);
/**
* GRegexCompileFlags:
* @G_REGEX_CASELESS: Letters in the pattern match both upper- and
* lowercase letters. This option can be changed within a pattern
* by a "(?i)" option setting.
* @G_REGEX_MULTILINE: By default, GRegex treats the strings as consisting
* of a single line of characters (even if it actually contains
* newlines). The "start of line" metacharacter ("^") matches only
* at the start of the string, while the "end of line" metacharacter
* ("$") matches only at the end of the string, or before a terminating
* newline (unless #G_REGEX_DOLLAR_ENDONLY is set). When
* #G_REGEX_MULTILINE is set, the "start of line" and "end of line"
* constructs match immediately following or immediately before any
* newline in the string, respectively, as well as at the very start
* and end. This can be changed within a pattern by a "(?m)" option
* setting.
* @G_REGEX_DOTALL: A dot metacharacter (".") in the pattern matches all
* characters, including newlines. Without it, newlines are excluded.
* This option can be changed within a pattern by a ("?s") option setting.
* @G_REGEX_EXTENDED: Whitespace data characters in the pattern are
* totally ignored except when escaped or inside a character class.
* Whitespace does not include the VT character (code 11). In addition,
* characters between an unescaped "#" outside a character class and
* the next newline character, inclusive, are also ignored. This can
* be changed within a pattern by a "(?x)" option setting.
* @G_REGEX_ANCHORED: The pattern is forced to be "anchored", that is,
* it is constrained to match only at the first matching point in the
* string that is being searched. This effect can also be achieved by
* appropriate constructs in the pattern itself such as the "^"
* metacharacter.
* @G_REGEX_DOLLAR_ENDONLY: A dollar metacharacter ("$") in the pattern
* matches only at the end of the string. Without this option, a
* dollar also matches immediately before the final character if
* it is a newline (but not before any other newlines). This option
* is ignored if #G_REGEX_MULTILINE is set.
* @G_REGEX_UNGREEDY: Inverts the "greediness" of the quantifiers so that
* they are not greedy by default, but become greedy if followed by "?".
* It can also be set by a "(?U)" option setting within the pattern.
* @G_REGEX_RAW: Usually strings must be valid UTF-8 strings, using this
* flag they are considered as a raw sequence of bytes.
* @G_REGEX_NO_AUTO_CAPTURE: Disables the use of numbered capturing
* parentheses in the pattern. Any opening parenthesis that is not
* followed by "?" behaves as if it were followed by "?:" but named
* parentheses can still be used for capturing (and they acquire numbers
* in the usual way).
* @G_REGEX_OPTIMIZE: Optimize the regular expression. If the pattern will
* be used many times, then it may be worth the effort to optimize it
* to improve the speed of matches.
* @G_REGEX_FIRSTLINE: Limits an unanchored pattern to match before (or at) the
* first newline. Since: 2.34
* @G_REGEX_DUPNAMES: Names used to identify capturing subpatterns need not
* be unique. This can be helpful for certain types of pattern when it
* is known that only one instance of the named subpattern can ever be
* matched.
* @G_REGEX_NEWLINE_CR: Usually any newline character or character sequence is
* recognized. If this option is set, the only recognized newline character
* is '\r'.
* @G_REGEX_NEWLINE_LF: Usually any newline character or character sequence is
* recognized. If this option is set, the only recognized newline character
* is '\n'.
* @G_REGEX_NEWLINE_CRLF: Usually any newline character or character sequence is
* recognized. If this option is set, the only recognized newline character
* sequence is '\r\n'.
* @G_REGEX_NEWLINE_ANYCRLF: Usually any newline character or character sequence
* is recognized. If this option is set, the only recognized newline character
* sequences are '\r', '\n', and '\r\n'. Since: 2.34
* @G_REGEX_BSR_ANYCRLF: Usually any newline character or character sequence
* is recognised. If this option is set, then "\R" only recognizes the newline
* characters '\r', '\n' and '\r\n'. Since: 2.34
* @G_REGEX_JAVASCRIPT_COMPAT: Changes behaviour so that it is compatible with
* JavaScript rather than PCRE. Since: 2.34
*
* Flags specifying compile-time options.
*
* Since: 2.14
*/
/* Remember to update G_REGEX_COMPILE_MASK in gregex.c after
* adding a new flag.
*/
typedef enum
{
G_REGEX_CASELESS = 1 << 0,
G_REGEX_MULTILINE = 1 << 1,
G_REGEX_DOTALL = 1 << 2,
G_REGEX_EXTENDED = 1 << 3,
G_REGEX_ANCHORED = 1 << 4,
G_REGEX_DOLLAR_ENDONLY = 1 << 5,
G_REGEX_UNGREEDY = 1 << 9,
G_REGEX_RAW = 1 << 11,
G_REGEX_NO_AUTO_CAPTURE = 1 << 12,
G_REGEX_OPTIMIZE = 1 << 13,
G_REGEX_FIRSTLINE = 1 << 18,
G_REGEX_DUPNAMES = 1 << 19,
G_REGEX_NEWLINE_CR = 1 << 20,
G_REGEX_NEWLINE_LF = 1 << 21,
G_REGEX_NEWLINE_CRLF = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF,
G_REGEX_NEWLINE_ANYCRLF = G_REGEX_NEWLINE_CR | 1 << 22,
G_REGEX_BSR_ANYCRLF = 1 << 23,
G_REGEX_JAVASCRIPT_COMPAT = 1 << 25
} GRegexCompileFlags;
/**
* GRegexMatchFlags:
* @G_REGEX_MATCH_ANCHORED: The pattern is forced to be "anchored", that is,
* it is constrained to match only at the first matching point in the
* string that is being searched. This effect can also be achieved by
* appropriate constructs in the pattern itself such as the "^"
* metacharacter.
* @G_REGEX_MATCH_NOTBOL: Specifies that first character of the string is
* not the beginning of a line, so the circumflex metacharacter should
* not match before it. Setting this without #G_REGEX_MULTILINE (at
* compile time) causes circumflex never to match. This option affects
* only the behaviour of the circumflex metacharacter, it does not
* affect "\A".
* @G_REGEX_MATCH_NOTEOL: Specifies that the end of the subject string is
* not the end of a line, so the dollar metacharacter should not match
* it nor (except in multiline mode) a newline immediately before it.
* Setting this without #G_REGEX_MULTILINE (at compile time) causes
* dollar never to match. This option affects only the behaviour of
* the dollar metacharacter, it does not affect "\Z" or "\z".
* @G_REGEX_MATCH_NOTEMPTY: An empty string is not considered to be a valid
* match if this option is set. If there are alternatives in the pattern,
* they are tried. If all the alternatives match the empty string, the
* entire match fails. For example, if the pattern "a?b?" is applied to
* a string not beginning with "a" or "b", it matches the empty string
* at the start of the string. With this flag set, this match is not
* valid, so GRegex searches further into the string for occurrences
* of "a" or "b".
* @G_REGEX_MATCH_PARTIAL: Turns on the partial matching feature, for more
* documentation on partial matching see g_match_info_is_partial_match().
* @G_REGEX_MATCH_NEWLINE_CR: Overrides the newline definition set when
* creating a new #GRegex, setting the '\r' character as line terminator.
* @G_REGEX_MATCH_NEWLINE_LF: Overrides the newline definition set when
* creating a new #GRegex, setting the '\n' character as line terminator.
* @G_REGEX_MATCH_NEWLINE_CRLF: Overrides the newline definition set when
* creating a new #GRegex, setting the '\r\n' characters sequence as line terminator.
* @G_REGEX_MATCH_NEWLINE_ANY: Overrides the newline definition set when
* creating a new #GRegex, any Unicode newline sequence
* is recognised as a newline. These are '\r', '\n' and '\rn', and the
* single characters U+000B LINE TABULATION, U+000C FORM FEED (FF),
* U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and
* U+2029 PARAGRAPH SEPARATOR.
* @G_REGEX_MATCH_NEWLINE_ANYCRLF: Overrides the newline definition set when
* creating a new #GRegex; any '\r', '\n', or '\r\n' character sequence
* is recognized as a newline. Since: 2.34
* @G_REGEX_MATCH_BSR_ANYCRLF: Overrides the newline definition for "\R" set when
* creating a new #GRegex; only '\r', '\n', or '\r\n' character sequences
* are recognized as a newline by "\R". Since: 2.34
* @G_REGEX_MATCH_BSR_ANY: Overrides the newline definition for "\R" set when
* creating a new #GRegex; any Unicode newline character or character sequence
* are recognized as a newline by "\R". These are '\r', '\n' and '\rn', and the
* single characters U+000B LINE TABULATION, U+000C FORM FEED (FF),
* U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and
* U+2029 PARAGRAPH SEPARATOR. Since: 2.34
* @G_REGEX_MATCH_PARTIAL_SOFT: An alias for #G_REGEX_MATCH_PARTIAL. Since: 2.34
* @G_REGEX_MATCH_PARTIAL_HARD: Turns on the partial matching feature. In contrast to
* to #G_REGEX_MATCH_PARTIAL_SOFT, this stops matching as soon as a partial match
* is found, without continuing to search for a possible complete match. See
* g_match_info_is_partial_match() for more information. Since: 2.34
* @G_REGEX_MATCH_NOTEMPTY_ATSTART: Like #G_REGEX_MATCH_NOTEMPTY, but only applied to
* the start of the matched string. For anchored
* patterns this can only happen for pattern containing "\K". Since: 2.34
*
* Flags specifying match-time options.
*
* Since: 2.14
*/
/* Remember to update G_REGEX_MATCH_MASK in gregex.c after
* adding a new flag. */
typedef enum
{
G_REGEX_MATCH_ANCHORED = 1 << 4,
G_REGEX_MATCH_NOTBOL = 1 << 7,
G_REGEX_MATCH_NOTEOL = 1 << 8,
G_REGEX_MATCH_NOTEMPTY = 1 << 10,
G_REGEX_MATCH_PARTIAL = 1 << 15,
G_REGEX_MATCH_NEWLINE_CR = 1 << 20,
G_REGEX_MATCH_NEWLINE_LF = 1 << 21,
G_REGEX_MATCH_NEWLINE_CRLF = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_LF,
G_REGEX_MATCH_NEWLINE_ANY = 1 << 22,
G_REGEX_MATCH_NEWLINE_ANYCRLF = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_ANY,
G_REGEX_MATCH_BSR_ANYCRLF = 1 << 23,
G_REGEX_MATCH_BSR_ANY = 1 << 24,
G_REGEX_MATCH_PARTIAL_SOFT = G_REGEX_MATCH_PARTIAL,
G_REGEX_MATCH_PARTIAL_HARD = 1 << 27,
G_REGEX_MATCH_NOTEMPTY_ATSTART = 1 << 28
} GRegexMatchFlags;
/**
* GRegex:
*
* A GRegex is the "compiled" form of a regular expression pattern.
* This structure is opaque and its fields cannot be accessed directly.
*
* Since: 2.14
*/
typedef struct _GRegex GRegex;
/**
* GMatchInfo:
*
* A GMatchInfo is an opaque struct used to return information about
* matches.
*/
typedef struct _GMatchInfo GMatchInfo;
/**
* GRegexEvalCallback:
* @match_info: the #GMatchInfo generated by the match.
* Use g_match_info_get_regex() and g_match_info_get_string() if you
* need the #GRegex or the matched string.
* @result: a #GString containing the new string
* @user_data: user data passed to g_regex_replace_eval()
*
* Specifies the type of the function passed to g_regex_replace_eval().
* It is called for each occurrence of the pattern in the string passed
* to g_regex_replace_eval(), and it should append the replacement to
* @result.
*
* Returns: %FALSE to continue the replacement process, %TRUE to stop it
*
* Since: 2.14
*/
typedef gboolean (*GRegexEvalCallback) (const GMatchInfo *match_info,
GString *result,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
GRegex *g_regex_new (const gchar *pattern,
GRegexCompileFlags compile_options,
GRegexMatchFlags match_options,
GError **error);
GLIB_AVAILABLE_IN_ALL
GRegex *g_regex_ref (GRegex *regex);
GLIB_AVAILABLE_IN_ALL
void g_regex_unref (GRegex *regex);
GLIB_AVAILABLE_IN_ALL
const gchar *g_regex_get_pattern (const GRegex *regex);
GLIB_AVAILABLE_IN_ALL
gint g_regex_get_max_backref (const GRegex *regex);
GLIB_AVAILABLE_IN_ALL
gint g_regex_get_capture_count (const GRegex *regex);
GLIB_AVAILABLE_IN_ALL
gboolean g_regex_get_has_cr_or_lf (const GRegex *regex);
GLIB_AVAILABLE_IN_2_38
gint g_regex_get_max_lookbehind (const GRegex *regex);
GLIB_AVAILABLE_IN_ALL
gint g_regex_get_string_number (const GRegex *regex,
const gchar *name);
GLIB_AVAILABLE_IN_ALL
gchar *g_regex_escape_string (const gchar *string,
gint length);
GLIB_AVAILABLE_IN_ALL
gchar *g_regex_escape_nul (const gchar *string,
gint length);
GLIB_AVAILABLE_IN_ALL
GRegexCompileFlags g_regex_get_compile_flags (const GRegex *regex);
GLIB_AVAILABLE_IN_ALL
GRegexMatchFlags g_regex_get_match_flags (const GRegex *regex);
/* Matching. */
GLIB_AVAILABLE_IN_ALL
gboolean g_regex_match_simple (const gchar *pattern,
const gchar *string,
GRegexCompileFlags compile_options,
GRegexMatchFlags match_options);
GLIB_AVAILABLE_IN_ALL
gboolean g_regex_match (const GRegex *regex,
const gchar *string,
GRegexMatchFlags match_options,
GMatchInfo **match_info);
GLIB_AVAILABLE_IN_ALL
gboolean g_regex_match_full (const GRegex *regex,
const gchar *string,
gssize string_len,
gint start_position,
GRegexMatchFlags match_options,
GMatchInfo **match_info,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_regex_match_all (const GRegex *regex,
const gchar *string,
GRegexMatchFlags match_options,
GMatchInfo **match_info);
GLIB_AVAILABLE_IN_ALL
gboolean g_regex_match_all_full (const GRegex *regex,
const gchar *string,
gssize string_len,
gint start_position,
GRegexMatchFlags match_options,
GMatchInfo **match_info,
GError **error);
/* String splitting. */
GLIB_AVAILABLE_IN_ALL
gchar **g_regex_split_simple (const gchar *pattern,
const gchar *string,
GRegexCompileFlags compile_options,
GRegexMatchFlags match_options);
GLIB_AVAILABLE_IN_ALL
gchar **g_regex_split (const GRegex *regex,
const gchar *string,
GRegexMatchFlags match_options);
GLIB_AVAILABLE_IN_ALL
gchar **g_regex_split_full (const GRegex *regex,
const gchar *string,
gssize string_len,
gint start_position,
GRegexMatchFlags match_options,
gint max_tokens,
GError **error);
/* String replacement. */
GLIB_AVAILABLE_IN_ALL
gchar *g_regex_replace (const GRegex *regex,
const gchar *string,
gssize string_len,
gint start_position,
const gchar *replacement,
GRegexMatchFlags match_options,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar *g_regex_replace_literal (const GRegex *regex,
const gchar *string,
gssize string_len,
gint start_position,
const gchar *replacement,
GRegexMatchFlags match_options,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar *g_regex_replace_eval (const GRegex *regex,
const gchar *string,
gssize string_len,
gint start_position,
GRegexMatchFlags match_options,
GRegexEvalCallback eval,
gpointer user_data,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_regex_check_replacement (const gchar *replacement,
gboolean *has_references,
GError **error);
/* Match info */
GLIB_AVAILABLE_IN_ALL
GRegex *g_match_info_get_regex (const GMatchInfo *match_info);
GLIB_AVAILABLE_IN_ALL
const gchar *g_match_info_get_string (const GMatchInfo *match_info);
GLIB_AVAILABLE_IN_ALL
GMatchInfo *g_match_info_ref (GMatchInfo *match_info);
GLIB_AVAILABLE_IN_ALL
void g_match_info_unref (GMatchInfo *match_info);
GLIB_AVAILABLE_IN_ALL
void g_match_info_free (GMatchInfo *match_info);
GLIB_AVAILABLE_IN_ALL
gboolean g_match_info_next (GMatchInfo *match_info,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_match_info_matches (const GMatchInfo *match_info);
GLIB_AVAILABLE_IN_ALL
gint g_match_info_get_match_count (const GMatchInfo *match_info);
GLIB_AVAILABLE_IN_ALL
gboolean g_match_info_is_partial_match (const GMatchInfo *match_info);
GLIB_AVAILABLE_IN_ALL
gchar *g_match_info_expand_references(const GMatchInfo *match_info,
const gchar *string_to_expand,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar *g_match_info_fetch (const GMatchInfo *match_info,
gint match_num);
GLIB_AVAILABLE_IN_ALL
gboolean g_match_info_fetch_pos (const GMatchInfo *match_info,
gint match_num,
gint *start_pos,
gint *end_pos);
GLIB_AVAILABLE_IN_ALL
gchar *g_match_info_fetch_named (const GMatchInfo *match_info,
const gchar *name);
GLIB_AVAILABLE_IN_ALL
gboolean g_match_info_fetch_named_pos (const GMatchInfo *match_info,
const gchar *name,
gint *start_pos,
gint *end_pos);
GLIB_AVAILABLE_IN_ALL
gchar **g_match_info_fetch_all (const GMatchInfo *match_info);
G_END_DECLS
#endif /* __G_REGEX_H__ */
gslice.h 0000644 00000010751 15021467762 0006201 0 ustar 00 /* GLIB sliced memory - fast threaded memory chunk allocator
* Copyright (C) 2005 Tim Janik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_SLICE_H__
#define __G_SLICE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
/* slices - fast allocation/release of small memory blocks
*/
GLIB_AVAILABLE_IN_ALL
gpointer g_slice_alloc (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_ALL
gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_ALL
gpointer g_slice_copy (gsize block_size,
gconstpointer mem_block) G_GNUC_ALLOC_SIZE(1);
GLIB_AVAILABLE_IN_ALL
void g_slice_free1 (gsize block_size,
gpointer mem_block);
GLIB_AVAILABLE_IN_ALL
void g_slice_free_chain_with_offset (gsize block_size,
gpointer mem_chain,
gsize next_offset);
#define g_slice_new(type) ((type*) g_slice_alloc (sizeof (type)))
/* Allow the compiler to inline memset(). Since the size is a constant, this
* can significantly improve performance. */
#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__)
# define g_slice_new0(type) \
(type *) (G_GNUC_EXTENSION ({ \
gsize __s = sizeof (type); \
gpointer __p; \
__p = g_slice_alloc (__s); \
memset (__p, 0, __s); \
__p; \
}))
#else
# define g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type)))
#endif
/* MemoryBlockType *
* g_slice_dup (MemoryBlockType,
* MemoryBlockType *mem_block);
* g_slice_free (MemoryBlockType,
* MemoryBlockType *mem_block);
* g_slice_free_chain (MemoryBlockType,
* MemoryBlockType *first_chain_block,
* memory_block_next_field);
* pseudo prototypes for the macro
* definitions following below.
*/
/* we go through extra hoops to ensure type safety */
#define g_slice_dup(type, mem) \
(1 ? (type*) g_slice_copy (sizeof (type), (mem)) \
: ((void) ((type*) 0 == (mem)), (type*) 0))
#define g_slice_free(type, mem) \
G_STMT_START { \
if (1) g_slice_free1 (sizeof (type), (mem)); \
else (void) ((type*) 0 == (mem)); \
} G_STMT_END
#define g_slice_free_chain(type, mem_chain, next) \
G_STMT_START { \
if (1) g_slice_free_chain_with_offset (sizeof (type), \
(mem_chain), G_STRUCT_OFFSET (type, next)); \
else (void) ((type*) 0 == (mem_chain)); \
} G_STMT_END
/* --- internal debugging API --- */
typedef enum {
G_SLICE_CONFIG_ALWAYS_MALLOC = 1,
G_SLICE_CONFIG_BYPASS_MAGAZINES,
G_SLICE_CONFIG_WORKING_SET_MSECS,
G_SLICE_CONFIG_COLOR_INCREMENT,
G_SLICE_CONFIG_CHUNK_SIZES,
G_SLICE_CONFIG_CONTENTION_COUNTER
} GSliceConfig;
GLIB_DEPRECATED_IN_2_34
void g_slice_set_config (GSliceConfig ckey, gint64 value);
GLIB_DEPRECATED_IN_2_34
gint64 g_slice_get_config (GSliceConfig ckey);
GLIB_DEPRECATED_IN_2_34
gint64* g_slice_get_config_state (GSliceConfig ckey, gint64 address, guint *n_values);
#ifdef G_ENABLE_DEBUG
GLIB_AVAILABLE_IN_ALL
void g_slice_debug_tree_statistics (void);
#endif
G_END_DECLS
#endif /* __G_SLICE_H__ */
galloca.h 0000644 00000007510 15021467762 0006334 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_ALLOCA_H__
#define __G_ALLOCA_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#if defined(__BIONIC__) && defined (GLIB_HAVE_ALLOCA_H)
# include
#elif defined(__GNUC__)
/* GCC does the right thing */
# undef alloca
# define alloca(size) __builtin_alloca (size)
#elif defined (GLIB_HAVE_ALLOCA_H)
/* a native and working alloca.h is there */
# include
#else /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */
# if defined(_MSC_VER) || defined(__DMC__)
# include
# define alloca _alloca
# else /* !_MSC_VER && !__DMC__ */
# ifdef _AIX
# pragma alloca
# else /* !_AIX */
# ifndef alloca /* predefined by HP cc +Olibcalls */
G_BEGIN_DECLS
char *alloca ();
G_END_DECLS
# endif /* !alloca */
# endif /* !_AIX */
# endif /* !_MSC_VER && !__DMC__ */
#endif /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */
/**
* g_alloca:
* @size: number of bytes to allocate.
*
* Allocates @size bytes on the stack; these bytes will be freed when the current
* stack frame is cleaned up. This macro essentially just wraps the alloca()
* function present on most UNIX variants.
* Thus it provides the same advantages and pitfalls as alloca():
*
* - alloca() is very fast, as on most systems it's implemented by just adjusting
* the stack pointer register.
*
* - It doesn't cause any memory fragmentation, within its scope, separate alloca()
* blocks just build up and are released together at function end.
*
* - Allocation sizes have to fit into the current stack frame. For instance in a
* threaded environment on Linux, the per-thread stack size is limited to 2 Megabytes,
* so be sparse with alloca() uses.
*
* - Allocation failure due to insufficient stack space is not indicated with a %NULL
* return like e.g. with malloc(). Instead, most systems probably handle it the same
* way as out of stack space situations from infinite function recursion, i.e.
* with a segmentation fault.
*
* - Special care has to be taken when mixing alloca() with GNU C variable sized arrays.
* Stack space allocated with alloca() in the same scope as a variable sized array
* will be freed together with the variable sized array upon exit of that scope, and
* not upon exit of the enclosing function scope.
*
* Returns: space for @size bytes, allocated on the stack
*/
#define g_alloca(size) alloca (size)
/**
* g_newa:
* @struct_type: Type of memory chunks to be allocated
* @n_structs: Number of chunks to be allocated
*
* Wraps g_alloca() in a more typesafe manner.
*
* Returns: Pointer to stack space for @n_structs chunks of type @struct_type
*/
#define g_newa(struct_type, n_structs) ((struct_type*) g_alloca (sizeof (struct_type) * (gsize) (n_structs)))
#endif /* __G_ALLOCA_H__ */
gbacktrace.h 0000644 00000005351 15021467762 0007021 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_BACKTRACE_H__
#define __G_BACKTRACE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#ifdef __sun__
#include
#endif
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
void g_on_error_query (const gchar *prg_name);
GLIB_AVAILABLE_IN_ALL
void g_on_error_stack_trace (const gchar *prg_name);
/**
* G_BREAKPOINT:
*
* Inserts a breakpoint instruction into the code.
*
* On architectures which support it, this is implemented as a soft interrupt
* and on other architectures it raises a `SIGTRAP` signal.
*
* `SIGTRAP` is used rather than abort() to allow breakpoints to be skipped past
* in a debugger if they are not the desired target of debugging.
*/
#if (defined (__i386__) || defined (__x86_64__)) && defined (__GNUC__) && __GNUC__ >= 2
# define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("int $03"); }G_STMT_END
#elif (defined (_MSC_VER) || defined (__DMC__)) && defined (_M_IX86)
# define G_BREAKPOINT() G_STMT_START{ __asm int 3h }G_STMT_END
#elif defined (_MSC_VER)
# define G_BREAKPOINT() G_STMT_START{ __debugbreak(); }G_STMT_END
#elif defined (__alpha__) && !defined(__osf__) && defined (__GNUC__) && __GNUC__ >= 2
# define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END
#elif defined (__APPLE__) || (defined(_WIN32) && (defined(__clang__) || defined(__GNUC__)))
# define G_BREAKPOINT() G_STMT_START{ __builtin_trap(); }G_STMT_END
#else /* !__i386__ && !__alpha__ */
# define G_BREAKPOINT() G_STMT_START{ raise (SIGTRAP); }G_STMT_END
#endif /* __i386__ */
G_END_DECLS
#endif /* __G_BACKTRACE_H__ */
gstrvbuilder.h 0000644 00000003115 15021467762 0007443 0 ustar 00 /*
* Copyright © 2020 Canonical Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_STRVBUILDER_H__
#define __G_STRVBUILDER_H__
#if !defined(__GLIB_H_INSIDE__) && !defined(GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
/**
* GStrvBuilder:
*
* A helper object to build a %NULL-terminated string array
* by appending. See g_strv_builder_new().
*
* Since: 2.68
*/
typedef struct _GStrvBuilder GStrvBuilder;
GLIB_AVAILABLE_IN_2_68
GStrvBuilder *g_strv_builder_new (void);
GLIB_AVAILABLE_IN_2_68
void g_strv_builder_unref (GStrvBuilder *builder);
GLIB_AVAILABLE_IN_2_68
GStrvBuilder *g_strv_builder_ref (GStrvBuilder *builder);
GLIB_AVAILABLE_IN_2_68
void g_strv_builder_add (GStrvBuilder *builder,
const char *value);
GLIB_AVAILABLE_IN_2_68
GStrv g_strv_builder_end (GStrvBuilder *builder);
G_END_DECLS
#endif /* __G_STRVBUILDER_H__ */
gprimes.h 0000644 00000003236 15021467762 0006401 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_PRIMES_H__
#define __G_PRIMES_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
/* Prime numbers.
*/
/* This function returns prime numbers spaced by approximately 1.5-2.0
* and is for use in resizing data structures which prefer
* prime-valued sizes. The closest spaced prime function returns the
* next largest prime, or the highest it knows about which is about
* MAXINT/4.
*/
GLIB_AVAILABLE_IN_ALL
guint g_spaced_primes_closest (guint num) G_GNUC_CONST;
G_END_DECLS
#endif /* __G_PRIMES_H__ */
grefcount.h 0000644 00000007624 15021467762 0006734 0 ustar 00 /* grefcount.h: Reference counting
*
* Copyright 2018 Emmanuele Bassi
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __GREFCOUNT_H__
#define __GREFCOUNT_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_2_58
void g_ref_count_init (grefcount *rc);
GLIB_AVAILABLE_IN_2_58
void g_ref_count_inc (grefcount *rc);
GLIB_AVAILABLE_IN_2_58
gboolean g_ref_count_dec (grefcount *rc);
GLIB_AVAILABLE_IN_2_58
gboolean g_ref_count_compare (grefcount *rc,
gint val);
GLIB_AVAILABLE_IN_2_58
void g_atomic_ref_count_init (gatomicrefcount *arc);
GLIB_AVAILABLE_IN_2_58
void g_atomic_ref_count_inc (gatomicrefcount *arc);
GLIB_AVAILABLE_IN_2_58
gboolean g_atomic_ref_count_dec (gatomicrefcount *arc);
GLIB_AVAILABLE_IN_2_58
gboolean g_atomic_ref_count_compare (gatomicrefcount *arc,
gint val);
/* On GCC we can use __extension__ to inline the API without using
* ancillary functions; we only do this when disabling checks, as
* it disables warnings when saturating the reference counters
*/
#if defined(__GNUC__) && defined(G_DISABLE_CHECKS)
# define g_ref_count_init(rc) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(rc) == sizeof (grefcount)); \
(void) (0 ? *(rc) ^ *(rc) : 1); \
*(rc) = -1; \
}))
# define g_ref_count_inc(rc) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(rc) == sizeof (grefcount)); \
(void) (0 ? *(rc) ^ *(rc) : 1); \
if (*(rc) == G_MININT) ; else { \
*(rc) -= 1; \
} \
}))
# define g_ref_count_dec(rc) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(rc) == sizeof (grefcount)); \
grefcount __rc = *(rc); \
__rc += 1; \
if (__rc == 0) ; else { \
*(rc) = __rc; \
} \
(gboolean) (__rc == 0); \
}))
# define g_ref_count_compare(rc,val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(rc) == sizeof (grefcount)); \
(void) (0 ? *(rc) ^ (val) : 1); \
(gboolean) (*(rc) == -(val)); \
}))
# define g_atomic_ref_count_init(rc) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(rc) == sizeof (gatomicrefcount)); \
(void) (0 ? *(rc) ^ *(rc) : 1); \
*(rc) = 1; \
}))
# define g_atomic_ref_count_inc(rc) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(rc) == sizeof (gatomicrefcount)); \
(void) (0 ? *(rc) ^ *(rc) : 1); \
(void) (g_atomic_int_get (rc) == G_MAXINT ? 0 : g_atomic_int_inc ((rc))); \
}))
# define g_atomic_ref_count_dec(rc) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(rc) == sizeof (gatomicrefcount)); \
(void) (0 ? *(rc) ^ *(rc) : 1); \
g_atomic_int_dec_and_test ((rc)); \
}))
# define g_atomic_ref_count_compare(rc,val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(rc) == sizeof (gatomicrefcount)); \
(void) (0 ? *(rc) ^ (val) : 1); \
(gboolean) (g_atomic_int_get (rc) == (val)); \
}))
#endif /* __GNUC__ && G_DISABLE_CHECKS */
G_END_DECLS
#endif /* __GREFCOUNT_H__ */
gcharset.h 0000644 00000003052 15021467762 0006527 0 ustar 00 /* gcharset.h - Charset functions
*
* Copyright (C) 2011 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_CHARSET_H__
#define __G_CHARSET_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
gboolean g_get_charset (const char **charset);
GLIB_AVAILABLE_IN_ALL
gchar * g_get_codeset (void);
GLIB_AVAILABLE_IN_2_62
gboolean g_get_console_charset (const char **charset);
GLIB_AVAILABLE_IN_ALL
const gchar * const * g_get_language_names (void);
GLIB_AVAILABLE_IN_2_58
const gchar * const * g_get_language_names_with_category
(const gchar *category_name);
GLIB_AVAILABLE_IN_ALL
gchar ** g_get_locale_variants (const gchar *locale);
G_END_DECLS
#endif /* __G_CHARSET_H__ */
gtree.h 0000644 00000014470 15021467762 0006043 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_TREE_H__
#define __G_TREE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
#undef G_TREE_DEBUG
typedef struct _GTree GTree;
/**
* GTreeNode:
*
* An opaque type which identifies a specific node in a #GTree.
*
* Since: 2.68
*/
typedef struct _GTreeNode GTreeNode;
typedef gboolean (*GTraverseFunc) (gpointer key,
gpointer value,
gpointer data);
/**
* GTraverseNodeFunc:
* @node: a #GTreeNode
* @data: user data passed to g_tree_foreach_node()
*
* Specifies the type of function passed to g_tree_foreach_node(). It is
* passed each node, together with the @user_data parameter passed to
* g_tree_foreach_node(). If the function returns %TRUE, the traversal is
* stopped.
*
* Returns: %TRUE to stop the traversal
* Since: 2.68
*/
typedef gboolean (*GTraverseNodeFunc) (GTreeNode *node,
gpointer data);
/* Balanced binary trees
*/
GLIB_AVAILABLE_IN_ALL
GTree* g_tree_new (GCompareFunc key_compare_func);
GLIB_AVAILABLE_IN_ALL
GTree* g_tree_new_with_data (GCompareDataFunc key_compare_func,
gpointer key_compare_data);
GLIB_AVAILABLE_IN_ALL
GTree* g_tree_new_full (GCompareDataFunc key_compare_func,
gpointer key_compare_data,
GDestroyNotify key_destroy_func,
GDestroyNotify value_destroy_func);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_node_first (GTree *tree);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_node_last (GTree *tree);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_node_previous (GTreeNode *node);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_node_next (GTreeNode *node);
GLIB_AVAILABLE_IN_ALL
GTree* g_tree_ref (GTree *tree);
GLIB_AVAILABLE_IN_ALL
void g_tree_unref (GTree *tree);
GLIB_AVAILABLE_IN_ALL
void g_tree_destroy (GTree *tree);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_insert_node (GTree *tree,
gpointer key,
gpointer value);
GLIB_AVAILABLE_IN_ALL
void g_tree_insert (GTree *tree,
gpointer key,
gpointer value);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_replace_node (GTree *tree,
gpointer key,
gpointer value);
GLIB_AVAILABLE_IN_ALL
void g_tree_replace (GTree *tree,
gpointer key,
gpointer value);
GLIB_AVAILABLE_IN_ALL
gboolean g_tree_remove (GTree *tree,
gconstpointer key);
GLIB_AVAILABLE_IN_ALL
gboolean g_tree_steal (GTree *tree,
gconstpointer key);
GLIB_AVAILABLE_IN_2_68
gpointer g_tree_node_key (GTreeNode *node);
GLIB_AVAILABLE_IN_2_68
gpointer g_tree_node_value (GTreeNode *node);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_lookup_node (GTree *tree,
gconstpointer key);
GLIB_AVAILABLE_IN_ALL
gpointer g_tree_lookup (GTree *tree,
gconstpointer key);
GLIB_AVAILABLE_IN_ALL
gboolean g_tree_lookup_extended (GTree *tree,
gconstpointer lookup_key,
gpointer *orig_key,
gpointer *value);
GLIB_AVAILABLE_IN_ALL
void g_tree_foreach (GTree *tree,
GTraverseFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_68
void g_tree_foreach_node (GTree *tree,
GTraverseNodeFunc func,
gpointer user_data);
GLIB_DEPRECATED
void g_tree_traverse (GTree *tree,
GTraverseFunc traverse_func,
GTraverseType traverse_type,
gpointer user_data);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_search_node (GTree *tree,
GCompareFunc search_func,
gconstpointer user_data);
GLIB_AVAILABLE_IN_ALL
gpointer g_tree_search (GTree *tree,
GCompareFunc search_func,
gconstpointer user_data);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_lower_bound (GTree *tree,
gconstpointer key);
GLIB_AVAILABLE_IN_2_68
GTreeNode *g_tree_upper_bound (GTree *tree,
gconstpointer key);
GLIB_AVAILABLE_IN_ALL
gint g_tree_height (GTree *tree);
GLIB_AVAILABLE_IN_ALL
gint g_tree_nnodes (GTree *tree);
#ifdef G_TREE_DEBUG
/*< private >*/
#ifndef __GTK_DOC_IGNORE__
void g_tree_dump (GTree *tree);
#endif /* !__GTK_DOC_IGNORE__ */
#endif /* G_TREE_DEBUG */
G_END_DECLS
#endif /* __G_TREE_H__ */
gstdio.h 0000644 00000011765 15021467762 0006232 0 ustar 00 /* gstdio.h - GFilename wrappers for C library functions
*
* Copyright 2004 Tor Lillqvist
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_STDIO_H__
#define __G_STDIO_H__
#include
#include
G_BEGIN_DECLS
#if (defined (__MINGW64_VERSION_MAJOR) || defined (_MSC_VER)) && !defined(_WIN64)
/* Make it clear that we mean the struct with 32-bit st_size and
* 32-bit st_*time fields as that is how the 32-bit GLib DLL normally
* has been compiled. If you get a compiler warning when calling
* g_stat(), do take it seriously and make sure that the type of
* struct stat the code in GLib fills in matches the struct the type
* of struct stat you pass to g_stat(). To avoid hassle, to get file
* attributes just use the GIO API instead which doesn't use struct
* stat.
*
* Sure, it would be nicer to use a struct with 64-bit st_size and
* 64-bit st_*time fields, but changing that now would break ABI. And
* in MinGW, a plain "struct stat" is the one with 32-bit st_size and
* st_*time fields.
*/
typedef struct _stat32 GStatBuf;
#elif defined(__MINGW64_VERSION_MAJOR) && defined(_WIN64)
typedef struct _stat64 GStatBuf;
#else
typedef struct stat GStatBuf;
#endif
#if defined(G_OS_UNIX) && !defined(G_STDIO_WRAP_ON_UNIX)
/* Just pass on to the system functions, so there's no potential for data
* format mismatches, especially with large file interfaces.
* A few functions can't be handled in this way, since they are not defined
* in a portable system header that we could include here.
*
* #G_STDIO_WRAP_ON_UNIX is not public API and its behaviour is not guaranteed
* in future.
*/
#ifndef __GTK_DOC_IGNORE__
#define g_chmod chmod
#define g_open open
#define g_creat creat
#define g_rename rename
#define g_mkdir mkdir
#define g_stat stat
#define g_lstat lstat
#define g_remove remove
#define g_fopen fopen
#define g_freopen freopen
#define g_fsync fsync
#define g_utime utime
#endif
GLIB_AVAILABLE_IN_ALL
int g_access (const gchar *filename,
int mode);
GLIB_AVAILABLE_IN_ALL
int g_chdir (const gchar *path);
GLIB_AVAILABLE_IN_ALL
int g_unlink (const gchar *filename);
GLIB_AVAILABLE_IN_ALL
int g_rmdir (const gchar *filename);
#else /* ! G_OS_UNIX */
/* Wrappers for C library functions that take pathname arguments. On
* Unix, the pathname is a file name as it literally is in the file
* system. On well-maintained systems with consistent users who know
* what they are doing and no exchange of files with others this would
* be a well-defined encoding, preferably UTF-8. On Windows, the
* pathname is always in UTF-8, even if that is not the on-disk
* encoding, and not the encoding accepted by the C library or Win32
* API.
*/
GLIB_AVAILABLE_IN_ALL
int g_access (const gchar *filename,
int mode);
GLIB_AVAILABLE_IN_ALL
int g_chmod (const gchar *filename,
int mode);
GLIB_AVAILABLE_IN_ALL
int g_open (const gchar *filename,
int flags,
int mode);
GLIB_AVAILABLE_IN_ALL
int g_creat (const gchar *filename,
int mode);
GLIB_AVAILABLE_IN_ALL
int g_rename (const gchar *oldfilename,
const gchar *newfilename);
GLIB_AVAILABLE_IN_ALL
int g_mkdir (const gchar *filename,
int mode);
GLIB_AVAILABLE_IN_ALL
int g_chdir (const gchar *path);
GLIB_AVAILABLE_IN_ALL
int g_stat (const gchar *filename,
GStatBuf *buf);
GLIB_AVAILABLE_IN_ALL
int g_lstat (const gchar *filename,
GStatBuf *buf);
GLIB_AVAILABLE_IN_ALL
int g_unlink (const gchar *filename);
GLIB_AVAILABLE_IN_ALL
int g_remove (const gchar *filename);
GLIB_AVAILABLE_IN_ALL
int g_rmdir (const gchar *filename);
GLIB_AVAILABLE_IN_ALL
FILE *g_fopen (const gchar *filename,
const gchar *mode);
GLIB_AVAILABLE_IN_ALL
FILE *g_freopen (const gchar *filename,
const gchar *mode,
FILE *stream);
GLIB_AVAILABLE_IN_2_64
gint g_fsync (gint fd);
struct utimbuf; /* Don't need the real definition of struct utimbuf when just
* including this header.
*/
GLIB_AVAILABLE_IN_ALL
int g_utime (const gchar *filename,
struct utimbuf *utb);
#endif /* G_OS_UNIX */
GLIB_AVAILABLE_IN_2_36
gboolean g_close (gint fd,
GError **error);
G_END_DECLS
#endif /* __G_STDIO_H__ */
gqueue.h 0000644 00000017106 15021467762 0006227 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_QUEUE_H__
#define __G_QUEUE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GQueue GQueue;
/**
* GQueue:
* @head: a pointer to the first element of the queue
* @tail: a pointer to the last element of the queue
* @length: the number of elements in the queue
*
* Contains the public fields of a
* [Queue][glib-Double-ended-Queues].
*/
struct _GQueue
{
GList *head;
GList *tail;
guint length;
};
/**
* G_QUEUE_INIT:
*
* A statically-allocated #GQueue must be initialized with this
* macro before it can be used. This macro can be used to initialize
* a variable, but it cannot be assigned to a variable. In that case
* you have to use g_queue_init().
*
* |[
* GQueue my_queue = G_QUEUE_INIT;
* ]|
*
* Since: 2.14
*/
#define G_QUEUE_INIT { NULL, NULL, 0 }
/* Queues
*/
GLIB_AVAILABLE_IN_ALL
GQueue* g_queue_new (void);
GLIB_AVAILABLE_IN_ALL
void g_queue_free (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
void g_queue_free_full (GQueue *queue,
GDestroyNotify free_func);
GLIB_AVAILABLE_IN_ALL
void g_queue_init (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
void g_queue_clear (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
gboolean g_queue_is_empty (GQueue *queue);
GLIB_AVAILABLE_IN_2_60
void g_queue_clear_full (GQueue *queue,
GDestroyNotify free_func);
GLIB_AVAILABLE_IN_ALL
guint g_queue_get_length (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
void g_queue_reverse (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
GQueue * g_queue_copy (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
void g_queue_foreach (GQueue *queue,
GFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
GList * g_queue_find (GQueue *queue,
gconstpointer data);
GLIB_AVAILABLE_IN_ALL
GList * g_queue_find_custom (GQueue *queue,
gconstpointer data,
GCompareFunc func);
GLIB_AVAILABLE_IN_ALL
void g_queue_sort (GQueue *queue,
GCompareDataFunc compare_func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
void g_queue_push_head (GQueue *queue,
gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_queue_push_tail (GQueue *queue,
gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_queue_push_nth (GQueue *queue,
gpointer data,
gint n);
GLIB_AVAILABLE_IN_ALL
gpointer g_queue_pop_head (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
gpointer g_queue_pop_tail (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
gpointer g_queue_pop_nth (GQueue *queue,
guint n);
GLIB_AVAILABLE_IN_ALL
gpointer g_queue_peek_head (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
gpointer g_queue_peek_tail (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
gpointer g_queue_peek_nth (GQueue *queue,
guint n);
GLIB_AVAILABLE_IN_ALL
gint g_queue_index (GQueue *queue,
gconstpointer data);
GLIB_AVAILABLE_IN_ALL
gboolean g_queue_remove (GQueue *queue,
gconstpointer data);
GLIB_AVAILABLE_IN_ALL
guint g_queue_remove_all (GQueue *queue,
gconstpointer data);
GLIB_AVAILABLE_IN_ALL
void g_queue_insert_before (GQueue *queue,
GList *sibling,
gpointer data);
GLIB_AVAILABLE_IN_2_62
void g_queue_insert_before_link
(GQueue *queue,
GList *sibling,
GList *link_);
GLIB_AVAILABLE_IN_ALL
void g_queue_insert_after (GQueue *queue,
GList *sibling,
gpointer data);
GLIB_AVAILABLE_IN_2_62
void g_queue_insert_after_link
(GQueue *queue,
GList *sibling,
GList *link_);
GLIB_AVAILABLE_IN_ALL
void g_queue_insert_sorted (GQueue *queue,
gpointer data,
GCompareDataFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
void g_queue_push_head_link (GQueue *queue,
GList *link_);
GLIB_AVAILABLE_IN_ALL
void g_queue_push_tail_link (GQueue *queue,
GList *link_);
GLIB_AVAILABLE_IN_ALL
void g_queue_push_nth_link (GQueue *queue,
gint n,
GList *link_);
GLIB_AVAILABLE_IN_ALL
GList* g_queue_pop_head_link (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
GList* g_queue_pop_tail_link (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
GList* g_queue_pop_nth_link (GQueue *queue,
guint n);
GLIB_AVAILABLE_IN_ALL
GList* g_queue_peek_head_link (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
GList* g_queue_peek_tail_link (GQueue *queue);
GLIB_AVAILABLE_IN_ALL
GList* g_queue_peek_nth_link (GQueue *queue,
guint n);
GLIB_AVAILABLE_IN_ALL
gint g_queue_link_index (GQueue *queue,
GList *link_);
GLIB_AVAILABLE_IN_ALL
void g_queue_unlink (GQueue *queue,
GList *link_);
GLIB_AVAILABLE_IN_ALL
void g_queue_delete_link (GQueue *queue,
GList *link_);
G_END_DECLS
#endif /* __G_QUEUE_H__ */
gbase64.h 0000644 00000004423 15021467762 0006165 0 ustar 00 /* gbase64.h - Base64 coding functions
*
* Copyright (C) 2005 Alexander Larsson
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_BASE64_H__
#define __G_BASE64_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
gsize g_base64_encode_step (const guchar *in,
gsize len,
gboolean break_lines,
gchar *out,
gint *state,
gint *save);
GLIB_AVAILABLE_IN_ALL
gsize g_base64_encode_close (gboolean break_lines,
gchar *out,
gint *state,
gint *save);
GLIB_AVAILABLE_IN_ALL
gchar* g_base64_encode (const guchar *data,
gsize len) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gsize g_base64_decode_step (const gchar *in,
gsize len,
guchar *out,
gint *state,
guint *save);
GLIB_AVAILABLE_IN_ALL
guchar *g_base64_decode (const gchar *text,
gsize *out_len) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
guchar *g_base64_decode_inplace (gchar *text,
gsize *out_len);
G_END_DECLS
#endif /* __G_BASE64_H__ */
gslist.h 0000644 00000014627 15021467762 0006246 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_SLIST_H__
#define __G_SLIST_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
typedef struct _GSList GSList;
struct _GSList
{
gpointer data;
GSList *next;
};
/* Singly linked lists
*/
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_alloc (void) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
void g_slist_free (GSList *list);
GLIB_AVAILABLE_IN_ALL
void g_slist_free_1 (GSList *list);
#define g_slist_free1 g_slist_free_1
GLIB_AVAILABLE_IN_ALL
void g_slist_free_full (GSList *list,
GDestroyNotify free_func);
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_append (GSList *list,
gpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_prepend (GSList *list,
gpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_insert (GSList *list,
gpointer data,
gint position) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_insert_sorted (GSList *list,
gpointer data,
GCompareFunc func) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_insert_sorted_with_data (GSList *list,
gpointer data,
GCompareDataFunc func,
gpointer user_data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_insert_before (GSList *slist,
GSList *sibling,
gpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_concat (GSList *list1,
GSList *list2) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_remove (GSList *list,
gconstpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_remove_all (GSList *list,
gconstpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_remove_link (GSList *list,
GSList *link_) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_delete_link (GSList *list,
GSList *link_) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_reverse (GSList *list) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_copy (GSList *list) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_2_34
GSList* g_slist_copy_deep (GSList *list,
GCopyFunc func,
gpointer user_data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_nth (GSList *list,
guint n);
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_find (GSList *list,
gconstpointer data);
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_find_custom (GSList *list,
gconstpointer data,
GCompareFunc func);
GLIB_AVAILABLE_IN_ALL
gint g_slist_position (GSList *list,
GSList *llink);
GLIB_AVAILABLE_IN_ALL
gint g_slist_index (GSList *list,
gconstpointer data);
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_last (GSList *list);
GLIB_AVAILABLE_IN_ALL
guint g_slist_length (GSList *list);
GLIB_AVAILABLE_IN_ALL
void g_slist_foreach (GSList *list,
GFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_sort (GSList *list,
GCompareFunc compare_func) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GSList* g_slist_sort_with_data (GSList *list,
GCompareDataFunc compare_func,
gpointer user_data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
gpointer g_slist_nth_data (GSList *list,
guint n);
GLIB_AVAILABLE_IN_2_64
void g_clear_slist (GSList **slist_ptr,
GDestroyNotify destroy);
#define g_clear_slist(slist_ptr, destroy) \
G_STMT_START { \
GSList *_slist; \
\
_slist = *(slist_ptr); \
if (_slist) \
{ \
*slist_ptr = NULL; \
\
if ((destroy) != NULL) \
g_slist_free_full (_slist, (destroy)); \
else \
g_slist_free (_slist); \
} \
} G_STMT_END \
GLIB_AVAILABLE_MACRO_IN_2_64
#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL)
G_END_DECLS
#endif /* __G_SLIST_H__ */
ggettext.h 0000644 00000004570 15021467762 0006570 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_GETTEXT_H__
#define __G_GETTEXT_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
const gchar *g_strip_context (const gchar *msgid,
const gchar *msgval) G_GNUC_FORMAT(1);
GLIB_AVAILABLE_IN_ALL
const gchar *g_dgettext (const gchar *domain,
const gchar *msgid) G_GNUC_FORMAT(2);
GLIB_AVAILABLE_IN_ALL
const gchar *g_dcgettext (const gchar *domain,
const gchar *msgid,
gint category) G_GNUC_FORMAT(2);
GLIB_AVAILABLE_IN_ALL
const gchar *g_dngettext (const gchar *domain,
const gchar *msgid,
const gchar *msgid_plural,
gulong n) G_GNUC_FORMAT(3);
GLIB_AVAILABLE_IN_ALL
const gchar *g_dpgettext (const gchar *domain,
const gchar *msgctxtid,
gsize msgidoffset) G_GNUC_FORMAT(2);
GLIB_AVAILABLE_IN_ALL
const gchar *g_dpgettext2 (const gchar *domain,
const gchar *context,
const gchar *msgid) G_GNUC_FORMAT(3);
G_END_DECLS
#endif /* __G_GETTEXT_H__ */
gatomic.h 0000644 00000065112 15021467762 0006357 0 ustar 00 /*
* Copyright © 2011 Ryan Lortie
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*
* Author: Ryan Lortie
*/
#ifndef __G_ATOMIC_H__
#define __G_ATOMIC_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#if defined(glib_typeof_2_68) && GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68
/* for glib_typeof */
#include
#endif
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
gint g_atomic_int_get (const volatile gint *atomic);
GLIB_AVAILABLE_IN_ALL
void g_atomic_int_set (volatile gint *atomic,
gint newval);
GLIB_AVAILABLE_IN_ALL
void g_atomic_int_inc (volatile gint *atomic);
GLIB_AVAILABLE_IN_ALL
gboolean g_atomic_int_dec_and_test (volatile gint *atomic);
GLIB_AVAILABLE_IN_ALL
gboolean g_atomic_int_compare_and_exchange (volatile gint *atomic,
gint oldval,
gint newval);
GLIB_AVAILABLE_IN_ALL
gint g_atomic_int_add (volatile gint *atomic,
gint val);
GLIB_AVAILABLE_IN_2_30
guint g_atomic_int_and (volatile guint *atomic,
guint val);
GLIB_AVAILABLE_IN_2_30
guint g_atomic_int_or (volatile guint *atomic,
guint val);
GLIB_AVAILABLE_IN_ALL
guint g_atomic_int_xor (volatile guint *atomic,
guint val);
GLIB_AVAILABLE_IN_ALL
gpointer g_atomic_pointer_get (const volatile void *atomic);
GLIB_AVAILABLE_IN_ALL
void g_atomic_pointer_set (volatile void *atomic,
gpointer newval);
GLIB_AVAILABLE_IN_ALL
gboolean g_atomic_pointer_compare_and_exchange (volatile void *atomic,
gpointer oldval,
gpointer newval);
GLIB_AVAILABLE_IN_ALL
gssize g_atomic_pointer_add (volatile void *atomic,
gssize val);
GLIB_AVAILABLE_IN_2_30
gsize g_atomic_pointer_and (volatile void *atomic,
gsize val);
GLIB_AVAILABLE_IN_2_30
gsize g_atomic_pointer_or (volatile void *atomic,
gsize val);
GLIB_AVAILABLE_IN_ALL
gsize g_atomic_pointer_xor (volatile void *atomic,
gsize val);
GLIB_DEPRECATED_IN_2_30_FOR(g_atomic_int_add)
gint g_atomic_int_exchange_and_add (volatile gint *atomic,
gint val);
G_END_DECLS
#if defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
/* We prefer the new C11-style atomic extension of GCC if available */
#if defined(__ATOMIC_SEQ_CST)
#define g_atomic_int_get(atomic) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
gint gaig_temp; \
(void) (0 ? *(atomic) ^ *(atomic) : 1); \
__atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST); \
(gint) gaig_temp; \
}))
#define g_atomic_int_set(atomic, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
gint gais_temp = (gint) (newval); \
(void) (0 ? *(atomic) ^ (newval) : 1); \
__atomic_store ((gint *)(atomic), &gais_temp, __ATOMIC_SEQ_CST); \
}))
#if defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)
#define g_atomic_pointer_get(atomic) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
glib_typeof (*(atomic)) gapg_temp_newval; \
glib_typeof ((atomic)) gapg_temp_atomic = (atomic); \
__atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
gapg_temp_newval; \
}))
#define g_atomic_pointer_set(atomic, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
glib_typeof ((atomic)) gaps_temp_atomic = (atomic); \
glib_typeof (*(atomic)) gaps_temp_newval = (newval); \
(void) (0 ? (gpointer) * (atomic) : NULL); \
__atomic_store (gaps_temp_atomic, &gaps_temp_newval, __ATOMIC_SEQ_CST); \
}))
#else /* if !(defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)) */
#define g_atomic_pointer_get(atomic) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
gpointer gapg_temp_newval; \
gpointer *gapg_temp_atomic = (gpointer *)(atomic); \
__atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
gapg_temp_newval; \
}))
#define g_atomic_pointer_set(atomic, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
gpointer *gaps_temp_atomic = (gpointer *)(atomic); \
gpointer gaps_temp_newval = (gpointer)(newval); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
__atomic_store (gaps_temp_atomic, &gaps_temp_newval, __ATOMIC_SEQ_CST); \
}))
#endif /* if defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68) */
#define g_atomic_int_inc(atomic) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ *(atomic) : 1); \
(void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST); \
}))
#define g_atomic_int_dec_and_test(atomic) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ *(atomic) : 1); \
__atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1; \
}))
#define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \
(G_GNUC_EXTENSION ({ \
gint gaicae_oldval = (oldval); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (newval) ^ (oldval) : 1); \
__atomic_compare_exchange_n ((atomic), &gaicae_oldval, (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
}))
#define g_atomic_int_add(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (val) : 1); \
(gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST); \
}))
#define g_atomic_int_and(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (val) : 1); \
(guint) __atomic_fetch_and ((atomic), (val), __ATOMIC_SEQ_CST); \
}))
#define g_atomic_int_or(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (val) : 1); \
(guint) __atomic_fetch_or ((atomic), (val), __ATOMIC_SEQ_CST); \
}))
#define g_atomic_int_xor(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (val) : 1); \
(guint) __atomic_fetch_xor ((atomic), (val), __ATOMIC_SEQ_CST); \
}))
#if defined(glib_typeof) && defined(__cplusplus) && __cplusplus >= 201103L
/* This is typesafe because we check we can assign oldval to the type of
* (*atomic). Unfortunately it can only be done in C++ because gcc/clang warn
* when atomic is volatile and not oldval, or when atomic is gsize* and oldval
* is NULL. Note that clang++ force us to be typesafe because it is an error if the 2nd
* argument of __atomic_compare_exchange_n() has a different type than the
* first.
* https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1919
* https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1715#note_1024120. */
#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer)); \
glib_typeof (*(atomic)) gapcae_oldval = (oldval); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
__atomic_compare_exchange_n ((atomic), &gapcae_oldval, (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
}))
#else /* if !(defined(glib_typeof) && defined(__cplusplus) && __cplusplus >= 201103L) */
#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer)); \
gpointer gapcae_oldval = (gpointer)(oldval); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
__atomic_compare_exchange_n ((atomic), &gapcae_oldval, (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
}))
#endif /* defined(glib_typeof) */
#define g_atomic_pointer_add(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
(void) (0 ? (val) ^ (val) : 1); \
(gssize) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST); \
}))
#define g_atomic_pointer_and(atomic, val) \
(G_GNUC_EXTENSION ({ \
gsize *gapa_atomic = (gsize *) (atomic); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gsize)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
(void) (0 ? (val) ^ (val) : 1); \
(gsize) __atomic_fetch_and (gapa_atomic, (val), __ATOMIC_SEQ_CST); \
}))
#define g_atomic_pointer_or(atomic, val) \
(G_GNUC_EXTENSION ({ \
gsize *gapo_atomic = (gsize *) (atomic); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gsize)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
(void) (0 ? (val) ^ (val) : 1); \
(gsize) __atomic_fetch_or (gapo_atomic, (val), __ATOMIC_SEQ_CST); \
}))
#define g_atomic_pointer_xor(atomic, val) \
(G_GNUC_EXTENSION ({ \
gsize *gapx_atomic = (gsize *) (atomic); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gsize)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
(void) (0 ? (val) ^ (val) : 1); \
(gsize) __atomic_fetch_xor (gapx_atomic, (val), __ATOMIC_SEQ_CST); \
}))
#else /* defined(__ATOMIC_SEQ_CST) */
/* We want to achieve __ATOMIC_SEQ_CST semantics here. See
* https://en.cppreference.com/w/c/atomic/memory_order#Constants. For load
* operations, that means performing an *acquire*:
* > A load operation with this memory order performs the acquire operation on
* > the affected memory location: no reads or writes in the current thread can
* > be reordered before this load. All writes in other threads that release
* > the same atomic variable are visible in the current thread.
*
* “no reads or writes in the current thread can be reordered before this load”
* is implemented using a compiler barrier (a no-op `__asm__` section) to
* prevent instruction reordering. Writes in other threads are synchronised
* using `__sync_synchronize()`. It’s unclear from the GCC documentation whether
* `__sync_synchronize()` acts as a compiler barrier, hence our explicit use of
* one.
*
* For store operations, `__ATOMIC_SEQ_CST` means performing a *release*:
* > A store operation with this memory order performs the release operation:
* > no reads or writes in the current thread can be reordered after this store.
* > All writes in the current thread are visible in other threads that acquire
* > the same atomic variable (see Release-Acquire ordering below) and writes
* > that carry a dependency into the atomic variable become visible in other
* > threads that consume the same atomic (see Release-Consume ordering below).
*
* “no reads or writes in the current thread can be reordered after this store”
* is implemented using a compiler barrier to prevent instruction reordering.
* “All writes in the current thread are visible in other threads” is implemented
* using `__sync_synchronize()`; similarly for “writes that carry a dependency”.
*/
#define g_atomic_int_get(atomic) \
(G_GNUC_EXTENSION ({ \
gint gaig_result; \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ *(atomic) : 1); \
gaig_result = (gint) *(atomic); \
__sync_synchronize (); \
__asm__ __volatile__ ("" : : : "memory"); \
gaig_result; \
}))
#define g_atomic_int_set(atomic, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (newval) : 1); \
__sync_synchronize (); \
__asm__ __volatile__ ("" : : : "memory"); \
*(atomic) = (newval); \
}))
#define g_atomic_pointer_get(atomic) \
(G_GNUC_EXTENSION ({ \
gpointer gapg_result; \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
gapg_result = (gpointer) *(atomic); \
__sync_synchronize (); \
__asm__ __volatile__ ("" : : : "memory"); \
gapg_result; \
}))
#if defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)
#define g_atomic_pointer_set(atomic, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
__sync_synchronize (); \
__asm__ __volatile__ ("" : : : "memory"); \
*(atomic) = (glib_typeof (*(atomic))) (gsize) (newval); \
}))
#else /* if !(defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)) */
#define g_atomic_pointer_set(atomic, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
__sync_synchronize (); \
__asm__ __volatile__ ("" : : : "memory"); \
*(atomic) = (gpointer) (gsize) (newval); \
}))
#endif /* if defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68) */
#define g_atomic_int_inc(atomic) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ *(atomic) : 1); \
(void) __sync_fetch_and_add ((atomic), 1); \
}))
#define g_atomic_int_dec_and_test(atomic) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ *(atomic) : 1); \
__sync_fetch_and_sub ((atomic), 1) == 1; \
}))
#define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (newval) ^ (oldval) : 1); \
__sync_bool_compare_and_swap ((atomic), (oldval), (newval)) ? TRUE : FALSE; \
}))
#define g_atomic_int_add(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (val) : 1); \
(gint) __sync_fetch_and_add ((atomic), (val)); \
}))
#define g_atomic_int_and(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (val) : 1); \
(guint) __sync_fetch_and_and ((atomic), (val)); \
}))
#define g_atomic_int_or(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (val) : 1); \
(guint) __sync_fetch_and_or ((atomic), (val)); \
}))
#define g_atomic_int_xor(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \
(void) (0 ? *(atomic) ^ (val) : 1); \
(guint) __sync_fetch_and_xor ((atomic), (val)); \
}))
#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
__sync_bool_compare_and_swap ((atomic), (oldval), (newval)) ? TRUE : FALSE; \
}))
#define g_atomic_pointer_add(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
(void) (0 ? (val) ^ (val) : 1); \
(gssize) __sync_fetch_and_add ((atomic), (val)); \
}))
#define g_atomic_pointer_and(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
(void) (0 ? (val) ^ (val) : 1); \
(gsize) __sync_fetch_and_and ((atomic), (val)); \
}))
#define g_atomic_pointer_or(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
(void) (0 ? (val) ^ (val) : 1); \
(gsize) __sync_fetch_and_or ((atomic), (val)); \
}))
#define g_atomic_pointer_xor(atomic, val) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \
(void) (0 ? (val) ^ (val) : 1); \
(gsize) __sync_fetch_and_xor ((atomic), (val)); \
}))
#endif /* !defined(__ATOMIC_SEQ_CST) */
#else /* defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) */
#define g_atomic_int_get(atomic) \
(g_atomic_int_get ((gint *) (atomic)))
#define g_atomic_int_set(atomic, newval) \
(g_atomic_int_set ((gint *) (atomic), (gint) (newval)))
#define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \
(g_atomic_int_compare_and_exchange ((gint *) (atomic), (oldval), (newval)))
#define g_atomic_int_add(atomic, val) \
(g_atomic_int_add ((gint *) (atomic), (val)))
#define g_atomic_int_and(atomic, val) \
(g_atomic_int_and ((guint *) (atomic), (val)))
#define g_atomic_int_or(atomic, val) \
(g_atomic_int_or ((guint *) (atomic), (val)))
#define g_atomic_int_xor(atomic, val) \
(g_atomic_int_xor ((guint *) (atomic), (val)))
#define g_atomic_int_inc(atomic) \
(g_atomic_int_inc ((gint *) (atomic)))
#define g_atomic_int_dec_and_test(atomic) \
(g_atomic_int_dec_and_test ((gint *) (atomic)))
#if defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)
/* The (void *) cast in the middle *looks* redundant, because
* g_atomic_pointer_get returns void * already, but it's to silence
* -Werror=bad-function-cast when we're doing something like:
* guintptr a, b; ...; a = g_atomic_pointer_get (&b);
* which would otherwise be assigning the void * result of
* g_atomic_pointer_get directly to the pointer-sized but
* non-pointer-typed result. */
#define g_atomic_pointer_get(atomic) \
(glib_typeof (*(atomic))) (void *) ((g_atomic_pointer_get) ((void *) atomic))
#else /* !(defined(glib_typeof) && (!defined(glib_typeof_2_68) || GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68)) */
#define g_atomic_pointer_get(atomic) \
(g_atomic_pointer_get (atomic))
#endif
#define g_atomic_pointer_set(atomic, newval) \
(g_atomic_pointer_set ((atomic), (gpointer) (newval)))
#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \
(g_atomic_pointer_compare_and_exchange ((atomic), (gpointer) (oldval), (gpointer) (newval)))
#define g_atomic_pointer_add(atomic, val) \
(g_atomic_pointer_add ((atomic), (gssize) (val)))
#define g_atomic_pointer_and(atomic, val) \
(g_atomic_pointer_and ((atomic), (gsize) (val)))
#define g_atomic_pointer_or(atomic, val) \
(g_atomic_pointer_or ((atomic), (gsize) (val)))
#define g_atomic_pointer_xor(atomic, val) \
(g_atomic_pointer_xor ((atomic), (gsize) (val)))
#endif /* defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) */
#endif /* __G_ATOMIC_H__ */
gfileutils.h 0000644 00000017272 15021467762 0007107 0 ustar 00 /* gfileutils.h - File utility functions
*
* Copyright 2000 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_FILEUTILS_H__
#define __G_FILEUTILS_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
#define G_FILE_ERROR g_file_error_quark ()
typedef enum
{
G_FILE_ERROR_EXIST,
G_FILE_ERROR_ISDIR,
G_FILE_ERROR_ACCES,
G_FILE_ERROR_NAMETOOLONG,
G_FILE_ERROR_NOENT,
G_FILE_ERROR_NOTDIR,
G_FILE_ERROR_NXIO,
G_FILE_ERROR_NODEV,
G_FILE_ERROR_ROFS,
G_FILE_ERROR_TXTBSY,
G_FILE_ERROR_FAULT,
G_FILE_ERROR_LOOP,
G_FILE_ERROR_NOSPC,
G_FILE_ERROR_NOMEM,
G_FILE_ERROR_MFILE,
G_FILE_ERROR_NFILE,
G_FILE_ERROR_BADF,
G_FILE_ERROR_INVAL,
G_FILE_ERROR_PIPE,
G_FILE_ERROR_AGAIN,
G_FILE_ERROR_INTR,
G_FILE_ERROR_IO,
G_FILE_ERROR_PERM,
G_FILE_ERROR_NOSYS,
G_FILE_ERROR_FAILED
} GFileError;
/* For backward-compat reasons, these are synced to an old
* anonymous enum in libgnome. But don't use that enum
* in new code.
*/
typedef enum
{
G_FILE_TEST_IS_REGULAR = 1 << 0,
G_FILE_TEST_IS_SYMLINK = 1 << 1,
G_FILE_TEST_IS_DIR = 1 << 2,
G_FILE_TEST_IS_EXECUTABLE = 1 << 3,
G_FILE_TEST_EXISTS = 1 << 4
} GFileTest;
/**
* GFileSetContentsFlags:
* @G_FILE_SET_CONTENTS_NONE: No guarantees about file consistency or durability.
* The most dangerous setting, which is slightly faster than other settings.
* @G_FILE_SET_CONTENTS_CONSISTENT: Guarantee file consistency: after a crash,
* either the old version of the file or the new version of the file will be
* available, but not a mixture. On Unix systems this equates to an `fsync()`
* on the file and use of an atomic `rename()` of the new version of the file
* over the old.
* @G_FILE_SET_CONTENTS_DURABLE: Guarantee file durability: after a crash, the
* new version of the file will be available. On Unix systems this equates to
* an `fsync()` on the file (if %G_FILE_SET_CONTENTS_CONSISTENT is unset), or
* the effects of %G_FILE_SET_CONTENTS_CONSISTENT plus an `fsync()` on the
* directory containing the file after calling `rename()`.
* @G_FILE_SET_CONTENTS_ONLY_EXISTING: Only apply consistency and durability
* guarantees if the file already exists. This may speed up file operations
* if the file doesn’t currently exist, but may result in a corrupted version
* of the new file if the system crashes while writing it.
*
* Flags to pass to g_file_set_contents_full() to affect its safety and
* performance.
*
* Since: 2.66
*/
typedef enum
{
G_FILE_SET_CONTENTS_NONE = 0,
G_FILE_SET_CONTENTS_CONSISTENT = 1 << 0,
G_FILE_SET_CONTENTS_DURABLE = 1 << 1,
G_FILE_SET_CONTENTS_ONLY_EXISTING = 1 << 2
} GFileSetContentsFlags
GLIB_AVAILABLE_ENUMERATOR_IN_2_66;
GLIB_AVAILABLE_IN_ALL
GQuark g_file_error_quark (void);
/* So other code can generate a GFileError */
GLIB_AVAILABLE_IN_ALL
GFileError g_file_error_from_errno (gint err_no);
GLIB_AVAILABLE_IN_ALL
gboolean g_file_test (const gchar *filename,
GFileTest test);
GLIB_AVAILABLE_IN_ALL
gboolean g_file_get_contents (const gchar *filename,
gchar **contents,
gsize *length,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_file_set_contents (const gchar *filename,
const gchar *contents,
gssize length,
GError **error);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_2_66
gboolean g_file_set_contents_full (const gchar *filename,
const gchar *contents,
gssize length,
GFileSetContentsFlags flags,
int mode,
GError **error);
G_GNUC_END_IGNORE_DEPRECATIONS
GLIB_AVAILABLE_IN_ALL
gchar *g_file_read_link (const gchar *filename,
GError **error);
/* Wrapper / workalike for mkdtemp() */
GLIB_AVAILABLE_IN_2_30
gchar *g_mkdtemp (gchar *tmpl);
GLIB_AVAILABLE_IN_2_30
gchar *g_mkdtemp_full (gchar *tmpl,
gint mode);
/* Wrapper / workalike for mkstemp() */
GLIB_AVAILABLE_IN_ALL
gint g_mkstemp (gchar *tmpl);
GLIB_AVAILABLE_IN_ALL
gint g_mkstemp_full (gchar *tmpl,
gint flags,
gint mode);
/* Wrappers for g_mkstemp and g_mkdtemp() */
GLIB_AVAILABLE_IN_ALL
gint g_file_open_tmp (const gchar *tmpl,
gchar **name_used,
GError **error);
GLIB_AVAILABLE_IN_2_30
gchar *g_dir_make_tmp (const gchar *tmpl,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar *g_build_path (const gchar *separator,
const gchar *first_element,
...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
GLIB_AVAILABLE_IN_ALL
gchar *g_build_pathv (const gchar *separator,
gchar **args) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_build_filename (const gchar *first_element,
...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
GLIB_AVAILABLE_IN_ALL
gchar *g_build_filenamev (gchar **args) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_2_56
gchar *g_build_filename_valist (const gchar *first_element,
va_list *args) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gint g_mkdir_with_parents (const gchar *pathname,
gint mode);
#ifdef G_OS_WIN32
/* On Win32, the canonical directory separator is the backslash, and
* the search path separator is the semicolon. Note that also the
* (forward) slash works as directory separator.
*/
#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/')
#else /* !G_OS_WIN32 */
#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
#endif /* !G_OS_WIN32 */
GLIB_AVAILABLE_IN_ALL
gboolean g_path_is_absolute (const gchar *file_name);
GLIB_AVAILABLE_IN_ALL
const gchar *g_path_skip_root (const gchar *file_name);
GLIB_DEPRECATED_FOR(g_path_get_basename)
const gchar *g_basename (const gchar *file_name);
#define g_dirname g_path_get_dirname GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_path_get_dirname)
GLIB_AVAILABLE_IN_ALL
gchar *g_get_current_dir (void);
GLIB_AVAILABLE_IN_ALL
gchar *g_path_get_basename (const gchar *file_name) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_path_get_dirname (const gchar *file_name) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_2_58
gchar *g_canonicalize_filename (const gchar *filename,
const gchar *relative_to) G_GNUC_MALLOC;
G_END_DECLS
#endif /* __G_FILEUTILS_H__ */
gtrashstack.h 0000644 00000003562 15021467762 0007253 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_TRASH_STACK_H__
#define __G_TRASH_STACK_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
typedef struct _GTrashStack GTrashStack GLIB_DEPRECATED_TYPE_IN_2_48;
struct _GTrashStack
{
GTrashStack *next;
} GLIB_DEPRECATED_TYPE_IN_2_48;
GLIB_DEPRECATED_IN_2_48
void g_trash_stack_push (GTrashStack **stack_p,
gpointer data_p);
GLIB_DEPRECATED_IN_2_48
gpointer g_trash_stack_pop (GTrashStack **stack_p);
GLIB_DEPRECATED_IN_2_48
gpointer g_trash_stack_peek (GTrashStack **stack_p);
GLIB_DEPRECATED_IN_2_48
guint g_trash_stack_height (GTrashStack **stack_p);
G_GNUC_END_IGNORE_DEPRECATIONS
G_END_DECLS
#endif /* __G_TRASH_STACK_H_ */
gtimezone.h 0000644 00000007501 15021467762 0006733 0 ustar 00 /*
* Copyright © 2010 Codethink Limited
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*
* Author: Ryan Lortie
*/
#ifndef __G_TIME_ZONE_H__
#define __G_TIME_ZONE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
typedef struct _GTimeZone GTimeZone;
/**
* GTimeType:
* @G_TIME_TYPE_STANDARD: the time is in local standard time
* @G_TIME_TYPE_DAYLIGHT: the time is in local daylight time
* @G_TIME_TYPE_UNIVERSAL: the time is in UTC
*
* Disambiguates a given time in two ways.
*
* First, specifies if the given time is in universal or local time.
*
* Second, if the time is in local time, specifies if it is local
* standard time or local daylight time. This is important for the case
* where the same local time occurs twice (during daylight savings time
* transitions, for example).
*/
typedef enum
{
G_TIME_TYPE_STANDARD,
G_TIME_TYPE_DAYLIGHT,
G_TIME_TYPE_UNIVERSAL
} GTimeType;
GLIB_DEPRECATED_IN_2_68_FOR (g_time_zone_new_identifier)
GTimeZone * g_time_zone_new (const gchar *identifier);
GLIB_AVAILABLE_IN_2_68
GTimeZone * g_time_zone_new_identifier (const gchar *identifier);
GLIB_AVAILABLE_IN_ALL
GTimeZone * g_time_zone_new_utc (void);
GLIB_AVAILABLE_IN_ALL
GTimeZone * g_time_zone_new_local (void);
GLIB_AVAILABLE_IN_2_58
GTimeZone * g_time_zone_new_offset (gint32 seconds);
GLIB_AVAILABLE_IN_ALL
GTimeZone * g_time_zone_ref (GTimeZone *tz);
GLIB_AVAILABLE_IN_ALL
void g_time_zone_unref (GTimeZone *tz);
GLIB_AVAILABLE_IN_ALL
gint g_time_zone_find_interval (GTimeZone *tz,
GTimeType type,
gint64 time_);
GLIB_AVAILABLE_IN_ALL
gint g_time_zone_adjust_time (GTimeZone *tz,
GTimeType type,
gint64 *time_);
GLIB_AVAILABLE_IN_ALL
const gchar * g_time_zone_get_abbreviation (GTimeZone *tz,
gint interval);
GLIB_AVAILABLE_IN_ALL
gint32 g_time_zone_get_offset (GTimeZone *tz,
gint interval);
GLIB_AVAILABLE_IN_ALL
gboolean g_time_zone_is_dst (GTimeZone *tz,
gint interval);
GLIB_AVAILABLE_IN_2_58
const gchar * g_time_zone_get_identifier (GTimeZone *tz);
G_END_DECLS
#endif /* __G_TIME_ZONE_H__ */
gkeyfile.h 0000644 00000035101 15021467762 0006526 0 ustar 00 /* gkeyfile.h - desktop entry file parser
*
* Copyright 2004 Red Hat, Inc.
*
* Ray Strode
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see .
*/
#ifndef __G_KEY_FILE_H__
#define __G_KEY_FILE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
typedef enum
{
G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
G_KEY_FILE_ERROR_PARSE,
G_KEY_FILE_ERROR_NOT_FOUND,
G_KEY_FILE_ERROR_KEY_NOT_FOUND,
G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
G_KEY_FILE_ERROR_INVALID_VALUE
} GKeyFileError;
#define G_KEY_FILE_ERROR g_key_file_error_quark()
GLIB_AVAILABLE_IN_ALL
GQuark g_key_file_error_quark (void);
typedef struct _GKeyFile GKeyFile;
typedef enum
{
G_KEY_FILE_NONE = 0,
G_KEY_FILE_KEEP_COMMENTS = 1 << 0,
G_KEY_FILE_KEEP_TRANSLATIONS = 1 << 1
} GKeyFileFlags;
GLIB_AVAILABLE_IN_ALL
GKeyFile *g_key_file_new (void);
GLIB_AVAILABLE_IN_ALL
GKeyFile *g_key_file_ref (GKeyFile *key_file);
GLIB_AVAILABLE_IN_ALL
void g_key_file_unref (GKeyFile *key_file);
GLIB_AVAILABLE_IN_ALL
void g_key_file_free (GKeyFile *key_file);
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_list_separator (GKeyFile *key_file,
gchar separator);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_load_from_file (GKeyFile *key_file,
const gchar *file,
GKeyFileFlags flags,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_load_from_data (GKeyFile *key_file,
const gchar *data,
gsize length,
GKeyFileFlags flags,
GError **error);
GLIB_AVAILABLE_IN_2_50
gboolean g_key_file_load_from_bytes (GKeyFile *key_file,
GBytes *bytes,
GKeyFileFlags flags,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_load_from_dirs (GKeyFile *key_file,
const gchar *file,
const gchar **search_dirs,
gchar **full_path,
GKeyFileFlags flags,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_load_from_data_dirs (GKeyFile *key_file,
const gchar *file,
gchar **full_path,
GKeyFileFlags flags,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar *g_key_file_to_data (GKeyFile *key_file,
gsize *length,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_2_40
gboolean g_key_file_save_to_file (GKeyFile *key_file,
const gchar *filename,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar *g_key_file_get_start_group (GKeyFile *key_file) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar **g_key_file_get_groups (GKeyFile *key_file,
gsize *length);
GLIB_AVAILABLE_IN_ALL
gchar **g_key_file_get_keys (GKeyFile *key_file,
const gchar *group_name,
gsize *length,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_has_group (GKeyFile *key_file,
const gchar *group_name);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_has_key (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar *g_key_file_get_value (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_value (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar *value);
GLIB_AVAILABLE_IN_ALL
gchar *g_key_file_get_string (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_string (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar *string);
GLIB_AVAILABLE_IN_ALL
gchar *g_key_file_get_locale_string (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar *locale,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_2_56
gchar *g_key_file_get_locale_for_key (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar *locale) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_locale_string (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar *locale,
const gchar *string);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_get_boolean (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_boolean (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gboolean value);
GLIB_AVAILABLE_IN_ALL
gint g_key_file_get_integer (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_integer (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gint value);
GLIB_AVAILABLE_IN_ALL
gint64 g_key_file_get_int64 (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_int64 (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gint64 value);
GLIB_AVAILABLE_IN_ALL
guint64 g_key_file_get_uint64 (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_uint64 (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
guint64 value);
GLIB_AVAILABLE_IN_ALL
gdouble g_key_file_get_double (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_double (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gdouble value);
GLIB_AVAILABLE_IN_ALL
gchar **g_key_file_get_string_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gsize *length,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_string_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar * const list[],
gsize length);
GLIB_AVAILABLE_IN_ALL
gchar **g_key_file_get_locale_string_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar *locale,
gsize *length,
GError **error);
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_locale_string_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar *locale,
const gchar * const list[],
gsize length);
GLIB_AVAILABLE_IN_ALL
gboolean *g_key_file_get_boolean_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gsize *length,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_boolean_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gboolean list[],
gsize length);
GLIB_AVAILABLE_IN_ALL
gint *g_key_file_get_integer_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gsize *length,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_double_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gdouble list[],
gsize length);
GLIB_AVAILABLE_IN_ALL
gdouble *g_key_file_get_double_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gsize *length,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
void g_key_file_set_integer_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gint list[],
gsize length);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_set_comment (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
const gchar *comment,
GError **error);
GLIB_AVAILABLE_IN_ALL
gchar *g_key_file_get_comment (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_remove_comment (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_remove_key (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
GLIB_AVAILABLE_IN_ALL
gboolean g_key_file_remove_group (GKeyFile *key_file,
const gchar *group_name,
GError **error);
/* Defines for handling freedesktop.org Desktop files */
#define G_KEY_FILE_DESKTOP_GROUP "Desktop Entry"
#define G_KEY_FILE_DESKTOP_KEY_TYPE "Type"
#define G_KEY_FILE_DESKTOP_KEY_VERSION "Version"
#define G_KEY_FILE_DESKTOP_KEY_NAME "Name"
#define G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME "GenericName"
#define G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY "NoDisplay"
#define G_KEY_FILE_DESKTOP_KEY_COMMENT "Comment"
#define G_KEY_FILE_DESKTOP_KEY_ICON "Icon"
#define G_KEY_FILE_DESKTOP_KEY_HIDDEN "Hidden"
#define G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN "OnlyShowIn"
#define G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN "NotShowIn"
#define G_KEY_FILE_DESKTOP_KEY_TRY_EXEC "TryExec"
#define G_KEY_FILE_DESKTOP_KEY_EXEC "Exec"
#define G_KEY_FILE_DESKTOP_KEY_PATH "Path"
#define G_KEY_FILE_DESKTOP_KEY_TERMINAL "Terminal"
#define G_KEY_FILE_DESKTOP_KEY_MIME_TYPE "MimeType"
#define G_KEY_FILE_DESKTOP_KEY_CATEGORIES "Categories"
#define G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY "StartupNotify"
#define G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS "StartupWMClass"
#define G_KEY_FILE_DESKTOP_KEY_URL "URL"
#define G_KEY_FILE_DESKTOP_KEY_DBUS_ACTIVATABLE "DBusActivatable"
#define G_KEY_FILE_DESKTOP_KEY_ACTIONS "Actions"
#define G_KEY_FILE_DESKTOP_TYPE_APPLICATION "Application"
#define G_KEY_FILE_DESKTOP_TYPE_LINK "Link"
#define G_KEY_FILE_DESKTOP_TYPE_DIRECTORY "Directory"
G_END_DECLS
#endif /* __G_KEY_FILE_H__ */
deprecated/gcache.h 0000644 00000005653 15021467762 0010252 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_CACHE_H__
#define __G_CACHE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GCache GCache GLIB_DEPRECATED_TYPE_IN_2_26_FOR(GHashTable);
typedef gpointer (*GCacheNewFunc) (gpointer key) GLIB_DEPRECATED_TYPE_IN_2_26;
typedef gpointer (*GCacheDupFunc) (gpointer value) GLIB_DEPRECATED_TYPE_IN_2_26;
typedef void (*GCacheDestroyFunc) (gpointer value) GLIB_DEPRECATED_TYPE_IN_2_26;
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
/* Caches
*/
GLIB_DEPRECATED
GCache* g_cache_new (GCacheNewFunc value_new_func,
GCacheDestroyFunc value_destroy_func,
GCacheDupFunc key_dup_func,
GCacheDestroyFunc key_destroy_func,
GHashFunc hash_key_func,
GHashFunc hash_value_func,
GEqualFunc key_equal_func);
GLIB_DEPRECATED
void g_cache_destroy (GCache *cache);
GLIB_DEPRECATED
gpointer g_cache_insert (GCache *cache,
gpointer key);
GLIB_DEPRECATED
void g_cache_remove (GCache *cache,
gconstpointer value);
GLIB_DEPRECATED
void g_cache_key_foreach (GCache *cache,
GHFunc func,
gpointer user_data);
GLIB_DEPRECATED
void g_cache_value_foreach (GCache *cache,
GHFunc func,
gpointer user_data);
G_GNUC_END_IGNORE_DEPRECATIONS
G_END_DECLS
#endif /* __G_CACHE_H__ */
deprecated/gthread.h 0000644 00000025272 15021467762 0010455 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_DEPRECATED_THREAD_H__
#define __G_DEPRECATED_THREAD_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
typedef enum
{
G_THREAD_PRIORITY_LOW,
G_THREAD_PRIORITY_NORMAL,
G_THREAD_PRIORITY_HIGH,
G_THREAD_PRIORITY_URGENT
} GThreadPriority GLIB_DEPRECATED_TYPE_IN_2_32;
struct _GThread
{
/*< private >*/
GThreadFunc func;
gpointer data;
gboolean joinable;
GThreadPriority priority;
};
typedef struct _GThreadFunctions GThreadFunctions GLIB_DEPRECATED_TYPE_IN_2_32;
struct _GThreadFunctions
{
GMutex* (*mutex_new) (void);
void (*mutex_lock) (GMutex *mutex);
gboolean (*mutex_trylock) (GMutex *mutex);
void (*mutex_unlock) (GMutex *mutex);
void (*mutex_free) (GMutex *mutex);
GCond* (*cond_new) (void);
void (*cond_signal) (GCond *cond);
void (*cond_broadcast) (GCond *cond);
void (*cond_wait) (GCond *cond,
GMutex *mutex);
gboolean (*cond_timed_wait) (GCond *cond,
GMutex *mutex,
GTimeVal *end_time);
void (*cond_free) (GCond *cond);
GPrivate* (*private_new) (GDestroyNotify destructor);
gpointer (*private_get) (GPrivate *private_key);
void (*private_set) (GPrivate *private_key,
gpointer data);
void (*thread_create) (GThreadFunc func,
gpointer data,
gulong stack_size,
gboolean joinable,
gboolean bound,
GThreadPriority priority,
gpointer thread,
GError **error);
void (*thread_yield) (void);
void (*thread_join) (gpointer thread);
void (*thread_exit) (void);
void (*thread_set_priority)(gpointer thread,
GThreadPriority priority);
void (*thread_self) (gpointer thread);
gboolean (*thread_equal) (gpointer thread1,
gpointer thread2);
} GLIB_DEPRECATED_TYPE_IN_2_32;
GLIB_VAR GThreadFunctions g_thread_functions_for_glib_use;
GLIB_VAR gboolean g_thread_use_default_impl;
GLIB_VAR guint64 (*g_thread_gettime) (void);
GLIB_DEPRECATED_IN_2_32_FOR(g_thread_new)
GThread *g_thread_create (GThreadFunc func,
gpointer data,
gboolean joinable,
GError **error);
GLIB_DEPRECATED_IN_2_32_FOR(g_thread_new)
GThread *g_thread_create_full (GThreadFunc func,
gpointer data,
gulong stack_size,
gboolean joinable,
gboolean bound,
GThreadPriority priority,
GError **error);
GLIB_DEPRECATED_IN_2_32
void g_thread_set_priority (GThread *thread,
GThreadPriority priority);
GLIB_DEPRECATED_IN_2_32
void g_thread_foreach (GFunc thread_func,
gpointer user_data);
#ifndef G_OS_WIN32
#include
#include
#endif
#define g_static_mutex_get_mutex g_static_mutex_get_mutex_impl GLIB_DEPRECATED_MACRO_IN_2_32
#define G_STATIC_MUTEX_INIT { NULL } GLIB_DEPRECATED_MACRO_IN_2_32_FOR(g_mutex_init)
typedef struct
{
GMutex *mutex;
#ifndef G_OS_WIN32
/* only for ABI compatibility reasons */
pthread_mutex_t unused;
#endif
} GStaticMutex GLIB_DEPRECATED_TYPE_IN_2_32_FOR(GMutex);
#define g_static_mutex_lock(mutex) \
g_mutex_lock (g_static_mutex_get_mutex (mutex)) GLIB_DEPRECATED_MACRO_IN_2_32_FOR(g_mutex_lock)
#define g_static_mutex_trylock(mutex) \
g_mutex_trylock (g_static_mutex_get_mutex (mutex)) GLIB_DEPRECATED_MACRO_IN_2_32_FOR(g_mutex_trylock)
#define g_static_mutex_unlock(mutex) \
g_mutex_unlock (g_static_mutex_get_mutex (mutex)) GLIB_DEPRECATED_MACRO_IN_2_32_FOR(g_mutex_unlock)
GLIB_DEPRECATED_IN_2_32_FOR(g_mutex_init)
void g_static_mutex_init (GStaticMutex *mutex);
GLIB_DEPRECATED_IN_2_32_FOR(g_mutex_clear)
void g_static_mutex_free (GStaticMutex *mutex);
GLIB_DEPRECATED_IN_2_32_FOR(GMutex)
GMutex *g_static_mutex_get_mutex_impl (GStaticMutex *mutex);
typedef struct _GStaticRecMutex GStaticRecMutex GLIB_DEPRECATED_TYPE_IN_2_32_FOR(GRecMutex);
struct _GStaticRecMutex
{
/*< private >*/
GStaticMutex mutex;
guint depth;
/* ABI compat only */
union {
#ifdef G_OS_WIN32
void *owner;
#else
pthread_t owner;
#endif
gdouble dummy;
} unused;
} GLIB_DEPRECATED_TYPE_IN_2_32_FOR(GRecMutex);
#define G_STATIC_REC_MUTEX_INIT { G_STATIC_MUTEX_INIT, 0, { 0 } } GLIB_DEPRECATED_MACRO_IN_2_32_FOR(g_rec_mutex_init)
GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_init)
void g_static_rec_mutex_init (GStaticRecMutex *mutex);
GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_lock)
void g_static_rec_mutex_lock (GStaticRecMutex *mutex);
GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_try_lock)
gboolean g_static_rec_mutex_trylock (GStaticRecMutex *mutex);
GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_unlock)
void g_static_rec_mutex_unlock (GStaticRecMutex *mutex);
GLIB_DEPRECATED_IN_2_32
void g_static_rec_mutex_lock_full (GStaticRecMutex *mutex,
guint depth);
GLIB_DEPRECATED_IN_2_32
guint g_static_rec_mutex_unlock_full (GStaticRecMutex *mutex);
GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_free)
void g_static_rec_mutex_free (GStaticRecMutex *mutex);
typedef struct _GStaticRWLock GStaticRWLock GLIB_DEPRECATED_TYPE_IN_2_32_FOR(GRWLock);
struct _GStaticRWLock
{
/*< private >*/
GStaticMutex mutex;
GCond *read_cond;
GCond *write_cond;
guint read_counter;
gboolean have_writer;
guint want_to_read;
guint want_to_write;
} GLIB_DEPRECATED_TYPE_IN_2_32_FOR(GRWLock);
#define G_STATIC_RW_LOCK_INIT { G_STATIC_MUTEX_INIT, NULL, NULL, 0, FALSE, 0, 0 } GLIB_DEPRECATED_MACRO_IN_2_32_FOR(g_rw_lock_init)
GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_init)
void g_static_rw_lock_init (GStaticRWLock *lock);
GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_lock)
void g_static_rw_lock_reader_lock (GStaticRWLock *lock);
GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_trylock)
gboolean g_static_rw_lock_reader_trylock (GStaticRWLock *lock);
GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_unlock)
void g_static_rw_lock_reader_unlock (GStaticRWLock *lock);
GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_lock)
void g_static_rw_lock_writer_lock (GStaticRWLock *lock);
GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_trylock)
gboolean g_static_rw_lock_writer_trylock (GStaticRWLock *lock);
GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_unlock)
void g_static_rw_lock_writer_unlock (GStaticRWLock *lock);
GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_free)
void g_static_rw_lock_free (GStaticRWLock *lock);
GLIB_DEPRECATED_IN_2_32
GPrivate * g_private_new (GDestroyNotify notify);
typedef struct _GStaticPrivate GStaticPrivate GLIB_DEPRECATED_TYPE_IN_2_32_FOR(GPrivate);
struct _GStaticPrivate
{
/*< private >*/
guint index;
} GLIB_DEPRECATED_TYPE_IN_2_32_FOR(GPrivate);
#define G_STATIC_PRIVATE_INIT { 0 } GLIB_DEPRECATED_MACRO_IN_2_32_FOR(G_PRIVATE_INIT)
GLIB_DEPRECATED_IN_2_32
void g_static_private_init (GStaticPrivate *private_key);
GLIB_DEPRECATED_IN_2_32_FOR(g_private_get)
gpointer g_static_private_get (GStaticPrivate *private_key);
GLIB_DEPRECATED_IN_2_32_FOR(g_private_set)
void g_static_private_set (GStaticPrivate *private_key,
gpointer data,
GDestroyNotify notify);
GLIB_DEPRECATED_IN_2_32
void g_static_private_free (GStaticPrivate *private_key);
GLIB_DEPRECATED_IN_2_32
gboolean g_once_init_enter_impl (volatile gsize *location);
GLIB_DEPRECATED_IN_2_32
void g_thread_init (gpointer vtable);
GLIB_DEPRECATED_IN_2_32
void g_thread_init_with_errorcheck_mutexes (gpointer vtable);
GLIB_DEPRECATED_IN_2_32
gboolean g_thread_get_initialized (void);
GLIB_VAR gboolean g_threads_got_initialized;
#define g_thread_supported() (1) GLIB_DEPRECATED_MACRO_IN_2_32
GLIB_DEPRECATED_IN_2_32
GMutex * g_mutex_new (void);
GLIB_DEPRECATED_IN_2_32
void g_mutex_free (GMutex *mutex);
GLIB_DEPRECATED_IN_2_32
GCond * g_cond_new (void);
GLIB_DEPRECATED_IN_2_32
void g_cond_free (GCond *cond);
GLIB_DEPRECATED_IN_2_32
gboolean g_cond_timed_wait (GCond *cond,
GMutex *mutex,
GTimeVal *timeval);
G_GNUC_END_IGNORE_DEPRECATIONS
G_END_DECLS
#endif /* __G_DEPRECATED_THREAD_H__ */
deprecated/gcompletion.h 0000644 00000005552 15021467762 0011356 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_COMPLETION_H__
#define __G_COMPLETION_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GCompletion GCompletion;
typedef gchar* (*GCompletionFunc) (gpointer);
/* GCompletion
*/
typedef gint (*GCompletionStrncmpFunc) (const gchar *s1,
const gchar *s2,
gsize n);
struct _GCompletion
{
GList* items;
GCompletionFunc func;
gchar* prefix;
GList* cache;
GCompletionStrncmpFunc strncmp_func;
};
GLIB_DEPRECATED_IN_2_26
GCompletion* g_completion_new (GCompletionFunc func);
GLIB_DEPRECATED_IN_2_26
void g_completion_add_items (GCompletion* cmp,
GList* items);
GLIB_DEPRECATED_IN_2_26
void g_completion_remove_items (GCompletion* cmp,
GList* items);
GLIB_DEPRECATED_IN_2_26
void g_completion_clear_items (GCompletion* cmp);
GLIB_DEPRECATED_IN_2_26
GList* g_completion_complete (GCompletion* cmp,
const gchar* prefix,
gchar** new_prefix);
GLIB_DEPRECATED_IN_2_26
GList* g_completion_complete_utf8 (GCompletion *cmp,
const gchar* prefix,
gchar** new_prefix);
GLIB_DEPRECATED_IN_2_26
void g_completion_set_compare (GCompletion *cmp,
GCompletionStrncmpFunc strncmp_func);
GLIB_DEPRECATED_IN_2_26
void g_completion_free (GCompletion* cmp);
G_END_DECLS
#endif /* __G_COMPLETION_H__ */
deprecated/gmain.h 0000644 00000010451 15021467762 0010123 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_DEPRECATED_MAIN_H__
#define __G_DEPRECATED_MAIN_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
/* ============== Compat main loop stuff ================== */
/**
* g_main_new:
* @is_running: set to %TRUE to indicate that the loop is running. This
* is not very important since calling g_main_run() will set this
* to %TRUE anyway.
*
* Creates a new #GMainLoop for th default main context.
*
* Returns: a new #GMainLoop
*
* Deprecated: 2.2: Use g_main_loop_new() instead
*/
#define g_main_new(is_running) g_main_loop_new (NULL, is_running) GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_main_loop_new)
/**
* g_main_run:
* @loop: a #GMainLoop
*
* Runs a main loop until it stops running.
*
* Deprecated: 2.2: Use g_main_loop_run() instead
*/
#define g_main_run(loop) g_main_loop_run(loop) GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_main_loop_run)
/**
* g_main_quit:
* @loop: a #GMainLoop
*
* Stops the #GMainLoop.
* If g_main_run() was called to run the #GMainLoop, it will now return.
*
* Deprecated: 2.2: Use g_main_loop_quit() instead
*/
#define g_main_quit(loop) g_main_loop_quit(loop) GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_main_loop_quit)
/**
* g_main_destroy:
* @loop: a #GMainLoop
*
* Frees the memory allocated for the #GMainLoop.
*
* Deprecated: 2.2: Use g_main_loop_unref() instead
*/
#define g_main_destroy(loop) g_main_loop_unref(loop) GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_main_loop_unref)
/**
* g_main_is_running:
* @loop: a #GMainLoop
*
* Checks if the main loop is running.
*
* Returns: %TRUE if the main loop is running
*
* Deprecated: 2.2: Use g_main_loop_is_running() instead
*/
#define g_main_is_running(loop) g_main_loop_is_running(loop) GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_main_loop_is_running)
/**
* g_main_iteration:
* @may_block: set to %TRUE if it should block (i.e. wait) until an event
* source becomes ready. It will return after an event source has been
* processed. If set to %FALSE it will return immediately if no event
* source is ready to be processed.
*
* Runs a single iteration for the default #GMainContext.
*
* Returns: %TRUE if more events are pending.
*
* Deprecated: 2.2: Use g_main_context_iteration() instead.
*/
#define g_main_iteration(may_block) g_main_context_iteration (NULL, may_block) GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_main_context_iteration)
/**
* g_main_pending:
*
* Checks if any events are pending for the default #GMainContext
* (i.e. ready to be processed).
*
* Returns: %TRUE if any events are pending.
*
* Deprecated: 2.2: Use g_main_context_pending() instead.
*/
#define g_main_pending() g_main_context_pending (NULL) GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_main_context_pending)
/**
* g_main_set_poll_func:
* @func: the function to call to poll all file descriptors
*
* Sets the function to use for the handle polling of file descriptors
* for the default main context.
*
* Deprecated: 2.2: Use g_main_context_set_poll_func() again
*/
#define g_main_set_poll_func(func) g_main_context_set_poll_func (NULL, func) GLIB_DEPRECATED_MACRO_IN_2_26_FOR(g_main_context_set_poll_func)
G_END_DECLS
#endif /* __G_DEPRECATED_MAIN_H__ */
deprecated/gallocator.h 0000644 00000006270 15021467762 0011163 0 ustar 00 /*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_ALLOCATOR_H__
#define __G_ALLOCATOR_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GAllocator GAllocator;
typedef struct _GMemChunk GMemChunk;
#define G_ALLOC_ONLY 1
#define G_ALLOC_AND_FREE 2
#define G_ALLOCATOR_LIST 1
#define G_ALLOCATOR_SLIST 2
#define G_ALLOCATOR_NODE 3
#define g_chunk_new(type, chunk) ((type *) g_mem_chunk_alloc (chunk))
#define g_chunk_new0(type, chunk) ((type *) g_mem_chunk_alloc0 (chunk))
#define g_chunk_free(mem, mem_chunk) (g_mem_chunk_free (mem_chunk, mem))
#define g_mem_chunk_create(type, x, y) (g_mem_chunk_new (NULL, sizeof (type), 0, 0))
GLIB_DEPRECATED
GMemChunk * g_mem_chunk_new (const gchar *name,
gint atom_size,
gsize area_size,
gint type);
GLIB_DEPRECATED
void g_mem_chunk_destroy (GMemChunk *mem_chunk);
GLIB_DEPRECATED
gpointer g_mem_chunk_alloc (GMemChunk *mem_chunk);
GLIB_DEPRECATED
gpointer g_mem_chunk_alloc0 (GMemChunk *mem_chunk);
GLIB_DEPRECATED
void g_mem_chunk_free (GMemChunk *mem_chunk,
gpointer mem);
GLIB_DEPRECATED
void g_mem_chunk_clean (GMemChunk *mem_chunk);
GLIB_DEPRECATED
void g_mem_chunk_reset (GMemChunk *mem_chunk);
GLIB_DEPRECATED
void g_mem_chunk_print (GMemChunk *mem_chunk);
GLIB_DEPRECATED
void g_mem_chunk_info (void);
GLIB_DEPRECATED
void g_blow_chunks (void);
GLIB_DEPRECATED
GAllocator * g_allocator_new (const gchar *name,
guint n_preallocs);
GLIB_DEPRECATED
void g_allocator_free (GAllocator *allocator);
GLIB_DEPRECATED
void g_list_push_allocator (GAllocator *allocator);
GLIB_DEPRECATED
void g_list_pop_allocator (void);
GLIB_DEPRECATED
void g_slist_push_allocator (GAllocator *allocator);
GLIB_DEPRECATED
void g_slist_pop_allocator (void);
GLIB_DEPRECATED
void g_node_push_allocator (GAllocator *allocator);
GLIB_DEPRECATED
void g_node_pop_allocator (void);
G_END_DECLS
#endif /* __G_ALLOCATOR_H__ */
deprecated/grel.h 0000644 00000007142 15021467762 0007764 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_REL_H__
#define __G_REL_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GRelation GRelation;
typedef struct _GTuples GTuples;
struct _GTuples
{
guint len;
};
/* GRelation
*
* Indexed Relations. Imagine a really simple table in a
* database. Relations are not ordered. This data type is meant for
* maintaining a N-way mapping.
*
* g_relation_new() creates a relation with FIELDS fields
*
* g_relation_destroy() frees all resources
* g_tuples_destroy() frees the result of g_relation_select()
*
* g_relation_index() indexes relation FIELD with the provided
* equality and hash functions. this must be done before any
* calls to insert are made.
*
* g_relation_insert() inserts a new tuple. you are expected to
* provide the right number of fields.
*
* g_relation_delete() deletes all relations with KEY in FIELD
* g_relation_select() returns ...
* g_relation_count() counts ...
*/
GLIB_DEPRECATED_IN_2_26
GRelation* g_relation_new (gint fields);
GLIB_DEPRECATED_IN_2_26
void g_relation_destroy (GRelation *relation);
GLIB_DEPRECATED_IN_2_26
void g_relation_index (GRelation *relation,
gint field,
GHashFunc hash_func,
GEqualFunc key_equal_func);
GLIB_DEPRECATED_IN_2_26
void g_relation_insert (GRelation *relation,
...);
GLIB_DEPRECATED_IN_2_26
gint g_relation_delete (GRelation *relation,
gconstpointer key,
gint field);
GLIB_DEPRECATED_IN_2_26
GTuples* g_relation_select (GRelation *relation,
gconstpointer key,
gint field);
GLIB_DEPRECATED_IN_2_26
gint g_relation_count (GRelation *relation,
gconstpointer key,
gint field);
GLIB_DEPRECATED_IN_2_26
gboolean g_relation_exists (GRelation *relation,
...);
GLIB_DEPRECATED_IN_2_26
void g_relation_print (GRelation *relation);
GLIB_DEPRECATED_IN_2_26
void g_tuples_destroy (GTuples *tuples);
GLIB_DEPRECATED_IN_2_26
gpointer g_tuples_index (GTuples *tuples,
gint index_,
gint field);
G_END_DECLS
#endif /* __G_REL_H__ */
glist.h 0000644 00000015422 15021467762 0006055 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_LIST_H__
#define __G_LIST_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
G_BEGIN_DECLS
typedef struct _GList GList;
struct _GList
{
gpointer data;
GList *next;
GList *prev;
};
/* Doubly linked lists
*/
GLIB_AVAILABLE_IN_ALL
GList* g_list_alloc (void) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
void g_list_free (GList *list);
GLIB_AVAILABLE_IN_ALL
void g_list_free_1 (GList *list);
#define g_list_free1 g_list_free_1
GLIB_AVAILABLE_IN_ALL
void g_list_free_full (GList *list,
GDestroyNotify free_func);
GLIB_AVAILABLE_IN_ALL
GList* g_list_append (GList *list,
gpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_prepend (GList *list,
gpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_insert (GList *list,
gpointer data,
gint position) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_insert_sorted (GList *list,
gpointer data,
GCompareFunc func) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_insert_sorted_with_data (GList *list,
gpointer data,
GCompareDataFunc func,
gpointer user_data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_insert_before (GList *list,
GList *sibling,
gpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_2_62
GList* g_list_insert_before_link (GList *list,
GList *sibling,
GList *link_) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_concat (GList *list1,
GList *list2) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_remove (GList *list,
gconstpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_remove_all (GList *list,
gconstpointer data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_remove_link (GList *list,
GList *llink) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_delete_link (GList *list,
GList *link_) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_reverse (GList *list) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_copy (GList *list) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_2_34
GList* g_list_copy_deep (GList *list,
GCopyFunc func,
gpointer user_data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_nth (GList *list,
guint n);
GLIB_AVAILABLE_IN_ALL
GList* g_list_nth_prev (GList *list,
guint n);
GLIB_AVAILABLE_IN_ALL
GList* g_list_find (GList *list,
gconstpointer data);
GLIB_AVAILABLE_IN_ALL
GList* g_list_find_custom (GList *list,
gconstpointer data,
GCompareFunc func);
GLIB_AVAILABLE_IN_ALL
gint g_list_position (GList *list,
GList *llink);
GLIB_AVAILABLE_IN_ALL
gint g_list_index (GList *list,
gconstpointer data);
GLIB_AVAILABLE_IN_ALL
GList* g_list_last (GList *list);
GLIB_AVAILABLE_IN_ALL
GList* g_list_first (GList *list);
GLIB_AVAILABLE_IN_ALL
guint g_list_length (GList *list);
GLIB_AVAILABLE_IN_ALL
void g_list_foreach (GList *list,
GFunc func,
gpointer user_data);
GLIB_AVAILABLE_IN_ALL
GList* g_list_sort (GList *list,
GCompareFunc compare_func) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
GList* g_list_sort_with_data (GList *list,
GCompareDataFunc compare_func,
gpointer user_data) G_GNUC_WARN_UNUSED_RESULT;
GLIB_AVAILABLE_IN_ALL
gpointer g_list_nth_data (GList *list,
guint n);
GLIB_AVAILABLE_IN_2_64
void g_clear_list (GList **list_ptr,
GDestroyNotify destroy);
#define g_clear_list(list_ptr, destroy) \
G_STMT_START { \
GList *_list; \
\
_list = *(list_ptr); \
if (_list) \
{ \
*list_ptr = NULL; \
\
if ((destroy) != NULL) \
g_list_free_full (_list, (destroy)); \
else \
g_list_free (_list); \
} \
} G_STMT_END \
GLIB_AVAILABLE_MACRO_IN_2_64
#define g_list_previous(list) ((list) ? (((GList *)(list))->prev) : NULL)
#define g_list_next(list) ((list) ? (((GList *)(list))->next) : NULL)
G_END_DECLS
#endif /* __G_LIST_H__ */
gnode.h 0000644 00000020774 15021467762 0006035 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_NODE_H__
#define __G_NODE_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GNode GNode;
/* Tree traverse flags */
typedef enum
{
G_TRAVERSE_LEAVES = 1 << 0,
G_TRAVERSE_NON_LEAVES = 1 << 1,
G_TRAVERSE_ALL = G_TRAVERSE_LEAVES | G_TRAVERSE_NON_LEAVES,
G_TRAVERSE_MASK = 0x03,
G_TRAVERSE_LEAFS = G_TRAVERSE_LEAVES,
G_TRAVERSE_NON_LEAFS = G_TRAVERSE_NON_LEAVES
} GTraverseFlags;
/* Tree traverse orders */
typedef enum
{
G_IN_ORDER,
G_PRE_ORDER,
G_POST_ORDER,
G_LEVEL_ORDER
} GTraverseType;
typedef gboolean (*GNodeTraverseFunc) (GNode *node,
gpointer data);
typedef void (*GNodeForeachFunc) (GNode *node,
gpointer data);
/* N-way tree implementation
*/
struct _GNode
{
gpointer data;
GNode *next;
GNode *prev;
GNode *parent;
GNode *children;
};
/**
* G_NODE_IS_ROOT:
* @node: a #GNode
*
* Returns %TRUE if a #GNode is the root of a tree.
*
* Returns: %TRUE if the #GNode is the root of a tree
* (i.e. it has no parent or siblings)
*/
#define G_NODE_IS_ROOT(node) (((GNode*) (node))->parent == NULL && \
((GNode*) (node))->prev == NULL && \
((GNode*) (node))->next == NULL)
/**
* G_NODE_IS_LEAF:
* @node: a #GNode
*
* Returns %TRUE if a #GNode is a leaf node.
*
* Returns: %TRUE if the #GNode is a leaf node
* (i.e. it has no children)
*/
#define G_NODE_IS_LEAF(node) (((GNode*) (node))->children == NULL)
GLIB_AVAILABLE_IN_ALL
GNode* g_node_new (gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_node_destroy (GNode *root);
GLIB_AVAILABLE_IN_ALL
void g_node_unlink (GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_copy_deep (GNode *node,
GCopyFunc copy_func,
gpointer data);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_copy (GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_insert (GNode *parent,
gint position,
GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_insert_before (GNode *parent,
GNode *sibling,
GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_insert_after (GNode *parent,
GNode *sibling,
GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_prepend (GNode *parent,
GNode *node);
GLIB_AVAILABLE_IN_ALL
guint g_node_n_nodes (GNode *root,
GTraverseFlags flags);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_get_root (GNode *node);
GLIB_AVAILABLE_IN_ALL
gboolean g_node_is_ancestor (GNode *node,
GNode *descendant);
GLIB_AVAILABLE_IN_ALL
guint g_node_depth (GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_find (GNode *root,
GTraverseType order,
GTraverseFlags flags,
gpointer data);
/* convenience macros */
/**
* g_node_append:
* @parent: the #GNode to place the new #GNode under
* @node: the #GNode to insert
*
* Inserts a #GNode as the last child of the given parent.
*
* Returns: the inserted #GNode
*/
#define g_node_append(parent, node) \
g_node_insert_before ((parent), NULL, (node))
/**
* g_node_insert_data:
* @parent: the #GNode to place the new #GNode under
* @position: the position to place the new #GNode at. If position is -1,
* the new #GNode is inserted as the last child of @parent
* @data: the data for the new #GNode
*
* Inserts a new #GNode at the given position.
*
* Returns: the new #GNode
*/
#define g_node_insert_data(parent, position, data) \
g_node_insert ((parent), (position), g_node_new (data))
/**
* g_node_insert_data_after:
* @parent: the #GNode to place the new #GNode under
* @sibling: the sibling #GNode to place the new #GNode after
* @data: the data for the new #GNode
*
* Inserts a new #GNode after the given sibling.
*
* Returns: the new #GNode
*/
#define g_node_insert_data_after(parent, sibling, data) \
g_node_insert_after ((parent), (sibling), g_node_new (data))
/**
* g_node_insert_data_before:
* @parent: the #GNode to place the new #GNode under
* @sibling: the sibling #GNode to place the new #GNode before
* @data: the data for the new #GNode
*
* Inserts a new #GNode before the given sibling.
*
* Returns: the new #GNode
*/
#define g_node_insert_data_before(parent, sibling, data) \
g_node_insert_before ((parent), (sibling), g_node_new (data))
/**
* g_node_prepend_data:
* @parent: the #GNode to place the new #GNode under
* @data: the data for the new #GNode
*
* Inserts a new #GNode as the first child of the given parent.
*
* Returns: the new #GNode
*/
#define g_node_prepend_data(parent, data) \
g_node_prepend ((parent), g_node_new (data))
/**
* g_node_append_data:
* @parent: the #GNode to place the new #GNode under
* @data: the data for the new #GNode
*
* Inserts a new #GNode as the last child of the given parent.
*
* Returns: the new #GNode
*/
#define g_node_append_data(parent, data) \
g_node_insert_before ((parent), NULL, g_node_new (data))
/* traversal function, assumes that 'node' is root
* (only traverses 'node' and its subtree).
* this function is just a high level interface to
* low level traversal functions, optimized for speed.
*/
GLIB_AVAILABLE_IN_ALL
void g_node_traverse (GNode *root,
GTraverseType order,
GTraverseFlags flags,
gint max_depth,
GNodeTraverseFunc func,
gpointer data);
/* return the maximum tree height starting with 'node', this is an expensive
* operation, since we need to visit all nodes. this could be shortened by
* adding 'guint height' to struct _GNode, but then again, this is not very
* often needed, and would make g_node_insert() more time consuming.
*/
GLIB_AVAILABLE_IN_ALL
guint g_node_max_height (GNode *root);
GLIB_AVAILABLE_IN_ALL
void g_node_children_foreach (GNode *node,
GTraverseFlags flags,
GNodeForeachFunc func,
gpointer data);
GLIB_AVAILABLE_IN_ALL
void g_node_reverse_children (GNode *node);
GLIB_AVAILABLE_IN_ALL
guint g_node_n_children (GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_nth_child (GNode *node,
guint n);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_last_child (GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_find_child (GNode *node,
GTraverseFlags flags,
gpointer data);
GLIB_AVAILABLE_IN_ALL
gint g_node_child_position (GNode *node,
GNode *child);
GLIB_AVAILABLE_IN_ALL
gint g_node_child_index (GNode *node,
gpointer data);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_first_sibling (GNode *node);
GLIB_AVAILABLE_IN_ALL
GNode* g_node_last_sibling (GNode *node);
/**
* g_node_prev_sibling:
* @node: a #GNode
*
* Gets the previous sibling of a #GNode.
*
* Returns: the previous sibling of @node, or %NULL if @node is the first
* node or %NULL
*/
#define g_node_prev_sibling(node) ((node) ? \
((GNode*) (node))->prev : NULL)
/**
* g_node_next_sibling:
* @node: a #GNode
*
* Gets the next sibling of a #GNode.
*
* Returns: the next sibling of @node, or %NULL if @node is the last node
* or %NULL
*/
#define g_node_next_sibling(node) ((node) ? \
((GNode*) (node))->next : NULL)
/**
* g_node_first_child:
* @node: a #GNode
*
* Gets the first child of a #GNode.
*
* Returns: the first child of @node, or %NULL if @node is %NULL
* or has no children
*/
#define g_node_first_child(node) ((node) ? \
((GNode*) (node))->children : NULL)
G_END_DECLS
#endif /* __G_NODE_H__ */
gversion.h 0000644 00000003675 15021467762 0006576 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_VERSION_H__
#define __G_VERSION_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
GLIB_VAR const guint glib_major_version;
GLIB_VAR const guint glib_minor_version;
GLIB_VAR const guint glib_micro_version;
GLIB_VAR const guint glib_interface_age;
GLIB_VAR const guint glib_binary_age;
GLIB_AVAILABLE_IN_ALL
const gchar * glib_check_version (guint required_major,
guint required_minor,
guint required_micro);
#define GLIB_CHECK_VERSION(major,minor,micro) \
(GLIB_MAJOR_VERSION > (major) || \
(GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION > (minor)) || \
(GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION == (minor) && \
GLIB_MICRO_VERSION >= (micro)))
G_END_DECLS
#endif /* __G_VERSION_H__ */
gtypes.h 0000644 00000050044 15021467762 0006245 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_TYPES_H__
#define __G_TYPES_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
#include
G_BEGIN_DECLS
/* Provide type definitions for commonly used types.
* These are useful because a "gint8" can be adjusted
* to be 1 byte (8 bits) on all platforms. Similarly and
* more importantly, "gint32" can be adjusted to be
* 4 bytes (32 bits) on all platforms.
*/
typedef char gchar;
typedef short gshort;
typedef long glong;
typedef int gint;
typedef gint gboolean;
typedef unsigned char guchar;
typedef unsigned short gushort;
typedef unsigned long gulong;
typedef unsigned int guint;
typedef float gfloat;
typedef double gdouble;
/* Define min and max constants for the fixed size numerical types */
/**
* G_MININT8: (value -128)
*
* The minimum value which can be held in a #gint8.
*
* Since: 2.4
*/
#define G_MININT8 ((gint8) (-G_MAXINT8 - 1))
#define G_MAXINT8 ((gint8) 0x7f)
#define G_MAXUINT8 ((guint8) 0xff)
/**
* G_MININT16: (value -32768)
*
* The minimum value which can be held in a #gint16.
*
* Since: 2.4
*/
#define G_MININT16 ((gint16) (-G_MAXINT16 - 1))
#define G_MAXINT16 ((gint16) 0x7fff)
#define G_MAXUINT16 ((guint16) 0xffff)
/**
* G_MININT32: (value -2147483648)
*
* The minimum value which can be held in a #gint32.
*
* Since: 2.4
*/
#define G_MININT32 ((gint32) (-G_MAXINT32 - 1))
#define G_MAXINT32 ((gint32) 0x7fffffff)
#define G_MAXUINT32 ((guint32) 0xffffffff)
/**
* G_MININT64: (value -9223372036854775808)
*
* The minimum value which can be held in a #gint64.
*/
#define G_MININT64 ((gint64) (-G_MAXINT64 - G_GINT64_CONSTANT(1)))
#define G_MAXINT64 G_GINT64_CONSTANT(0x7fffffffffffffff)
#define G_MAXUINT64 G_GUINT64_CONSTANT(0xffffffffffffffff)
typedef void* gpointer;
typedef const void *gconstpointer;
typedef gint (*GCompareFunc) (gconstpointer a,
gconstpointer b);
typedef gint (*GCompareDataFunc) (gconstpointer a,
gconstpointer b,
gpointer user_data);
typedef gboolean (*GEqualFunc) (gconstpointer a,
gconstpointer b);
typedef void (*GDestroyNotify) (gpointer data);
typedef void (*GFunc) (gpointer data,
gpointer user_data);
typedef guint (*GHashFunc) (gconstpointer key);
typedef void (*GHFunc) (gpointer key,
gpointer value,
gpointer user_data);
/**
* GCopyFunc:
* @src: (not nullable): A pointer to the data which should be copied
* @data: Additional data
*
* A function of this signature is used to copy the node data
* when doing a deep-copy of a tree.
*
* Returns: (not nullable): A pointer to the copy
*
* Since: 2.4
*/
typedef gpointer (*GCopyFunc) (gconstpointer src,
gpointer data);
/**
* GFreeFunc:
* @data: a data pointer
*
* Declares a type of function which takes an arbitrary
* data pointer argument and has no return value. It is
* not currently used in GLib or GTK+.
*/
typedef void (*GFreeFunc) (gpointer data);
/**
* GTranslateFunc:
* @str: the untranslated string
* @data: user data specified when installing the function, e.g.
* in g_option_group_set_translate_func()
*
* The type of functions which are used to translate user-visible
* strings, for output.
*
* Returns: a translation of the string for the current locale.
* The returned string is owned by GLib and must not be freed.
*/
typedef const gchar * (*GTranslateFunc) (const gchar *str,
gpointer data);
/* Define some mathematical constants that aren't available
* symbolically in some strict ISO C implementations.
*
* Note that the large number of digits used in these definitions
* doesn't imply that GLib or current computers in general would be
* able to handle floating point numbers with an accuracy like this.
* It's mostly an exercise in futility and future proofing. For
* extended precision floating point support, look somewhere else
* than GLib.
*/
#define G_E 2.7182818284590452353602874713526624977572470937000
#define G_LN2 0.69314718055994530941723212145817656807550013436026
#define G_LN10 2.3025850929940456840179914546843642076011014886288
#define G_PI 3.1415926535897932384626433832795028841971693993751
#define G_PI_2 1.5707963267948966192313216916397514420985846996876
#define G_PI_4 0.78539816339744830961566084581987572104929234984378
#define G_SQRT2 1.4142135623730950488016887242096980785696718753769
/* Portable endian checks and conversions
*
* glibconfig.h defines G_BYTE_ORDER which expands to one of
* the below macros.
*/
#define G_LITTLE_ENDIAN 1234
#define G_BIG_ENDIAN 4321
#define G_PDP_ENDIAN 3412 /* unused, need specific PDP check */
/* Basic bit swapping functions
*/
#define GUINT16_SWAP_LE_BE_CONSTANT(val) ((guint16) ( \
(guint16) ((guint16) (val) >> 8) | \
(guint16) ((guint16) (val) << 8)))
#define GUINT32_SWAP_LE_BE_CONSTANT(val) ((guint32) ( \
(((guint32) (val) & (guint32) 0x000000ffU) << 24) | \
(((guint32) (val) & (guint32) 0x0000ff00U) << 8) | \
(((guint32) (val) & (guint32) 0x00ff0000U) >> 8) | \
(((guint32) (val) & (guint32) 0xff000000U) >> 24)))
#define GUINT64_SWAP_LE_BE_CONSTANT(val) ((guint64) ( \
(((guint64) (val) & \
(guint64) G_GINT64_CONSTANT (0x00000000000000ffU)) << 56) | \
(((guint64) (val) & \
(guint64) G_GINT64_CONSTANT (0x000000000000ff00U)) << 40) | \
(((guint64) (val) & \
(guint64) G_GINT64_CONSTANT (0x0000000000ff0000U)) << 24) | \
(((guint64) (val) & \
(guint64) G_GINT64_CONSTANT (0x00000000ff000000U)) << 8) | \
(((guint64) (val) & \
(guint64) G_GINT64_CONSTANT (0x000000ff00000000U)) >> 8) | \
(((guint64) (val) & \
(guint64) G_GINT64_CONSTANT (0x0000ff0000000000U)) >> 24) | \
(((guint64) (val) & \
(guint64) G_GINT64_CONSTANT (0x00ff000000000000U)) >> 40) | \
(((guint64) (val) & \
(guint64) G_GINT64_CONSTANT (0xff00000000000000U)) >> 56)))
/* Arch specific stuff for speed
*/
#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__)
# if __GNUC__ >= 4 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 3
# define GUINT32_SWAP_LE_BE(val) ((guint32) __builtin_bswap32 ((guint32) (val)))
# define GUINT64_SWAP_LE_BE(val) ((guint64) __builtin_bswap64 ((guint64) (val)))
# endif
# if defined (__i386__)
# define GUINT16_SWAP_LE_BE_IA32(val) \
(G_GNUC_EXTENSION \
({ guint16 __v, __x = ((guint16) (val)); \
if (__builtin_constant_p (__x)) \
__v = GUINT16_SWAP_LE_BE_CONSTANT (__x); \
else \
__asm__ ("rorw $8, %w0" \
: "=r" (__v) \
: "0" (__x) \
: "cc"); \
__v; }))
# if !defined (__i486__) && !defined (__i586__) \
&& !defined (__pentium__) && !defined (__i686__) \
&& !defined (__pentiumpro__) && !defined (__pentium4__)
# define GUINT32_SWAP_LE_BE_IA32(val) \
(G_GNUC_EXTENSION \
({ guint32 __v, __x = ((guint32) (val)); \
if (__builtin_constant_p (__x)) \
__v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \
else \
__asm__ ("rorw $8, %w0\n\t" \
"rorl $16, %0\n\t" \
"rorw $8, %w0" \
: "=r" (__v) \
: "0" (__x) \
: "cc"); \
__v; }))
# else /* 486 and higher has bswap */
# define GUINT32_SWAP_LE_BE_IA32(val) \
(G_GNUC_EXTENSION \
({ guint32 __v, __x = ((guint32) (val)); \
if (__builtin_constant_p (__x)) \
__v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \
else \
__asm__ ("bswap %0" \
: "=r" (__v) \
: "0" (__x)); \
__v; }))
# endif /* processor specific 32-bit stuff */
# define GUINT64_SWAP_LE_BE_IA32(val) \
(G_GNUC_EXTENSION \
({ union { guint64 __ll; \
guint32 __l[2]; } __w, __r; \
__w.__ll = ((guint64) (val)); \
if (__builtin_constant_p (__w.__ll)) \
__r.__ll = GUINT64_SWAP_LE_BE_CONSTANT (__w.__ll); \
else \
{ \
__r.__l[0] = GUINT32_SWAP_LE_BE (__w.__l[1]); \
__r.__l[1] = GUINT32_SWAP_LE_BE (__w.__l[0]); \
} \
__r.__ll; }))
/* Possibly just use the constant version and let gcc figure it out? */
# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA32 (val))
# ifndef GUINT32_SWAP_LE_BE
# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA32 (val))
# endif
# ifndef GUINT64_SWAP_LE_BE
# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA32 (val))
# endif
# elif defined (__ia64__)
# define GUINT16_SWAP_LE_BE_IA64(val) \
(G_GNUC_EXTENSION \
({ guint16 __v, __x = ((guint16) (val)); \
if (__builtin_constant_p (__x)) \
__v = GUINT16_SWAP_LE_BE_CONSTANT (__x); \
else \
__asm__ __volatile__ ("shl %0 = %1, 48 ;;" \
"mux1 %0 = %0, @rev ;;" \
: "=r" (__v) \
: "r" (__x)); \
__v; }))
# define GUINT32_SWAP_LE_BE_IA64(val) \
(G_GNUC_EXTENSION \
({ guint32 __v, __x = ((guint32) (val)); \
if (__builtin_constant_p (__x)) \
__v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \
else \
__asm__ __volatile__ ("shl %0 = %1, 32 ;;" \
"mux1 %0 = %0, @rev ;;" \
: "=r" (__v) \
: "r" (__x)); \
__v; }))
# define GUINT64_SWAP_LE_BE_IA64(val) \
(G_GNUC_EXTENSION \
({ guint64 __v, __x = ((guint64) (val)); \
if (__builtin_constant_p (__x)) \
__v = GUINT64_SWAP_LE_BE_CONSTANT (__x); \
else \
__asm__ __volatile__ ("mux1 %0 = %1, @rev ;;" \
: "=r" (__v) \
: "r" (__x)); \
__v; }))
# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA64 (val))
# ifndef GUINT32_SWAP_LE_BE
# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA64 (val))
# endif
# ifndef GUINT64_SWAP_LE_BE
# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA64 (val))
# endif
# elif defined (__x86_64__)
# define GUINT32_SWAP_LE_BE_X86_64(val) \
(G_GNUC_EXTENSION \
({ guint32 __v, __x = ((guint32) (val)); \
if (__builtin_constant_p (__x)) \
__v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \
else \
__asm__ ("bswapl %0" \
: "=r" (__v) \
: "0" (__x)); \
__v; }))
# define GUINT64_SWAP_LE_BE_X86_64(val) \
(G_GNUC_EXTENSION \
({ guint64 __v, __x = ((guint64) (val)); \
if (__builtin_constant_p (__x)) \
__v = GUINT64_SWAP_LE_BE_CONSTANT (__x); \
else \
__asm__ ("bswapq %0" \
: "=r" (__v) \
: "0" (__x)); \
__v; }))
/* gcc seems to figure out optimal code for this on its own */
# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
# ifndef GUINT32_SWAP_LE_BE
# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_X86_64 (val))
# endif
# ifndef GUINT64_SWAP_LE_BE
# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_X86_64 (val))
# endif
# else /* generic gcc */
# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
# ifndef GUINT32_SWAP_LE_BE
# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))
# endif
# ifndef GUINT64_SWAP_LE_BE
# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val))
# endif
# endif
#else /* generic */
# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))
# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val))
#endif /* generic */
#define GUINT16_SWAP_LE_PDP(val) ((guint16) (val))
#define GUINT16_SWAP_BE_PDP(val) (GUINT16_SWAP_LE_BE (val))
#define GUINT32_SWAP_LE_PDP(val) ((guint32) ( \
(((guint32) (val) & (guint32) 0x0000ffffU) << 16) | \
(((guint32) (val) & (guint32) 0xffff0000U) >> 16)))
#define GUINT32_SWAP_BE_PDP(val) ((guint32) ( \
(((guint32) (val) & (guint32) 0x00ff00ffU) << 8) | \
(((guint32) (val) & (guint32) 0xff00ff00U) >> 8)))
/* The G*_TO_?E() macros are defined in glibconfig.h.
* The transformation is symmetric, so the FROM just maps to the TO.
*/
#define GINT16_FROM_LE(val) (GINT16_TO_LE (val))
#define GUINT16_FROM_LE(val) (GUINT16_TO_LE (val))
#define GINT16_FROM_BE(val) (GINT16_TO_BE (val))
#define GUINT16_FROM_BE(val) (GUINT16_TO_BE (val))
#define GINT32_FROM_LE(val) (GINT32_TO_LE (val))
#define GUINT32_FROM_LE(val) (GUINT32_TO_LE (val))
#define GINT32_FROM_BE(val) (GINT32_TO_BE (val))
#define GUINT32_FROM_BE(val) (GUINT32_TO_BE (val))
#define GINT64_FROM_LE(val) (GINT64_TO_LE (val))
#define GUINT64_FROM_LE(val) (GUINT64_TO_LE (val))
#define GINT64_FROM_BE(val) (GINT64_TO_BE (val))
#define GUINT64_FROM_BE(val) (GUINT64_TO_BE (val))
#define GLONG_FROM_LE(val) (GLONG_TO_LE (val))
#define GULONG_FROM_LE(val) (GULONG_TO_LE (val))
#define GLONG_FROM_BE(val) (GLONG_TO_BE (val))
#define GULONG_FROM_BE(val) (GULONG_TO_BE (val))
#define GINT_FROM_LE(val) (GINT_TO_LE (val))
#define GUINT_FROM_LE(val) (GUINT_TO_LE (val))
#define GINT_FROM_BE(val) (GINT_TO_BE (val))
#define GUINT_FROM_BE(val) (GUINT_TO_BE (val))
#define GSIZE_FROM_LE(val) (GSIZE_TO_LE (val))
#define GSSIZE_FROM_LE(val) (GSSIZE_TO_LE (val))
#define GSIZE_FROM_BE(val) (GSIZE_TO_BE (val))
#define GSSIZE_FROM_BE(val) (GSSIZE_TO_BE (val))
/* Portable versions of host-network order stuff
*/
#define g_ntohl(val) (GUINT32_FROM_BE (val))
#define g_ntohs(val) (GUINT16_FROM_BE (val))
#define g_htonl(val) (GUINT32_TO_BE (val))
#define g_htons(val) (GUINT16_TO_BE (val))
/* Overflow-checked unsigned integer arithmetic
*/
#ifndef _GLIB_TEST_OVERFLOW_FALLBACK
/* https://bugzilla.gnome.org/show_bug.cgi?id=769104 */
#if __GNUC__ >= 5 && !defined(__INTEL_COMPILER)
#define _GLIB_HAVE_BUILTIN_OVERFLOW_CHECKS
#elif g_macro__has_builtin(__builtin_uadd_overflow)
#define _GLIB_HAVE_BUILTIN_OVERFLOW_CHECKS
#endif
#endif
#define g_uint_checked_add(dest, a, b) \
_GLIB_CHECKED_ADD_U32(dest, a, b)
#define g_uint_checked_mul(dest, a, b) \
_GLIB_CHECKED_MUL_U32(dest, a, b)
#define g_uint64_checked_add(dest, a, b) \
_GLIB_CHECKED_ADD_U64(dest, a, b)
#define g_uint64_checked_mul(dest, a, b) \
_GLIB_CHECKED_MUL_U64(dest, a, b)
#if GLIB_SIZEOF_SIZE_T == 8
#define g_size_checked_add(dest, a, b) \
_GLIB_CHECKED_ADD_U64(dest, a, b)
#define g_size_checked_mul(dest, a, b) \
_GLIB_CHECKED_MUL_U64(dest, a, b)
#else
#define g_size_checked_add(dest, a, b) \
_GLIB_CHECKED_ADD_U32(dest, a, b)
#define g_size_checked_mul(dest, a, b) \
_GLIB_CHECKED_MUL_U32(dest, a, b)
#endif
/* The names of the following inlines are private. Use the macro
* definitions above.
*/
#ifdef _GLIB_HAVE_BUILTIN_OVERFLOW_CHECKS
static inline gboolean _GLIB_CHECKED_ADD_U32 (guint32 *dest, guint32 a, guint32 b) {
return !__builtin_uadd_overflow(a, b, dest); }
static inline gboolean _GLIB_CHECKED_MUL_U32 (guint32 *dest, guint32 a, guint32 b) {
return !__builtin_umul_overflow(a, b, dest); }
static inline gboolean _GLIB_CHECKED_ADD_U64 (guint64 *dest, guint64 a, guint64 b) {
G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
return !__builtin_uaddll_overflow(a, b, (unsigned long long *) dest); }
static inline gboolean _GLIB_CHECKED_MUL_U64 (guint64 *dest, guint64 a, guint64 b) {
return !__builtin_umulll_overflow(a, b, (unsigned long long *) dest); }
#else
static inline gboolean _GLIB_CHECKED_ADD_U32 (guint32 *dest, guint32 a, guint32 b) {
*dest = a + b; return *dest >= a; }
static inline gboolean _GLIB_CHECKED_MUL_U32 (guint32 *dest, guint32 a, guint32 b) {
*dest = a * b; return !a || *dest / a == b; }
static inline gboolean _GLIB_CHECKED_ADD_U64 (guint64 *dest, guint64 a, guint64 b) {
*dest = a + b; return *dest >= a; }
static inline gboolean _GLIB_CHECKED_MUL_U64 (guint64 *dest, guint64 a, guint64 b) {
*dest = a * b; return !a || *dest / a == b; }
#endif
/* IEEE Standard 754 Single Precision Storage Format (gfloat):
*
* 31 30 23 22 0
* +--------+---------------+---------------+
* | s 1bit | e[30:23] 8bit | f[22:0] 23bit |
* +--------+---------------+---------------+
* B0------------------->B1------->B2-->B3-->
*
* IEEE Standard 754 Double Precision Storage Format (gdouble):
*
* 63 62 52 51 32 31 0
* +--------+----------------+----------------+ +---------------+
* | s 1bit | e[62:52] 11bit | f[51:32] 20bit | | f[31:0] 32bit |
* +--------+----------------+----------------+ +---------------+
* B0--------------->B1---------->B2--->B3----> B4->B5->B6->B7->
*/
/* subtract from biased_exponent to form base2 exponent (normal numbers) */
typedef union _GDoubleIEEE754 GDoubleIEEE754;
typedef union _GFloatIEEE754 GFloatIEEE754;
#define G_IEEE754_FLOAT_BIAS (127)
#define G_IEEE754_DOUBLE_BIAS (1023)
/* multiply with base2 exponent to get base10 exponent (normal numbers) */
#define G_LOG_2_BASE_10 (0.30102999566398119521)
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
union _GFloatIEEE754
{
gfloat v_float;
struct {
guint mantissa : 23;
guint biased_exponent : 8;
guint sign : 1;
} mpn;
};
union _GDoubleIEEE754
{
gdouble v_double;
struct {
guint mantissa_low : 32;
guint mantissa_high : 20;
guint biased_exponent : 11;
guint sign : 1;
} mpn;
};
#elif G_BYTE_ORDER == G_BIG_ENDIAN
union _GFloatIEEE754
{
gfloat v_float;
struct {
guint sign : 1;
guint biased_exponent : 8;
guint mantissa : 23;
} mpn;
};
union _GDoubleIEEE754
{
gdouble v_double;
struct {
guint sign : 1;
guint biased_exponent : 11;
guint mantissa_high : 20;
guint mantissa_low : 32;
} mpn;
};
#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
#error unknown ENDIAN type
#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
typedef struct _GTimeVal GTimeVal GLIB_DEPRECATED_TYPE_IN_2_62_FOR(GDateTime);
struct _GTimeVal
{
glong tv_sec;
glong tv_usec;
} GLIB_DEPRECATED_TYPE_IN_2_62_FOR(GDateTime);
typedef gint grefcount;
typedef gint gatomicrefcount; /* should be accessed only using atomics */
G_END_DECLS
/* We prefix variable declarations so they can
* properly get exported in Windows DLLs.
*/
#ifndef GLIB_VAR
# ifdef G_PLATFORM_WIN32
# ifdef GLIB_STATIC_COMPILATION
# define GLIB_VAR extern
# else /* !GLIB_STATIC_COMPILATION */
# ifdef GLIB_COMPILATION
# ifdef DLL_EXPORT
# define GLIB_VAR extern __declspec(dllexport)
# else /* !DLL_EXPORT */
# define GLIB_VAR extern
# endif /* !DLL_EXPORT */
# else /* !GLIB_COMPILATION */
# define GLIB_VAR extern __declspec(dllimport)
# endif /* !GLIB_COMPILATION */
# endif /* !GLIB_STATIC_COMPILATION */
# else /* !G_PLATFORM_WIN32 */
# define GLIB_VAR _GLIB_EXTERN
# endif /* !G_PLATFORM_WIN32 */
#endif /* GLIB_VAR */
#endif /* __G_TYPES_H__ */
ghostutils.h 0000644 00000002660 15021467762 0007140 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 2008 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, see .
*/
#ifndef __G_HOST_UTILS_H__
#define __G_HOST_UTILS_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
gboolean g_hostname_is_non_ascii (const gchar *hostname);
GLIB_AVAILABLE_IN_ALL
gboolean g_hostname_is_ascii_encoded (const gchar *hostname);
GLIB_AVAILABLE_IN_ALL
gboolean g_hostname_is_ip_address (const gchar *hostname);
GLIB_AVAILABLE_IN_ALL
gchar *g_hostname_to_ascii (const gchar *hostname);
GLIB_AVAILABLE_IN_ALL
gchar *g_hostname_to_unicode (const gchar *hostname);
G_END_DECLS
#endif /* __G_HOST_UTILS_H__ */
gconvert.h 0000644 00000013443 15021467762 0006563 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_CONVERT_H__
#define __G_CONVERT_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
/**
* GConvertError:
* @G_CONVERT_ERROR_NO_CONVERSION: Conversion between the requested character
* sets is not supported.
* @G_CONVERT_ERROR_ILLEGAL_SEQUENCE: Invalid byte sequence in conversion input;
* or the character sequence could not be represented in the target
* character set.
* @G_CONVERT_ERROR_FAILED: Conversion failed for some reason.
* @G_CONVERT_ERROR_PARTIAL_INPUT: Partial character sequence at end of input.
* @G_CONVERT_ERROR_BAD_URI: URI is invalid.
* @G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: Pathname is not an absolute path.
* @G_CONVERT_ERROR_NO_MEMORY: No memory available. Since: 2.40
* @G_CONVERT_ERROR_EMBEDDED_NUL: An embedded NUL character is present in
* conversion output where a NUL-terminated string is expected.
* Since: 2.56
*
* Error codes returned by character set conversion routines.
*/
typedef enum
{
G_CONVERT_ERROR_NO_CONVERSION,
G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
G_CONVERT_ERROR_FAILED,
G_CONVERT_ERROR_PARTIAL_INPUT,
G_CONVERT_ERROR_BAD_URI,
G_CONVERT_ERROR_NOT_ABSOLUTE_PATH,
G_CONVERT_ERROR_NO_MEMORY,
G_CONVERT_ERROR_EMBEDDED_NUL
} GConvertError;
/**
* G_CONVERT_ERROR:
*
* Error domain for character set conversions. Errors in this domain will
* be from the #GConvertError enumeration. See #GError for information on
* error domains.
*/
#define G_CONVERT_ERROR g_convert_error_quark()
GLIB_AVAILABLE_IN_ALL
GQuark g_convert_error_quark (void);
/**
* GIConv: (skip)
*
* The GIConv struct wraps an iconv() conversion descriptor. It contains
* private data and should only be accessed using the following functions.
*/
typedef struct _GIConv *GIConv;
GLIB_AVAILABLE_IN_ALL
GIConv g_iconv_open (const gchar *to_codeset,
const gchar *from_codeset);
GLIB_AVAILABLE_IN_ALL
gsize g_iconv (GIConv converter,
gchar **inbuf,
gsize *inbytes_left,
gchar **outbuf,
gsize *outbytes_left);
GLIB_AVAILABLE_IN_ALL
gint g_iconv_close (GIConv converter);
GLIB_AVAILABLE_IN_ALL
gchar* g_convert (const gchar *str,
gssize len,
const gchar *to_codeset,
const gchar *from_codeset,
gsize *bytes_read,
gsize *bytes_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_convert_with_iconv (const gchar *str,
gssize len,
GIConv converter,
gsize *bytes_read,
gsize *bytes_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_convert_with_fallback (const gchar *str,
gssize len,
const gchar *to_codeset,
const gchar *from_codeset,
const gchar *fallback,
gsize *bytes_read,
gsize *bytes_written,
GError **error) G_GNUC_MALLOC;
/* Convert between libc's idea of strings and UTF-8.
*/
GLIB_AVAILABLE_IN_ALL
gchar* g_locale_to_utf8 (const gchar *opsysstring,
gssize len,
gsize *bytes_read,
gsize *bytes_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_locale_from_utf8 (const gchar *utf8string,
gssize len,
gsize *bytes_read,
gsize *bytes_written,
GError **error) G_GNUC_MALLOC;
/* Convert between the operating system (or C runtime)
* representation of file names and UTF-8.
*/
GLIB_AVAILABLE_IN_ALL
gchar* g_filename_to_utf8 (const gchar *opsysstring,
gssize len,
gsize *bytes_read,
gsize *bytes_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar* g_filename_from_utf8 (const gchar *utf8string,
gssize len,
gsize *bytes_read,
gsize *bytes_written,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_filename_from_uri (const gchar *uri,
gchar **hostname,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_filename_to_uri (const gchar *filename,
const gchar *hostname,
GError **error) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar *g_filename_display_name (const gchar *filename) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gboolean g_get_filename_charsets (const gchar ***filename_charsets);
GLIB_AVAILABLE_IN_ALL
gchar *g_filename_display_basename (const gchar *filename) G_GNUC_MALLOC;
GLIB_AVAILABLE_IN_ALL
gchar **g_uri_list_extract_uris (const gchar *uri_list);
G_END_DECLS
#endif /* __G_CONVERT_H__ */
gqsort.h 0000644 00000002733 15021467762 0006253 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_QSORT_H__
#define __G_QSORT_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
GLIB_AVAILABLE_IN_ALL
void g_qsort_with_data (gconstpointer pbase,
gint total_elems,
gsize size,
GCompareDataFunc compare_func,
gpointer user_data);
G_END_DECLS
#endif /* __G_QSORT_H__ */
gdataset.h 0000644 00000014145 15021467762 0006530 0 ustar 00 /* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __G_DATASET_H__
#define __G_DATASET_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
G_BEGIN_DECLS
typedef struct _GData GData;
typedef void (*GDataForeachFunc) (GQuark key_id,
gpointer data,
gpointer user_data);
/* Keyed Data List
*/
GLIB_AVAILABLE_IN_ALL
void g_datalist_init (GData **datalist);
GLIB_AVAILABLE_IN_ALL
void g_datalist_clear (GData **datalist);
GLIB_AVAILABLE_IN_ALL
gpointer g_datalist_id_get_data (GData **datalist,
GQuark key_id);
GLIB_AVAILABLE_IN_ALL
void g_datalist_id_set_data_full (GData **datalist,
GQuark key_id,
gpointer data,
GDestroyNotify destroy_func);
typedef gpointer (*GDuplicateFunc) (gpointer data, gpointer user_data);
GLIB_AVAILABLE_IN_2_34
gpointer g_datalist_id_dup_data (GData **datalist,
GQuark key_id,
GDuplicateFunc dup_func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_34
gboolean g_datalist_id_replace_data (GData **datalist,
GQuark key_id,
gpointer oldval,
gpointer newval,
GDestroyNotify destroy,
GDestroyNotify *old_destroy);
GLIB_AVAILABLE_IN_ALL
gpointer g_datalist_id_remove_no_notify (GData **datalist,
GQuark key_id);
GLIB_AVAILABLE_IN_ALL
void g_datalist_foreach (GData **datalist,
GDataForeachFunc func,
gpointer user_data);
/**
* G_DATALIST_FLAGS_MASK:
*
* A bitmask that restricts the possible flags passed to
* g_datalist_set_flags(). Passing a flags value where
* flags & ~G_DATALIST_FLAGS_MASK != 0 is an error.
*/
#define G_DATALIST_FLAGS_MASK 0x3
GLIB_AVAILABLE_IN_ALL
void g_datalist_set_flags (GData **datalist,
guint flags);
GLIB_AVAILABLE_IN_ALL
void g_datalist_unset_flags (GData **datalist,
guint flags);
GLIB_AVAILABLE_IN_ALL
guint g_datalist_get_flags (GData **datalist);
#define g_datalist_id_set_data(dl, q, d) \
g_datalist_id_set_data_full ((dl), (q), (d), NULL)
#define g_datalist_id_remove_data(dl, q) \
g_datalist_id_set_data ((dl), (q), NULL)
#define g_datalist_set_data_full(dl, k, d, f) \
g_datalist_id_set_data_full ((dl), g_quark_from_string (k), (d), (f))
#define g_datalist_remove_no_notify(dl, k) \
g_datalist_id_remove_no_notify ((dl), g_quark_try_string (k))
#define g_datalist_set_data(dl, k, d) \
g_datalist_set_data_full ((dl), (k), (d), NULL)
#define g_datalist_remove_data(dl, k) \
g_datalist_id_set_data ((dl), g_quark_try_string (k), NULL)
/* Location Associated Keyed Data
*/
GLIB_AVAILABLE_IN_ALL
void g_dataset_destroy (gconstpointer dataset_location);
GLIB_AVAILABLE_IN_ALL
gpointer g_dataset_id_get_data (gconstpointer dataset_location,
GQuark key_id);
GLIB_AVAILABLE_IN_ALL
gpointer g_datalist_get_data (GData **datalist,
const gchar *key);
GLIB_AVAILABLE_IN_ALL
void g_dataset_id_set_data_full (gconstpointer dataset_location,
GQuark key_id,
gpointer data,
GDestroyNotify destroy_func);
GLIB_AVAILABLE_IN_ALL
gpointer g_dataset_id_remove_no_notify (gconstpointer dataset_location,
GQuark key_id);
GLIB_AVAILABLE_IN_ALL
void g_dataset_foreach (gconstpointer dataset_location,
GDataForeachFunc func,
gpointer user_data);
#define g_dataset_id_set_data(l, k, d) \
g_dataset_id_set_data_full ((l), (k), (d), NULL)
#define g_dataset_id_remove_data(l, k) \
g_dataset_id_set_data ((l), (k), NULL)
#define g_dataset_get_data(l, k) \
(g_dataset_id_get_data ((l), g_quark_try_string (k)))
#define g_dataset_set_data_full(l, k, d, f) \
g_dataset_id_set_data_full ((l), g_quark_from_string (k), (d), (f))
#define g_dataset_remove_no_notify(l, k) \
g_dataset_id_remove_no_notify ((l), g_quark_try_string (k))
#define g_dataset_set_data(l, k, d) \
g_dataset_set_data_full ((l), (k), (d), NULL)
#define g_dataset_remove_data(l, k) \
g_dataset_id_set_data ((l), g_quark_try_string (k), NULL)
G_END_DECLS
#endif /* __G_DATASET_H__ */
gtestutils.h 0000644 00000104502 15021467762 0007140 0 ustar 00 /* GLib testing utilities
* Copyright (C) 2007 Imendio AB
* Authors: Tim Janik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#ifndef __G_TEST_UTILS_H__
#define __G_TEST_UTILS_H__
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
#error "Only can be included directly."
#endif
#include
#include
#include
#include
#include
#include