added g_hash_table_find and a bunch of g_queue_*
authorHans Breuer <hans@breuer.org>
Wed, 25 Feb 2004 23:48:22 +0000 (23:48 +0000)
committerHans Breuer <hans@src.gnome.org>
Wed, 25 Feb 2004 23:48:22 +0000 (23:48 +0000)
2003-02-26 Hans Breuer  <hans@breuer.org>

* glib/glib.def : added g_hash_table_find and a
bunch of g_queue_*

* glib/gmain.c : make it compile on win32,
child_wake_up_pipe replaced by semaphore like it is done
for the other wake_up_pipe

* config.h.win32.in : added HAVE_INT64_AND_I64
* glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
and typedef for GPid

* test/env-test.c : don't let the local log function
collide in namespace with standard C

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
config.h.win32.in
glib/glib.def
glib/gmain.c
glibconfig.h.win32.in
tests/env-test.c

index 1cc7578068a9629b74e6dee7e9e04d91732043c9..09c21db53fc84e9ddc32083f19691585be226a46 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2003-02-26  Hans Breuer  <hans@breuer.org>
+
+       * glib/glib.def : added g_hash_table_find and a
+       bunch of g_queue_*
+
+       * glib/gmain.c : make it compile on win32, 
+       child_wake_up_pipe replaced by semaphore like it is done
+       for the other wake_up_pipe
+
+       * config.h.win32.in : added HAVE_INT64_AND_I64
+       * glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
+       and typedef for GPid
+
+       * test/env-test.c : don't let the local log function
+       collide in namespace with standard C
+
 2004-02-25  Sebastian Wilhelmi  <seppi@seppi.de>
 
        * configure.in, glib/gthread.c: For the PID thread priorities
index 1cc7578068a9629b74e6dee7e9e04d91732043c9..09c21db53fc84e9ddc32083f19691585be226a46 100644 (file)
@@ -1,3 +1,19 @@
+2003-02-26  Hans Breuer  <hans@breuer.org>
+
+       * glib/glib.def : added g_hash_table_find and a
+       bunch of g_queue_*
+
+       * glib/gmain.c : make it compile on win32, 
+       child_wake_up_pipe replaced by semaphore like it is done
+       for the other wake_up_pipe
+
+       * config.h.win32.in : added HAVE_INT64_AND_I64
+       * glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
+       and typedef for GPid
+
+       * test/env-test.c : don't let the local log function
+       collide in namespace with standard C
+
 2004-02-25  Sebastian Wilhelmi  <seppi@seppi.de>
 
        * configure.in, glib/gthread.c: For the PID thread priorities
index 1cc7578068a9629b74e6dee7e9e04d91732043c9..09c21db53fc84e9ddc32083f19691585be226a46 100644 (file)
@@ -1,3 +1,19 @@
+2003-02-26  Hans Breuer  <hans@breuer.org>
+
+       * glib/glib.def : added g_hash_table_find and a
+       bunch of g_queue_*
+
+       * glib/gmain.c : make it compile on win32, 
+       child_wake_up_pipe replaced by semaphore like it is done
+       for the other wake_up_pipe
+
+       * config.h.win32.in : added HAVE_INT64_AND_I64
+       * glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
+       and typedef for GPid
+
+       * test/env-test.c : don't let the local log function
+       collide in namespace with standard C
+
 2004-02-25  Sebastian Wilhelmi  <seppi@seppi.de>
 
        * configure.in, glib/gthread.c: For the PID thread priorities
