1 /* GLIB - Library of useful routines for C programming 2 * Copyright (C) 2006-2019 Free Software Foundation, Inc. 3 * 4 * This file is not part of the GNU gettext program, but is used with 5 * GNU gettext. 6 * 7 * The original copyright notice is as follows: 8 */ 9 10 /* GLIB - Library of useful routines for C programming 11 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald 12 * 13 * This library is free software; you can redistribute it and/or 14 * modify it under the terms of the GNU Lesser General Public 15 * License as published by the Free Software Foundation; either 16 * version 2 of the License, or (at your option) any later version. 17 * 18 * This library is distributed in the hope that it will be useful, 19 * but WITHOUT ANY WARRANTY; without even the implied warranty of 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21 * Lesser General Public License for more details. 22 * 23 * You should have received a copy of the GNU Lesser General Public 24 * License along with this library; if not, write to the 25 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 26 * Boston, MA 02111-1307, USA. 27 */ 28 29 /* 30 * Modified by the GLib Team and others 1997-2000. See the AUTHORS 31 * file for a list of people on the GLib Team. See the ChangeLog 32 * files for a list of changes. These files are distributed with 33 * GLib at ftp://ftp.gtk.org/pub/gtk/. 34 */ 35 36 /* 37 * Modified by Bruno Haible for use as a gnulib module. 38 */ 39 40 /* ====================== Substitute for glibconfig.h ====================== */ 41 42 #include <stddef.h> 43 #include <sys/types.h> 44 #include <stdint.h> 45 46 typedef uint16_t guint16; 47 typedef uint32_t guint32; 48 49 typedef size_t gsize; 50 typedef ssize_t gssize; 51 52 #define GPOINTER_TO_INT(p) ((gint) (intptr_t) (p)) 53 #define GPOINTER_TO_UINT(p) ((guint) (uintptr_t) (p)) 54 55 #define GINT_TO_POINTER(i) ((gpointer) (intptr_t) (i)) 56 #define GUINT_TO_POINTER(u) ((gpointer) (uintptr_t) (u)) 57 58 #define g_memmove memmove 59 60 /* ================ Abridged version of for <glib/macros.h> ================ */ 61 62 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) 63 #define G_GNUC_PURE \ 64 __attribute__((__pure__)) 65 #define G_GNUC_MALLOC \ 66 __attribute__((__malloc__)) 67 #else 68 #define G_GNUC_PURE 69 #define G_GNUC_MALLOC 70 #endif 71 72 #if __GNUC__ >= 4 73 #define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) 74 #else 75 #define G_GNUC_NULL_TERMINATED 76 #endif 77 78 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) 79 #define G_GNUC_PRINTF( format_idx, arg_idx ) \ 80 __attribute__((__format__ (__printf__, format_idx, arg_idx))) 81 #define G_GNUC_SCANF( format_idx, arg_idx ) \ 82 __attribute__((__format__ (__scanf__, format_idx, arg_idx))) 83 #define G_GNUC_FORMAT( arg_idx ) \ 84 __attribute__((__format_arg__ (arg_idx))) 85 #define G_GNUC_NORETURN \ 86 __attribute__((__noreturn__)) 87 #define G_GNUC_CONST \ 88 __attribute__((__const__)) 89 #define G_GNUC_UNUSED \ 90 __attribute__((__unused__)) 91 #define G_GNUC_NO_INSTRUMENT \ 92 __attribute__((__no_instrument_function__)) 93 #else /* !__GNUC__ */ 94 #define G_GNUC_PRINTF( format_idx, arg_idx ) 95 #define G_GNUC_SCANF( format_idx, arg_idx ) 96 #define G_GNUC_FORMAT( arg_idx ) 97 #define G_GNUC_NORETURN 98 #define G_GNUC_CONST 99 #define G_GNUC_UNUSED 100 #define G_GNUC_NO_INSTRUMENT 101 #endif /* !__GNUC__ */ 102 103 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) 104 #define G_GNUC_WARN_UNUSED_RESULT \ 105 __attribute__((warn_unused_result)) 106 #else 107 #define G_GNUC_WARN_UNUSED_RESULT 108 #endif /* __GNUC__ */ 109 110 #ifdef __cplusplus 111 # define G_BEGIN_DECLS extern "C" { 112 # define G_END_DECLS } 113 #else 114 # define G_BEGIN_DECLS 115 # define G_END_DECLS 116 #endif 117 118 #ifndef FALSE 119 #define FALSE (0) 120 #endif 121 122 #ifndef TRUE 123 #define TRUE (!FALSE) 124 #endif 125 126 #undef MAX 127 #define MAX(a, b) (((a) > (b)) ? (a) : (b)) 128 129 #undef MIN 130 #define MIN(a, b) (((a) < (b)) ? (a) : (b)) 131 132 #define G_STMT_START 133 #define G_STMT_END 134 135 /* ====================== Substitute for <glib/gmem.h> ====================== */ 136 137 #include "xalloc.h" 138 139 #define g_malloc(n) xmalloc (n) 140 #define g_malloc0(n) xzalloc (n) 141 #define g_realloc(p,n) xrealloc (p, n) 142 #define g_free(p) free (p) 143 #define g_try_malloc(n) xmalloc (n) 144 #define g_try_malloc0(n) xzalloc (n) 145 #define g_try_realloc(p,n) xrealloc (p, n) 146 147 #define g_new(t,n) ((t *) xnmalloc (n, sizeof (t))) 148 #define g_new0(t,n) ((t *) xcalloc (n, sizeof (t))) 149 #define g_try_new(t,n) ((t *) xnmalloc (n, sizeof (t))) 150 #define g_try_new0(t,n) ((t *) xcalloc (n, sizeof (t))) 151 152 /* =================== Substitute for <glib/gmessages.h> =================== */ 153 154 #include <stdlib.h> 155 156 #define g_assert(expr) if (!(expr)) abort () 157 #define g_assert_not_reached() abort () 158 159 #define g_return_if_fail(expr) if (!(expr)) return 160 #define g_return_val_if_fail(expr,val) if (!(expr)) return (val) 161 #define g_return_if_reached() return 162 #define g_return_val_if_reached(val) return (val) 163 164 #define G_LOG_LEVEL_CRITICAL 0 165 #define G_LOG_LEVEL_INFO 0 166 #define G_LOG_LEVEL_DEBUG 0 167 168 extern void g_printerr (const char *format, ...) G_GNUC_PRINTF (1, 2); 169 extern void g_warning (const char *format, ...) G_GNUC_PRINTF (1, 2); 170 extern void g_log (const char *domain, int level, const char *format, ...) G_GNUC_PRINTF (3, 4); 171 172 /* ==================== Substitute for <glib/gprintf.h> ==================== */ 173 174 #include <stdio.h> 175 176 #define g_printf printf 177 #define g_fprintf fprintf 178 #define g_sprintf sprintf 179 #define g_vprintf vprintf 180 #define g_vfprintf vfprintf 181 #define g_vsprintf vsprintf 182 #define g_vasprintf vasprintf 183 184 /* ===================== Substitute for <glib/gslice.h> ===================== */ 185 186 #define g_slice_new(t) XMALLOC (t) 187 #define g_slice_new0(t) XZALLOC (t) 188 189 #define g_slice_free(t,p) free (p) 190 191 /* ======================= Helper for <glib/gtypes.h> ======================= */ 192 193 /* We don't need to export variables from a shared library. */ 194 #define GLIB_VAR extern 195 196 /* ==================== Substitute for <glib/gunicode.h> ==================== */ 197 198 typedef unsigned int gunichar; 199