glib.h gstrfuncs.c Rename g_strccpy to g_strcompress and g_strecpy to
authorTor Lillqvist <tml@src.gnome.org>
Mon, 2 Aug 1999 23:16:32 +0000 (23:16 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Mon, 2 Aug 1999 23:16:32 +0000 (23:16 +0000)
* glib.h
* gstrfuncs.c
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
destination parameter, always g_malloc a new string.  Fix bug in
g_strcompress, octal digits were gobbled up without limit, should
use max three.

Sources that use g_strescape must have ifdefs to be compilable
both with GLib 1.2 and 1.3.

16 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
NEWS
glib.def
glib.h
glib/glib.def
glib/glib.h
glib/gstrfuncs.c
gstrfuncs.c
tests/strfunc-test.c

index 60df74c369f921633f4f0b4c2135527f7f0707fc..8e4cd9499b97a3abac51bfc43075506a65a20caf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+       * glib.h
+       * gstrfuncs.c
+       * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+       g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+       destination parameter, always g_malloc a new string.  Fix bug in
+       g_strcompress, octal digits were gobbled up without limit, should
+       use max three.
+
+       Sources that use g_strescape must have ifdefs to be compilable
+       both with GLib 1.2 and 1.3.
+
 Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
 
        * glib.h
index 60df74c369f921633f4f0b4c2135527f7f0707fc..8e4cd9499b97a3abac51bfc43075506a65a20caf 100644 (file)
@@ -1,3 +1,16 @@
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+       * glib.h
+       * gstrfuncs.c
+       * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+       g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+       destination parameter, always g_malloc a new string.  Fix bug in
+       g_strcompress, octal digits were gobbled up without limit, should
+       use max three.
+
+       Sources that use g_strescape must have ifdefs to be compilable
+       both with GLib 1.2 and 1.3.
+
 Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
 
        * glib.h
index 60df74c369f921633f4f0b4c2135527f7f0707fc..8e4cd9499b97a3abac51bfc43075506a65a20caf 100644 (file)
@@ -1,3 +1,16 @@
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+       * glib.h
+       * gstrfuncs.c
+       * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+       g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+       destination parameter, always g_malloc a new string.  Fix bug in
+       g_strcompress, octal digits were gobbled up without limit, should
+       use max three.
+
+       Sources that use g_strescape must have ifdefs to be compilable
+       both with GLib 1.2 and 1.3.
+
 Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
 
        * glib.h
index 60df74c369f921633f4f0b4c2135527f7f0707fc..8e4cd9499b97a3abac51bfc43075506a65a20caf 100644 (file)
@@ -1,3 +1,16 @@
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+       * glib.h
+       * gstrfuncs.c
+       * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+       g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+       destination parameter, always g_malloc a new string.  Fix bug in
+       g_strcompress, octal digits were gobbled up without limit, should
+       use max three.
+
+       Sources that use g_strescape must have ifdefs to be compilable
+       both with GLib 1.2 and 1.3.
+
 Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
 
        * glib.h
index 60df74c369f921633f4f0b4c2135527f7f0707fc..8e4cd9499b97a3abac51bfc43075506a65a20caf 100644 (file)
@@ -1,3 +1,16 @@
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+       * glib.h
+       * gstrfuncs.c
+       * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+       g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+       destination parameter, always g_malloc a new string.  Fix bug in
+       g_strcompress, octal digits were gobbled up without limit, should
+       use max three.
+
+       Sources that use g_strescape must have ifdefs to be compilable
+       both with GLib 1.2 and 1.3.
+
 Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
 
        * glib.h
index 60df74c369f921633f4f0b4c2135527f7f0707fc..8e4cd9499b97a3abac51bfc43075506a65a20caf 100644 (file)
@@ -1,3 +1,16 @@
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+       * glib.h
+       * gstrfuncs.c
+       * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+       g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+       destination parameter, always g_malloc a new string.  Fix bug in
+       g_strcompress, octal digits were gobbled up without limit, should
+       use max three.
+
+       Sources that use g_strescape must have ifdefs to be compilable
+       both with GLib 1.2 and 1.3.
+
 Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
 
        * glib.h
index 60df74c369f921633f4f0b4c2135527f7f0707fc..8e4cd9499b97a3abac51bfc43075506a65a20caf 100644 (file)
@@ -1,3 +1,16 @@
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+       * glib.h
+       * gstrfuncs.c
+       * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+       g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+       destination parameter, always g_malloc a new string.  Fix bug in
+       g_strcompress, octal digits were gobbled up without limit, should
+       use max three.
+
+       Sources that use g_strescape must have ifdefs to be compilable
+       both with GLib 1.2 and 1.3.
+
 Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
 
        * glib.h
index 60df74c369f921633f4f0b4c2135527f7f0707fc..8e4cd9499b97a3abac51bfc43075506a65a20caf 100644 (file)
@@ -1,3 +1,16 @@
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+       * glib.h
+       * gstrfuncs.c
+       * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+       g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+       destination parameter, always g_malloc a new string.  Fix bug in
+       g_strcompress, octal digits were gobbled up without limit, should
+       use max three.
+
+       Sources that use g_strescape must have ifdefs to be compilable
+       both with GLib 1.2 and 1.3.
+
 Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
 
        * glib.h
diff --git a/NEWS b/NEWS
index 97073e951e59c21a47e855ee3726341be6386177..571ab697d4439a0cdf7935170a8eea0238759035 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,8 @@ What's new in GLib 1.3.1:
 * Double ended queue implementation.
 * GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu"
 * New thread-safe random number generator Mersenne Twister.
-
+* g_strcompress() added, g_strescape() had a slight API change, and
+  more tightly defined semantics.
 
 Overview of Changes in GLib 1.2.1:
 
index fc6882b942ff3329e9e16663b755f7be67e97126..654e071e85cfabf6b277ce1891351f9d964bf78e 100644 (file)
--- a/glib.def
+++ b/glib.def
@@ -366,14 +366,13 @@ EXPORTS
        g_strcasecmp
        g_strchomp
        g_strchug
+       g_strcompress
        g_strconcat
-       g_strccpy
        g_strdelimit
        g_strdown
        g_strdup
        g_strdup_printf
        g_strdup_vprintf
-       g_strecpy
        g_strerror
        g_strescape
        g_strfreev
diff --git a/glib.h b/glib.h
index dac8f51c9830d1118fc98f12fe60d0985e583cb8..72e6d68dac6a6304c9ad06853c82e03be736bbb9 100644 (file)
--- a/glib.h
+++ b/glib.h
@@ -1500,7 +1500,7 @@ gchar*  g_strchomp              (gchar        *string);
 #define g_strstrip( string )   g_strchomp (g_strchug (string))
 
 /* String utility functions that return a newly allocated string which
- * ought to be freed from the caller at some point.
+ * ought to be freed with g_free from the caller at some point.
  */
 gchar*  g_strdup               (const gchar *str);
 gchar*  g_strdup_printf        (const gchar *format,
@@ -1515,21 +1515,23 @@ gchar*   g_strconcat            (const gchar *string1,
                                 ...); /* NULL terminated */
 gchar*   g_strjoin             (const gchar  *separator,
                                 ...); /* NULL terminated */
-/* Copy a string interpreting C string -style escape sequences.
- * The recognized sequences are \b \f \n \r \t \\ \" and the octal format.
+/* 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.
  */
-gchar*   g_strccpy             (gchar       *dest,
-                                const gchar *source);
+gchar*   g_strcompress         (const gchar *source);
+
 /* Copy a string escaping nonprintable characters like in C strings.
- * Inverse of g_strccpy. The exceptions parameter if non-NULL points
- * to a string containing characters that are not escaped.
+ * Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
+ * to a string containing characters that are not to be escaped.
  */
-gchar*   g_strecpy             (gchar       *dest,
-                                const gchar *source,
+gchar*   g_strescape           (const gchar *source,
                                 const gchar *exceptions);
-
-/* deprecated function (used to be a real function) */
-#define g_strescape(src) g_strecpy (g_new (char, strlen (src)*4+1), (src), NULL)
+/* Deprecated API:
+ * gchar* g_strescape (const gchar *source);
+ * Luckily this function wasn't much used.
+ * Add a second NULL parameter in calls for mostly identical semantics.
+ */
 
 gpointer g_memdup              (gconstpointer mem,
                                 guint         byte_size);
index fc6882b942ff3329e9e16663b755f7be67e97126..654e071e85cfabf6b277ce1891351f9d964bf78e 100644 (file)
@@ -366,14 +366,13 @@ EXPORTS
        g_strcasecmp
        g_strchomp
        g_strchug
+       g_strcompress
        g_strconcat
-       g_strccpy
        g_strdelimit
        g_strdown
        g_strdup
        g_strdup_printf
        g_strdup_vprintf
-       g_strecpy
        g_strerror
        g_strescape
        g_strfreev
index dac8f51c9830d1118fc98f12fe60d0985e583cb8..72e6d68dac6a6304c9ad06853c82e03be736bbb9 100644 (file)
@@ -1500,7 +1500,7 @@ gchar*  g_strchomp              (gchar        *string);
 #define g_strstrip( string )   g_strchomp (g_strchug (string))
 
 /* String utility functions that return a newly allocated string which
- * ought to be freed from the caller at some point.
+ * ought to be freed with g_free from the caller at some point.
  */
 gchar*  g_strdup               (const gchar *str);
 gchar*  g_strdup_printf        (const gchar *format,
@@ -1515,21 +1515,23 @@ gchar*   g_strconcat            (const gchar *string1,
                                 ...); /* NULL terminated */
 gchar*   g_strjoin             (const gchar  *separator,
                                 ...); /* NULL terminated */
-/* Copy a string interpreting C string -style escape sequences.
- * The recognized sequences are \b \f \n \r \t \\ \" and the octal format.
+/* 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.
  */
-gchar*   g_strccpy             (gchar       *dest,
-                                const gchar *source);
+gchar*   g_strcompress         (const gchar *source);
+
 /* Copy a string escaping nonprintable characters like in C strings.
- * Inverse of g_strccpy. The exceptions parameter if non-NULL points
- * to a string containing characters that are not escaped.
+ * Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
+ * to a string containing characters that are not to be escaped.
  */
-gchar*   g_strecpy             (gchar       *dest,
-                                const gchar *source,
+gchar*   g_strescape           (const gchar *source,
                                 const gchar *exceptions);
-
-/* deprecated function (used to be a real function) */
-#define g_strescape(src) g_strecpy (g_new (char, strlen (src)*4+1), (src), NULL)
+/* Deprecated API:
+ * gchar* g_strescape (const gchar *source);
+ * Luckily this function wasn't much used.
+ * Add a second NULL parameter in calls for mostly identical semantics.
+ */
 
 gpointer g_memdup              (gconstpointer mem,
                                 guint         byte_size);
index b71fd3f0f2c6acf3cf05d09f72353ff9b92e6d70..e8cc1bae225c17bf28b005a6fb33717cbf4c9992 100644 (file)
@@ -1073,14 +1073,12 @@ g_strdelimit (gchar       *string,
 }
 
 gchar*
-g_strccpy (gchar       *dest,
-          const gchar *source)
+g_strcompress (const gchar *source)
 {
-  const gchar *p = source;
+  const gchar *p = source, *octal;
+  gchar *dest = g_malloc (strlen (source) + 1);
   gchar *q = dest;
 
-  g_return_val_if_fail (dest != NULL, NULL);
-
   while (*p)
     {
       if (*p == '\\')
@@ -1091,7 +1089,8 @@ g_strccpy (gchar       *dest,
            case '0':  case '1':  case '2':  case '3':  case '4':
            case '5':  case '6':  case '7':
              *q = 0;
-             while ((*p >= '0') && (*p <= '7'))
+             octal = p;
+             while ((p < octal + 3) && (*p >= '0') && (*p <= '7'))
                {
                  *q = (*q * 8) + (*p - '0');
                  p++;
@@ -1128,11 +1127,12 @@ g_strccpy (gchar       *dest,
 }
 
 gchar *
-g_strecpy (gchar       *dest,
-          const gchar *src,
-          const gchar *exceptions)
+g_strescape (const gchar *source,
+            const gchar *exceptions)
 {
-  const guchar *p = (guchar *) src;
+  const guchar *p = (guchar *) source;
+  /* Each source byte needs maximally four destination chars (\777) */
+  gchar *dest = g_malloc (strlen (source) * 4 + 1);
   gchar *q = dest;
   guchar excmap[256];
 
index b71fd3f0f2c6acf3cf05d09f72353ff9b92e6d70..e8cc1bae225c17bf28b005a6fb33717cbf4c9992 100644 (file)
@@ -1073,14 +1073,12 @@ g_strdelimit (gchar       *string,
 }
 
 gchar*
-g_strccpy (gchar       *dest,
-          const gchar *source)
+g_strcompress (const gchar *source)
 {
-  const gchar *p = source;
+  const gchar *p = source, *octal;
+  gchar *dest = g_malloc (strlen (source) + 1);
   gchar *q = dest;
 
-  g_return_val_if_fail (dest != NULL, NULL);
-
   while (*p)
     {
       if (*p == '\\')
@@ -1091,7 +1089,8 @@ g_strccpy (gchar       *dest,
            case '0':  case '1':  case '2':  case '3':  case '4':
            case '5':  case '6':  case '7':
              *q = 0;
-             while ((*p >= '0') && (*p <= '7'))
+             octal = p;
+             while ((p < octal + 3) && (*p >= '0') && (*p <= '7'))
                {
                  *q = (*q * 8) + (*p - '0');
                  p++;
@@ -1128,11 +1127,12 @@ g_strccpy (gchar       *dest,
 }
 
 gchar *
-g_strecpy (gchar       *dest,
-          const gchar *src,
-          const gchar *exceptions)
+g_strescape (const gchar *source,
+            const gchar *exceptions)
 {
-  const guchar *p = (guchar *) src;
+  const guchar *p = (guchar *) source;
+  /* Each source byte needs maximally four destination chars (\777) */
+  gchar *dest = g_malloc (strlen (source) * 4 + 1);
   gchar *q = dest;
   guchar excmap[256];
 
index 16d5584cf5b1922dc9665b0116f61b0823fb31cc..ecb87429724ea1d472bb4def103fb230fc38f317 100644 (file)
@@ -99,15 +99,14 @@ main (int   argc,
   g_assert (strcmp(string, "00021 test ") == 0);
   g_free (string);
 
-  g_assert (strcmp(g_strccpy(g_malloc(100),
-                            "abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313"),
-                  "abc\\\"\b\f\n\r\t\003\177\234\313") == 0);
-  g_assert (strcmp(g_strecpy(g_malloc(100),
-                            "abc\\\"\b\f\n\r\t\003\177\234\313",
-                            NULL),
+  g_assert (strcmp
+           (g_strcompress("abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313\\12345z"),
+            "abc\\\"\b\f\n\r\t\003\177\234\313\12345z") == 0);
+  g_assert (strcmp(g_strescape("abc\\\"\b\f\n\r\t\003\177\234\313",
+                              NULL),
                   "abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313") == 0);
-  g_assert (strcmp(g_strecpy(g_malloc(100),"abc\\\"\b\f\n\r\t\003\177\234\313",
-                            "\b\f\001\002\003\004"),
+  g_assert (strcmp(g_strescape("abc\\\"\b\f\n\r\t\003\177\234\313",
+                              "\b\f\001\002\003\004"),
                   "abc\\\\\\\"\b\f\\n\\r\\t\003\\177\\234\\313") == 0);
 
   return 0;