index 1cc7578068a9629b74e6dee7e9e04d91732043c9..09c21db53fc84e9ddc32083f19691585be226a46 100644 (file)
@@ -1,3 +1,19 @@
+2003-02-26  Hans Breuer  <hans@breuer.org>
+
+       * glib/glib.def : added g_hash_table_find and a
+       bunch of g_queue_*
+
+       * glib/gmain.c : make it compile on win32, 
+       child_wake_up_pipe replaced by semaphore like it is done
+       for the other wake_up_pipe
+
+       * config.h.win32.in : added HAVE_INT64_AND_I64
+       * glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
+       and typedef for GPid
+
+       * test/env-test.c : don't let the local log function
+       collide in namespace with standard C
+
 2004-02-25  Sebastian Wilhelmi  <seppi@seppi.de>
 
        * configure.in, glib/gthread.c: For the PID thread priorities
index 1cc7578068a9629b74e6dee7e9e04d91732043c9..09c21db53fc84e9ddc32083f19691585be226a46 100644 (file)
@@ -1,3 +1,19 @@
+2003-02-26  Hans Breuer  <hans@breuer.org>
+
+       * glib/glib.def : added g_hash_table_find and a
+       bunch of g_queue_*
+
+       * glib/gmain.c : make it compile on win32, 
+       child_wake_up_pipe replaced by semaphore like it is done
+       for the other wake_up_pipe
+
+       * config.h.win32.in : added HAVE_INT64_AND_I64
+       * glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
+       and typedef for GPid
+
+       * test/env-test.c : don't let the local log function
+       collide in namespace with standard C
+
 2004-02-25  Sebastian Wilhelmi  <seppi@seppi.de>
 
        * configure.in, glib/gthread.c: For the PID thread priorities
index 1cc7578068a9629b74e6dee7e9e04d91732043c9..09c21db53fc84e9ddc32083f19691585be226a46 100644 (file)
@@ -1,3 +1,19 @@
+2003-02-26  Hans Breuer  <hans@breuer.org>
+
+       * glib/glib.def : added g_hash_table_find and a
+       bunch of g_queue_*
+
+       * glib/gmain.c : make it compile on win32, 
+       child_wake_up_pipe replaced by semaphore like it is done
+       for the other wake_up_pipe
+
+       * config.h.win32.in : added HAVE_INT64_AND_I64
+       * glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
+       and typedef for GPid
+
+       * test/env-test.c : don't let the local log function
+       collide in namespace with standard C
+
 2004-02-25  Sebastian Wilhelmi  <seppi@seppi.de>
 
        * configure.in, glib/gthread.c: For the PID thread priorities
index 7c58713a2945fe37d88283e448d4d38156bd728f..89a6daa30315605f20a7e47d2073e9fd5c18e9ee 100644 (file)
 #else /* _MSC_VER */
 /* #undef HAVE_LONG_LONG */
 #endif /* _MSC_VER */
+#define HAVE_INT64_AND_I64 1
 
 /* define if system printf can print long long */
 #define HAVE_LONG_LONG_FORMAT 1
index 7282bbaacf6692f48d7811b2fca5a230de6c0dab..d92070afe5ae411abdd5bb643abd1a040faf045f 100644 (file)
@@ -173,6 +173,7 @@ EXPORTS
        g_get_user_name
        g_getenv
        g_hash_table_destroy
+       g_hash_table_find
        g_hash_table_foreach
        g_hash_table_foreach_remove
        g_hash_table_foreach_steal
@@ -423,19 +424,43 @@ EXPORTS
        g_quark_from_string
        g_quark_to_string
        g_quark_try_string
+       g_queue_copy
+       g_queue_delete_link
+       g_queue_find
+       g_queue_foreach
        g_queue_free
+       g_queue_get_length
+       g_queue_index
+       g_queue_insert_after
+       g_queue_insert_before
+       g_queue_insert_sorted
        g_queue_is_empty
+       g_queue_link_index
        g_queue_new
        g_queue_peek_head
+       g_queue_peek_head_link
+       g_queue_peek_nth
+       g_queue_peek_nth_link
        g_queue_peek_tail
+       g_queue_peek_tail_link
        g_queue_pop_head
        g_queue_pop_head_link
