summaryrefslogtreecommitdiffstats
path: root/eglib
diff options
context:
space:
mode:
authorVinicius Gomes <vinicius.gomes@openbossa.org>2008-03-26 18:47:26 +0000
committerVinicius Gomes <vinicius.gomes@openbossa.org>2008-03-26 18:47:26 +0000
commitb313aacb3dd7ab17e773206d1c6e074deba913b4 (patch)
treeafbced7e68130171005247157135ceacc6f5fa61 /eglib
parent00a4f42d8f57683489c2bfa2434d813ea33d6bd2 (diff)
eglib: adding filename related functions for loading dynamic libraries.
Diffstat (limited to 'eglib')
-rw-r--r--eglib/gmain.c63
-rw-r--r--eglib/gmain.h8
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);