From bbbfe78d7051d23b0c833489b97a1a6b76e5e334 Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Sat, 2 Jan 1999 03:05:36 +0000 Subject: [PATCH] Handle NULL strings like g_strdup. s/g_strconcat_a/g_strconcat3_a/ to * glib.h: (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args * testglib.c: Added g_strdup, g_strconcat checks. Added str==NULL checks for alloca string macros. s/g_strconcat_a/g_strconcat3_a/ --- ChangeLog | 11 +++++++++++ ChangeLog.pre-2-0 | 11 +++++++++++ ChangeLog.pre-2-10 | 11 +++++++++++ ChangeLog.pre-2-12 | 11 +++++++++++ ChangeLog.pre-2-2 | 11 +++++++++++ ChangeLog.pre-2-4 | 11 +++++++++++ ChangeLog.pre-2-6 | 11 +++++++++++ ChangeLog.pre-2-8 | 11 +++++++++++ glib.h | 36 +++++++++++++++++++++--------------- glib/glib.h | 36 +++++++++++++++++++++--------------- testglib.c | 29 ++++++++++++++++++++++++++++- tests/testglib.c | 29 ++++++++++++++++++++++++++++- 12 files changed, 186 insertions(+), 32 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b6fc714..92c6b0c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Fri Jan 1 21:58:40 EST 1999 Jeff Garzik + + * glib.h: + (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. + s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args + + * testglib.c: + Added g_strdup, g_strconcat checks. + Added str==NULL checks for alloca string macros. + s/g_strconcat_a/g_strconcat3_a/ + Fri Jan 1 18:30:41 PST 1999 Manish Singh * testglib.c: made the alloca tests follow the testglib style diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 9b6fc714..92c6b0c4 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,14 @@ +Fri Jan 1 21:58:40 EST 1999 Jeff Garzik + + * glib.h: + (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. + s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args + + * testglib.c: + Added g_strdup, g_strconcat checks. + Added str==NULL checks for alloca string macros. + s/g_strconcat_a/g_strconcat3_a/ + Fri Jan 1 18:30:41 PST 1999 Manish Singh * testglib.c: made the alloca tests follow the testglib style diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 9b6fc714..92c6b0c4 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,14 @@ +Fri Jan 1 21:58:40 EST 1999 Jeff Garzik + + * glib.h: + (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. + s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args + + * testglib.c: + Added g_strdup, g_strconcat checks. + Added str==NULL checks for alloca string macros. + s/g_strconcat_a/g_strconcat3_a/ + Fri Jan 1 18:30:41 PST 1999 Manish Singh * testglib.c: made the alloca tests follow the testglib style diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 9b6fc714..92c6b0c4 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,14 @@ +Fri Jan 1 21:58:40 EST 1999 Jeff Garzik + + * glib.h: + (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. + s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args + + * testglib.c: + Added g_strdup, g_strconcat checks. + Added str==NULL checks for alloca string macros. + s/g_strconcat_a/g_strconcat3_a/ + Fri Jan 1 18:30:41 PST 1999 Manish Singh * testglib.c: made the alloca tests follow the testglib style diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 9b6fc714..92c6b0c4 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,14 @@ +Fri Jan 1 21:58:40 EST 1999 Jeff Garzik + + * glib.h: + (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. + s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args + + * testglib.c: + Added g_strdup, g_strconcat checks. + Added str==NULL checks for alloca string macros. + s/g_strconcat_a/g_strconcat3_a/ + Fri Jan 1 18:30:41 PST 1999 Manish Singh * testglib.c: made the alloca tests follow the testglib style diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 9b6fc714..92c6b0c4 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,14 @@ +Fri Jan 1 21:58:40 EST 1999 Jeff Garzik + + * glib.h: + (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. + s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args + + * testglib.c: + Added g_strdup, g_strconcat checks. + Added str==NULL checks for alloca string macros. + s/g_strconcat_a/g_strconcat3_a/ + Fri Jan 1 18:30:41 PST 1999 Manish Singh * testglib.c: made the alloca tests follow the testglib style diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 9b6fc714..92c6b0c4 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,14 @@ +Fri Jan 1 21:58:40 EST 1999 Jeff Garzik + + * glib.h: + (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. + s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args + + * testglib.c: + Added g_strdup, g_strconcat checks. + Added str==NULL checks for alloca string macros. + s/g_strconcat_a/g_strconcat3_a/ + Fri Jan 1 18:30:41 PST 1999 Manish Singh * testglib.c: made the alloca tests follow the testglib style diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 9b6fc714..92c6b0c4 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,14 @@ +Fri Jan 1 21:58:40 EST 1999 Jeff Garzik + + * glib.h: + (g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup. + s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args + + * testglib.c: + Added g_strdup, g_strconcat checks. + Added str==NULL checks for alloca string macros. + s/g_strconcat_a/g_strconcat3_a/ + Fri Jan 1 18:30:41 PST 1999 Manish Singh * testglib.c: made the alloca tests follow the testglib style diff --git a/glib.h b/glib.h index a818844a..a7160758 100644 --- a/glib.h +++ b/glib.h @@ -1461,26 +1461,32 @@ gpointer g_memdup (gconstpointer mem, #if G_HAVE_ALLOCA # define g_strdup_a(newstr,str) G_STMT_START { \ - const char *__old = (str); \ - char *__new; \ - size_t __len = strlen (__old) + 1; \ - __new = alloca (__len); \ - memcpy (__new, __old, __len); \ - (newstr) = __new; \ + if ((str) == NULL) (newstr) = NULL; \ + else { \ + const char *__old = (str); \ + char *__new; \ + size_t __len = strlen (__old) + 1; \ + __new = alloca (__len); \ + memcpy (__new, __old, __len); \ + (newstr) = __new; \ + } \ } G_STMT_END # define g_strndup_a(newstr,str,n) G_STMT_START { \ - const char *__old = (str); \ - char *__new; \ - size_t __len = strlen (__old); \ - if (__len > (n)) __len = (n); \ - __new = alloca (__len + 1); \ - memcpy (__new, __old, __len); \ - __new[__len] = 0; \ - (newstr) = __new; \ + if ((str) == NULL) (newstr) = NULL; \ + else { \ + const char *__old = (str); \ + char *__new; \ + size_t __len = strlen (__old); \ + if (__len > (n)) __len = (n); \ + __new = alloca (__len + 1); \ + memcpy (__new, __old, __len); \ + __new[__len] = 0; \ + (newstr) = __new; \ + } \ } G_STMT_END -# define g_strconcat_a(newstr,str1,str2,str3) G_STMT_START { \ +# define g_strconcat3_a(newstr,str1,str2,str3) G_STMT_START { \ size_t __len1 = ((str1) == (gchar*)NULL) ? 0 : strlen((str1)); \ size_t __len2 = ((str2) == (gchar*)NULL) ? 0 : strlen((str2)); \ size_t __len3 = ((str3) == (gchar*)NULL) ? 0 : strlen((str3)); \ diff --git a/glib/glib.h b/glib/glib.h index a818844a..a7160758 100644 --- a/glib/glib.h +++ b/glib/glib.h @@ -1461,26 +1461,32 @@ gpointer g_memdup (gconstpointer mem, #if G_HAVE_ALLOCA # define g_strdup_a(newstr,str) G_STMT_START { \ - const char *__old = (str); \ - char *__new; \ - size_t __len = strlen (__old) + 1; \ - __new = alloca (__len); \ - memcpy (__new, __old, __len); \ - (newstr) = __new; \ + if ((str) == NULL) (newstr) = NULL; \ + else { \ + const char *__old = (str); \ + char *__new; \ + size_t __len = strlen (__old) + 1; \ + __new = alloca (__len); \ + memcpy (__new, __old, __len); \ + (newstr) = __new; \ + } \ } G_STMT_END # define g_strndup_a(newstr,str,n) G_STMT_START { \ - const char *__old = (str); \ - char *__new; \ - size_t __len = strlen (__old); \ - if (__len > (n)) __len = (n); \ - __new = alloca (__len + 1); \ - memcpy (__new, __old, __len); \ - __new[__len] = 0; \ - (newstr) = __new; \ + if ((str) == NULL) (newstr) = NULL; \ + else { \ + const char *__old = (str); \ + char *__new; \ + size_t __len = strlen (__old); \ + if (__len > (n)) __len = (n); \ + __new = alloca (__len + 1); \ + memcpy (__new, __old, __len); \ + __new[__len] = 0; \ + (newstr) = __new; \ + } \ } G_STMT_END -# define g_strconcat_a(newstr,str1,str2,str3) G_STMT_START { \ +# define g_strconcat3_a(newstr,str1,str2,str3) G_STMT_START { \ size_t __len1 = ((str1) == (gchar*)NULL) ? 0 : strlen((str1)); \ size_t __len2 = ((str2) == (gchar*)NULL) ? 0 : strlen((str2)); \ size_t __len3 = ((str3) == (gchar*)NULL) ? 0 : strlen((str3)); \ diff --git a/testglib.c b/testglib.c index 852d5582..70e9ee85 100644 --- a/testglib.c +++ b/testglib.c @@ -748,6 +748,29 @@ main (int argc, g_print ("ok\n"); + g_print ("checking g_strdup..."); + g_assert(g_strdup(NULL) == NULL); + string = g_strdup(GLIB_TEST_STRING); + g_assert(string != NULL); + g_assert(strcmp(string, GLIB_TEST_STRING) == 0); + g_free(string); + + g_print ("ok\n"); + + g_print ("checking g_strconcat..."); + string = g_strconcat(GLIB_TEST_STRING, NULL); + g_assert(string != NULL); + g_assert(strcmp(string, GLIB_TEST_STRING) == 0); + g_free(string); + string = g_strconcat(GLIB_TEST_STRING, GLIB_TEST_STRING, + GLIB_TEST_STRING, NULL); + g_assert(string != NULL); + g_assert(strcmp(string, GLIB_TEST_STRING GLIB_TEST_STRING + GLIB_TEST_STRING) == 0); + g_free(string); + + g_print ("ok\n"); + /* g_debug (argv[0]); */ /* Relation tests */ @@ -879,13 +902,17 @@ main (int argc, g_strdup_a(string, GLIB_TEST_STRING); g_assert(string != NULL); g_assert(strcmp(string, GLIB_TEST_STRING) == 0); + g_strdup_a(string, NULL); + g_assert(string == NULL); g_strndup_a(string, GLIB_TEST_STRING, 5); g_assert(string != NULL); g_assert(strlen(string) == 5); g_assert(strcmp(string, GLIB_TEST_STRING_5) == 0); + g_strndup_a(string, NULL, 20); + g_assert(string == NULL); - g_strconcat_a(string, GLIB_TEST_STRING, GLIB_TEST_STRING, GLIB_TEST_STRING); + g_strconcat3_a(string, GLIB_TEST_STRING, GLIB_TEST_STRING, GLIB_TEST_STRING); g_assert(string != NULL); g_assert(strcmp(string, GLIB_TEST_STRING GLIB_TEST_STRING GLIB_TEST_STRING) == 0); diff --git a/tests/testglib.c b/tests/testglib.c index 852d5582..70e9ee85 100644 --- a/tests/testglib.c +++ b/tests/testglib.c @@ -748,6 +748,29 @@ main (int argc, g_print ("ok\n"); + g_print ("checking g_strdup..."); + g_assert(g_strdup(NULL) == NULL); + string = g_strdup(GLIB_TEST_STRING); + g_assert(string != NULL); + g_assert(strcmp(string, GLIB_TEST_STRING) == 0); + g_free(string); + + g_print ("ok\n"); + + g_print ("checking g_strconcat..."); + string = g_strconcat(GLIB_TEST_STRING, NULL); + g_assert(string != NULL); + g_assert(strcmp(string, GLIB_TEST_STRING) == 0); + g_free(string); + string = g_strconcat(GLIB_TEST_STRING, GLIB_TEST_STRING, + GLIB_TEST_STRING, NULL); + g_assert(string != NULL); + g_assert(strcmp(string, GLIB_TEST_STRING GLIB_TEST_STRING + GLIB_TEST_STRING) == 0); + g_free(string); + + g_print ("ok\n"); + /* g_debug (argv[0]); */ /* Relation tests */ @@ -879,13 +902,17 @@ main (int argc, g_strdup_a(string, GLIB_TEST_STRING); g_assert(string != NULL); g_assert(strcmp(string, GLIB_TEST_STRING) == 0); + g_strdup_a(string, NULL); + g_assert(string == NULL); g_strndup_a(string, GLIB_TEST_STRING, 5); g_assert(string != NULL); g_assert(strlen(string) == 5); g_assert(strcmp(string, GLIB_TEST_STRING_5) == 0); + g_strndup_a(string, NULL, 20); + g_assert(string == NULL); - g_strconcat_a(string, GLIB_TEST_STRING, GLIB_TEST_STRING, GLIB_TEST_STRING); + g_strconcat3_a(string, GLIB_TEST_STRING, GLIB_TEST_STRING, GLIB_TEST_STRING); g_assert(string != NULL); g_assert(strcmp(string, GLIB_TEST_STRING GLIB_TEST_STRING GLIB_TEST_STRING) == 0); -- 2.34.1