1 /* GLIB - Library of useful routines for C programming
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GLib Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GLib Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GLib at ftp://ftp.gtk.org/pub/gtk/.
40 #include <ctype.h> /* For tolower() */
41 #if !defined (HAVE_STRSIGNAL) || !defined(NO_SYS_SIGLIST_DECL)
45 #include "gstrfuncs.h"
48 #include "gprintfint.h"
50 #include "gthreadprivate.h"
57 /* do not include <unistd.h> in this place since it
58 * interferes with g_strsignal() on some OSes
61 static const guint16 ascii_table_data[256] = {
62 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
63 0x004, 0x104, 0x104, 0x004, 0x104, 0x104, 0x004, 0x004,
64 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
65 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
66 0x140, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0,
67 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0,
68 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459,
69 0x459, 0x459, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0,
70 0x0d0, 0x653, 0x653, 0x653, 0x653, 0x653, 0x653, 0x253,
71 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253,
72 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253,
73 0x253, 0x253, 0x253, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0,
74 0x0d0, 0x473, 0x473, 0x473, 0x473, 0x473, 0x473, 0x073,
75 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073,
76 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073,
77 0x073, 0x073, 0x073, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x004
78 /* the upper 128 are all zeroes */
81 const guint16 * const g_ascii_table = ascii_table_data;
87 static gsize initialized = FALSE;
88 static locale_t C_locale = NULL;
90 g_thread_init_glib ();
92 if (g_once_init_enter (&initialized))
94 C_locale = newlocale (LC_ALL_MASK, "C", NULL);
95 g_once_init_leave (&initialized, TRUE);
104 * @str: the string to duplicate
106 * Duplicates a string. If @str is %NULL it returns %NULL.
107 * The returned string should be freed with g_free()
108 * when no longer needed.
110 * Returns: a newly-allocated copy of @str
113 g_strdup (const gchar *str)
120 length = strlen (str) + 1;
121 new_str = g_new (char, length);
122 memcpy (new_str, str, length);
132 * @mem: the memory to copy.
133 * @byte_size: the number of bytes to copy.
135 * Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
136 * from @mem. If @mem is %NULL it returns %NULL.
138 * Returns: a pointer to the newly-allocated copy of the memory, or %NULL if @mem
142 g_memdup (gconstpointer mem,
149 new_mem = g_malloc (byte_size);
150 memcpy (new_mem, mem, byte_size);
160 * @str: the string to duplicate
161 * @n: the maximum number of bytes to copy from @str
163 * Duplicates the first @n bytes of a string, returning a newly-allocated
164 * buffer @n + 1 bytes long which will always be nul-terminated.
165 * If @str is less than @n bytes long the buffer is padded with nuls.
166 * If @str is %NULL it returns %NULL.
167 * The returned value should be freed when no longer needed.
170 * To copy a number of characters from a UTF-8 encoded string, use
171 * g_utf8_strncpy() instead.
174 * Returns: a newly-allocated buffer containing the first @n bytes
175 * of @str, nul-terminated
178 g_strndup (const gchar *str,
185 new_str = g_new (gchar, n + 1);
186 strncpy (new_str, str, n);
197 * @length: the length of the new string
198 * @fill_char: the byte to fill the string with
200 * Creates a new string @length bytes long filled with @fill_char.
201 * The returned string should be freed when no longer needed.
203 * Returns: a newly-allocated string filled the @fill_char
206 g_strnfill (gsize length,
211 str = g_new (gchar, length + 1);
212 memset (str, (guchar)fill_char, length);
220 * @dest: destination buffer.
221 * @src: source string.
223 * Copies a nul-terminated string into the dest buffer, include the
224 * trailing nul, and return a pointer to the trailing nul byte.
225 * This is useful for concatenating multiple strings together
226 * without having to repeatedly scan for the end.
228 * Return value: a pointer to trailing nul byte.
231 g_stpcpy (gchar *dest,
235 g_return_val_if_fail (dest != NULL, NULL);
236 g_return_val_if_fail (src != NULL, NULL);
237 return stpcpy (dest, src);
239 register gchar *d = dest;
240 register const gchar *s = src;
242 g_return_val_if_fail (dest != NULL, NULL);
243 g_return_val_if_fail (src != NULL, NULL);
246 while (*s++ != '\0');
254 * @format: a standard printf() format string, but notice
255 * <link linkend="string-precision">string precision pitfalls</link>
256 * @args: the list of parameters to insert into the format string
258 * Similar to the standard C vsprintf() function but safer, since it
259 * calculates the maximum space required and allocates memory to hold
260 * the result. The returned string should be freed with g_free() when
263 * See also g_vasprintf(), which offers the same functionality, but
264 * additionally returns the length of the allocated string.
266 * Returns: a newly-allocated string holding the result
269 g_strdup_vprintf (const gchar *format,
272 gchar *string = NULL;
274 g_vasprintf (&string, format, args);
281 * @format: a standard printf() format string, but notice
282 * <link linkend="string-precision">string precision pitfalls</link>
283 * @...: the parameters to insert into the format string
285 * Similar to the standard C sprintf() function but safer, since it
286 * calculates the maximum space required and allocates memory to hold
287 * the result. The returned string should be freed with g_free() when no
290 * Returns: a newly-allocated string holding the result
293 g_strdup_printf (const gchar *format,
299 va_start (args, format);
300 buffer = g_strdup_vprintf (format, args);
308 * @string1: the first string to add, which must not be %NULL
309 * @...: a %NULL-terminated list of strings to append to the string
311 * Concatenates all of the given strings into one long string.
312 * The returned string should be freed with g_free() when no longer needed.
314 * Note that this function is usually not the right function to use to
315 * assemble a translated message from pieces, since proper translation
316 * often requires the pieces to be reordered.
318 * <warning><para>The variable argument list <emphasis>must</emphasis> end
319 * with %NULL. If you forget the %NULL, g_strconcat() will start appending
320 * random memory junk to your string.</para></warning>
322 * Returns: a newly-allocated string containing all the string arguments
325 g_strconcat (const gchar *string1, ...)
336 l = 1 + strlen (string1);
337 va_start (args, string1);
338 s = va_arg (args, gchar*);
342 s = va_arg (args, gchar*);
346 concat = g_new (gchar, l);
349 ptr = g_stpcpy (ptr, string1);
350 va_start (args, string1);
351 s = va_arg (args, gchar*);
354 ptr = g_stpcpy (ptr, s);
355 s = va_arg (args, gchar*);
364 * @nptr: the string to convert to a numeric value.
365 * @endptr: if non-%NULL, it returns the character after
366 * the last character used in the conversion.
368 * Converts a string to a #gdouble value.
369 * It calls the standard strtod() function to handle the conversion, but
370 * if the string is not completely converted it attempts the conversion
371 * again with g_ascii_strtod(), and returns the best match.
373 * This function should seldom be used. The normal situation when reading
374 * numbers not for human consumption is to use g_ascii_strtod(). Only when
375 * you know that you must expect both locale formatted and C formatted numbers
376 * should you use this. Make sure that you don't pass strings such as comma
377 * separated lists of values, since the commas may be interpreted as a decimal
378 * point in some locales, causing unexpected results.
380 * Return value: the #gdouble value.
383 g_strtod (const gchar *nptr,
391 g_return_val_if_fail (nptr != NULL, 0);
396 val_1 = strtod (nptr, &fail_pos_1);
398 if (fail_pos_1 && fail_pos_1[0] != 0)
399 val_2 = g_ascii_strtod (nptr, &fail_pos_2);
401 if (!fail_pos_1 || fail_pos_1[0] == 0 || fail_pos_1 >= fail_pos_2)
404 *endptr = fail_pos_1;
410 *endptr = fail_pos_2;
417 * @nptr: the string to convert to a numeric value.
418 * @endptr: if non-%NULL, it returns the character after
419 * the last character used in the conversion.
421 * Converts a string to a #gdouble value.
423 * This function behaves like the standard strtod() function
424 * does in the C locale. It does this without actually changing
425 * the current locale, since that would not be thread-safe.
426 * A limitation of the implementation is that this function
427 * will still accept localized versions of infinities and NANs.
429 * This function is typically used when reading configuration
430 * files or other non-user input that should be locale independent.
431 * To handle input from the user you should normally use the
432 * locale-sensitive system strtod() function.
434 * To convert from a #gdouble to a string in a locale-insensitive
435 * way, use g_ascii_dtostr().
437 * If the correct value would cause overflow, plus or minus %HUGE_VAL
438 * is returned (according to the sign of the value), and %ERANGE is
439 * stored in %errno. If the correct value would cause underflow,
440 * zero is returned and %ERANGE is stored in %errno.
442 * This function resets %errno before calling strtod() so that
443 * you can reliably detect overflow and underflow.
445 * Return value: the #gdouble value.
448 g_ascii_strtod (const gchar *nptr,
452 return strtod_l (nptr, endptr, get_C_locale ());
456 struct lconv *locale_data;
457 const char *decimal_point;
458 int decimal_point_len;
459 const char *p, *decimal_point_pos;
460 const char *end = NULL; /* Silence gcc */
463 g_return_val_if_fail (nptr != NULL, 0);
467 locale_data = localeconv ();
468 decimal_point = locale_data->decimal_point;
469 decimal_point_len = strlen (decimal_point);
471 g_assert (decimal_point_len != 0);
473 decimal_point_pos = NULL;
476 if (decimal_point[0] != '.' ||
477 decimal_point[1] != 0)
480 /* Skip leading space */
481 while (g_ascii_isspace (*p))
484 /* Skip leading optional sign */
485 if (*p == '+' || *p == '-')
489 (p[1] == 'x' || p[1] == 'X'))
492 /* HEX - find the (optional) decimal point */
494 while (g_ascii_isxdigit (*p))
498 decimal_point_pos = p++;
500 while (g_ascii_isxdigit (*p))
503 if (*p == 'p' || *p == 'P')
505 if (*p == '+' || *p == '-')
507 while (g_ascii_isdigit (*p))
512 else if (g_ascii_isdigit (*p) || *p == '.')
514 while (g_ascii_isdigit (*p))
518 decimal_point_pos = p++;
520 while (g_ascii_isdigit (*p))
523 if (*p == 'e' || *p == 'E')
525 if (*p == '+' || *p == '-')
527 while (g_ascii_isdigit (*p))
532 /* For the other cases, we need not convert the decimal point */
535 if (decimal_point_pos)
539 /* We need to convert the '.' to the locale specific decimal point */
540 copy = g_malloc (end - nptr + 1 + decimal_point_len);
543 memcpy (c, nptr, decimal_point_pos - nptr);
544 c += decimal_point_pos - nptr;
545 memcpy (c, decimal_point, decimal_point_len);
546 c += decimal_point_len;
547 memcpy (c, decimal_point_pos + 1, end - (decimal_point_pos + 1));
548 c += end - (decimal_point_pos + 1);
552 val = strtod (copy, &fail_pos);
553 strtod_errno = errno;
557 if (fail_pos - copy > decimal_point_pos - nptr)
558 fail_pos = (char *)nptr + (fail_pos - copy) - (decimal_point_len - 1);
560 fail_pos = (char *)nptr + (fail_pos - copy);
570 copy = g_malloc (end - (char *)nptr + 1);
571 memcpy (copy, nptr, end - nptr);
572 *(copy + (end - (char *)nptr)) = 0;
575 val = strtod (copy, &fail_pos);
576 strtod_errno = errno;
580 fail_pos = (char *)nptr + (fail_pos - copy);
588 val = strtod (nptr, &fail_pos);
589 strtod_errno = errno;
595 errno = strtod_errno;
604 * @buffer: A buffer to place the resulting string in
605 * @buf_len: The length of the buffer.
606 * @d: The #gdouble to convert
608 * Converts a #gdouble to a string, using the '.' as
611 * This functions generates enough precision that converting
612 * the string back using g_ascii_strtod() gives the same machine-number
613 * (on machines with IEEE compatible 64bit doubles). It is
614 * guaranteed that the size of the resulting string will never
615 * be larger than @G_ASCII_DTOSTR_BUF_SIZE bytes.
617 * Return value: The pointer to the buffer with the converted string.
620 g_ascii_dtostr (gchar *buffer,
624 return g_ascii_formatd (buffer, buf_len, "%.17g", d);
629 * @buffer: A buffer to place the resulting string in
630 * @buf_len: The length of the buffer.
631 * @format: The printf()-style format to use for the
632 * code to use for converting.
633 * @d: The #gdouble to convert
635 * Converts a #gdouble to a string, using the '.' as
636 * decimal point. To format the number you pass in
637 * a printf()-style format string. Allowed conversion
638 * specifiers are 'e', 'E', 'f', 'F', 'g' and 'G'.
640 * If you just want to want to serialize the value into a
641 * string, use g_ascii_dtostr().
643 * Return value: The pointer to the buffer with the converted string.
646 g_ascii_formatd (gchar *buffer,
651 #ifdef HAVE_USELOCALE
654 old_locale = uselocale (get_C_locale ());
655 _g_snprintf (buffer, buf_len, format, d);
656 uselocale (old_locale);
660 struct lconv *locale_data;
661 const char *decimal_point;
662 int decimal_point_len;
667 g_return_val_if_fail (buffer != NULL, NULL);
668 g_return_val_if_fail (format[0] == '%', NULL);
669 g_return_val_if_fail (strpbrk (format + 1, "'l%") == NULL, NULL);
671 format_char = format[strlen (format) - 1];
673 g_return_val_if_fail (format_char == 'e' || format_char == 'E' ||
674 format_char == 'f' || format_char == 'F' ||
675 format_char == 'g' || format_char == 'G',
678 if (format[0] != '%')
681 if (strpbrk (format + 1, "'l%"))
684 if (!(format_char == 'e' || format_char == 'E' ||
685 format_char == 'f' || format_char == 'F' ||
686 format_char == 'g' || format_char == 'G'))
689 _g_snprintf (buffer, buf_len, format, d);
691 locale_data = localeconv ();
692 decimal_point = locale_data->decimal_point;
693 decimal_point_len = strlen (decimal_point);
695 g_assert (decimal_point_len != 0);
697 if (decimal_point[0] != '.' ||
698 decimal_point[1] != 0)
702 while (g_ascii_isspace (*p))
705 if (*p == '+' || *p == '-')
708 while (isdigit ((guchar)*p))
711 if (strncmp (p, decimal_point, decimal_point_len) == 0)
715 if (decimal_point_len > 1)
717 rest_len = strlen (p + (decimal_point_len-1));
718 memmove (p, p + (decimal_point_len-1), rest_len);
728 #define ISSPACE(c) ((c) == ' ' || (c) == '\f' || (c) == '\n' || \
729 (c) == '\r' || (c) == '\t' || (c) == '\v')
730 #define ISUPPER(c) ((c) >= 'A' && (c) <= 'Z')
731 #define ISLOWER(c) ((c) >= 'a' && (c) <= 'z')
732 #define ISALPHA(c) (ISUPPER (c) || ISLOWER (c))
733 #define TOUPPER(c) (ISLOWER (c) ? (c) - 'a' + 'A' : (c))
734 #define TOLOWER(c) (ISUPPER (c) ? (c) - 'A' + 'a' : (c))
736 #if !defined(HAVE_STRTOLL_L) || !defined(HAVE_STRTOULL_L)
739 g_parse_long_long (const gchar *nptr,
740 const gchar **endptr,
744 /* this code is based on on the strtol(3) code from GNU libc released under
745 * the GNU Lesser General Public License.
747 * Copyright (C) 1991,92,94,95,96,97,98,99,2000,01,02
748 * Free Software Foundation, Inc.
754 const gchar *s, *save;
757 g_return_val_if_fail (nptr != NULL, 0);
760 if (base == 1 || base > 36)
770 /* Skip white space. */
774 if (G_UNLIKELY (!*s))
777 /* Check for a sign. */
786 /* Recognize number prefix and if BASE is zero, figure it out ourselves. */
789 if ((base == 0 || base == 16) && TOUPPER (s[1]) == 'X')
800 /* Save the pointer so we can check later if anything happened. */
802 cutoff = G_MAXUINT64 / base;
803 cutlim = G_MAXUINT64 % base;
810 if (c >= '0' && c <= '9')
812 else if (ISALPHA (c))
813 c = TOUPPER (c) - 'A' + 10;
818 /* Check for overflow. */
819 if (ui64 > cutoff || (ui64 == cutoff && c > cutlim))
828 /* Check if anything actually happened. */
832 /* Store in ENDPTR the address of one character
833 past the last character we converted. */
837 if (G_UNLIKELY (overflow))
846 /* We must handle a special case here: the base is 0 or 16 and the
847 first two characters are '0' and 'x', but the rest are no
848 hexadecimal digits. This is no error case. We return 0 and
849 ENDPTR points to the `x`. */
852 if (save - nptr >= 2 && TOUPPER (save[-1]) == 'X'
856 /* There was no number to convert. */
865 * @nptr: the string to convert to a numeric value.
866 * @endptr: if non-%NULL, it returns the character after
867 * the last character used in the conversion.
868 * @base: to be used for the conversion, 2..36 or 0
870 * Converts a string to a #guint64 value.
871 * This function behaves like the standard strtoull() function
872 * does in the C locale. It does this without actually
873 * changing the current locale, since that would not be
876 * This function is typically used when reading configuration
877 * files or other non-user input that should be locale independent.
878 * To handle input from the user you should normally use the
879 * locale-sensitive system strtoull() function.
881 * If the correct value would cause overflow, %G_MAXUINT64
882 * is returned, and %ERANGE is stored in %errno. If the base is
883 * outside the valid range, zero is returned, and %EINVAL is stored
884 * in %errno. If the string conversion fails, zero is returned, and
885 * @endptr returns @nptr (if @endptr is non-%NULL).
887 * Return value: the #guint64 value or zero on error.
892 g_ascii_strtoull (const gchar *nptr,
896 #ifdef HAVE_STRTOULL_L
897 return strtoull_l (nptr, endptr, base, get_C_locale ());
902 result = g_parse_long_long (nptr, (const gchar **) endptr, base, &negative);
904 /* Return the result of the appropriate sign. */
905 return negative ? -result : result;
911 * @nptr: the string to convert to a numeric value.
912 * @endptr: if non-%NULL, it returns the character after
913 * the last character used in the conversion.
914 * @base: to be used for the conversion, 2..36 or 0
916 * Converts a string to a #gint64 value.
917 * This function behaves like the standard strtoll() function
918 * does in the C locale. It does this without actually
919 * changing the current locale, since that would not be
922 * This function is typically used when reading configuration
923 * files or other non-user input that should be locale independent.
924 * To handle input from the user you should normally use the
925 * locale-sensitive system strtoll() function.
927 * If the correct value would cause overflow, %G_MAXINT64 or %G_MININT64
928 * is returned, and %ERANGE is stored in %errno. If the base is
929 * outside the valid range, zero is returned, and %EINVAL is stored
930 * in %errno. If the string conversion fails, zero is returned, and
931 * @endptr returns @nptr (if @endptr is non-%NULL).
933 * Return value: the #gint64 value or zero on error.
938 g_ascii_strtoll (const gchar *nptr,
942 #ifdef HAVE_STRTOLL_L
943 return strtoll_l (nptr, endptr, base, get_C_locale ());
948 result = g_parse_long_long (nptr, (const gchar **) endptr, base, &negative);
950 if (negative && result > (guint64) G_MININT64)
955 else if (!negative && result > (guint64) G_MAXINT64)
961 return - (gint64) result;
963 return (gint64) result;
969 * @errnum: the system error number. See the standard C %errno
972 * Returns a string corresponding to the given error code, e.g.
973 * "no such process". You should use this function in preference to
974 * strerror(), because it returns a string in UTF-8 encoding, and since
975 * not all platforms support the strerror() function.
977 * Returns: a UTF-8 string describing the error code. If the error code
978 * is unknown, it returns "unknown error (<code>)". The string
979 * can only be used until the next call to g_strerror()
982 g_strerror (gint errnum)
984 static GStaticPrivate msg_private = G_STATIC_PRIVATE_INIT;
986 int saved_errno = errno;
989 const char *msg_locale;
991 msg_locale = strerror (errnum);
992 if (g_get_charset (NULL))
999 gchar *msg_utf8 = g_locale_to_utf8 (msg_locale, -1, NULL, NULL, NULL);
1002 /* Stick in the quark table so that we can return a static result
1004 GQuark msg_quark = g_quark_from_string (msg_utf8);
1007 msg_utf8 = (gchar *) g_quark_to_string (msg_quark);
1008 errno = saved_errno;
1012 #elif NO_SYS_ERRLIST
1016 case E2BIG: return "argument list too long";
1019 case EACCES: return "permission denied";
1022 case EADDRINUSE: return "address already in use";
1024 #ifdef EADDRNOTAVAIL
1025 case EADDRNOTAVAIL: return "can't assign requested address";
1028 case EADV: return "advertise error";
1031 case EAFNOSUPPORT: return "address family not supported by protocol family";
1034 case EAGAIN: return "try again";
1037 case EALIGN: return "EALIGN";
1040 case EALREADY: return "operation already in progress";
1043 case EBADE: return "bad exchange descriptor";
1046 case EBADF: return "bad file number";
1049 case EBADFD: return "file descriptor in bad state";
1052 case EBADMSG: return "not a data message";
1055 case EBADR: return "bad request descriptor";
1058 case EBADRPC: return "RPC structure is bad";
1061 case EBADRQC: return "bad request code";
1064 case EBADSLT: return "invalid slot";
1067 case EBFONT: return "bad font file format";
1070 case EBUSY: return "mount device busy";
1073 case ECHILD: return "no children";
1076 case ECHRNG: return "channel number out of range";
1079 case ECOMM: return "communication error on send";
1082 case ECONNABORTED: return "software caused connection abort";
1085 case ECONNREFUSED: return "connection refused";
1088 case ECONNRESET: return "connection reset by peer";
1090 #if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
1091 case EDEADLK: return "resource deadlock avoided";
1093 #if defined(EDEADLOCK) && (!defined(EDEADLK) || (EDEADLOCK != EDEADLK))
1094 case EDEADLOCK: return "resource deadlock avoided";
1097 case EDESTADDRREQ: return "destination address required";
1100 case EDIRTY: return "mounting a dirty fs w/o force";
1103 case EDOM: return "math argument out of range";
1106 case EDOTDOT: return "cross mount point";
1109 case EDQUOT: return "disk quota exceeded";
1112 case EDUPPKG: return "duplicate package name";
1115 case EEXIST: return "file already exists";
1118 case EFAULT: return "bad address in system call argument";
1121 case EFBIG: return "file too large";
1124 case EHOSTDOWN: return "host is down";
1127 case EHOSTUNREACH: return "host is unreachable";
1130 case EIDRM: return "identifier removed";
1133 case EINIT: return "initialization error";
1136 case EINPROGRESS: return "operation now in progress";
1139 case EINTR: return "interrupted system call";
1142 case EINVAL: return "invalid argument";
1145 case EIO: return "I/O error";
1148 case EISCONN: return "socket is already connected";
1151 case EISDIR: return "is a directory";
1154 case EISNAM: return "is a name file";
1157 case ELBIN: return "ELBIN";
1160 case EL2HLT: return "level 2 halted";
1163 case EL2NSYNC: return "level 2 not synchronized";
1166 case EL3HLT: return "level 3 halted";
1169 case EL3RST: return "level 3 reset";
1172 case ELIBACC: return "can not access a needed shared library";
1175 case ELIBBAD: return "accessing a corrupted shared library";
1178 case ELIBEXEC: return "can not exec a shared library directly";
1181 case ELIBMAX: return "attempting to link in more shared libraries than system limit";
1184 case ELIBSCN: return ".lib section in a.out corrupted";
1187 case ELNRNG: return "link number out of range";
1190 case ELOOP: return "too many levels of symbolic links";
1193 case EMFILE: return "too many open files";
1196 case EMLINK: return "too many links";
1199 case EMSGSIZE: return "message too long";
1202 case EMULTIHOP: return "multihop attempted";
1205 case ENAMETOOLONG: return "file name too long";
1208 case ENAVAIL: return "not available";
1211 case ENET: return "ENET";
1214 case ENETDOWN: return "network is down";
1217 case ENETRESET: return "network dropped connection on reset";
1220 case ENETUNREACH: return "network is unreachable";
1223 case ENFILE: return "file table overflow";
1226 case ENOANO: return "anode table overflow";
1228 #if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
1229 case ENOBUFS: return "no buffer space available";
1232 case ENOCSI: return "no CSI structure available";
1235 case ENODATA: return "no data available";
1238 case ENODEV: return "no such device";
1241 case ENOENT: return "no such file or directory";
1244 case ENOEXEC: return "exec format error";
1247 case ENOLCK: return "no locks available";
1250 case ENOLINK: return "link has be severed";
1253 case ENOMEM: return "not enough memory";
1256 case ENOMSG: return "no message of desired type";
1259 case ENONET: return "machine is not on the network";
1262 case ENOPKG: return "package not installed";
1265 case ENOPROTOOPT: return "bad proocol option";
1268 case ENOSPC: return "no space left on device";
1271 case ENOSR: return "out of stream resources";
1274 case ENOSTR: return "not a stream device";
1277 case ENOSYM: return "unresolved symbol name";
1280 case ENOSYS: return "function not implemented";
1283 case ENOTBLK: return "block device required";
1286 case ENOTCONN: return "socket is not connected";
1289 case ENOTDIR: return "not a directory";
1292 case ENOTEMPTY: return "directory not empty";
1295 case ENOTNAM: return "not a name file";
1298 case ENOTSOCK: return "socket operation on non-socket";
1301 case ENOTTY: return "inappropriate device for ioctl";
1304 case ENOTUNIQ: return "name not unique on network";
1307 case ENXIO: return "no such device or address";
1310 case EOPNOTSUPP: return "operation not supported on socket";
1313 case EPERM: return "not owner";
1316 case EPFNOSUPPORT: return "protocol family not supported";
1319 case EPIPE: return "broken pipe";
1322 case EPROCLIM: return "too many processes";
1325 case EPROCUNAVAIL: return "bad procedure for program";
1327 #ifdef EPROGMISMATCH
1328 case EPROGMISMATCH: return "program version wrong";
1331 case EPROGUNAVAIL: return "RPC program not available";
1334 case EPROTO: return "protocol error";
1336 #ifdef EPROTONOSUPPORT
1337 case EPROTONOSUPPORT: return "protocol not suppored";
1340 case EPROTOTYPE: return "protocol wrong type for socket";
1343 case ERANGE: return "math result unrepresentable";
1345 #if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
1346 case EREFUSED: return "EREFUSED";
1349 case EREMCHG: return "remote address changed";
1352 case EREMDEV: return "remote device";
1355 case EREMOTE: return "pathname hit remote file system";
1358 case EREMOTEIO: return "remote i/o error";
1360 #ifdef EREMOTERELEASE
1361 case EREMOTERELEASE: return "EREMOTERELEASE";
1364 case EROFS: return "read-only file system";
1367 case ERPCMISMATCH: return "RPC version is wrong";
1370 case ERREMOTE: return "object is remote";
1373 case ESHUTDOWN: return "can't send afer socket shutdown";
1375 #ifdef ESOCKTNOSUPPORT
1376 case ESOCKTNOSUPPORT: return "socket type not supported";
1379 case ESPIPE: return "invalid seek";
1382 case ESRCH: return "no such process";
1385 case ESRMNT: return "srmount error";
1388 case ESTALE: return "stale remote file handle";
1391 case ESUCCESS: return "Error 0";
1394 case ETIME: return "timer expired";
1397 case ETIMEDOUT: return "connection timed out";
1400 case ETOOMANYREFS: return "too many references: can't splice";
1403 case ETXTBSY: return "text file or pseudo-device busy";
1406 case EUCLEAN: return "structure needs cleaning";
1409 case EUNATCH: return "protocol driver not attached";
1412 case EUSERS: return "too many users";
1415 case EVERSION: return "version mismatch";
1417 #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
1418 case EWOULDBLOCK: return "operation would block";
1421 case EXDEV: return "cross-domain link";
1424 case EXFULL: return "message tables full";
1427 #else /* NO_SYS_ERRLIST */
1428 extern int sys_nerr;
1429 extern char *sys_errlist[];
1431 if ((errnum > 0) && (errnum <= sys_nerr))
1432 return sys_errlist [errnum];
1433 #endif /* NO_SYS_ERRLIST */
1435 msg = g_static_private_get (&msg_private);
1438 msg = g_new (gchar, 64);
1439 g_static_private_set (&msg_private, msg, g_free);
1442 _g_sprintf (msg, "unknown error (%d)", errnum);
1444 errno = saved_errno;
1450 * @signum: the signal number. See the <literal>signal</literal>
1453 * Returns a string describing the given signal, e.g. "Segmentation fault".
1454 * You should use this function in preference to strsignal(), because it
1455 * returns a string in UTF-8 encoding, and since not all platforms support
1456 * the strsignal() function.
1458 * Returns: a UTF-8 string describing the signal. If the signal is unknown,
1459 * it returns "unknown signal (<signum>)". The string can only be
1460 * used until the next call to g_strsignal()
1463 g_strsignal (gint signum)
1465 static GStaticPrivate msg_private = G_STATIC_PRIVATE_INIT;
1468 #ifdef HAVE_STRSIGNAL
1469 const char *msg_locale;
1471 #if defined(G_OS_BEOS) || defined(G_WITH_CYGWIN)
1472 extern const char *strsignal(int);
1474 /* this is declared differently (const) in string.h on BeOS */
1475 extern char *strsignal (int sig);
1476 #endif /* !G_OS_BEOS && !G_WITH_CYGWIN */
1477 msg_locale = strsignal (signum);
1478 if (g_get_charset (NULL))
1482 gchar *msg_utf8 = g_locale_to_utf8 (msg_locale, -1, NULL, NULL, NULL);
1485 /* Stick in the quark table so that we can return a static result
1487 GQuark msg_quark = g_quark_from_string (msg_utf8);
1490 return g_quark_to_string (msg_quark);
1493 #elif NO_SYS_SIGLIST
1497 case SIGHUP: return "Hangup";
1500 case SIGINT: return "Interrupt";
1503 case SIGQUIT: return "Quit";
1506 case SIGILL: return "Illegal instruction";
1509 case SIGTRAP: return "Trace/breakpoint trap";
1512 case SIGABRT: return "IOT trap/Abort";
1515 case SIGBUS: return "Bus error";
1518 case SIGFPE: return "Floating point exception";
1521 case SIGKILL: return "Killed";
1524 case SIGUSR1: return "User defined signal 1";
1527 case SIGSEGV: return "Segmentation fault";
1530 case SIGUSR2: return "User defined signal 2";
1533 case SIGPIPE: return "Broken pipe";
1536 case SIGALRM: return "Alarm clock";
1539 case SIGTERM: return "Terminated";
1542 case SIGSTKFLT: return "Stack fault";
1545 case SIGCHLD: return "Child exited";
1548 case SIGCONT: return "Continued";
1551 case SIGSTOP: return "Stopped (signal)";
1554 case SIGTSTP: return "Stopped";
1557 case SIGTTIN: return "Stopped (tty input)";
1560 case SIGTTOU: return "Stopped (tty output)";
1563 case SIGURG: return "Urgent condition";
1566 case SIGXCPU: return "CPU time limit exceeded";
1569 case SIGXFSZ: return "File size limit exceeded";
1572 case SIGVTALRM: return "Virtual time alarm";
1575 case SIGPROF: return "Profile signal";
1578 case SIGWINCH: return "Window size changed";
1581 case SIGIO: return "Possible I/O";
1584 case SIGPWR: return "Power failure";
1587 case SIGUNUSED: return "Unused signal";
1590 #else /* NO_SYS_SIGLIST */
1592 #ifdef NO_SYS_SIGLIST_DECL
1593 extern char *sys_siglist[]; /*(see Tue Jan 19 00:44:24 1999 in changelog)*/
1596 return (char*) /* this function should return const --josh */ sys_siglist [signum];
1597 #endif /* NO_SYS_SIGLIST */
1599 msg = g_static_private_get (&msg_private);
1602 msg = g_new (gchar, 64);
1603 g_static_private_set (&msg_private, msg, g_free);
1606 _g_sprintf (msg, "unknown signal (%d)", signum);
1611 /* Functions g_strlcpy and g_strlcat were originally developed by
1612 * Todd C. Miller <Todd.Miller@courtesan.com> to simplify writing secure code.
1613 * See ftp://ftp.openbsd.org/pub/OpenBSD/src/lib/libc/string/strlcpy.3
1614 * for more information.
1618 /* Use the native ones, if available; they might be implemented in assembly */
1620 g_strlcpy (gchar *dest,
1624 g_return_val_if_fail (dest != NULL, 0);
1625 g_return_val_if_fail (src != NULL, 0);
1627 return strlcpy (dest, src, dest_size);
1631 g_strlcat (gchar *dest,
1635 g_return_val_if_fail (dest != NULL, 0);
1636 g_return_val_if_fail (src != NULL, 0);
1638 return strlcat (dest, src, dest_size);
1641 #else /* ! HAVE_STRLCPY */
1644 * @dest: destination buffer
1645 * @src: source buffer
1646 * @dest_size: length of @dest in bytes
1648 * Portability wrapper that calls strlcpy() on systems which have it,
1649 * and emulates strlcpy() otherwise. Copies @src to @dest; @dest is
1650 * guaranteed to be nul-terminated; @src must be nul-terminated;
1651 * @dest_size is the buffer size, not the number of chars to copy.
1653 * At most dest_size - 1 characters will be copied. Always nul-terminates
1654 * (unless dest_size == 0). This function does <emphasis>not</emphasis>
1655 * allocate memory. Unlike strncpy(), this function doesn't pad dest (so
1656 * it's often faster). It returns the size of the attempted result,
1657 * strlen (src), so if @retval >= @dest_size, truncation occurred.
1659 * <note><para>Caveat: strlcpy() is supposedly more secure than
1660 * strcpy() or strncpy(), but if you really want to avoid screwups,
1661 * g_strdup() is an even better idea.</para></note>
1663 * Returns: length of @src
1666 g_strlcpy (gchar *dest,
1670 register gchar *d = dest;
1671 register const gchar *s = src;
1672 register gsize n = dest_size;
1674 g_return_val_if_fail (dest != NULL, 0);
1675 g_return_val_if_fail (src != NULL, 0);
1677 /* Copy as many bytes as will fit */
1678 if (n != 0 && --n != 0)
1681 register gchar c = *s++;
1689 /* If not enough room in dest, add NUL and traverse rest of src */
1698 return s - src - 1; /* count does not include NUL */
1703 * @dest: destination buffer, already containing one nul-terminated string
1704 * @src: source buffer
1705 * @dest_size: length of @dest buffer in bytes (not length of existing string
1708 * Portability wrapper that calls strlcat() on systems which have it,
1709 * and emulates it otherwise. Appends nul-terminated @src string to @dest,
1710 * guaranteeing nul-termination for @dest. The total size of @dest won't
1711 * exceed @dest_size.
1713 * At most dest_size - 1 characters will be copied.
1714 * Unlike strncat, dest_size is the full size of dest, not the space left over.
1715 * This function does NOT allocate memory.
1716 * This always NUL terminates (unless siz == 0 or there were no NUL characters
1717 * in the dest_size characters of dest to start with).
1719 * <note><para>Caveat: this is supposedly a more secure alternative to
1720 * strcat() or strncat(), but for real security g_strconcat() is harder
1721 * to mess up.</para></note>
1723 * Returns: size of attempted result, which is MIN (dest_size, strlen
1724 * (original dest)) + strlen (src), so if retval >= dest_size,
1725 * truncation occurred.
1728 g_strlcat (gchar *dest,
1732 register gchar *d = dest;
1733 register const gchar *s = src;
1734 register gsize bytes_left = dest_size;
1735 gsize dlength; /* Logically, MIN (strlen (d), dest_size) */
1737 g_return_val_if_fail (dest != NULL, 0);
1738 g_return_val_if_fail (src != NULL, 0);
1740 /* Find the end of dst and adjust bytes left but don't go past end */
1741 while (*d != 0 && bytes_left-- != 0)
1744 bytes_left = dest_size - dlength;
1746 if (bytes_left == 0)
1747 return dlength + strlen (s);
1751 if (bytes_left != 1)
1760 return dlength + (s - src); /* count does not include NUL */
1762 #endif /* ! HAVE_STRLCPY */
1767 * @len: length of @str in bytes, or -1 if @str is nul-terminated.
1769 * Converts all upper case ASCII letters to lower case ASCII letters.
1771 * Return value: a newly-allocated string, with all the upper case
1772 * characters in @str converted to lower case, with
1773 * semantics that exactly match g_ascii_tolower(). (Note
1774 * that this is unlike the old g_strdown(), which modified
1775 * the string in place.)
1778 g_ascii_strdown (const gchar *str,
1783 g_return_val_if_fail (str != NULL, NULL);
1788 result = g_strndup (str, len);
1789 for (s = result; *s; s++)
1790 *s = g_ascii_tolower (*s);
1798 * @len: length of @str in bytes, or -1 if @str is nul-terminated.
1800 * Converts all lower case ASCII letters to upper case ASCII letters.
1802 * Return value: a newly allocated string, with all the lower case
1803 * characters in @str converted to upper case, with
1804 * semantics that exactly match g_ascii_toupper(). (Note
1805 * that this is unlike the old g_strup(), which modified
1806 * the string in place.)
1809 g_ascii_strup (const gchar *str,
1814 g_return_val_if_fail (str != NULL, NULL);
1819 result = g_strndup (str, len);
1820 for (s = result; *s; s++)
1821 *s = g_ascii_toupper (*s);
1828 * @string: the string to convert.
1830 * Converts a string to lower case.
1832 * Return value: the string
1834 * Deprecated:2.2: This function is totally broken for the reasons discussed
1835 * in the g_strncasecmp() docs - use g_ascii_strdown() or g_utf8_strdown()
1839 g_strdown (gchar *string)
1843 g_return_val_if_fail (string != NULL, NULL);
1845 s = (guchar *) string;
1854 return (gchar *) string;
1859 * @string: the string to convert.
1861 * Converts a string to upper case.
1863 * Return value: the string
1865 * Deprecated:2.2: This function is totally broken for the reasons discussed
1866 * in the g_strncasecmp() docs - use g_ascii_strup() or g_utf8_strup() instead.
1869 g_strup (gchar *string)
1873 g_return_val_if_fail (string != NULL, NULL);
1875 s = (guchar *) string;
1884 return (gchar *) string;
1889 * @string: the string to reverse
1891 * Reverses all of the bytes in a string. For example,
1892 * <literal>g_strreverse ("abcdef")</literal> will result
1895 * Note that g_strreverse() doesn't work on UTF-8 strings
1896 * containing multibyte characters. For that purpose, use
1897 * g_utf8_strreverse().
1899 * Returns: the same pointer passed in as @string
1902 g_strreverse (gchar *string)
1904 g_return_val_if_fail (string != NULL, NULL);
1908 register gchar *h, *t;
1911 t = string + strlen (string) - 1;
1930 * @c: any character.
1932 * Convert a character to ASCII lower case.
1934 * Unlike the standard C library tolower() function, this only
1935 * recognizes standard ASCII letters and ignores the locale, returning
1936 * all non-ASCII characters unchanged, even if they are lower case
1937 * letters in a particular character set. Also unlike the standard
1938 * library function, this takes and returns a char, not an int, so
1939 * don't call it on %EOF but no need to worry about casting to #guchar
1940 * before passing a possibly non-ASCII character in.
1942 * Return value: the result of converting @c to lower case.
1943 * If @c is not an ASCII upper case letter,
1944 * @c is returned unchanged.
1947 g_ascii_tolower (gchar c)
1949 return g_ascii_isupper (c) ? c - 'A' + 'a' : c;
1954 * @c: any character.
1956 * Convert a character to ASCII upper case.
1958 * Unlike the standard C library toupper() function, this only
1959 * recognizes standard ASCII letters and ignores the locale, returning
1960 * all non-ASCII characters unchanged, even if they are upper case
1961 * letters in a particular character set. Also unlike the standard
1962 * library function, this takes and returns a char, not an int, so
1963 * don't call it on %EOF but no need to worry about casting to #guchar
1964 * before passing a possibly non-ASCII character in.
1966 * Return value: the result of converting @c to upper case.
1967 * If @c is not an ASCII lower case letter,
1968 * @c is returned unchanged.
1971 g_ascii_toupper (gchar c)
1973 return g_ascii_islower (c) ? c - 'a' + 'A' : c;
1977 * g_ascii_digit_value:
1978 * @c: an ASCII character.
1980 * Determines the numeric value of a character as a decimal
1981 * digit. Differs from g_unichar_digit_value() because it takes
1982 * a char, so there's no worry about sign extension if characters
1985 * Return value: If @c is a decimal digit (according to
1986 * g_ascii_isdigit()), its numeric value. Otherwise, -1.
1989 g_ascii_digit_value (gchar c)
1991 if (g_ascii_isdigit (c))
1997 * g_ascii_xdigit_value:
1998 * @c: an ASCII character.
2000 * Determines the numeric value of a character as a hexidecimal
2001 * digit. Differs from g_unichar_xdigit_value() because it takes
2002 * a char, so there's no worry about sign extension if characters
2005 * Return value: If @c is a hex digit (according to
2006 * g_ascii_isxdigit()), its numeric value. Otherwise, -1.
2009 g_ascii_xdigit_value (gchar c)
2011 if (c >= 'A' && c <= 'F')
2012 return c - 'A' + 10;
2013 if (c >= 'a' && c <= 'f')
2014 return c - 'a' + 10;
2015 return g_ascii_digit_value (c);
2019 * g_ascii_strcasecmp:
2020 * @s1: string to compare with @s2.
2021 * @s2: string to compare with @s1.
2023 * Compare two strings, ignoring the case of ASCII characters.
2025 * Unlike the BSD strcasecmp() function, this only recognizes standard
2026 * ASCII letters and ignores the locale, treating all non-ASCII
2027 * bytes as if they are not letters.
2029 * This function should be used only on strings that are known to be
2030 * in encodings where the bytes corresponding to ASCII letters always
2031 * represent themselves. This includes UTF-8 and the ISO-8859-*
2032 * charsets, but not for instance double-byte encodings like the
2033 * Windows Codepage 932, where the trailing bytes of double-byte
2034 * characters include all ASCII letters. If you compare two CP932
2035 * strings using this function, you will get false matches.
2037 * Return value: 0 if the strings match, a negative value if @s1 < @s2,
2038 * or a positive value if @s1 > @s2.
2041 g_ascii_strcasecmp (const gchar *s1,
2046 g_return_val_if_fail (s1 != NULL, 0);
2047 g_return_val_if_fail (s2 != NULL, 0);
2051 c1 = (gint)(guchar) TOLOWER (*s1);
2052 c2 = (gint)(guchar) TOLOWER (*s2);
2058 return (((gint)(guchar) *s1) - ((gint)(guchar) *s2));
2062 * g_ascii_strncasecmp:
2063 * @s1: string to compare with @s2.
2064 * @s2: string to compare with @s1.
2065 * @n: number of characters to compare.
2067 * Compare @s1 and @s2, ignoring the case of ASCII characters and any
2068 * characters after the first @n in each string.
2070 * Unlike the BSD strcasecmp() function, this only recognizes standard
2071 * ASCII letters and ignores the locale, treating all non-ASCII
2072 * characters as if they are not letters.
2074 * The same warning as in g_ascii_strcasecmp() applies: Use this
2075 * function only on strings known to be in encodings where bytes
2076 * corresponding to ASCII letters always represent themselves.
2078 * Return value: 0 if the strings match, a negative value if @s1 < @s2,
2079 * or a positive value if @s1 > @s2.
2082 g_ascii_strncasecmp (const gchar *s1,
2088 g_return_val_if_fail (s1 != NULL, 0);
2089 g_return_val_if_fail (s2 != NULL, 0);
2091 while (n && *s1 && *s2)
2094 c1 = (gint)(guchar) TOLOWER (*s1);
2095 c2 = (gint)(guchar) TOLOWER (*s2);
2102 return (((gint) (guchar) *s1) - ((gint) (guchar) *s2));
2110 * @s2: a string to compare with @s1.
2112 * A case-insensitive string comparison, corresponding to the standard
2113 * strcasecmp() function on platforms which support it.
2115 * Return value: 0 if the strings match, a negative value if @s1 < @s2,
2116 * or a positive value if @s1 > @s2.
2118 * Deprecated:2.2: See g_strncasecmp() for a discussion of why this function
2119 * is deprecated and how to replace it.
2122 g_strcasecmp (const gchar *s1,
2125 #ifdef HAVE_STRCASECMP
2126 g_return_val_if_fail (s1 != NULL, 0);
2127 g_return_val_if_fail (s2 != NULL, 0);
2129 return strcasecmp (s1, s2);
2133 g_return_val_if_fail (s1 != NULL, 0);
2134 g_return_val_if_fail (s2 != NULL, 0);
2138 /* According to A. Cox, some platforms have islower's that
2139 * don't work right on non-uppercase
2141 c1 = isupper ((guchar)*s1) ? tolower ((guchar)*s1) : *s1;
2142 c2 = isupper ((guchar)*s2) ? tolower ((guchar)*s2) : *s2;
2148 return (((gint)(guchar) *s1) - ((gint)(guchar) *s2));
2155 * @s2: a string to compare with @s1.
2156 * @n: the maximum number of characters to compare.
2158 * A case-insensitive string comparison, corresponding to the standard
2159 * strncasecmp() function on platforms which support it.
2160 * It is similar to g_strcasecmp() except it only compares the first @n
2161 * characters of the strings.
2163 * Return value: 0 if the strings match, a negative value if @s1 < @s2,
2164 * or a positive value if @s1 > @s2.
2166 * Deprecated:2.2: The problem with g_strncasecmp() is that it does the
2167 * comparison by calling toupper()/tolower(). These functions are
2168 * locale-specific and operate on single bytes. However, it is impossible
2169 * to handle things correctly from an I18N standpoint by operating on
2170 * bytes, since characters may be multibyte. Thus g_strncasecmp() is
2171 * broken if your string is guaranteed to be ASCII, since it's
2172 * locale-sensitive, and it's broken if your string is localized, since
2173 * it doesn't work on many encodings at all, including UTF-8, EUC-JP,
2176 * There are therefore two replacement functions: g_ascii_strncasecmp(),
2177 * which only works on ASCII and is not locale-sensitive, and
2178 * g_utf8_casefold(), which is good for case-insensitive sorting of UTF-8.
2181 g_strncasecmp (const gchar *s1,
2185 #ifdef HAVE_STRNCASECMP
2186 return strncasecmp (s1, s2, n);
2190 g_return_val_if_fail (s1 != NULL, 0);
2191 g_return_val_if_fail (s2 != NULL, 0);
2193 while (n && *s1 && *s2)
2196 /* According to A. Cox, some platforms have islower's that
2197 * don't work right on non-uppercase
2199 c1 = isupper ((guchar)*s1) ? tolower ((guchar)*s1) : *s1;
2200 c2 = isupper ((guchar)*s2) ? tolower ((guchar)*s2) : *s2;
2207 return (((gint) (guchar) *s1) - ((gint) (guchar) *s2));
2214 g_strdelimit (gchar *string,
2215 const gchar *delimiters,
2220 g_return_val_if_fail (string != NULL, NULL);
2223 delimiters = G_STR_DELIMITERS;
2225 for (c = string; *c; c++)
2227 if (strchr (delimiters, *c))
2235 g_strcanon (gchar *string,
2236 const gchar *valid_chars,
2241 g_return_val_if_fail (string != NULL, NULL);
2242 g_return_val_if_fail (valid_chars != NULL, NULL);
2244 for (c = string; *c; c++)
2246 if (!strchr (valid_chars, *c))
2254 g_strcompress (const gchar *source)
2256 const gchar *p = source, *octal;
2257 gchar *dest = g_malloc (strlen (source) + 1);
2268 g_warning ("g_strcompress: trailing \\");
2270 case '0': case '1': case '2': case '3': case '4':
2271 case '5': case '6': case '7':
2274 while ((p < octal + 3) && (*p >= '0') && (*p <= '7'))
2276 *q = (*q * 8) + (*p - '0');
2297 default: /* Also handles \" and \\ */
2313 g_strescape (const gchar *source,
2314 const gchar *exceptions)
2321 g_return_val_if_fail (source != NULL, NULL);
2323 p = (guchar *) source;
2324 /* Each source byte needs maximally four destination chars (\777) */
2325 q = dest = g_malloc (strlen (source) * 4 + 1);
2327 memset (excmap, 0, 256);
2330 guchar *e = (guchar *) exceptions;
2376 if ((*p < ' ') || (*p >= 0177))
2379 *q++ = '0' + (((*p) >> 6) & 07);
2380 *q++ = '0' + (((*p) >> 3) & 07);
2381 *q++ = '0' + ((*p) & 07);
2395 g_strchug (gchar *string)
2399 g_return_val_if_fail (string != NULL, NULL);
2401 for (start = (guchar*) string; *start && g_ascii_isspace (*start); start++)
2404 g_memmove (string, start, strlen ((gchar *) start) + 1);
2410 g_strchomp (gchar *string)
2414 g_return_val_if_fail (string != NULL, NULL);
2416 len = strlen (string);
2419 if (g_ascii_isspace ((guchar) string[len]))
2430 * @string: a string to split.
2431 * @delimiter: a string which specifies the places at which to split the string.
2432 * The delimiter is not included in any of the resulting strings, unless
2433 * @max_tokens is reached.
2434 * @max_tokens: the maximum number of pieces to split @string into. If this is
2435 * less than 1, the string is split completely.
2437 * Splits a string into a maximum of @max_tokens pieces, using the given
2438 * @delimiter. If @max_tokens is reached, the remainder of @string is appended
2439 * to the last token.
2441 * As a special case, the result of splitting the empty string "" is an empty
2442 * vector, not a vector containing a single string. The reason for this
2443 * special case is that being able to represent a empty vector is typically
2444 * more useful than consistent handling of empty elements. If you do need
2445 * to represent empty elements, you'll need to check for the empty string
2446 * before calling g_strsplit().
2448 * Return value: a newly-allocated %NULL-terminated array of strings. Use
2449 * g_strfreev() to free it.
2452 g_strsplit (const gchar *string,
2453 const gchar *delimiter,
2456 GSList *string_list = NULL, *slist;
2457 gchar **str_array, *s;
2459 const gchar *remainder;
2461 g_return_val_if_fail (string != NULL, NULL);
2462 g_return_val_if_fail (delimiter != NULL, NULL);
2463 g_return_val_if_fail (delimiter[0] != '\0', NULL);
2466 max_tokens = G_MAXINT;
2469 s = strstr (remainder, delimiter);
2472 gsize delimiter_len = strlen (delimiter);
2474 while (--max_tokens && s)
2478 len = s - remainder;
2479 string_list = g_slist_prepend (string_list,
2480 g_strndup (remainder, len));
2482 remainder = s + delimiter_len;
2483 s = strstr (remainder, delimiter);
2489 string_list = g_slist_prepend (string_list, g_strdup (remainder));
2492 str_array = g_new (gchar*, n + 1);
2494 str_array[n--] = NULL;
2495 for (slist = string_list; slist; slist = slist->next)
2496 str_array[n--] = slist->data;
2498 g_slist_free (string_list);
2505 * @string: The string to be tokenized
2506 * @delimiters: A nul-terminated string containing bytes that are used
2507 * to split the string.
2508 * @max_tokens: The maximum number of tokens to split @string into.
2509 * If this is less than 1, the string is split completely
2511 * Splits @string into a number of tokens not containing any of the characters
2512 * in @delimiter. A token is the (possibly empty) longest string that does not
2513 * contain any of the characters in @delimiters. If @max_tokens is reached, the
2514 * remainder is appended to the last token.
2516 * For example the result of g_strsplit_set ("abc:def/ghi", ":/", -1) is a
2517 * %NULL-terminated vector containing the three strings "abc", "def",
2520 * The result if g_strsplit_set (":def/ghi:", ":/", -1) is a %NULL-terminated
2521 * vector containing the four strings "", "def", "ghi", and "".
2523 * As a special case, the result of splitting the empty string "" is an empty
2524 * vector, not a vector containing a single string. The reason for this
2525 * special case is that being able to represent a empty vector is typically
2526 * more useful than consistent handling of empty elements. If you do need
2527 * to represent empty elements, you'll need to check for the empty string
2528 * before calling g_strsplit_set().
2530 * Note that this function works on bytes not characters, so it can't be used
2531 * to delimit UTF-8 strings for anything but ASCII characters.
2533 * Return value: a newly-allocated %NULL-terminated array of strings. Use
2534 * g_strfreev() to free it.
2539 g_strsplit_set (const gchar *string,
2540 const gchar *delimiters,
2543 gboolean delim_table[256];
2544 GSList *tokens, *list;
2547 const gchar *current;
2551 g_return_val_if_fail (string != NULL, NULL);
2552 g_return_val_if_fail (delimiters != NULL, NULL);
2555 max_tokens = G_MAXINT;
2557 if (*string == '\0')
2559 result = g_new (char *, 1);
2564 memset (delim_table, FALSE, sizeof (delim_table));
2565 for (s = delimiters; *s != '\0'; ++s)
2566 delim_table[*(guchar *)s] = TRUE;
2571 s = current = string;
2574 if (delim_table[*(guchar *)s] && n_tokens + 1 < max_tokens)
2576 token = g_strndup (current, s - current);
2577 tokens = g_slist_prepend (tokens, token);
2586 token = g_strndup (current, s - current);
2587 tokens = g_slist_prepend (tokens, token);
2590 result = g_new (gchar *, n_tokens + 1);
2592 result[n_tokens] = NULL;
2593 for (list = tokens; list != NULL; list = list->next)
2594 result[--n_tokens] = list->data;
2596 g_slist_free (tokens);
2603 * @str_array: a %NULL-terminated array of strings to free.
2605 * Frees a %NULL-terminated array of strings, and the array itself.
2606 * If called on a %NULL value, g_strfreev() simply returns.
2609 g_strfreev (gchar **str_array)
2615 for (i = 0; str_array[i] != NULL; i++)
2616 g_free (str_array[i]);
2624 * @str_array: %NULL-terminated array of strings.
2626 * Copies %NULL-terminated array of strings. The copy is a deep copy;
2627 * the new array should be freed by first freeing each string, then
2628 * the array itself. g_strfreev() does this for you. If called
2629 * on a %NULL value, g_strdupv() simply returns %NULL.
2631 * Return value: a new %NULL-terminated array of strings.
2634 g_strdupv (gchar **str_array)
2642 while (str_array[i])
2645 retval = g_new (gchar*, i + 1);
2648 while (str_array[i])
2650 retval[i] = g_strdup (str_array[i]);
2663 * @separator: a string to insert between each of the strings, or %NULL
2664 * @str_array: a %NULL-terminated array of strings to join
2666 * Joins a number of strings together to form one long string, with the
2667 * optional @separator inserted between each of them. The returned string
2668 * should be freed with g_free().
2670 * Returns: a newly-allocated string containing all of the strings joined
2671 * together, with @separator between them
2674 g_strjoinv (const gchar *separator,
2680 g_return_val_if_fail (str_array != NULL, NULL);
2682 if (separator == NULL)
2689 gsize separator_len;
2691 separator_len = strlen (separator);
2692 /* First part, getting length */
2693 len = 1 + strlen (str_array[0]);
2694 for (i = 1; str_array[i] != NULL; i++)
2695 len += strlen (str_array[i]);
2696 len += separator_len * (i - 1);
2698 /* Second part, building string */
2699 string = g_new (gchar, len);
2700 ptr = g_stpcpy (string, *str_array);
2701 for (i = 1; str_array[i] != NULL; i++)
2703 ptr = g_stpcpy (ptr, separator);
2704 ptr = g_stpcpy (ptr, str_array[i]);
2708 string = g_strdup ("");
2715 * @separator: a string to insert between each of the strings, or %NULL
2716 * @...: a %NULL-terminated list of strings to join
2718 * Joins a number of strings together to form one long string, with the
2719 * optional @separator inserted between each of them. The returned string
2720 * should be freed with g_free().
2722 * Returns: a newly-allocated string containing all of the strings joined
2723 * together, with @separator between them
2726 g_strjoin (const gchar *separator,
2732 gsize separator_len;
2735 if (separator == NULL)
2738 separator_len = strlen (separator);
2740 va_start (args, separator);
2742 s = va_arg (args, gchar*);
2746 /* First part, getting length */
2747 len = 1 + strlen (s);
2749 s = va_arg (args, gchar*);
2752 len += separator_len + strlen (s);
2753 s = va_arg (args, gchar*);
2757 /* Second part, building string */
2758 string = g_new (gchar, len);
2760 va_start (args, separator);
2762 s = va_arg (args, gchar*);
2763 ptr = g_stpcpy (string, s);
2765 s = va_arg (args, gchar*);
2768 ptr = g_stpcpy (ptr, separator);
2769 ptr = g_stpcpy (ptr, s);
2770 s = va_arg (args, gchar*);
2774 string = g_strdup ("");
2784 * @haystack: a string.
2785 * @haystack_len: the maximum length of @haystack. Note that -1 is
2786 * a valid length, if @haystack is nul-terminated, meaning it will
2787 * search through the whole string.
2788 * @needle: the string to search for.
2790 * Searches the string @haystack for the first occurrence
2791 * of the string @needle, limiting the length of the search
2794 * Return value: a pointer to the found occurrence, or
2795 * %NULL if not found.
2798 g_strstr_len (const gchar *haystack,
2799 gssize haystack_len,
2800 const gchar *needle)
2802 g_return_val_if_fail (haystack != NULL, NULL);
2803 g_return_val_if_fail (needle != NULL, NULL);
2805 if (haystack_len < 0)
2806 return strstr (haystack, needle);
2809 const gchar *p = haystack;
2810 gsize needle_len = strlen (needle);
2814 if (needle_len == 0)
2815 return (gchar *)haystack;
2817 if (haystack_len < needle_len)
2820 end = haystack + haystack_len - needle_len;
2822 while (p <= end && *p)
2824 for (i = 0; i < needle_len; i++)
2825 if (p[i] != needle[i])
2840 * @haystack: a nul-terminated string.
2841 * @needle: the nul-terminated string to search for.
2843 * Searches the string @haystack for the last occurrence
2844 * of the string @needle.
2846 * Return value: a pointer to the found occurrence, or
2847 * %NULL if not found.
2850 g_strrstr (const gchar *haystack,
2851 const gchar *needle)
2858 g_return_val_if_fail (haystack != NULL, NULL);
2859 g_return_val_if_fail (needle != NULL, NULL);
2861 needle_len = strlen (needle);
2862 haystack_len = strlen (haystack);
2864 if (needle_len == 0)
2865 return (gchar *)haystack;
2867 if (haystack_len < needle_len)
2870 p = haystack + haystack_len - needle_len;
2872 while (p >= haystack)
2874 for (i = 0; i < needle_len; i++)
2875 if (p[i] != needle[i])
2889 * @haystack: a nul-terminated string.
2890 * @haystack_len: the maximum length of @haystack.
2891 * @needle: the nul-terminated string to search for.
2893 * Searches the string @haystack for the last occurrence
2894 * of the string @needle, limiting the length of the search
2897 * Return value: a pointer to the found occurrence, or
2898 * %NULL if not found.
2901 g_strrstr_len (const gchar *haystack,
2902 gssize haystack_len,
2903 const gchar *needle)
2905 g_return_val_if_fail (haystack != NULL, NULL);
2906 g_return_val_if_fail (needle != NULL, NULL);
2908 if (haystack_len < 0)
2909 return g_strrstr (haystack, needle);
2912 gsize needle_len = strlen (needle);
2913 const gchar *haystack_max = haystack + haystack_len;
2914 const gchar *p = haystack;
2917 while (p < haystack_max && *p)
2920 if (p < haystack + needle_len)
2925 while (p >= haystack)
2927 for (i = 0; i < needle_len; i++)
2928 if (p[i] != needle[i])
2944 * @str: a nul-terminated string.
2945 * @suffix: the nul-terminated suffix to look for.
2947 * Looks whether the string @str ends with @suffix.
2949 * Return value: %TRUE if @str end with @suffix, %FALSE otherwise.
2954 g_str_has_suffix (const gchar *str,
2955 const gchar *suffix)
2960 g_return_val_if_fail (str != NULL, FALSE);
2961 g_return_val_if_fail (suffix != NULL, FALSE);
2963 str_len = strlen (str);
2964 suffix_len = strlen (suffix);
2966 if (str_len < suffix_len)
2969 return strcmp (str + str_len - suffix_len, suffix) == 0;
2974 * @str: a nul-terminated string.
2975 * @prefix: the nul-terminated prefix to look for.
2977 * Looks whether the string @str begins with @prefix.
2979 * Return value: %TRUE if @str begins with @prefix, %FALSE otherwise.
2984 g_str_has_prefix (const gchar *str,
2985 const gchar *prefix)
2990 g_return_val_if_fail (str != NULL, FALSE);
2991 g_return_val_if_fail (prefix != NULL, FALSE);
2993 str_len = strlen (str);
2994 prefix_len = strlen (prefix);
2996 if (str_len < prefix_len)
2999 return strncmp (str, prefix, prefix_len) == 0;
3006 * @msgval: another string
3008 * An auxiliary function for gettext() support (see Q_()).
3010 * Return value: @msgval, unless @msgval is identical to @msgid and contains
3011 * a '|' character, in which case a pointer to the substring of msgid after
3012 * the first '|' character is returned.
3017 g_strip_context (const gchar *msgid,
3018 const gchar *msgval)
3020 if (msgval == msgid)
3022 const char *c = strchr (msgid, '|');
3033 * @str_array: a %NULL-terminated array of strings.
3035 * Returns the length of the given %NULL-terminated
3036 * string array @str_array.
3038 * Return value: length of @str_array.
3043 g_strv_length (gchar **str_array)
3047 g_return_val_if_fail (str_array != NULL, 0);
3049 while (str_array[i])
3058 * @domain: the translation domain to use, or %NULL to use
3059 * the domain set with textdomain()
3060 * @msgctxtid: a combined message context and message id, separated
3061 * by a \004 character
3062 * @msgidoffset: the offset of the message id in @msgctxid
3064 * This function is a variant of g_dgettext() which supports
3065 * a disambiguating message context. GNU gettext uses the
3066 * '\004' character to separate the message context and
3067 * message id in @msgctxtid.
3068 * If 0 is passed as @msgidoffset, this function will fall back to
3069 * trying to use the deprecated convention of using "|" as a separation
3072 * This uses g_dgettext() internally. See that functions for differences
3073 * with dgettext() proper.
3075 * Applications should normally not use this function directly,
3076 * but use the C_() macro for translations with context.
3078 * Returns: The translated string
3083 g_dpgettext (const gchar *domain,
3084 const gchar *msgctxtid,
3087 const gchar *translation;
3090 translation = g_dgettext (domain, msgctxtid);
3092 if (translation == msgctxtid)
3094 if (msgidoffset > 0)
3095 return msgctxtid + msgidoffset;
3097 sep = strchr (msgctxtid, '|');
3101 /* try with '\004' instead of '|', in case
3102 * xgettext -kQ_:1g was used
3104 gchar *tmp = g_alloca (strlen (msgctxtid) + 1);
3105 strcpy (tmp, msgctxtid);
3106 tmp[sep - msgctxtid] = '\004';
3108 translation = g_dgettext (domain, tmp);
3110 if (translation == tmp)
3118 /* This function is taken from gettext.h
3119 * GNU gettext uses '\004' to separate context and msgid in .mo files.
3123 * @domain: the translation domain to use, or %NULL to use
3124 * the domain set with textdomain()
3125 * @context: the message context
3126 * @msgid: the message
3128 * This function is a variant of g_dgettext() which supports
3129 * a disambiguating message context. GNU gettext uses the
3130 * '\004' character to separate the message context and
3131 * message id in @msgctxtid.
3133 * This uses g_dgettext() internally. See that functions for differences
3134 * with dgettext() proper.
3136 * This function differs from C_() in that it is not a macro and
3137 * thus you may use non-string-literals as context and msgid arguments.
3139 * Returns: The translated string
3144 g_dpgettext2 (const char *domain,
3145 const char *msgctxt,
3148 size_t msgctxt_len = strlen (msgctxt) + 1;
3149 size_t msgid_len = strlen (msgid) + 1;
3150 const char *translation;
3153 msg_ctxt_id = g_alloca (msgctxt_len + msgid_len);
3155 memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
3156 msg_ctxt_id[msgctxt_len - 1] = '\004';
3157 memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
3159 translation = g_dgettext (domain, msg_ctxt_id);
3161 if (translation == msg_ctxt_id)
3163 /* try the old way of doing message contexts, too */
3164 msg_ctxt_id[msgctxt_len - 1] = '|';
3165 translation = g_dgettext (domain, msg_ctxt_id);
3167 if (translation == msg_ctxt_id)
3175 _g_dgettext_should_translate (void)
3177 static gsize translate = 0;
3179 SHOULD_TRANSLATE = 1,
3180 SHOULD_NOT_TRANSLATE = 2
3183 if (G_UNLIKELY (g_once_init_enter (&translate)))
3185 gboolean should_translate = TRUE;
3187 const char *default_domain = textdomain (NULL);
3188 const char *translator_comment = gettext ("");
3190 const char *translate_locale = setlocale (LC_MESSAGES, NULL);
3192 const char *translate_locale = g_win32_getlocale ();
3194 /* We should NOT translate only if all the following hold:
3195 * - user has called textdomain() and set textdomain to non-default
3196 * - default domain has no translations
3197 * - locale does not start with "en_" and is not "C"
3200 * - If text domain is still the default domain, maybe user calls
3201 * it later. Continue with old behavior of translating.
3202 * - If locale starts with "en_", we can continue using the
3203 * translations even if the app doesn't have translations for
3204 * this locale. That is, en_UK and en_CA for example.
3205 * - If locale is "C", maybe user calls setlocale(LC_ALL,"") later.
3206 * Continue with old behavior of translating.
3208 if (0 != strcmp (default_domain, "messages") &&
3209 '\0' == *translator_comment &&
3210 0 != strncmp (translate_locale, "en_", 3) &&
3211 0 != strcmp (translate_locale, "C"))
3212 should_translate = FALSE;
3214 g_once_init_leave (&translate,
3217 SHOULD_NOT_TRANSLATE);
3220 return translate == SHOULD_TRANSLATE;
3225 * @domain: the translation domain to use, or %NULL to use
3226 * the domain set with textdomain()
3227 * @msgid: message to translate
3229 * This function is a wrapper of dgettext() which does not translate
3230 * the message if the default domain as set with textdomain() has no
3231 * translations for the current locale.
3233 * The advantage of using this function over dgettext() proper is that
3234 * libraries using this function (like GTK+) will not use translations
3235 * if the application using the library does not have translations for
3236 * the current locale. This results in a consistent English-only
3237 * interface instead of one having partial translations. For this
3238 * feature to work, the call to textdomain() and setlocale() should
3239 * precede any g_dgettext() invocations. For GTK+, it means calling
3240 * textdomain() before gtk_init or its variants.
3242 * This function disables translations if and only if upon its first
3243 * call all the following conditions hold:
3245 * <listitem>@domain is not %NULL</listitem>
3246 * <listitem>textdomain() has been called to set a default text domain</listitem>
3247 * <listitem>there is no translations available for the default text domain
3248 * and the current locale</listitem>
3249 * <listitem>current locale is not "C" or any English locales (those
3250 * starting with "en_")</listitem>
3253 * Note that this behavior may not be desired for example if an application
3254 * has its untranslated messages in a language other than English. In those
3255 * cases the application should call textdomain() after initializing GTK+.
3257 * Applications should normally not use this function directly,
3258 * but use the _() macro for translations.
3260 * Returns: The translated string
3265 g_dgettext (const gchar *domain,
3268 if (domain && G_UNLIKELY (!_g_dgettext_should_translate ()))
3271 return dgettext (domain, msgid);
3276 * @domain: (allow-none): the translation domain to use, or %NULL to use
3277 * the domain set with textdomain()
3278 * @msgid: message to translate
3279 * @category: a locale category
3281 * This is a variant of g_dgettext() that allows specifying a locale
3282 * category instead of always using %LC_MESSAGES. See g_dgettext() for
3283 * more information about how this functions differs from calling
3284 * dcgettext() directly.
3286 * Returns: the translated string for the given locale category
3291 g_dcgettext (const gchar *domain,
3295 if (domain && G_UNLIKELY (!_g_dgettext_should_translate ()))
3298 return dcgettext (domain, msgid, category);
3303 * @domain: the translation domain to use, or %NULL to use
3304 * the domain set with textdomain()
3305 * @msgid: message to translate
3306 * @msgid_plural: plural form of the message
3307 * @n: the quantity for which translation is needed
3309 * This function is a wrapper of dngettext() which does not translate
3310 * the message if the default domain as set with textdomain() has no
3311 * translations for the current locale.
3313 * See g_dgettext() for details of how this differs from dngettext()
3316 * Returns: The translated string
3321 g_dngettext (const gchar *domain,
3323 const gchar *msgid_plural,
3326 if (domain && G_UNLIKELY (!_g_dgettext_should_translate ()))
3327 return n == 1 ? msgid : msgid_plural;
3329 return dngettext (domain, msgid, msgid_plural, n);