diff options
Diffstat (limited to 'eglib/gmain.c')
| -rw-r--r-- | eglib/gmain.c | 63 | 
1 files changed, 62 insertions, 1 deletions
diff --git a/eglib/gmain.c b/eglib/gmain.c index 8341c664..b51da600 100644 --- a/eglib/gmain.c +++ b/eglib/gmain.c @@ -1355,6 +1355,37 @@ gchar *g_strconcat(const gchar *string1, ...)  	return concat;  } +gsize g_strlcat(gchar *dest, const gchar *src, gsize dest_size) +{ +	gchar *d = dest; +	const gchar *s = src; +	gsize bytes_left = dest_size; +	gsize dlength;  /* Logically, MIN(strlen(d), dest_size) */ + +	if (!d || !s) +		return 0; + +	/* Find the end of dst and adjust bytes left but don't go past end */ +	while (*d != 0 && bytes_left-- != 0) +		d++; +	dlength = d - dest; +	bytes_left = dest_size - dlength; + +	if (bytes_left == 0) +		return dlength + strlen(s); + +	while (*s != 0) { +		if (bytes_left != 1) { +			*d++ = *s; +			bytes_left--; +		} +		s++; +	} +	*d = 0; + +	return dlength + (s - src);  /* count does not include NULL */ +} +  gchar **g_strsplit(const gchar *string, const gchar *delimiter, gint max_tokens)  {  	GSList *string_list = NULL, *slist; @@ -1427,6 +1458,23 @@ gboolean g_str_has_prefix(const gchar *str, const gchar *prefix)  	return strncmp(str, prefix, prefix_len) == 0;  } +gboolean g_str_has_suffix(const gchar *str, const gchar *suffix) +{ +	int str_len; +	int suffix_len; + +	if (!str || !suffix) +		return FALSE; + +	str_len = strlen(str); +	suffix_len = strlen(suffix); + +	if (str_len < suffix_len) +		return FALSE; + +	return strcmp(str + str_len - suffix_len, suffix) == 0; +} +  /* GKeyFile */  struct _GKeyFile { @@ -1718,7 +1766,20 @@ void g_markup_parse_context_free(GMarkupParseContext *context)  static gchar *g_build_pathname_va(const gchar *first_element,  						va_list args, gpointer *data)  { -	return NULL; +	gchar result[PATH_MAX], *element; + +	strncpy(result, first_element, PATH_MAX); +	element = va_arg(args, gchar *); + +	while (element) { +		g_strlcat(result, "/", PATH_MAX); +		g_strlcat(result, element, PATH_MAX); +		element = va_arg(args, gchar *); +	} + +	va_end(args); + +	return g_strdup(result);  }  gchar *g_build_filename(const gchar *first_element, ...)  | 
