diff options
author | Vinicius Gomes <vinicius.gomes@openbossa.org> | 2008-03-26 18:47:26 +0000 |
---|---|---|
committer | Vinicius Gomes <vinicius.gomes@openbossa.org> | 2008-03-26 18:47:26 +0000 |
commit | b313aacb3dd7ab17e773206d1c6e074deba913b4 (patch) | |
tree | afbced7e68130171005247157135ceacc6f5fa61 | |
parent | 00a4f42d8f57683489c2bfa2434d813ea33d6bd2 (diff) |
eglib: adding filename related functions for loading dynamic libraries.
-rw-r--r-- | eglib/gmain.c | 63 | ||||
-rw-r--r-- | eglib/gmain.h | 8 |
2 files changed, 67 insertions, 4 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, ...) diff --git a/eglib/gmain.h b/eglib/gmain.h index 3fc99ce3..15b6c072 100644 --- a/eglib/gmain.h +++ b/eglib/gmain.h @@ -227,9 +227,11 @@ gchar *g_strdup(const gchar *str); gchar* g_strdup_printf(const gchar *format, ...); gchar* g_strdelimit(gchar *string, const gchar *delimiters, gchar new_delim); gchar *g_strconcat(const gchar *string1, ...); +gsize g_strlcat(gchar *dest, const gchar *src, gsize dest_size); gchar **g_strsplit(const gchar *string, const gchar *delimiter, gint max_tokens); gboolean g_str_equal(gconstpointer v1, gconstpointer v2); gboolean g_str_has_prefix(const gchar *str, const gchar *prefix); +gboolean g_str_has_suffix(const gchar *str, const gchar *suffix); #define g_new(struct_type, n_structs) \ ((struct_type *) g_malloc (((gsize) sizeof (struct_type)) * ((gsize) (n_structs)))) @@ -287,7 +289,7 @@ gchar *g_string_free(GString *string, gboolean free_segment); typedef enum { G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0, - G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1 + G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1 } GMarkupParseFlags; typedef struct _GMarkupParseContext GMarkupParseContext; @@ -312,7 +314,7 @@ struct _GMarkupParser { /* text is not nul-terminated */ void (*text) (GMarkupParseContext *context, const gchar *text, - gsize text_len, + gsize text_len, gpointer user_data, GError **error); @@ -323,7 +325,7 @@ struct _GMarkupParser { /* text is not nul-terminated. */ void (*passthrough) (GMarkupParseContext *context, const gchar *passthrough_text, - gsize text_len, + gsize text_len, gpointer user_data, GError **error); |