glib.h gstrfuncs.c Rename g_strccpy to g_strcompress and g_strecpy to

* 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.
This commit is contained in:
Tor Lillqvist 1999-08-02 23:16:32 +00:00
parent 4877766d0e
commit 1c6c7f7489
16 changed files with 167 additions and 61 deletions

View 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> Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
* glib.h * glib.h

View 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> Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
* glib.h * glib.h

View 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> Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
* glib.h * glib.h

View 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> Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
* glib.h * glib.h

View 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> Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
* glib.h * glib.h

View 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> Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
* glib.h * glib.h

View 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> Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
* glib.h * glib.h

View 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> Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
* glib.h * glib.h

3
NEWS
View File

@ -9,7 +9,8 @@ What's new in GLib 1.3.1:
* Double ended queue implementation. * Double ended queue implementation.
* GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu" * GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu"
* New thread-safe random number generator Mersenne Twister. * 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: Overview of Changes in GLib 1.2.1:

View File

@ -366,14 +366,13 @@ EXPORTS
g_strcasecmp g_strcasecmp
g_strchomp g_strchomp
g_strchug g_strchug
g_strcompress
g_strconcat g_strconcat
g_strccpy
g_strdelimit g_strdelimit
g_strdown g_strdown
g_strdup g_strdup
g_strdup_printf g_strdup_printf
g_strdup_vprintf g_strdup_vprintf
g_strecpy
g_strerror g_strerror
g_strescape g_strescape
g_strfreev g_strfreev

30
glib.h
View File

