diff options
Diffstat (limited to 'eglib/gmain.c')
-rw-r--r-- | eglib/gmain.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/eglib/gmain.c b/eglib/gmain.c index 878760d8..7bc96961 100644 --- a/eglib/gmain.c +++ b/eglib/gmain.c @@ -17,6 +17,7 @@ #include <sys/file.h> #include <ctype.h> #include <dlfcn.h> +#include <dirent.h> #include <gmain.h> @@ -64,6 +65,11 @@ struct _GMainLoop { GMainContext *context; }; +struct _GDir +{ + DIR *dirp; +}; + GIOError g_io_channel_read(GIOChannel *channel, gchar *buf, gsize count, gsize *bytes_read) { @@ -1404,6 +1410,23 @@ gboolean g_str_equal(gconstpointer v1, gconstpointer v2) return strcmp(string1, string2) == 0; } +gboolean g_str_has_prefix(const gchar *str, const gchar *prefix) +{ + int str_len; + int prefix_len; + + if (str == NULL || prefix == NULL) + return FALSE; + + str_len = strlen (str); + prefix_len = strlen (prefix); + + if (str_len < prefix_len) + return FALSE; + + return strncmp(str, prefix, prefix_len) == 0; +} + /* GKeyFile */ struct _GKeyFile { @@ -1692,3 +1715,65 @@ void g_markup_parse_context_free(GMarkupParseContext *context) { g_free(context); } + +gchar * g_build_filename (const gchar *first_element, ...) +{ + gchar *str; + va_list args; + + va_start (args, first_element); + str = g_build_pathname_va(first_element, &args, NULL); + va_end (args); + + return str; +} + +GDir *g_dir_open(const gchar *path, guint flags, GError **error) +{ + GDir *dir; + + if (path == NULL) + return NULL; + + dir = g_new (GDir, 1); + + dir->dirp = opendir (path); + + if (dir->dirp) + return dir; + + /* error case */ + g_set_error(error, 0, 0, "Error opening directory '%s': %s", path, + strerror(errno)); + + g_free (dir); + + return NULL; +} + +const gchar *g_dir_read_name(GDir *dir) +{ + struct dirent *entry; + + if (dir == NULL) + return NULL; + + entry = readdir (dir->dirp); + while (entry && (0 == strcmp(entry->d_name, ".") || + 0 == strcmp(entry->d_name, ".."))) + entry = readdir(dir->dirp); + + if (entry) + return entry->d_name; + else + return NULL; +} + +void g_dir_close(GDir *dir) +{ + if (dir == NULL) + return; + + closedir (dir->dirp); + g_free (dir); +} |