27#ifndef __G_STRFUNCS_H__
28#define __G_STRFUNCS_H__
30#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
31#error "Only <glib.h> can be included directly."
61#define g_ascii_isalnum(c) \
62 ((g_ascii_table[(guchar) (c)] & G_ASCII_ALNUM) != 0)
64#define g_ascii_isalpha(c) \
65 ((g_ascii_table[(guchar) (c)] & G_ASCII_ALPHA) != 0)
67#define g_ascii_iscntrl(c) \
68 ((g_ascii_table[(guchar) (c)] & G_ASCII_CNTRL) != 0)
70#define g_ascii_isdigit(c) \
71 ((g_ascii_table[(guchar) (c)] & G_ASCII_DIGIT) != 0)
73#define g_ascii_isgraph(c) \
74 ((g_ascii_table[(guchar) (c)] & G_ASCII_GRAPH) != 0)
76#define g_ascii_islower(c) \
77 ((g_ascii_table[(guchar) (c)] & G_ASCII_LOWER) != 0)
79#define g_ascii_isprint(c) \
80 ((g_ascii_table[(guchar) (c)] & G_ASCII_PRINT) != 0)
82#define g_ascii_ispunct(c) \
83 ((g_ascii_table[(guchar) (c)] & G_ASCII_PUNCT) != 0)
85#define g_ascii_isspace(c) \
86 ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
88#define g_ascii_isupper(c) \
89 ((g_ascii_table[(guchar) (c)] & G_ASCII_UPPER) != 0)
91#define g_ascii_isxdigit(c) \
92 ((g_ascii_table[(guchar) (c)] & G_ASCII_XDIGIT) != 0)
107#define G_STR_DELIMITERS "_-|> <."
110 const gchar *delimiters,
111 gchar new_delimiter);
114 const gchar *valid_chars,
133 const gchar *needle);
136 const gchar *needle);
140 const gchar *needle);
144 const gchar *suffix);
147 const gchar *prefix);
149#if G_GNUC_CHECK_VERSION (2, 0)
150#ifndef __GTK_DOC_IGNORE__
151#ifndef __GI_SCANNER__
157#define _G_STR_NONNULL(x) ((x) + !(x))
159#define g_str_has_prefix(STR, PREFIX) \
160 (__builtin_constant_p (PREFIX)? \
161 G_GNUC_EXTENSION ({ \
162 const char * const __str = (STR); \
163 const char * const __prefix = (PREFIX); \
164 gboolean __result = FALSE; \
166 if G_UNLIKELY (__str == NULL || __prefix == NULL) \
167 __result = (g_str_has_prefix) (__str, __prefix); \
170 const size_t __str_len = strlen (_G_STR_NONNULL (__str)); \
171 const size_t __prefix_len = strlen (_G_STR_NONNULL (__prefix)); \
172 if (__str_len >= __prefix_len) \
173 __result = memcmp (_G_STR_NONNULL (__str), \
174 _G_STR_NONNULL (__prefix), \
175 __prefix_len) == 0; \
180 (g_str_has_prefix) (STR, PREFIX) \
183#define g_str_has_suffix(STR, SUFFIX) \
184 (__builtin_constant_p (SUFFIX)? \
185 G_GNUC_EXTENSION ({ \
186 const char * const __str = (STR); \
187 const char * const __suffix = (SUFFIX); \
188 gboolean __result = FALSE; \
190 if G_UNLIKELY (__str == NULL || __suffix == NULL) \
191 __result = (g_str_has_suffix) (__str, __suffix); \
194 const size_t __str_len = strlen (_G_STR_NONNULL (__str)); \
195 const size_t __suffix_len = strlen (_G_STR_NONNULL (__suffix)); \
196 if (__str_len >= __suffix_len) \
197 __result = memcmp (__str + __str_len - __suffix_len, \
198 _G_STR_NONNULL (__suffix), \
199 __suffix_len) == 0; \
204 (g_str_has_suffix) (STR, SUFFIX) \
230#define G_ASCII_DTOSTR_BUF_SIZE (29 + 10)
248#define g_strstrip( string ) g_strchomp (g_strchug (string))
304#if G_GNUC_CHECK_VERSION(2, 0)
305#ifndef __GTK_DOC_IGNORE__
306#ifndef __GI_SCANNER__
309g_strdup_inline (
const char *str)
311 if (__builtin_constant_p (!str) && !str)
314 if (__builtin_constant_p (!!str) && !!str && __builtin_constant_p (strlen (str)))
316 const size_t len = strlen (str) + 1;
317 char *dup_str = (
char *)
g_malloc (len);
318 return (
char *) memcpy (dup_str, str, len);
324#define g_strdup(x) g_strdup_inline (x)
357 const
gchar *delimiter,
361 const
gchar *delimiters,
379 const
gchar *from_locale);
383 const
gchar *translit_locale,
384 gchar ***ascii_alternates);
388 const
gchar *potential_hit,
397 const
gchar * const *strv2);
424#define G_NUMBER_PARSER_ERROR (g_number_parser_error_quark ())
485 if (*str_pointer == new_str ||
486 (*str_pointer && new_str && strcmp (*str_pointer, new_str) == 0))
#define GLIB_AVAILABLE_IN_2_54
#define GLIB_AVAILABLE_IN_2_44
#define GLIB_DEPRECATED_IN_2_68_FOR(f)
#define GLIB_AVAILABLE_IN_2_68
#define GLIB_AVAILABLE_IN_2_60
#define GLIB_AVAILABLE_IN_2_40
#define GLIB_AVAILABLE_IN_ALL
#define GLIB_AVAILABLE_STATIC_INLINE_IN_2_76
#define G_GNUC_NULL_TERMINATED
#define G_GNUC_PRINTF(format_idx, arg_idx)
#define G_GNUC_ALLOC_SIZE(x)
GLIB_AVAILABLE_IN_ALL void g_free(gpointer mem)
GLIB_AVAILABLE_IN_ALL gpointer g_malloc(gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1)
G_BEGIN_DECLS typedef guint32 GQuark
gpointer g_memdup(gconstpointer mem, guint byte_size) G_GNUC_ALLOC_SIZE(2)
GLIB_AVAILABLE_IN_ALL gchar ** g_strdupv(gchar **str_array)
GLIB_AVAILABLE_IN_2_40 gboolean g_str_match_string(const gchar *search_term, const gchar *potential_hit, gboolean accept_alternates)
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_VAR const guint16 *const g_ascii_table
GLIB_AVAILABLE_IN_ALL const gchar * g_strsignal(gint signum) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL gint64 g_ascii_strtoll(const gchar *nptr, gchar **endptr, guint base)
GLIB_AVAILABLE_IN_ALL gchar ** g_strsplit(const gchar *string, const gchar *delimiter, gint max_tokens)
GLIB_AVAILABLE_IN_ALL gdouble g_ascii_strtod(const gchar *nptr, gchar **endptr)
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_ALL gchar * g_ascii_formatd(gchar *buffer, gint buf_len, const gchar *format, gdouble d)
GLIB_AVAILABLE_IN_ALL gchar * g_strjoinv(const gchar *separator, gchar **str_array) G_GNUC_MALLOC
GLIB_AVAILABLE_IN_ALL gchar g_ascii_toupper(gchar c) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL gchar G_GNUC_MALLOC
GLIB_AVAILABLE_IN_ALL gboolean g_str_has_suffix(const gchar *str, const gchar *suffix)
GLIB_DEPRECATED gint g_strcasecmp(const gchar *s1, const gchar *s2)
GLIB_AVAILABLE_IN_ALL gchar * g_strchug(gchar *string)
GLIB_AVAILABLE_IN_ALL gchar * g_strcanon(gchar *string, const gchar *valid_chars, gchar substitutor)
GLIB_AVAILABLE_IN_ALL guint g_strv_length(gchar **str_array)
GLIB_AVAILABLE_IN_ALL gchar * g_stpcpy(gchar *dest, const char *src)
GLIB_DEPRECATED gchar * g_strup(gchar *string)
GLIB_DEPRECATED gint g_strncasecmp(const gchar *s1, const gchar *s2, guint n)
GLIB_AVAILABLE_IN_ALL gchar * g_strdup(const gchar *str) G_GNUC_MALLOC
GLIB_AVAILABLE_IN_ALL gsize g_strlcpy(gchar *dest, const gchar *src, gsize dest_size)
GLIB_AVAILABLE_IN_ALL gchar * g_strreverse(gchar *string)
@ G_NUMBER_PARSER_ERROR_INVALID
@ G_NUMBER_PARSER_ERROR_OUT_OF_BOUNDS
GLIB_AVAILABLE_IN_ALL gchar * g_strjoin(const gchar *separator,...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED
GLIB_AVAILABLE_IN_ALL gchar * g_strescape(const gchar *source, const gchar *exceptions) G_GNUC_MALLOC
GLIB_AVAILABLE_IN_ALL const gchar * g_strerror(gint errnum) G_GNUC_CONST
GLIB_AVAILABLE_IN_2_54 GQuark g_number_parser_error_quark(void)
GLIB_AVAILABLE_IN_ALL gdouble g_strtod(const gchar *nptr, gchar **endptr)
GLIB_AVAILABLE_IN_ALL gchar * g_ascii_dtostr(gchar *buffer, gint buf_len, gdouble d)
GLIB_AVAILABLE_IN_ALL gchar * g_strdelimit(gchar *string, const gchar *delimiters, gchar new_delimiter)
GLIB_AVAILABLE_IN_ALL gchar * g_strndup(const gchar *str, gsize n) G_GNUC_MALLOC
GLIB_AVAILABLE_IN_ALL gint g_ascii_xdigit_value(gchar c) G_GNUC_CONST
GLIB_AVAILABLE_IN_2_40 gchar * g_str_to_ascii(const gchar *str, const gchar *from_locale)
GLIB_AVAILABLE_IN_ALL gchar * g_ascii_strdown(const gchar *str, gssize len) G_GNUC_MALLOC
GLIB_AVAILABLE_IN_ALL gchar * g_strrstr_len(const gchar *haystack, gssize haystack_len, const gchar *needle)
GLIB_AVAILABLE_IN_ALL gchar ** g_strsplit_set(const gchar *string, const gchar *delimiters, gint max_tokens)
GLIB_AVAILABLE_IN_2_44 gboolean g_strv_contains(const gchar *const *strv, const gchar *str)
GLIB_AVAILABLE_IN_ALL gchar * g_strnfill(gsize length, gchar fill_char) G_GNUC_MALLOC
GLIB_AVAILABLE_IN_ALL gchar g_ascii_tolower(gchar c) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL gchar * g_strdup_printf(const gchar *format,...) G_GNUC_PRINTF(1
GLIB_AVAILABLE_IN_ALL gchar * g_strdup_vprintf(const gchar *format, va_list args) G_GNUC_PRINTF(1
GLIB_DEPRECATED gchar * g_strdown(gchar *string)
GLIB_AVAILABLE_IN_ALL gint g_ascii_digit_value(gchar c) G_GNUC_CONST
GLIB_AVAILABLE_IN_ALL gsize g_strlcat(gchar *dest, const gchar *src, gsize dest_size)
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)
GLIB_AVAILABLE_IN_2_40 gchar ** g_str_tokenize_and_fold(const gchar *string, const gchar *translit_locale, gchar ***ascii_alternates)
GLIB_AVAILABLE_IN_ALL gchar * g_strchomp(gchar *string)
GLIB_AVAILABLE_IN_ALL gint g_ascii_strncasecmp(const gchar *s1, const gchar *s2, gsize n)
GLIB_AVAILABLE_IN_2_60 gboolean g_strv_equal(const gchar *const *strv1, const gchar *const *strv2)
GLIB_AVAILABLE_IN_ALL gboolean g_str_has_prefix(const gchar *str, const gchar *prefix)
GLIB_AVAILABLE_IN_ALL gchar * g_ascii_strup(const gchar *str, gssize len) G_GNUC_MALLOC
GLIB_AVAILABLE_IN_ALL guint64 g_ascii_strtoull(const gchar *nptr, gchar **endptr, guint base)
GLIB_AVAILABLE_IN_ALL void g_strfreev(gchar **str_array)
GLIB_AVAILABLE_IN_2_40 gboolean g_str_is_ascii(const gchar *str)
GLIB_AVAILABLE_IN_ALL gint g_ascii_strcasecmp(const gchar *s1, const gchar *s2)
GLIB_AVAILABLE_IN_ALL gchar * g_strcompress(const gchar *source) G_GNUC_MALLOC
GLIB_AVAILABLE_IN_2_68 gpointer g_memdup2(gconstpointer mem, gsize byte_size) G_GNUC_ALLOC_SIZE(2)
GLIB_AVAILABLE_IN_ALL gchar * g_strconcat(const gchar *string1,...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED
static GLIB_AVAILABLE_STATIC_INLINE_IN_2_76 gboolean g_set_str(char **str_pointer, const char *new_str)
G_BEGIN_DECLS typedef char gchar
const void * gconstpointer
json_t format(printf, 1, 2)))
static void error(LoadState *S, const char *why)