#undef CLAMP
#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
+#define G_STRINGIFY(macro_or_string) G_STRINGIFY_ARG (macro_or_string)
+#define G_STRINGIFY_ARG(contents) #contents
+
+/* Count the number of elements in an array. The array must be defined
+ * as such; using this with a dynamically allocated array will give
+ * incorrect results.
+ */
+#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))
/* Define G_VA_COPY() to do the right thing for copying va_list variables.
* glibconfig.h may have already defined G_VA_COPY as va_copy or __va_copy.
} G_STMT_END
-#define g_string(x) #x
-
-
/* Provide macros for error handling. The "assert" macros will
* exit on failure. The "return" macros will exit the current
* function. Two different definitions are given for the macros
*/
gchar* g_strescape (const gchar *source,
const gchar *exceptions);
+/*
+ * Convert between the operating system (or C runtime)
+ * representation of file names and UTF-8.
+ */
+gchar* g_filename_to_utf8 (const gchar *opsysstring);
+gchar* g_filename_from_utf8 (const gchar *utf8string);
+
/* Deprecated API:
* gchar* g_strescape (const gchar *source);
* Luckily this function wasn't much used.
GTimeVal *current_time,
gpointer user_data);
gboolean (*dispatch) (gpointer source_data,
- GTimeVal *current_time,
+ GTimeVal *dispatch_time,
gpointer user_data);
GDestroyNotify destroy;
};
gboolean g_source_remove_by_funcs_user_data (GSourceFuncs *funcs,
gpointer user_data);
-void g_get_current_time (GTimeVal *result);
+void g_get_current_time (GTimeVal *result);
/* Running the main loop */
GMainLoop* g_main_new (gboolean is_running);
* unlink: <stdio.h> or <io.h>
* open, read, write, lseek, close: <io.h>
* rmdir: <direct.h>
- * pipe: <direct.h> */
+ * pipe: <direct.h>
+ */
/* pipe is not in OLDNAMES.LIB or -lmoldname-msvc. */
#define pipe(phandles) _pipe (phandles, 4096, _O_BINARY)
/* For some POSIX functions that are not provided by the MS runtime,
- * we provide emulators in glib, which are prefixed with gwin_.
+ * we provide emulators in glib, which are prefixed with g_win32_.
+ */
+# define ftruncate(fd, size) g_win32_ftruncate (fd, size)
+
+/* -lmingw32 also has emulations for these, but we need our own
+ * for MSVC anyhow, so we might aswell use them always.
*/
-# define ftruncate(fd, size) gwin_ftruncate (fd, size)
-# define opendir gwin_opendir
-# define readdir gwin_readdir
-# define rewinddir gwin_rewinddir
-# define closedir gwin_closedir
+# define opendir g_win32_opendir
+# define readdir g_win32_readdir
+# define rewinddir g_win32_rewinddir
+# define closedir g_win32_closedir
# define NAME_MAX 255
struct DIR
gchar d_name[NAME_MAX + 1];
};
/* emulation functions */
-extern int gwin_ftruncate (gint f,
- guint size);
-DIR* gwin_opendir (const gchar *dirname);
-struct dirent* gwin_readdir (DIR *dir);
-void gwin_rewinddir (DIR *dir);
-gint gwin_closedir (DIR *dir);
+extern int g_win32_ftruncate (gint f,
+ guint size);
+DIR* g_win32_opendir (const gchar *dirname);
+struct dirent* g_win32_readdir (DIR *dir);
+void g_win32_rewinddir (DIR *dir);
+gint g_win32_closedir (DIR *dir);
+
+/* The MS setlocale uses locale names of the form "English_United
+ * States.1252" etc. We want the Unixish standard form "en", "zh_TW"
+ * etc. This function gets the current thread locale from Windows and
+ * returns it as a string of the above form for use in forming file
+ * names etc. The returned string should be deallocated with g_free().
+ */
+gchar * g_win32_getlocale (void);
+
#endif /* G_OS_WIN32 */
gpointer (*private_get) (GPrivate *private_key);
void (*private_set) (GPrivate *private_key,
gpointer data);
- gpointer (*thread_create) (GThreadFunc thread_func,
+ void (*thread_create) (GThreadFunc thread_func,
gpointer arg,
gulong stack_size,
gboolean joinable,
gboolean bound,
- GThreadPriority priority);
+ GThreadPriority priority,
+ gpointer thread);
void (*thread_yield) (void);
void (*thread_join) (gpointer thread);
void (*thread_exit) (void);
void (*thread_set_priority)(gpointer thread,
GThreadPriority priority);
- gpointer (*thread_self) (void);
+ void (*thread_self) (gpointer thread);
};
GUTILS_C_VAR GThreadFunctions g_thread_functions_for_glib_use;
# define G_LOCK_EXTERN(name) extern void glib_dummy_decl (void)
# define G_LOCK(name)
# define G_UNLOCK(name)
-# define G_TRYLOCK(name) (FALSE)
+# define G_TRYLOCK(name) (TRUE)
#endif /* !G_THREADS_ENABLED */
#ifdef __cplusplus