+       g_queue_pop_nth
+       g_queue_pop_nth_link
        g_queue_pop_tail
        g_queue_pop_tail_link
        g_queue_push_head
        g_queue_push_head_link
+       g_queue_push_nth
+       g_queue_push_nth_link
        g_queue_push_tail
        g_queue_push_tail_link
+       g_queue_remove
+       g_queue_remove_all
+       g_queue_reverse
+       g_queue_sort
+       g_queue_unlink
+       g_rand_copy
        g_rand_double
        g_rand_double_range
        g_rand_free
index 5ba8188b289106af1d8493be3ec5cb56f3b16fdf..f02fcea2d9a68a32b7c031bd69a7fb471ccbc64f 100644 (file)
@@ -251,7 +251,11 @@ enum {
 };
 static gint child_watch_init_state = CHILD_WATCH_UNINITIALIZED;
 static gint child_watch_count = 0;
+#ifndef G_OS_WIN32
 static gint child_watch_wake_up_pipe[2] = {0, 0};
+#else
+static HANDLE child_watch_wake_up_semaphore = NULL;
+#endif
 G_LOCK_DEFINE_STATIC (main_context_list);
 static GSList *main_context_list = NULL;
 
@@ -692,9 +696,9 @@ g_main_context_unref (GMainContext *context)
 static void 
 g_main_context_init_pipe (GMainContext *context)
 {
+# ifndef G_OS_WIN32
   if (context->wake_up_pipe[0] != -1)
     return;
-# ifndef G_OS_WIN32
   if (pipe (context->wake_up_pipe) < 0)
     g_error ("Cannot create pipe main loop wake-up: %s\n",
             g_strerror (errno));
@@ -702,6 +706,8 @@ g_main_context_init_pipe (GMainContext *context)
   context->wake_up_rec.fd = context->wake_up_pipe[0];
   context->wake_up_rec.events = G_IO_IN;
 # else
+  if (context->wake_up_semaphore != NULL)
+    return;
   context->wake_up_semaphore = CreateSemaphore (NULL, 0, 100, NULL);
   if (context->wake_up_semaphore == NULL)
     g_error ("Cannot create wake-up semaphore: %s",
@@ -747,8 +753,12 @@ g_main_context_new ()
   context->owner = NULL;
   context->waiters = NULL;
 
+# ifndef G_OS_WIN32
   context->wake_up_pipe[0] = -1;
   context->wake_up_pipe[1] = -1;
+# else
+  context->wake_up_semaphore = NULL;
+# endif
 #endif
 
   context->ref_count = 1;
@@ -3253,9 +3263,15 @@ check_for_child_exited (GSource *source)
 
   if (child_watch_source->count < count)
     {
+#ifndef G_OS_WIN32
       gint child_status;
 
       if (waitpid (child_watch_source->pid, &child_status, WNOHANG) > 0)
+#else
+      DWORD child_status;
+      if (GetExitCodeProcess (child_watch_source->pid, &child_status) &&
+          child_status != STILL_ACTIVE)
+#endif
        {
          child_watch_source->child_status = child_status;
          child_watch_source->child_exited = TRUE;
@@ -3319,7 +3335,11 @@ g_child_watch_signal_handler (int signum)
 
   if (child_watch_init_state == CHILD_WATCH_INITIALIZED_THREADED)
     {
+#ifndef G_OS_WIN32
       write (child_watch_wake_up_pipe[1], "B", 1);
+#else
+      ReleaseSemaphore(child_watch_wake_up_semaphore, 1, NULL);
+#endif
     }
   else
     {
@@ -3336,7 +3356,11 @@ g_child_watch_source_init_single (void)
 
   child_watch_init_state = CHILD_WATCH_INITIALIZED_SINGLE;
 
+#ifndef G_OS_WIN32
   signal (SIGCHLD, g_child_watch_signal_handler);
+#else
+  /* FIXME: really nothing to be done ? --hb */
+#endif
 }
 
 static gpointer
@@ -3351,15 +3375,21 @@ child_watch_helper_thread (gpointer data)
       poll_func = g_poll;
 #endif
 
+#ifndef G_OS_WIN32
   fds.fd = child_watch_wake_up_pipe[0];
   fds.events = G_IO_IN;
+#endif
 
   while (1)
     {
       gchar b[20];
       GSList *list;
 
+#ifndef G_OS_WIN32
       read (child_watch_wake_up_pipe[0], b, 20);
+#else
+      WaitForSingleObject(child_watch_wake_up_semaphore, INFINITE);
+#endif
 
       /* We were woken up.  Wake up all other contexts in all other threads */
       G_UNLOCK (main_context_list);
@@ -3382,16 +3412,24 @@ g_child_watch_source_init_multi_threaded (void)
 
   g_assert (g_thread_supported());
 
+#ifndef G_OS_WIN32
   if (pipe (child_watch_wake_up_pipe) < 0)
     g_error ("Cannot create wake up pipe: %s\n", g_strerror (errno));
   fcntl (child_watch_wake_up_pipe[1], F_SETFL, O_NONBLOCK | fcntl (child_watch_wake_up_pipe[1], F_GETFL));
+#else
+  child_watch_wake_up_semaphore = CreateSemaphore (NULL, 0, G_MAXINT, NULL);
+#endif
 
   /* We create a helper thread that polls on the wakeup pipe indefinitely */
   /* FIXME: Think this through for races */
   if (g_thread_create (child_watch_helper_thread, NULL, FALSE, &error) == NULL)
     g_error ("Cannot create a thread to monitor child exit status: %s\n", error->message);
   child_watch_init_state = CHILD_WATCH_INITIALIZED_THREADED;
+#ifndef G_OS_WIN32
   signal (SIGCHLD, g_child_watch_signal_handler);
+#else
+  /* FIXME: really nothing to be done ? --hb */
+#endif
 }
 
 static void
index b5d2c8d0e589d842d58008584caa9f40ade2b9bd..d4b1313f5fefd8da063374aaa1364c5727973292 100644 (file)
@@ -27,6 +27,11 @@ G_BEGIN_DECLS
 #define G_MINLONG      LONG_MIN
 #define G_MAXLONG      LONG_MAX
 #define G_MAXULONG     ULONG_MAX
+#define G_MAXSIZE      UINT_MAX
+
+#define G_MININT64     G_GINT64_CONSTANT(0x8000000000000000)
+#define G_MAXINT64     G_GINT64_CONSTANT(0x7fffffffffffffff)
+#define G_MAXUINT64    G_GINT64_CONSTANT(0xffffffffffffffffU)
 
 typedef signed char gint8;
 typedef unsigned char guint8;
@@ -187,6 +192,8 @@ union _GSystemThread
 
 #define G_MODULE_SUFFIX "dll"
 
+typedef int GPid;
+
 G_END_DECLS
 
 #endif /* GLIBCONFIG_H */
index 256f0f03b101898c9f5513e8761b186313af4a32..2ec0cf41a1411782cd39f8c2c3cf65f073a3b528 100644 (file)
@@ -44,7 +44,7 @@
 #endif
 
 static void 
-log (const gchar   *log_domain,
+_log (const gchar   *log_domain,
      GLogLevelFlags log_level,
      const gchar   *message,
      gpointer       user_data)
@@ -62,7 +62,7 @@ main (int argc, char *argv[])
   gchar *value1 = "works";
   gchar *value2 = "again";
 
-  g_log_set_handler ("GLib", G_LOG_LEVEL_CRITICAL, log, NULL);
+  g_log_set_handler ("GLib", G_LOG_LEVEL_CRITICAL, _log, NULL);
 
   data = g_getenv (variable);
   g_assert (data == NULL && "TEST_G_SETENV already set");