+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>
* gmain.[hc]: Major change in API for creating sources
+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>
* gmain.[hc]: Major change in API for creating sources
+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>
* gmain.[hc]: Major change in API for creating sources
+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>
* gmain.[hc]: Major change in API for creating sources
+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>
* gmain.[hc]: Major change in API for creating sources
+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>
* gmain.[hc]: Major change in API for creating sources
+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>
* gmain.[hc]: Major change in API for creating sources
+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>
* gmain.[hc]: Major change in API for creating sources
}
}
+/**
+ * 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*
g_strjoinv (const gchar *separator,
gchar **str_array)
* g_strjoinv() concatenates all of str_array's strings, sliding in an
* optional separator, the returned string is newly allocated.
* 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,
const gchar *delimiter,
gchar* g_strjoinv (const gchar *separator,
gchar **str_array);
void g_strfreev (gchar **str_array);
+gchar** g_strdupv (gchar **str_array);
G_END_DECLS
}
}
+/**
+ * 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*
g_strjoinv (const gchar *separator,
gchar **str_array)
* g_strjoinv() concatenates all of str_array's strings, sliding in an
* optional separator, the returned string is newly allocated.
* 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,
const gchar *delimiter,
gchar* g_strjoinv (const gchar *separator,
gchar **str_array);
void g_strfreev (gchar **str_array);
+gchar** g_strdupv (gchar **str_array);
G_END_DECLS
char *argv[])
{
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 (string != NULL);
g_assert (strcmp(string, "00021 test ") == 0);
g_free (string);
-
+
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);
"\b\f\001\002\003\004"),
"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;
}
+
+