diff options
| author | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2008-03-11 18:53:33 +0000 | 
|---|---|---|
| committer | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2008-03-11 18:53:33 +0000 | 
| commit | e7e3d513c99d23f06edf387d0e8ed97150d574e2 (patch) | |
| tree | e59e7c9520ed3bf567b1b27cb91d304314f20623 | |
| parent | 1c8c0e8625b1d27d75423203ae944ab2f7529233 (diff) | |
Add implemention of g_str_equal, g_strsplit and g_strconcat to eglib.
| -rw-r--r-- | eglib/gmain.c | 87 | 
1 files changed, 87 insertions, 0 deletions
| diff --git a/eglib/gmain.c b/eglib/gmain.c index 9fa8ff86..b6f40f32 100644 --- a/eglib/gmain.c +++ b/eglib/gmain.c @@ -1317,6 +1317,93 @@ gchar *g_strdelimit(gchar *string, const gchar *delimiters, gchar new_delim)  	return string;  } +gchar *g_strconcat(const gchar *string1, ...) +{ +	gsize l; +	va_list args; +	gchar *s, *concat; + +	if (!string1) +		return NULL; + +	l = 1 + strlen(string1); +	va_start(args, string1); +	s = va_arg(args, gchar *); +	while (s) { +		l += strlen(s); +		s = va_arg(args, gchar *); +	} +	va_end (args); + +	concat = g_new(gchar, l); +	concat[0] = '\0'; + +	va_start(args, string1); +	s = va_arg(args, gchar*); +	while (s) { +		strcat(concat, s); +		s = va_arg(args, gchar *); +	} +	va_end (args); + +	return concat; +} + +gchar **g_strsplit(const gchar *string, const gchar *delimiter, gint max_tokens) +{ +	GSList *string_list = NULL, *slist; +	gchar **str_array, *s; +	guint n = 0; +	const gchar *remainder; + +	if (string == NULL || delimiter == NULL || delimiter[0] == '\0') +		return NULL; + +	if (max_tokens < 1) +		max_tokens = SSIZE_MAX; + +	remainder = string; +	s = strstr(remainder, delimiter); +	if (s) { +		gsize delimiter_len = strlen(delimiter); + +		while (--max_tokens && s) { +			gsize len; +			gchar *tmp; + +			len = s - remainder; +			tmp = g_new(char, len); +			memcpy(tmp, remainder, len); +			string_list = g_slist_prepend(string_list, tmp); +			n++; +			remainder = s + delimiter_len; +			s = strstr(remainder, delimiter); +		} +	} +	if (*string) { +		n++; +		string_list = g_slist_prepend(string_list, g_strdup(remainder)); +	} + +	str_array = g_new(gchar *, n + 1); + +	str_array[n--] = NULL; +	for (slist = string_list; slist; slist = slist->next) +		str_array[n--] = slist->data; + +	g_slist_free(string_list); + +	return str_array; +} + +gboolean g_str_equal(gconstpointer v1, gconstpointer v2) +{ +	const gchar *string1 = v1; +	const gchar *string2 = v2; + +	return strcmp(string1, string2) == 0; +} +  /* GKeyFile */  struct _GKeyFile { | 