@ -1500,7 +1500,7 @@ gchar* g_strchomp (gchar *string);
#define g_strstrip( string ) g_strchomp (g_strchug (string)) #define g_strstrip( string ) g_strchomp (g_strchug (string))
/* String utility functions that return a newly allocated string which /* 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 (const gchar *str);
gchar* g_strdup_printf (const gchar *format, gchar* g_strdup_printf (const gchar *format,
@ -1515,21 +1515,23 @@ gchar* g_strconcat (const gchar *string1,
...); /* NULL terminated */ ...); /* NULL terminated */
gchar* g_strjoin (const gchar *separator, gchar* g_strjoin (const gchar *separator,
...); /* NULL terminated */ ...); /* NULL terminated */
/* Copy a string interpreting C string -style escape sequences. /* Make a copy of a string interpreting C string -style escape
* The recognized sequences are \b \f \n \r \t \\ \" and the octal format. * sequences. Inverse of g_strescape. The recognized sequences are \b
* \f \n \r \t \\ \" and the octal format.
*/ */
gchar* g_strccpy (gchar *dest, gchar* g_strcompress (const gchar *source);
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.
*/
gchar* g_strecpy (gchar *dest,
const gchar *source,
const gchar *exceptions);
/* deprecated function (used to be a real function) */ /* Copy a string escaping nonprintable characters like in C strings.
#define g_strescape(src) g_strecpy (g_new (char, strlen (src)*4+1), (src), NULL) * Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
* to a string containing characters that are not to be escaped.
*/
gchar* g_strescape (const gchar *source,
const gchar *exceptions);
/* 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, gpointer g_memdup (gconstpointer mem,
guint byte_size); guint byte_size);

View File

@ -366,14 +366,13 @@ EXPORTS
g_strcasecmp g_strcasecmp
g_strchomp g_strchomp
g_strchug g_strchug
g_strcompress
g_strconcat g_strconcat
g_strccpy
g_strdelimit g_strdelimit
g_strdown g_strdown
g_strdup g_strdup
g_strdup_printf g_strdup_printf
g_strdup_vprintf g_strdup_vprintf
g_strecpy
g_strerror g_strerror
g_strescape g_strescape
g_strfreev g_strfreev

View File

@ -1500,7 +1500,7 @@ gchar* g_strchomp (gchar *string);
#define g_strstrip( string ) g_strchomp (g_strchug (string)) #define g_strstrip( string ) g_strchomp (g_strchug (string))
/* String utility functions that return a newly allocated string which /* 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 (const gchar *str);
gchar* g_strdup_printf (const gchar *format, gchar* g_strdup_printf (const gchar *format,
@ -1515,21 +1515,23 @@ gchar* g_strconcat (const gchar *string1,
...); /* NULL terminated */ ...); /* NULL terminated */
gchar* g_strjoin (const gchar *separator, gchar* g_strjoin (const gchar *separator,
...); /* NULL terminated */ ...); /* NULL terminated */
/* Copy a string interpreting C string -style escape sequences. /* Make a copy of a string interpreting C string -style escape
* The recognized sequences are \b \f \n \r \t \\ \" and the octal format. * sequences. Inverse of g_strescape. The recognized sequences are \b
* \f \n \r \t \\ \" and the octal format.
*/ */
gchar* g_strccpy (gchar *dest, gchar* g_strcompress (const gchar *source);
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.
*/
gchar* g_strecpy (gchar *dest,
const gchar *source,
const gchar *exceptions);
/* deprecated function (used to be a real function) */ /* Copy a string escaping nonprintable characters like in C strings.
#define g_strescape(src) g_strecpy (g_new (char, strlen (src)*4+1), (src), NULL) * Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
* to a string containing characters that are not to be escaped.
*/
gchar* g_strescape (const gchar *source,
const gchar *exceptions);
/* 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, gpointer g_memdup (gconstpointer mem,
guint byte_size); guint byte_size);

View File

@ -1073,14 +1073,12 @@ g_strdelimit (gchar *string,
} }
gchar* gchar*
g_strccpy (gchar *dest, g_strcompress (const gchar *source)
const gchar *source)
{ {
const gchar *p = source; const gchar *p = source, *octal;
gchar *dest = g_malloc (strlen (source) + 1);
gchar *q = dest; gchar *q = dest;
g_return_val_if_fail (dest != NULL, NULL);
while (*p) while (*p)
{ {
if (*p == '\\') if (*p == '\\')
@ -1091,7 +1089,8 @@ g_strccpy (gchar *dest,
case '0': case '1': case '2': case '3': case '4': case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '5': case '6': case '7':
*q = 0; *q = 0;
while ((*p >= '0') && (*p <= '7')) octal = p;
while ((p < octal + 3) && (*p >= '0') && (*p <= '7'))
{ {
*q = (*q * 8) + (*p - '0'); *q = (*q * 8) + (*p - '0');
p++; p++;
@ -1128,11 +1127,12 @@ g_strccpy (gchar *dest,
} }
gchar * gchar *
g_strecpy (gchar *dest, g_strescape (const gchar *source,
const gchar *src, const gchar *exceptions)
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; gchar *q = dest;
guchar excmap[256]; guchar excmap[256];

View File

@ -1073,14 +1073,12 @@ g_strdelimit (gchar *string,
} }
gchar* gchar*
g_strccpy (gchar *dest, g_strcompress (const gchar *source)
const gchar *source)
{ {
const gchar *p = source; const gchar *p = source, *octal;
gchar *dest = g_malloc (strlen (source) + 1);
gchar *q = dest; gchar *q = dest;
g_return_val_if_fail (dest != NULL, NULL);
while (*p) while (*p)
{ {
if (*p == '\\') if (*p == '\\')
@ -1091,7 +1089,8 @@ g_strccpy (gchar *dest,
case '0': case '1': case '2': case '3': case '4': case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '5': case '6': case '7':
*q = 0; *q = 0;
while ((*p >= '0') && (*p <= '7')) octal = p;
while ((p < octal + 3) && (*p >= '0') && (*p <= '7'))
{ {
*q = (*q * 8) + (*p - '0'); *q = (*q * 8) + (*p - '0');
p++; p++;
@ -1128,11 +1127,12 @@ g_strccpy (gchar *dest,
} }
gchar * gchar *
g_strecpy (gchar *dest, g_strescape (const gchar *source,
const gchar *src, const gchar *exceptions)
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; gchar *q = dest;
guchar excmap[256]; guchar excmap[256];

View File

@ -99,15 +99,14 @@ main (int argc,
g_assert (strcmp(string, "00021 test ") == 0); g_assert (strcmp(string, "00021 test ") == 0);
g_free (string); g_free (string);
g_assert (strcmp(g_strccpy(g_malloc(100), g_assert (strcmp
"abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313"), (g_strcompress("abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313\\12345z"),
"abc\\\"\b\f\n\r\t\003\177\234\313") == 0); "abc\\\"\b\f\n\r\t\003\177\234\313\12345z") == 0);
g_assert (strcmp(g_strecpy(g_malloc(100), g_assert (strcmp(g_strescape("abc\\\"\b\f\n\r\t\003\177\234\313",
"abc\\\"\b\f\n\r\t\003\177\234\313", NULL),
NULL),
"abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313") == 0); "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", g_assert (strcmp(g_strescape("abc\\\"\b\f\n\r\t\003\177\234\313",
"\b\f\001\002\003\004"), "\b\f\001\002\003\004"),
"abc\\\\\\\"\b\f\\n\\r\\t\003\\177\\234\\313") == 0); "abc\\\\\\\"\b\f\\n\\r\\t\003\\177\\234\\313") == 0);
return 0; return 0;