diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | acinclude.m4 | 15 | ||||
-rw-r--r-- | configure.in | 1 | ||||
-rw-r--r-- | eglib/Makefile.am | 8 | ||||
-rw-r--r-- | eglib/glib.h | 1 | ||||
-rw-r--r-- | eglib/gmain.c | 1977 | ||||
-rw-r--r-- | eglib/gmain.h | 404 | ||||
-rw-r--r-- | eglib/gmodule.c | 88 | ||||
-rw-r--r-- | eglib/gmodule.h | 21 |
9 files changed, 1 insertions, 2516 deletions
diff --git a/Makefile.am b/Makefile.am index 94cab3ad..b38dd1b0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ SUBDIRS = include lib doc \ - sbc eglib gdbus common sdpd hcid plugins \ + sbc gdbus common sdpd hcid plugins \ network serial input audio \ tools rfcomm dund pand hidd \ cups test scripts diff --git a/acinclude.m4 b/acinclude.m4 index d8ff3724..4a75d7b9 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -148,7 +148,6 @@ AC_DEFUN([AC_ARG_BLUEZ], [ netlink_enable=no usb_enable=${usb_found} alsa_enable=${alsa_found} - glib_enable=yes gstreamer_enable=${gstreamer_found} audio_enable=yes input_enable=yes @@ -176,10 +175,6 @@ AC_DEFUN([AC_ARG_BLUEZ], [ pie_enable=${enableval} ]) - AC_ARG_ENABLE(glib, AC_HELP_STRING([--disable-glib], [disable GLib support]), [ - glib_enable=${enableval} - ]) - AC_ARG_ENABLE(network, AC_HELP_STRING([--disable-network], [disable network plugin]), [ network_enable=${enableval} ]) @@ -285,16 +280,6 @@ AC_DEFUN([AC_ARG_BLUEZ], [ AC_DEFINE(HAVE_LIBUSB, 1, [Define to 1 if you have USB library.]) fi - if (test "${glib_enable}" = "yes" && test "${glib_found}" = "yes"); then - AM_CONDITIONAL(GLIB, true) - else - AC_SUBST([GLIB_CFLAGS], ['-I$(top_srcdir)/eglib']) - AC_SUBST([GLIB_LIBS], ['$(top_builddir)/eglib/libeglib.la -ldl -rdynamic']) - AC_SUBST([GMODULE_CFLAGS], ['']) - AC_SUBST([GMODULE_LIBS], ['']) - AM_CONDITIONAL(GLIB, false) - fi - AC_SUBST([GDBUS_CFLAGS], ['-I$(top_srcdir)/gdbus']) AC_SUBST([GDBUS_LIBS], ['$(top_builddir)/gdbus/libgdbus.la']) diff --git a/configure.in b/configure.in index 2ff5e3cf..d1ce1784 100644 --- a/configure.in +++ b/configure.in @@ -41,7 +41,6 @@ AC_OUTPUT([ lib/Makefile doc/Makefile sbc/Makefile - eglib/Makefile gdbus/Makefile common/Makefile plugins/Makefile diff --git a/eglib/Makefile.am b/eglib/Makefile.am deleted file mode 100644 index e6166090..00000000 --- a/eglib/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ - -if !GLIB -noinst_LTLIBRARIES = libeglib.la - -libeglib_la_SOURCES = glib.h gmain.h gmain.c gmodule.h gmodule.c -endif - -MAINTAINERCLEANFILES = Makefile.in diff --git a/eglib/glib.h b/eglib/glib.h deleted file mode 100644 index 5600a33e..00000000 --- a/eglib/glib.h +++ /dev/null @@ -1 +0,0 @@ -#include <gmain.h> diff --git a/eglib/gmain.c b/eglib/gmain.c deleted file mode 100644 index 3475fdbf..00000000 --- a/eglib/gmain.c +++ /dev/null @@ -1,1977 +0,0 @@ -#include <stdio.h> -#include <errno.h> -#include <fcntl.h> -#include <unistd.h> -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <limits.h> -#include <sys/time.h> -#include <time.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <fcntl.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <sys/file.h> -#include <ctype.h> -#include <dlfcn.h> -#include <dirent.h> -#include <signal.h> - -#include <gmain.h> - -struct timeout { - guint id; - guint interval; - struct timeval expiration; - gpointer data; - GSourceFunc function; -}; - -struct _GIOChannel { - int fd; - int ref_count; - gboolean closed; - gboolean close_on_unref; -}; - -struct child_watch { - guint id; - GPid pid; - GChildWatchFunc function; - gpointer user_data; -}; - -struct _GMainContext { - guint next_id; - glong next_timeout; - - GSList *timeouts; - GSList *proc_timeouts; - gboolean timeout_lock; - - GSList *io_watches; - GSList *proc_io_watches; - gboolean io_lock; - - GSList *child_watches; - GSList *proc_child_watches; - gboolean child_lock; -}; - -struct _GMainLoop { - gboolean is_running; - GMainContext *context; -}; - -struct _GDir -{ - DIR *dirp; -}; - -GIOError g_io_channel_read(GIOChannel *channel, gchar *buf, gsize count, - gsize *bytes_read) -{ - int fd = channel->fd; - gssize result; - - if (channel->closed) - return G_IO_STATUS_ERROR; - - /* At least according to the Debian manpage for read */ - if (count > SSIZE_MAX) - count = SSIZE_MAX; - -retry: - result = read (fd, buf, count); - - if (result < 0) { - *bytes_read = 0; - - switch (errno) { -#ifdef EINTR - case EINTR: - goto retry; -#endif -#ifdef EAGAIN - case EAGAIN: - return G_IO_STATUS_AGAIN; -#endif - default: - return G_IO_STATUS_ERROR; - } - } - - *bytes_read = result; - - return (result > 0) ? G_IO_STATUS_NORMAL : G_IO_STATUS_EOF; -} - -GIOError g_io_channel_write(GIOChannel *channel, const gchar *buf, gsize count, - gsize *bytes_written) -{ - int fd = channel->fd; - gssize result; - - if (channel->closed) - return G_IO_STATUS_ERROR; - - /* At least according to the Debian manpage for read */ - if (count > SSIZE_MAX) - count = SSIZE_MAX; - -retry: - result = write(fd, buf, count); - - if (result < 0) { - *bytes_written = 0; - - switch (errno) { -#ifdef EINTR - case EINTR: - goto retry; -#endif -#ifdef EAGAIN - case EAGAIN: - return G_IO_STATUS_AGAIN; -#endif - default: - return G_IO_STATUS_ERROR; - } - } - - *bytes_written = result; - - return (result > 0) ? G_IO_STATUS_NORMAL : G_IO_STATUS_EOF; -} - -void g_io_channel_close(GIOChannel *channel) -{ - if (!channel || channel->closed) - return; - - close(channel->fd); - - channel->closed = TRUE; -} - -void g_io_channel_unref(GIOChannel *channel) -{ - if (!channel) - return; - - if (--channel->ref_count > 0) - return; - - if (channel->close_on_unref && channel->fd >= 0) - g_io_channel_close(channel); - - g_free(channel); -} - -GIOChannel *g_io_channel_ref(GIOChannel *channel) -{ - channel->ref_count++; - return channel; -} - -GIOChannel *g_io_channel_unix_new(int fd) -{ - GIOChannel *channel; - - channel = g_new0(GIOChannel, 1); - - channel->fd = fd; - channel->ref_count = 1; - - return channel; -} - -void g_io_channel_set_close_on_unref(GIOChannel *channel, gboolean do_close) -{ - channel->close_on_unref = do_close; -} - -gint g_io_channel_unix_get_fd(GIOChannel *channel) -{ - if (channel->closed) - return -1; - - return channel->fd; -} - -static int set_flags(int fd, long flags) -{ - long arg; - - arg = fcntl(fd, F_GETFL); - if (arg < 0) - return -errno; - - /* Return if already set */ - if ((arg & flags) == flags) - return 0; - - arg |= flags; - if (fcntl(fd, F_SETFL, arg) < 0) - return -errno; - - return 0; -} - -GIOStatus g_io_channel_set_flags(GIOChannel *channel, GIOFlags flags, - GError **error) -{ - int err, fd; - long fd_flags = 0; - - if (!channel || channel->closed) - return G_IO_STATUS_ERROR; - - fd = g_io_channel_unix_get_fd(channel); - - if (flags & G_IO_FLAG_APPEND) - fd_flags |= O_APPEND; - if (flags & G_IO_FLAG_NONBLOCK) - fd_flags |= O_NONBLOCK; - - err = set_flags(fd, fd_flags); - if (err < 0) { - if (error) - g_set_error(error, 0, 0, "Unable to set flags: %s", - strerror(-err)); - return G_IO_STATUS_ERROR; - } - - return G_IO_STATUS_NORMAL; -} - -struct io_watch { - guint id; - GIOChannel *channel; - gint priority; - GIOCondition condition; - short *revents; - GIOFunc func; - gpointer user_data; - GDestroyNotify destroy; -}; - -static GMainContext *default_context = NULL; - -static void watch_free(struct io_watch *watch) -{ - if (watch->destroy) - watch->destroy(watch->user_data); - g_io_channel_unref(watch->channel); - g_free(watch); -} - -static GMainContext *g_main_context_default() -{ - if (default_context) - return default_context; - - default_context = g_new0(GMainContext, 1); - - default_context->next_timeout = -1; - default_context->next_id = 1; - - return default_context; -} - -static gboolean g_io_remove_watch(GMainContext *context, guint id) -{ - GSList *l; - struct io_watch *w; - - for (l = context->io_watches; l != NULL; l = l->next) { - w = l->data; - - if (w->id != id) - continue; - - context->io_watches = g_slist_remove(context->io_watches, w); - watch_free(w); - - return TRUE; - } - - for (l = context->proc_io_watches; l != NULL; l = l->next) { - w = l->data; - - if (w->id != id) - continue; - - context->proc_io_watches = g_slist_remove(context->proc_io_watches, w); - watch_free(w); - - return TRUE; - } - - return FALSE; -} - -static gboolean g_timeout_remove(GMainContext *context, const guint id) -{ - GSList *l; - struct timeout *t; - - l = context->timeouts; - - while (l) { - t = l->data; - l = l->next; - - if (t->id != id) - continue; - - context->timeouts = g_slist_remove(context->timeouts, t); - g_free(t); - - return TRUE; - } - - l = context->proc_timeouts; - - while (l) { - t = l->data; - l = l->next; - - if (t->id != id) - continue; - - context->proc_timeouts = g_slist_remove(context->proc_timeouts, t); - g_free(t); - - return TRUE; - } - - return FALSE; -} - -int watch_prio_cmp(struct io_watch *w1, struct io_watch *w2) -{ - return w1->priority - w2->priority; -} - -#define watch_list_add(l, w) g_slist_insert_sorted((l), (w), (GCompareFunc) watch_prio_cmp) - -guint g_io_add_watch_full(GIOChannel *channel, gint priority, - GIOCondition condition, GIOFunc func, - gpointer user_data, GDestroyNotify notify) -{ - struct io_watch *watch; - GMainContext *context = g_main_context_default(); - - watch = g_new(struct io_watch, 1); - - watch->id = context->next_id++; - watch->channel = g_io_channel_ref(channel); - watch->priority = priority; - watch->condition = condition; - watch->func = func; - watch->user_data = user_data; - watch->destroy = notify; - - if (context->io_lock) - context->proc_io_watches = watch_list_add(context->proc_io_watches, watch); - else - context->io_watches = watch_list_add(context->io_watches, watch); - - return watch->id; -} - -guint g_io_add_watch(GIOChannel *channel, GIOCondition condition, - GIOFunc func, gpointer user_data) -{ - return g_io_add_watch_full(channel, 0, condition, - func, user_data, NULL); -} - -GMainLoop *g_main_loop_new(GMainContext *context, gboolean is_running) -{ - GMainLoop *ml; - - if (!context) - context = g_main_context_default(); - - ml = g_new0(GMainLoop, 1); - - ml->context = context; - ml->is_running = is_running; - - return ml; -} - -static void timeout_handlers_prepare(GMainContext *context) -{ - GSList *l; - struct timeval tv; - glong msec, timeout = LONG_MAX; - - gettimeofday(&tv, NULL); - - for (l = context->timeouts; l != NULL; l = l->next) { - struct timeout *t = l->data; - - /* calculate the remainning time */ - msec = (t->expiration.tv_sec - tv.tv_sec) * 1000 + - (t->expiration.tv_usec - tv.tv_usec) / 1000; - if (msec < 0) - msec = 0; - - timeout = MIN_TIMEOUT(timeout, msec); - } - - /* set to min value found or NO timeout */ - context->next_timeout = (timeout != LONG_MAX ? timeout : -1); -} - -static int ptr_cmp(const void *t1, const void *t2) -{ - return t1 - t2; -} - -static void timeout_handlers_check(GMainContext *context) -{ - struct timeval tv; - - gettimeofday(&tv, NULL); - - context->timeout_lock = TRUE; - - while (context->timeouts) { - struct timeout *t = context->timeouts->data; - glong secs, msecs; - gboolean ret; - - if (timercmp(&tv, &t->expiration, <)) { - context->timeouts = g_slist_remove(context->timeouts, t); - context->proc_timeouts = g_slist_append(context->proc_timeouts, t); - continue; - } - - ret = t->function(t->data); - - /* Check if the handler was removed/freed by the callback - * function */ - if (!g_slist_find_custom(context->timeouts, t, ptr_cmp)) - continue; - - context->timeouts = g_slist_remove(context->timeouts, t); - - if (!ret) { - g_free(t); - continue; - } - - /* update the next expiration time */ - secs = t->interval / 1000; - msecs = t->interval - secs * 1000; - - t->expiration.tv_sec = tv.tv_sec + secs; - t->expiration.tv_usec = tv.tv_usec + msecs * 1000; - if (t->expiration.tv_usec >= 1000000) { - t->expiration.tv_usec -= 1000000; - t->expiration.tv_sec++; - } - - context->proc_timeouts = g_slist_append(context->proc_timeouts, t); - } - - context->timeouts = context->proc_timeouts; - context->proc_timeouts = NULL; - context->timeout_lock = FALSE; -} - -void g_main_loop_run(GMainLoop *loop) -{ - int open_max = sysconf(_SC_OPEN_MAX); - struct pollfd *ufds; - GMainContext *context = loop->context; - - ufds = g_new(struct pollfd, open_max); - - loop->is_running = TRUE; - - while (loop->is_running) { - int nfds; - GSList *l; - struct io_watch *w; - - for (nfds = 0, l = context->io_watches; l != NULL; l = l->next, nfds++) { - w = l->data; - ufds[nfds].fd = w->channel->fd; - ufds[nfds].events = w->condition; - ufds[nfds].revents = 0; - w->revents = &ufds[nfds].revents; - } - - /* calculate the next timeout */ - timeout_handlers_prepare(context); - - if (poll(ufds, nfds, context->next_timeout) < 0) - continue; - - context->io_lock = TRUE; - - while (context->io_watches) { - gboolean ret; - - w = context->io_watches->data; - - if (!*w->revents) { - context->io_watches = g_slist_remove(context->io_watches, w); - context->proc_io_watches = watch_list_add(context->proc_io_watches, w); - continue; - } - - ret = w->func(w->channel, *w->revents, w->user_data); - - /* Check if the watch was removed/freed by the callback - * function */ - if (!g_slist_find_custom(context->io_watches, w, ptr_cmp)) - continue; - - context->io_watches = g_slist_remove(context->io_watches, w); - - if (!ret) { - watch_free(w); - continue; - } - - context->proc_io_watches = watch_list_add(context->proc_io_watches, w); - } - - context->io_watches = context->proc_io_watches; - context->proc_io_watches = NULL; - context->io_lock = FALSE; - - /* check expired timers */ - timeout_handlers_check(loop->context); - } - - g_free(ufds); -} - -void g_main_loop_quit(GMainLoop *loop) -{ - loop->is_running = FALSE; -} - -void g_main_loop_unref(GMainLoop *loop) -{ - if (!loop->context) - return; - - g_slist_foreach(loop->context->io_watches, (GFunc)watch_free, NULL); - g_slist_free(loop->context->io_watches); - - g_slist_foreach(loop->context->timeouts, (GFunc)g_free, NULL); - g_slist_free(loop->context->timeouts); - - g_free(loop->context); - loop->context = NULL; -} - -guint g_timeout_add(guint interval, GSourceFunc function, gpointer data) -{ - GMainContext *context = g_main_context_default(); - struct timeval tv; - guint secs; - guint msecs; - struct timeout *t; - - t = g_new0(struct timeout, 1); - - t->interval = interval; - t->function = function; - t->data = data; - - gettimeofday(&tv, NULL); - - secs = interval /1000; - msecs = interval - secs * 1000; - - t->expiration.tv_sec = tv.tv_sec + secs; - t->expiration.tv_usec = tv.tv_usec + msecs * 1000; - - if (t->expiration.tv_usec >= 1000000) { - t->expiration.tv_usec -= 1000000; - t->expiration.tv_sec++; - } - - /* attach the timeout the default context */ - t->id = context->next_id++; - - if (context->timeout_lock) - context->proc_timeouts = g_slist_prepend(context->proc_timeouts, t); - else - context->timeouts = g_slist_prepend(context->timeouts, t); - - return t->id; -} - -guint g_timeout_add_seconds(guint interval, GSourceFunc function, gpointer data) -{ - return g_timeout_add(interval, function, data); -} - -guint g_idle_add(GSourceFunc function, gpointer data) -{ - return g_timeout_add(1, function, data); -} - -/* GError */ - -GError* g_error_new_literal(GQuark domain, gint code, const gchar *message) -{ - GError *err; - - err = g_new(GError, 1); - - err->domain = domain; - err->code = code; - err->message = g_strdup(message); - - return err; -} - -void g_set_error(GError **err, GQuark domain, gint code, - const gchar *format, ...) -{ - gchar msg[1024]; - va_list ap; - - if (!err) - return; - - va_start(ap, format); - - vsnprintf(msg, sizeof(msg) - 1, format, ap); - - va_end(ap); - - *err = g_error_new_literal(domain, code, msg); -} - -void g_error_free(GError *err) -{ - g_free(err->message); - g_free(err); -} - -/* Spawning related functions */ - -static int child_watch_pipe[2] = { -1, -1 }; - -static void sigchld_handler(int signal) -{ - int ret; - ret = write(child_watch_pipe[1], "B", 1); -} - -static gboolean child_watch_remove(GMainContext *context, guint id) -{ - GSList *l; - struct child_watch *w; - - for (l = context->child_watches; l != NULL; l = l->next) { - w = l->data; - - if (w->id != id) - continue; - - context->child_watches = - g_slist_remove(context->child_watches, w); - g_free(w); - - return TRUE; - } - - for (l = context->proc_child_watches; l != NULL; l = l->next) { - w = l->data; - - if (w->id != id) - continue; - - context->proc_child_watches = - g_slist_remove(context->proc_child_watches, w); - g_free(w); - - return TRUE; - } - - - return FALSE; -} - -static gboolean child_watch(GIOChannel *io, GIOCondition cond, gpointer user_data) -{ - int ret; - char b[20]; - GMainContext *context = g_main_context_default(); - - ret = read(child_watch_pipe[0], b, 20); - - context->child_lock = TRUE; - - while (context->child_watches) { - gint status; - struct child_watch *w = context->child_watches->data; - - if (waitpid(w->pid, &status, WNOHANG) <= 0) { - context->child_watches = - g_slist_remove(context->child_watches, w); - context->proc_child_watches = - watch_list_add(context->proc_child_watches, w); - continue; - } - - w->function(w->pid, status, w->user_data); - - /* Check if the callback already removed us */ - if (!g_slist_find(context->child_watches, w)) - continue; - - context->child_watches = g_slist_remove(context->child_watches, w); - g_free(w); - } - - context->child_watches = context->proc_child_watches; - context->proc_child_watches = NULL; - context->child_lock = FALSE; - - return TRUE; -} - -static void init_child_pipe(void) -{ - struct sigaction action; - GIOChannel *io; - - if (pipe(child_watch_pipe) < 0) { - fprintf(stderr, "Unable to initialize child watch pipe: %s (%d)\n", - strerror(errno), errno); - abort(); - } - - fcntl(child_watch_pipe[1], F_SETFL, - O_NONBLOCK | fcntl(child_watch_pipe[1], F_GETFL)); - - action.sa_handler = sigchld_handler; - sigemptyset(&action.sa_mask); - action.sa_flags = SA_NOCLDSTOP; - sigaction(SIGCHLD, &action, NULL); - - io = g_io_channel_unix_new(child_watch_pipe[0]); - g_io_add_watch(io, G_IO_IN, child_watch, NULL); - g_io_channel_unref(io); -} - -static void exec_child(const gchar *working_directory, - gchar **argv, gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data) -{ - int null; - - if (working_directory && chdir(working_directory) < 0) - _exit(EXIT_FAILURE); - - if (!(flags & G_SPAWN_LEAVE_DESCRIPTORS_OPEN)) { - int open_max, fd, ret; - - ret = 0; - open_max = sysconf(_SC_OPEN_MAX); - for (fd = 3; fd < open_max && ret == 0; fd++) - ret = fcntl(fd, F_SETFD, FD_CLOEXEC); - } - - null = open("/dev/null", O_RDWR); - if (!(flags & G_SPAWN_CHILD_INHERITS_STDIN)) - dup2(null, STDIN_FILENO); - if (flags & G_SPAWN_STDOUT_TO_DEV_NULL) - dup2(null, STDOUT_FILENO); - if (flags & G_SPAWN_STDERR_TO_DEV_NULL) - dup2(null, STDERR_FILENO); - if (null > 2) - close(null); - - if (child_setup) - child_setup(user_data); - - if (envp) - execve(argv[0], argv, envp); - else - execv(argv[0], argv); - - /* exec failed if we get here */ - _exit(EXIT_FAILURE); -} - -gboolean g_spawn_async(const gchar *working_directory, - gchar **argv, gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - GError **error) -{ - GPid pid; - - if (access(argv[0], X_OK) < 0) { - g_set_error(error, 0, 0, "%s is not executable", argv[0]); - return FALSE; - } - - if (child_watch_pipe[0] < 0) - init_child_pipe(); - - /* Flush output streams so child doesn't get them */ - fflush(NULL); - - switch (pid = fork()) { - case -1: - g_set_error(error, 0, 0, "fork failed: %s", strerror(errno)); - return FALSE; - case 0: - exec_child(working_directory, argv, envp, flags, - child_setup, user_data); - break; - default: - if (child_pid) - *child_pid = pid; - return TRUE; - } - - /* Never reached */ - return FALSE; -} - -void g_spawn_close_pid(GPid pid) -{ - return; -} - -guint g_child_watch_add(GPid pid, GChildWatchFunc func, gpointer user_data) -{ - struct child_watch *w; - GMainContext *context = g_main_context_default(); - - if (child_watch_pipe[0] < 0) - init_child_pipe(); - - w = g_new(struct child_watch, 1); - - w->id = context->next_id++; - w->pid = pid; - w->function = func; - w->user_data = user_data; - - if (context->child_lock) - context->proc_child_watches = - watch_list_add(context->proc_child_watches, w); - else - context->child_watches = - watch_list_add(context->child_watches, w); - - return w->id; -} - -gboolean g_source_remove(guint tag) -{ - GMainContext *context = g_main_context_default(); - - if (g_io_remove_watch(context, tag)) - return TRUE; - - if (g_timeout_remove(context, tag)) - return TRUE; - - if (child_watch_remove(context, tag)) - return TRUE; - - return FALSE; -} - -/* UTF-8 Validation: approximate copy/paste from glib2. */ - -#define UNICODE_VALID(c) \ - ((c) < 0x110000 && \ - (((c) & 0xFFFFF800) != 0xD800) && \ - ((c) < 0xFDD0 || (c) > 0xFDEF) && \ - ((c) & 0xFFFE) != 0xFFFE) - -#define CONTINUATION_CHAR(c, val) \ - do { \ - if (((c) & 0xc0) != 0x80) /* 10xxxxxx */ \ - goto failed; \ - (val) <<= 6; \ - (val) |= (c) & 0x3f; \ - } while (0) - -#define INCREMENT_AND_CHECK_MAX(p, i, max_len) \ - do { \ - (i)++; \ - if ((p)[(i)] == '\0' || ((max_len) >= 0 && (i) >= (max_len))) \ - goto failed; \ - } while (0) - - -gboolean g_utf8_validate(const gchar *str, gssize max_len, const gchar **end) -{ - unsigned long val, min, i; - const unsigned char *p, *last; - - min = val = 0; - - for (p = (unsigned char *) str, i = 0; p[i]; i++) { - if (max_len >= 0 && i >= max_len) - break; - - if (p[i] < 128) - continue; - - last = &p[i]; - - if ((p[i] & 0xe0) == 0xc0) { /* 110xxxxx */ - if ((p[i] & 0x1e) == 0) - goto failed; - INCREMENT_AND_CHECK_MAX(p, i, max_len); - if ((p[i] & 0xc0) != 0x80) - goto failed; /* 10xxxxxx */ - } else { - if ((p[i] & 0xf0) == 0xe0) { - /* 1110xxxx */ - min = (1 << 11); - val = p[i] & 0x0f; - goto two_remaining; - } else if ((p[i] & 0xf8) == 0xf0) { - /* 11110xxx */ - min = (1 << 16); - val = p[i] & 0x07; - } else - goto failed; - - INCREMENT_AND_CHECK_MAX(p, i, max_len); - CONTINUATION_CHAR(p[i], val); -two_remaining: - INCREMENT_AND_CHECK_MAX(p, i, max_len); - CONTINUATION_CHAR(p[i], val); - - INCREMENT_AND_CHECK_MAX(p, i, max_len); - CONTINUATION_CHAR(p[i], val); - - if (val < min || !UNICODE_VALID(val)) - goto failed; - } - } - - if (end) - *end = (const gchar *) &p[i]; - - return TRUE; - -failed: - if (end) - *end = (const gchar *) last; - - return FALSE; -} - -/* GSList functions */ - -GSList *g_slist_append(GSList *list, void *data) -{ - GSList *entry, *tail; - - entry = g_new(GSList, 1); - - entry->data = data; - entry->next = NULL; - - if (!list) - return entry; - - /* Find the end of the list */ - for (tail = list; tail->next; tail = tail->next); - - tail->next = entry; - - return list; -} - -GSList *g_slist_prepend(GSList *list, void *data) -{ - GSList *entry; - - entry = g_new(GSList, 1); - - entry->data = data; - entry->next = list; - - return entry; -} - -GSList *g_slist_insert_sorted(GSList *list, void *data, GCompareFunc cmp_func) -{ - GSList *tmp, *prev, *entry; - int cmp; - - entry = g_new(GSList, 1); - - entry->data = data; - entry->next = NULL; - - if (!list) - return entry; - - prev = NULL; - tmp = list; - - cmp = cmp_func(data, tmp->data); - - while (tmp->next && cmp > 0) { - prev = tmp; - tmp = tmp->next; - - cmp = cmp_func(data, tmp->data); - } - - if (!tmp->next && cmp > 0) { - tmp->next = entry; - return list; - } - - if (prev) { - prev->next = entry; - entry->next = tmp; - return list; - } else { - entry->next = list; - return entry; - } -} - -GSList *g_slist_remove(GSList *list, void *data) -{ - GSList *l, *next, *prev = NULL, *match = NULL; - - if (!list) - return NULL; - - for (l = list; l != NULL; l = l->next) { - if (l->data == data) { - match = l; - break; - } - prev = l; - } - - if (!match) - return list; - - next = match->next; - - g_free(match); - - /* If the head was removed, return the next element */ - if (!prev) - return next; - - prev->next = next; - - return list; -} - -GSList *g_slist_find(GSList *list, gconstpointer data) -{ - GSList *l; - - for (l = list; l != NULL; l = l->next) { - if (l->data == data) - return l; - } - - return NULL; -} - -GSList *g_slist_find_custom(GSList *list, const void *data, - GCompareFunc cmp_func) -{ - GSList *l; - - for (l = list; l != NULL; l = l->next) { - if (!cmp_func(l->data, data)) - return l; - } - - return NULL; -} - -static GSList *g_slist_sort_merge(GSList *l1, GSList *l2, - GCompareFunc cmp_func) -{ - GSList list, *l; - int cmp; - - l = &list; - - while (l1 && l2) { - cmp = cmp_func(l1->data, l2->data); - - if (cmp <= 0) { - l = l->next = l1; - l1 = l1->next; - } else { - l = l->next = l2; - l2 = l2->next; - } - } - - l->next = l1 ? l1 : l2; - - return list.next; -} - -GSList *g_slist_sort(GSList *list, GCompareFunc cmp_func) -{ - GSList *l1, *l2; - - if (!list || !list->next) - return list; - - l1 = list; - l2 = list->next; - - while ((l2 = l2->next) != NULL) { - if ((l2 = l2->next) == NULL) - break; - l1 = l1->next; - } - - l2 = l1->next; - l1->next = NULL; - - return g_slist_sort_merge(g_slist_sort(list, cmp_func), - g_slist_sort(l2, cmp_func), cmp_func); -} - -int g_slist_length(GSList *list) -{ - int len; - - for (len = 0; list != NULL; list = list->next) - len++; - - return len; -} - -void g_slist_foreach(GSList *list, GFunc func, void *user_data) -{ - while (list) { - GSList *next = list->next; - func(list->data, user_data); - list = next; - } -} - -void g_slist_free(GSList *list) -{ - GSList *l, *next; - - for (l = list; l != NULL; l = next) { - next = l->next; - g_free(l); - } -} - -GSList *g_slist_nth(GSList *list, guint n) -{ - while (n-- > 0 && list) - list = list->next; - - return list; -} - -gpointer g_slist_nth_data(GSList *list, guint n) -{ - while (n-- > 0 && list) - list = list->next; - - return list ? list->data : NULL; -} - -gint g_slist_position(GSList *list, GSList *link) -{ - gint i; - - for (i = 0; list; list = list->next, i++) { - if (list == link) - return i; - } - - return -1; -} - -GSList* g_slist_last(GSList *list) -{ - if (list) - while (list->next) - list = list->next; - - return list; -} - -static inline GSList* _g_slist_remove_link(GSList *list, GSList *link) -{ - GSList *tmp; - GSList *prev; - - prev = NULL; - tmp = list; - - while (tmp) { - if (tmp == link) { - if (prev) - prev->next = tmp->next; - if (list == tmp) - list = list->next; - - tmp->next = NULL; - break; - } - - prev = tmp; - tmp = tmp->next; - } - - return list; -} - -GSList* g_slist_delete_link(GSList *list, GSList *link) -{ - list = _g_slist_remove_link(list, link); - g_free(link); - - return list; -} - -/* Memory allocation functions */ - -gpointer g_malloc(gulong n_bytes) -{ - gpointer mem; - - if (!n_bytes) - return NULL; - - mem = malloc((size_t) n_bytes); - if (!mem) { - fprintf(stderr, "g_malloc: failed to allocate %lu bytes", - n_bytes); - abort(); - } - - return mem; -} - -gpointer g_malloc0(gulong n_bytes) -{ - gpointer mem; - - if (!n_bytes) - return NULL; - - mem = g_malloc(n_bytes); - - memset(mem, 0, (size_t) n_bytes); - - return mem; -} - -gpointer g_try_malloc(gulong n_bytes) -{ - if (!n_bytes) - return NULL; - - return malloc((size_t) n_bytes); -} - -gpointer g_try_malloc0(gulong n_bytes) -{ - gpointer mem; - - mem = g_try_malloc(n_bytes); - if (mem) - memset(mem, 0, (size_t) n_bytes); - - return mem; -} - -gpointer g_realloc(gpointer mem, gulong n_bytes) -{ - mem = realloc(mem, n_bytes); - if (!mem) { - fprintf(stderr, "g_realloc: failed to allocate %lu bytes", - n_bytes); - abort(); - } - - return mem; -} - -void g_free(gpointer mem) -{ - if (mem) - free(mem); -} - -gchar *g_strdup(const gchar *str) -{ - gchar *s; - - if (!str) - return NULL; - - s = strdup(str); - if (!s) { - fprintf(stderr, "strdup: failed to allocate new string"); - abort(); - } - - return s; -} - -gchar *g_strdup_printf(const gchar *format, ...) -{ - va_list args; - gchar buffer[1024]; - gint length; - - va_start(args, format); - length = vsnprintf(buffer, sizeof(buffer) - 1, format, args); - va_end(args); - - return g_strdup(buffer); -} - -gchar *g_strdelimit(gchar *string, const gchar *delimiters, gchar new_delim) -{ - register gchar *c; - - if (!string) - return NULL; - - for (c = string; *c; c++) - if (strchr(delimiters, *c)) - *c = 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; -} - -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; - 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 = INT_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; -} - -gchar *g_ascii_strup(const gchar *str, gssize len) -{ - int i; - gchar *s; - - s = g_strdup(str); - if (!s) - return NULL; - - if (len < 0) - len = strlen(s); - - for (i = 0; i < len; i++) - s[i] = toupper(s[i]); - - return s; -} - -gboolean g_str_equal(gconstpointer v1, gconstpointer v2) -{ - const gchar *string1 = v1; - const gchar *string2 = 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; -} - -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; -} - -void g_strfreev(gchar **str_array) -{ - int i; - - if (str_array == NULL) - return; - - for(i = 0; str_array[i] != NULL; i++) - g_free(str_array[i]); - - g_free(str_array); -} - -/* GKeyFile */ - -struct _GKeyFile { - gchar *filename; -}; - -GKeyFile *g_key_file_new(void) -{ - return g_new0(GKeyFile, 1); -} - -void g_key_file_free(GKeyFile *key_file) -{ - g_free(key_file->filename); - g_free(key_file); -} - -gboolean g_key_file_load_from_file(GKeyFile *key_file, - const gchar *file, - GKeyFileFlags flags, - GError **error) -{ - key_file->filename = g_strdup(file); - return TRUE; -} - -static char *next_line(const char *ptr) -{ - char *nl; - - nl = strchr(ptr, '\n'); - if (!nl) - return NULL; - - if (nl[1] == '\0') - return NULL; - - return nl + 1; -} - -gchar *g_key_file_get_string(GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) -{ - struct stat st; - char *map, *line, *group = NULL, *value = NULL; - off_t size; - size_t key_len, group_len; - int fd, err = 0; - - fd = open(key_file->filename, O_RDONLY); - if (fd < 0) { - g_set_error(error, 0, 0, "%s: %s", key_file->filename, - strerror(errno)); - return NULL; - } - - if (flock(fd, LOCK_SH) < 0) { - err = errno; - goto close; - } - - if (fstat(fd, &st) < 0) { - err = errno; - goto unlock; - } - - size = st.st_size; - - map = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); - if (!map || map == MAP_FAILED) { - err = errno; - goto unlock; - } - - group_len = strlen(group_name); - key_len = strlen(key); - - for (line = map; line != NULL; line = next_line(line)) { - int i; - size_t to_copy, value_len; - char tmp[1024], *nl; - - if (*line == '#') - continue; - - if (!group) { - if (line[0] != '[' || strncmp(line + 1, group_name, group_len)) - continue; - if (line[group_len + 1] == ']') - group = line + 1; - continue; - } - - if (strncmp(line, key, key_len)) - continue; - - for (i = key_len; line[i] != '\n'; i++) { - if (line[i] == '=') - break; - if (!isspace(line[i])) - break; - } - - if (line[i] != '=') - continue; - - nl = strchr(line, '\n'); - if (!nl) - continue; - - value_len = nl - (line + i + 1); - to_copy = value_len > (sizeof(tmp) - 1) ? sizeof(tmp) - 1 : value_len; - memset(tmp, 0, sizeof(tmp)); - strncpy(tmp, line + i + 1, to_copy); - - value = g_strdup(tmp); - break; - } - - munmap(map, size); - -unlock: - flock(fd, LOCK_UN); - -close: - close(fd); - - if (err) - g_set_error(error, 0, 0, "%s: %s", key_file->filename, - strerror(err)); - else if (!group) - g_set_error(error, 0, 0, "%s: group %s not found", - key_file->filename, group_name); - else if (!value) - g_set_error(error, 0, 0, "%s: key %s not found", - key_file->filename, key); - - return value; -} - -gboolean g_key_file_get_boolean(GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) -{ - gboolean ret; - gchar *str; - - str = g_key_file_get_string(key_file, group_name, key, error); - if (!str) - return FALSE; - - if (strcmp(str, "true") == 0 || strcmp(str, "1") == 0) - ret = TRUE; - else - ret = FALSE; - - g_free(str); - - return ret; -} - -gint g_key_file_get_integer(GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) -{ - int ret; - gchar *str; - - str = g_key_file_get_string(key_file, group_name, key, error); - if (!str) - return 0; - - ret = atoi(str); - - g_free(str); - - return ret; -} - -gchar **g_key_file_get_string_list(GKeyFile *key_file, const gchar *group_name, - const gchar *key, gsize *length, - GError **error) -{ - gchar *str, *item, **list; - int items = 0; - - str = g_key_file_get_string(key_file, group_name, key, error); - if (!str) - return NULL; - - items = 0; - list = g_new0(char *, 1); - - item = strtok(str, ","); - while (item) { - items++; - - list = g_renew(char *, list, items + 1); - - list[items - 1] = g_strdup(item); - list[items] = NULL; - - item = strtok(NULL, ","); - } - - g_free(str); - - return list; -} - -/* GString */ - -#define MY_MAXSIZE ((gsize)-1) - -static gsize nearest_power(gsize base, gsize num) -{ - gsize n = base; - - if (num > MY_MAXSIZE / 2) - return MY_MAXSIZE; - - while (n < num) - n <<= 1; - - return n; -} - -static void g_string_maybe_expand(GString *string, gsize len) -{ - if (string->len + len < string->allocated_len) - return; - - string->allocated_len = nearest_power(1, string->len + len + 1); - string->str = g_realloc(string->str, string->allocated_len); -} - -static GString *g_string_sized_new(gsize dfl_size) -{ - GString *string; - - string = g_new0(GString, 1); - - g_string_maybe_expand(string, dfl_size); - string->str[0] = '\0'; - - return string; -} - -static GString *g_string_append_len(GString *string, const gchar *val, gssize len) -{ - g_string_maybe_expand(string, len); - - if (len == 1) - string->str[string->len] = *val; - else - memcpy(string->str + string->len, val, len); - - string->len += len; - string->str[string->len] = '\0'; - - return string; -} - -GString *g_string_new(const gchar *init) -{ - GString *string; - gint len; - - if (init == NULL || *init == '\0') - return g_string_sized_new(2); - - len = strlen(init); - string = g_string_sized_new(len + 2); - - g_string_append_len(string, init, len); - - return string; -} - -void g_string_append_printf(GString *string, const gchar *format, ...) -{ - gchar buffer[1024]; - gint length; - va_list args; - - va_start(args, format); - length = vsnprintf(buffer, sizeof(buffer) - 1, format, args); - va_end(args); - - g_string_append_len(string, buffer, length); -} - -gchar *g_string_free(GString *string, gboolean free_segment) -{ - gchar *segment; - - if (free_segment) { - g_free(string->str); - segment = NULL; - } else - segment = string->str; - - g_free(string); - - return segment; -} - -/* GMarkup */ - -struct _GMarkupParseContext { - char dummy; -}; - -GMarkupParseContext *g_markup_parse_context_new(const GMarkupParser *parser, - GMarkupParseFlags flags, - gpointer user_data, - GDestroyNotify user_data_dnotify) -{ - return g_new0(GMarkupParseContext, 1); -} - -gboolean g_markup_parse_context_parse(GMarkupParseContext *context, - const gchar *text, gssize text_len, - GError **error) -{ - g_set_error(error, 0, 0, "Not implemented"); - return FALSE; -} - -void g_markup_parse_context_free(GMarkupParseContext *context) -{ - g_free(context); -} - -static gchar *g_build_pathname_va(const gchar *first_element, - va_list args, gpointer *data) -{ - 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, ...) -{ - 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 */ - -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 && (strcmp(entry->d_name, ".") == 0 || - strcmp(entry->d_name, "..") == 0)) - entry = readdir(dir->dirp); - - return entry ? entry->d_name : NULL; -} - -void g_dir_close(GDir *dir) -{ - if (dir == NULL) - return; - - closedir(dir->dirp); - g_free(dir); -} diff --git a/eglib/gmain.h b/eglib/gmain.h deleted file mode 100644 index fa218da4..00000000 --- a/eglib/gmain.h +++ /dev/null @@ -1,404 +0,0 @@ -#ifndef __GMAIN_H -#define __GMAIN_H - -#include <stdlib.h> -#include <sys/poll.h> -#include <sys/types.h> -#include <netinet/in.h> -#include <inttypes.h> - -typedef char gchar; -typedef short gshort; -typedef long glong; -typedef int gint; -typedef gint gboolean; - -typedef unsigned char guchar; -typedef unsigned short gushort; -typedef unsigned long gulong; -typedef unsigned int guint; - -typedef uint8_t guint8; -typedef uint16_t guint16; -typedef uint32_t guint32; - -typedef float gfloat; -typedef double gdouble; - -typedef void * gpointer; -typedef const void * gconstpointer; - -typedef size_t gsize; -typedef ssize_t gssize; - -#define GPOINTER_TO_INT(p) ((gint) (glong) (p)) -#define GPOINTER_TO_UINT(p) ((guint) (gulong) (p)) - -#define GINT_TO_POINTER(i) ((gpointer) (glong) (i)) -#define GUINT_TO_POINTER(u) ((gpointer) (gulong) (u)) - -#ifndef SSIZE_MAX -#define SSIZE_MAX INT_MAX -#endif - -#define g_ntohs(val) ntohs(val) -#define g_ntohl(val) ntohl(val) -#define g_htons(val) htons(val) -#define g_htonl(val) htonl(val) - -typedef pid_t GPid; - -#define MIN_TIMEOUT(a, b) (((a) < (b)) ? (a) : (b)) - -typedef struct _GIOChannel GIOChannel; - -typedef gboolean (*GSourceFunc) (gpointer data); - -typedef struct _GMainContext GMainContext; - -typedef struct _GMainLoop GMainLoop; - -typedef enum { - G_IO_ERROR_NONE, - G_IO_ERROR_AGAIN, - G_IO_ERROR_INVAL, - G_IO_ERROR_UNKNOWN -} GIOError; - -typedef enum { - G_IO_STATUS_ERROR = -1, - G_IO_STATUS_NORMAL = 0, - G_IO_STATUS_EOF = 1, - G_IO_STATUS_AGAIN = 2 -} GIOStatus; - -typedef enum { - G_IO_FLAG_APPEND = 1 << 0, - G_IO_FLAG_NONBLOCK = 1 << 1, - G_IO_FLAG_IS_READABLE = 1 << 2, - G_IO_FLAG_IS_WRITEABLE = 1 << 3, - G_IO_FLAG_IS_SEEKABLE = 1 << 4, - G_IO_FLAG_MASK = (1 << 5) - 1, - G_IO_FLAG_GET_MASK = G_IO_FLAG_MASK, - G_IO_FLAG_SET_MASK = G_IO_FLAG_APPEND | G_IO_FLAG_NONBLOCK -} GIOFlags; - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -#undef MAX -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - -#undef MIN -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) - -#undef ABS -#define ABS(a) (((a) < 0) ? -(a) : (a)) - -#undef CLAMP -#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) - -/* GError */ - -typedef guint32 GQuark; - -typedef struct { - GQuark domain; - gint code; - gchar *message; -} GError; - -void g_set_error(GError **err, GQuark domain, gint code, - const gchar *format, ...); -GError* g_error_new_literal(GQuark domain, gint code, const gchar *message); -void g_error_free(GError *err); - -typedef enum { - G_IO_IN = POLLIN, - G_IO_OUT = POLLOUT, - G_IO_PRI = POLLPRI, - G_IO_ERR = POLLERR, - G_IO_HUP = POLLHUP, - G_IO_NVAL = POLLNVAL -} GIOCondition; - -#define G_PRIORITY_HIGH -100 -#define G_PRIORITY_DEFAULT 0 -#define G_PRIORITY_HIGH_IDLE 100 -#define G_PRIORITY_DEFAULT_IDLE 200 -#define G_PRIORITY_LOW 300 - -typedef void (*GDestroyNotify) (gpointer data); -typedef gboolean (*GIOFunc) (GIOChannel *source, GIOCondition condition, - gpointer data); - -GIOError g_io_channel_read(GIOChannel *channel, gchar *buf, gsize count, - gsize *bytes_read); -GIOError g_io_channel_write(GIOChannel *channel, const gchar *buf, gsize count, - gsize *bytes_written); - -void g_io_channel_close(GIOChannel *channel); - -GIOChannel *g_io_channel_unix_new(int fd); -GIOChannel *g_io_channel_ref(GIOChannel *channel); -void g_io_channel_unref(GIOChannel *channel); -void g_io_channel_set_close_on_unref(GIOChannel *channel, gboolean do_close); -gint g_io_channel_unix_get_fd(GIOChannel *channel); -GIOStatus g_io_channel_set_flags(GIOChannel *channel, GIOFlags flags, - GError **error); -guint g_io_add_watch(GIOChannel *channel, GIOCondition condition, - GIOFunc func, gpointer user_data); -guint g_io_add_watch_full(GIOChannel *channel, gint priority, - GIOCondition condition, GIOFunc func, - gpointer user_data, GDestroyNotify notify); - -GMainLoop *g_main_loop_new(GMainContext *context, gboolean is_running); -void g_main_loop_run(GMainLoop *loop); -void g_main_loop_quit(GMainLoop *loop); -void g_main_loop_unref(GMainLoop *loop); -guint g_timeout_add(guint interval, GSourceFunc function, gpointer data); -guint g_timeout_add_seconds(guint interval, GSourceFunc function, gpointer data); -guint g_idle_add(GSourceFunc function, gpointer data); -gboolean g_source_remove(guint tag); - -/* Spawning related functions */ - -typedef enum { - G_SPAWN_LEAVE_DESCRIPTORS_OPEN = 1 << 0, - G_SPAWN_DO_NOT_REAP_CHILD = 1 << 1, - /* look for argv[0] in the path i.e. use execvp() */ - G_SPAWN_SEARCH_PATH = 1 << 2, - /* Dump output to /dev/null */ - G_SPAWN_STDOUT_TO_DEV_NULL = 1 << 3, - G_SPAWN_STDERR_TO_DEV_NULL = 1 << 4, - G_SPAWN_CHILD_INHERITS_STDIN = 1 << 5, - G_SPAWN_FILE_AND_ARGV_ZERO = 1 << 6 -} GSpawnFlags; - -typedef void (*GSpawnChildSetupFunc) (gpointer user_data); - -gboolean g_spawn_async(const gchar *working_directory, - gchar **argv, gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - GError **error); - -void g_spawn_close_pid(GPid pid); - -typedef void (*GChildWatchFunc) (GPid pid, gint status, gpointer data); - -guint g_child_watch_add(GPid pid, GChildWatchFunc func, gpointer user_data); - -gboolean g_utf8_validate(const gchar *str, gssize max_len, const gchar **end); - -#define g_main_new(is_running) g_main_loop_new(NULL, is_running); -#define g_main_run(loop) g_main_loop_run(loop) -#define g_main_quit(loop) g_main_loop_quit(loop) -#define g_main_unref(loop) g_main_loop_unref(loop) - -/* GSList declarations */ - -typedef struct _GSList { - void *data; - struct _GSList *next; -} GSList; - -typedef int (*GCompareFunc)(const void *a, const void *b); -typedef void (*GFunc)(void *data, void *user_data); - -GSList *g_slist_append(GSList *list, void *data); - -GSList *g_slist_prepend(GSList *list, void *data); - -GSList *g_slist_insert_sorted(GSList *list, void *data, GCompareFunc cmp_func); - -GSList *g_slist_remove(GSList *list, void *data); - -GSList *g_slist_find(GSList *list, gconstpointer data); - -GSList *g_slist_find_custom(GSList *list, const void *data, - GCompareFunc cmp_func); - -GSList *g_slist_sort(GSList *list, GCompareFunc cmp_func); - -int g_slist_length(GSList *list); - -void g_slist_foreach(GSList *list, GFunc func, void *user_data); -void g_slist_free(GSList *list); -GSList *g_slist_delete_link(GSList *list, GSList *link); - -GSList *g_slist_nth(GSList *list, guint n); -gpointer g_slist_nth_data(GSList *list, guint n); -int g_slist_position(GSList *list, GSList *link); -GSList* g_slist_last(GSList *list); - -#define g_slist_next(l) ((l)->next) - -/* Memory allocation related */ - -gpointer g_malloc(gulong n_bytes); -gpointer g_malloc0(gulong n_bytes); -gpointer g_try_malloc(gulong n_bytes); -gpointer g_try_malloc0(gulong n_bytes); -gpointer g_realloc(gpointer mem, gulong n_bytes); - -void g_free(gpointer mem); - -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); -gchar *g_ascii_strup(const gchar *str, gssize len); -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); -void g_strfreev(gchar **str_array); - -#define g_new(struct_type, n_structs) \ - ((struct_type *) g_malloc (((gsize) sizeof (struct_type)) * ((gsize) (n_structs)))) -#define g_new0(struct_type, n_structs) \ - ((struct_type *) g_malloc0 (((gsize) sizeof (struct_type)) * ((gsize) (n_structs)))) -#define g_try_new(struct_type, n_structs) \ - ((struct_type *) g_try_malloc (((gsize) sizeof (struct_type)) * ((gsize) (n_structs)))) -#define g_try_new0(struct_type, n_structs) \ - ((struct_type *) g_try_malloc0 (((gsize) sizeof (struct_type)) * ((gsize) (n_structs)))) -#define g_renew(struct_type, mem, n_structs) \ - ((struct_type *) g_realloc ((mem), ((gsize) sizeof (struct_type)) * ((gsize) (n_structs)))) - -/* GKeyFile */ - -typedef enum { - G_KEY_FILE_NONE = 0, - G_KEY_FILE_KEEP_COMMENTS = 1 << 0, - G_KEY_FILE_KEEP_TRANSLATIONS = 1 << 1 -} GKeyFileFlags; - -typedef struct _GKeyFile GKeyFile; - -GKeyFile *g_key_file_new(void); - -void g_key_file_free(GKeyFile *key_file); - -gboolean g_key_file_load_from_file(GKeyFile *key_file, - const gchar *file, - GKeyFileFlags flags, - GError **error); - -gchar *g_key_file_get_string(GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); - -gboolean g_key_file_get_boolean(GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); - -gint g_key_file_get_integer(GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); - -gchar **g_key_file_get_string_list(GKeyFile *key_file, - const gchar *group_name, - const gchar *key, gsize *length, - GError **error); -/* GString */ - -typedef struct { - gchar *str; - gsize len; - gsize allocated_len; -} GString; - -GString *g_string_new(const gchar *init); - -void g_string_append_printf(GString *string, const gchar *format, ...); - -gchar *g_string_free(GString *string, gboolean free_segment); - -/* GMarkup */ - -typedef enum { - G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0, - G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1 -} GMarkupParseFlags; - -typedef struct _GMarkupParseContext GMarkupParseContext; -typedef struct _GMarkupParser GMarkupParser; - -struct _GMarkupParser { - /* Called for open tags <foo bar="baz"> */ - void (*start_element) (GMarkupParseContext *context, - const gchar *element_name, - const gchar **attribute_names, - const gchar **attribute_values, - gpointer user_data, - GError **error); - - /* Called for close tags </foo> */ - void (*end_element) (GMarkupParseContext *context, - const gchar *element_name, - gpointer user_data, - GError **error); - - /* Called for character data */ - /* text is not nul-terminated */ - void (*text) (GMarkupParseContext *context, - const gchar *text, - gsize text_len, - gpointer user_data, - GError **error); - - /* Called for strings that should be re-saved verbatim in this same - * position, but are not otherwise interpretable. At the moment - * this includes comments and processing instructions. - */ - /* text is not nul-terminated. */ - void (*passthrough) (GMarkupParseContext *context, - const gchar *passthrough_text, - gsize text_len, - gpointer user_data, - GError **error); - - /* Called on error, including one set by other - * methods in the vtable. The GError should not be freed. - */ - void (*error) (GMarkupParseContext *context, - GError *error, - gpointer user_data); -}; - -GMarkupParseContext *g_markup_parse_context_new(const GMarkupParser *parser, - GMarkupParseFlags flags, - gpointer user_data, - GDestroyNotify user_data_dnotify); - -gboolean g_markup_parse_context_parse(GMarkupParseContext *context, - const gchar *text, gssize text_len, - GError **error); - -void g_markup_parse_context_free(GMarkupParseContext *context); - -/* GDir */ - -typedef struct _GDir GDir; - -GDir *g_dir_open(const gchar *path, guint flags, GError **error); -const gchar *g_dir_read_name(GDir *dir); -void g_dir_close(GDir *dir); - -/* Various */ - -gchar *g_build_filename(const gchar *first_element, ...); - -#endif /* __GMAIN_H */ diff --git a/eglib/gmodule.c b/eglib/gmodule.c deleted file mode 100644 index 7224a9f6..00000000 --- a/eglib/gmodule.c +++ /dev/null @@ -1,88 +0,0 @@ -#include <stdio.h> -#include <errno.h> -#include <unistd.h> -#include <stdlib.h> -#include <string.h> -#include <errno.h> -#include <dlfcn.h> - -#include <gmain.h> -#include <gmodule.h> - -struct _GModule { - void *handle; - gchar *file_name; -}; - -static const char *dl_error_string = NULL; - -GModule *g_module_open(const gchar *file_name, GModuleFlags flags) -{ - GModule *module; - - module = g_try_new0(GModule, 1); - if (module == NULL) { - dl_error_string = strerror(ENOMEM); - return NULL; - } - - module->handle = dlopen(file_name, flags); - - if (module->handle == NULL) { - dl_error_string = dlerror(); - g_free(module); - return NULL; - } - - module->file_name = g_strdup(file_name); - - return module; -} - -gboolean g_module_symbol(GModule *module, const gchar *symbol_name, - gpointer *symbol) -{ - void *sym; - - dlerror(); - sym = dlsym(module->handle, symbol_name); - dl_error_string = dlerror(); - - if (dl_error_string != NULL) - return FALSE; - - *symbol = sym; - - return TRUE; -} - -gboolean g_module_close(GModule *module) -{ - if (dlclose(module->handle) != 0) { - dl_error_string = dlerror(); - return FALSE; - } - - g_free(module->file_name); - g_free(module); - - return TRUE; -} - -const gchar *g_module_error(void) -{ - const char *str; - - str = dl_error_string; - dl_error_string = NULL; - - return str; -} - -const gchar *g_module_name(GModule *module) -{ - if (module == NULL) - return NULL; - - return module->file_name; -} diff --git a/eglib/gmodule.h b/eglib/gmodule.h deleted file mode 100644 index e392d5c8..00000000 --- a/eglib/gmodule.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __GMODULE_H -#define __GMODULE_H - -#include <gmain.h> - -typedef struct _GModule GModule; - -typedef enum { - G_MODULE_BIND_LAZY = 1 << 0, - G_MODULE_BIND_LOCAL = 1 << 1, - G_MODULE_BIND_MASK = 0x03 -} GModuleFlags; - -GModule *g_module_open(const gchar *file_name, GModuleFlags flags); -gboolean g_module_symbol(GModule *module, const gchar *symbol_name, - gpointer *symbol); -const gchar *g_module_name(GModule *module); -gboolean g_module_close(GModule *module); -const gchar *g_module_error(void); - -#endif /* __GMODULE_H */ |