mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 16:32:18 +01:00 
			
		
		
		
	add g_strdupv test
2000-12-06 Havoc Pennington <hp@pobox.com> * tests/strfunc-test.c (main): add g_strdupv test * gstrfuncs.c (g_strdupv): Add a function to copy an array of strings
This commit is contained in:
		
				
					committed by
					
						 Havoc Pennington
						Havoc Pennington
					
				
			
			
				
	
			
			
			
						parent
						
							e2fd4e2bd0
						
					
				
				
					commit
					e5c1f207c9
				
			| @@ -1,3 +1,10 @@ | |||||||
|  | 2000-12-06  Havoc Pennington  <hp@pobox.com> | ||||||
|  |  | ||||||
|  | 	* tests/strfunc-test.c (main): add g_strdupv test | ||||||
|  |  | ||||||
|  | 	* gstrfuncs.c (g_strdupv): Add a function to copy  | ||||||
|  | 	an array of strings | ||||||
|  |  | ||||||
| Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | ||||||
|  |  | ||||||
|         * gmain.[hc]: Major change in API for creating sources |         * gmain.[hc]: Major change in API for creating sources | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | 2000-12-06  Havoc Pennington  <hp@pobox.com> | ||||||
|  |  | ||||||
|  | 	* tests/strfunc-test.c (main): add g_strdupv test | ||||||
|  |  | ||||||
|  | 	* gstrfuncs.c (g_strdupv): Add a function to copy  | ||||||
|  | 	an array of strings | ||||||
|  |  | ||||||
| Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | ||||||
|  |  | ||||||
|         * gmain.[hc]: Major change in API for creating sources |         * gmain.[hc]: Major change in API for creating sources | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | 2000-12-06  Havoc Pennington  <hp@pobox.com> | ||||||
|  |  | ||||||
|  | 	* tests/strfunc-test.c (main): add g_strdupv test | ||||||
|  |  | ||||||
|  | 	* gstrfuncs.c (g_strdupv): Add a function to copy  | ||||||
|  | 	an array of strings | ||||||
|  |  | ||||||
| Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | ||||||
|  |  | ||||||
|         * gmain.[hc]: Major change in API for creating sources |         * gmain.[hc]: Major change in API for creating sources | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | 2000-12-06  Havoc Pennington  <hp@pobox.com> | ||||||
|  |  | ||||||
|  | 	* tests/strfunc-test.c (main): add g_strdupv test | ||||||
|  |  | ||||||
|  | 	* gstrfuncs.c (g_strdupv): Add a function to copy  | ||||||
|  | 	an array of strings | ||||||
|  |  | ||||||
| Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | ||||||
|  |  | ||||||
|         * gmain.[hc]: Major change in API for creating sources |         * gmain.[hc]: Major change in API for creating sources | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | 2000-12-06  Havoc Pennington  <hp@pobox.com> | ||||||
|  |  | ||||||
|  | 	* tests/strfunc-test.c (main): add g_strdupv test | ||||||
|  |  | ||||||
|  | 	* gstrfuncs.c (g_strdupv): Add a function to copy  | ||||||
|  | 	an array of strings | ||||||
|  |  | ||||||
| Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | ||||||
|  |  | ||||||
|         * gmain.[hc]: Major change in API for creating sources |         * gmain.[hc]: Major change in API for creating sources | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | 2000-12-06  Havoc Pennington  <hp@pobox.com> | ||||||
|  |  | ||||||
|  | 	* tests/strfunc-test.c (main): add g_strdupv test | ||||||
|  |  | ||||||
|  | 	* gstrfuncs.c (g_strdupv): Add a function to copy  | ||||||
|  | 	an array of strings | ||||||
|  |  | ||||||
| Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | ||||||
|  |  | ||||||
|         * gmain.[hc]: Major change in API for creating sources |         * gmain.[hc]: Major change in API for creating sources | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | 2000-12-06  Havoc Pennington  <hp@pobox.com> | ||||||
|  |  | ||||||
|  | 	* tests/strfunc-test.c (main): add g_strdupv test | ||||||
|  |  | ||||||
|  | 	* gstrfuncs.c (g_strdupv): Add a function to copy  | ||||||
|  | 	an array of strings | ||||||
|  |  | ||||||
| Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | ||||||
|  |  | ||||||
|         * gmain.[hc]: Major change in API for creating sources |         * gmain.[hc]: Major change in API for creating sources | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | 2000-12-06  Havoc Pennington  <hp@pobox.com> | ||||||
|  |  | ||||||
|  | 	* tests/strfunc-test.c (main): add g_strdupv test | ||||||
|  |  | ||||||
|  | 	* gstrfuncs.c (g_strdupv): Add a function to copy  | ||||||
|  | 	an array of strings | ||||||
|  |  | ||||||
| Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com> | ||||||
|  |  | ||||||
|         * gmain.[hc]: Major change in API for creating sources |         * gmain.[hc]: Major change in API for creating sources | ||||||
|   | |||||||
| @@ -1325,6 +1325,45 @@ g_strfreev (gchar **str_array) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * g_strdupv: | ||||||
|  |  * @str_array: %NULL-terminated array of strings | ||||||
|  |  *  | ||||||
|  |  * Copies %NULL-terminated array of strings. The copy is a deep copy; | ||||||
|  |  * the new array should be freed by first freeing each string, then | ||||||
|  |  * the array itself. g_strfreev() does this for you. If called | ||||||
|  |  * on a %NULL value, g_strdupv() simply returns %NULL. | ||||||
|  |  *  | ||||||
|  |  * Return value: a new %NULL-terminated array of strings | ||||||
|  |  **/ | ||||||
|  | gchar** | ||||||
|  | g_strdupv (gchar **str_array) | ||||||
|  | { | ||||||
|  |   if (str_array) | ||||||
|  |     { | ||||||
|  |       gint i; | ||||||
|  |       gchar **retval; | ||||||
|  |  | ||||||
|  |       i = 0; | ||||||
|  |       while (str_array[i]) | ||||||
|  |         ++i; | ||||||
|  |            | ||||||
|  |       retval = g_new (gchar*, i + 1); | ||||||
|  |  | ||||||
|  |       i = 0; | ||||||
|  |       while (str_array[i]) | ||||||
|  |         { | ||||||
|  |           retval[i] = g_strdup (str_array[i]); | ||||||
|  |           ++i; | ||||||
|  |         } | ||||||
|  |       retval[i] = NULL; | ||||||
|  |  | ||||||
|  |       return retval; | ||||||
|  |     } | ||||||
|  |   else | ||||||
|  |     return NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
| gchar* | gchar* | ||||||
| g_strjoinv (const gchar  *separator, | g_strjoinv (const gchar  *separator, | ||||||
| 	    gchar       **str_array) | 	    gchar       **str_array) | ||||||
|   | |||||||
| @@ -109,6 +109,7 @@ gpointer g_memdup		(gconstpointer mem, | |||||||
|  * g_strjoinv() concatenates all of str_array's strings, sliding in an |  * g_strjoinv() concatenates all of str_array's strings, sliding in an | ||||||
|  * optional separator, the returned string is newly allocated. |  * optional separator, the returned string is newly allocated. | ||||||
|  * g_strfreev() frees the array itself and all of its strings. |  * g_strfreev() frees the array itself and all of its strings. | ||||||
|  |  * g_strdupv() copies a NULL-terminated array of strings | ||||||
|  */ |  */ | ||||||
| gchar**	 g_strsplit		(const gchar  *string, | gchar**	 g_strsplit		(const gchar  *string, | ||||||
| 				 const gchar  *delimiter, | 				 const gchar  *delimiter, | ||||||
| @@ -116,6 +117,7 @@ gchar**	 g_strsplit		(const gchar  *string, | |||||||
| gchar*   g_strjoinv		(const gchar  *separator, | gchar*   g_strjoinv		(const gchar  *separator, | ||||||
| 				 gchar       **str_array); | 				 gchar       **str_array); | ||||||
| void     g_strfreev		(gchar       **str_array); | void     g_strfreev		(gchar       **str_array); | ||||||
|  | gchar**  g_strdupv              (gchar       **str_array); | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										39
									
								
								gstrfuncs.c
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								gstrfuncs.c
									
									
									
									
									
								
							| @@ -1325,6 +1325,45 @@ g_strfreev (gchar **str_array) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * g_strdupv: | ||||||
|  |  * @str_array: %NULL-terminated array of strings | ||||||
|  |  *  | ||||||
|  |  * Copies %NULL-terminated array of strings. The copy is a deep copy; | ||||||
|  |  * the new array should be freed by first freeing each string, then | ||||||
|  |  * the array itself. g_strfreev() does this for you. If called | ||||||
|  |  * on a %NULL value, g_strdupv() simply returns %NULL. | ||||||
|  |  *  | ||||||
|  |  * Return value: a new %NULL-terminated array of strings | ||||||
|  |  **/ | ||||||
|  | gchar** | ||||||
|  | g_strdupv (gchar **str_array) | ||||||
|  | { | ||||||
|  |   if (str_array) | ||||||
|  |     { | ||||||
|  |       gint i; | ||||||
|  |       gchar **retval; | ||||||
|  |  | ||||||
|  |       i = 0; | ||||||
|  |       while (str_array[i]) | ||||||
|  |         ++i; | ||||||
|  |            | ||||||
|  |       retval = g_new (gchar*, i + 1); | ||||||
|  |  | ||||||
|  |       i = 0; | ||||||
|  |       while (str_array[i]) | ||||||
|  |         { | ||||||
|  |           retval[i] = g_strdup (str_array[i]); | ||||||
|  |           ++i; | ||||||
|  |         } | ||||||
|  |       retval[i] = NULL; | ||||||
|  |  | ||||||
|  |       return retval; | ||||||
|  |     } | ||||||
|  |   else | ||||||
|  |     return NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
| gchar* | gchar* | ||||||
| g_strjoinv (const gchar  *separator, | g_strjoinv (const gchar  *separator, | ||||||
| 	    gchar       **str_array) | 	    gchar       **str_array) | ||||||
|   | |||||||
| @@ -109,6 +109,7 @@ gpointer g_memdup		(gconstpointer mem, | |||||||
|  * g_strjoinv() concatenates all of str_array's strings, sliding in an |  * g_strjoinv() concatenates all of str_array's strings, sliding in an | ||||||
|  * optional separator, the returned string is newly allocated. |  * optional separator, the returned string is newly allocated. | ||||||
|  * g_strfreev() frees the array itself and all of its strings. |  * g_strfreev() frees the array itself and all of its strings. | ||||||
|  |  * g_strdupv() copies a NULL-terminated array of strings | ||||||
|  */ |  */ | ||||||
| gchar**	 g_strsplit		(const gchar  *string, | gchar**	 g_strsplit		(const gchar  *string, | ||||||
| 				 const gchar  *delimiter, | 				 const gchar  *delimiter, | ||||||
| @@ -116,6 +117,7 @@ gchar**	 g_strsplit		(const gchar  *string, | |||||||
| gchar*   g_strjoinv		(const gchar  *separator, | gchar*   g_strjoinv		(const gchar  *separator, | ||||||
| 				 gchar       **str_array); | 				 gchar       **str_array); | ||||||
| void     g_strfreev		(gchar       **str_array); | void     g_strfreev		(gchar       **str_array); | ||||||
|  | gchar**  g_strdupv              (gchar       **str_array); | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -60,7 +60,9 @@ main (int   argc, | |||||||
|       char *argv[]) |       char *argv[]) | ||||||
| { | { | ||||||
|   gchar *string; |   gchar *string; | ||||||
|  |   gchar *vec[] = { "Foo", "Bar", NULL }; | ||||||
|  |   gchar **copy; | ||||||
|  |    | ||||||
|   g_assert (g_strcasecmp ("FroboZZ", "frobozz") == 0); |   g_assert (g_strcasecmp ("FroboZZ", "frobozz") == 0); | ||||||
|   g_assert (g_strcasecmp ("frobozz", "frobozz") == 0); |   g_assert (g_strcasecmp ("frobozz", "frobozz") == 0); | ||||||
|   g_assert (g_strcasecmp ("frobozz", "FROBOZZ") == 0); |   g_assert (g_strcasecmp ("frobozz", "FROBOZZ") == 0); | ||||||
| @@ -98,7 +100,7 @@ main (int   argc, | |||||||
|   g_assert (string != NULL); |   g_assert (string != NULL); | ||||||
|   g_assert (strcmp(string, "00021 test ") == 0); |   g_assert (strcmp(string, "00021 test ") == 0); | ||||||
|   g_free (string); |   g_free (string); | ||||||
|  |    | ||||||
|   g_assert (strcmp |   g_assert (strcmp | ||||||
| 	    (g_strcompress("abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313\\12345z"), | 	    (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); | 	     "abc\\\"\b\f\n\r\t\003\177\234\313\12345z") == 0); | ||||||
| @@ -109,6 +111,14 @@ main (int   argc, | |||||||
| 			       "\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); | ||||||
|  |  | ||||||
|  |   copy = g_strdupv (vec); | ||||||
|  |   g_assert (strcmp (copy[0], "Foo") == 0); | ||||||
|  |   g_assert (strcmp (copy[1], "Bar") == 0); | ||||||
|  |   g_assert (copy[2] == NULL); | ||||||
|  |   g_strfreev (copy); | ||||||
|  |    | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user