7 * DIGITAL EQUIPMENT CORPORATION
8 * MAYNARD, MASSACHUSETTS
11 * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
12 * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
13 * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE
14 * FOR ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED
17 * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT
18 * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN
19 * ADDITION TO THAT SET FORTH ABOVE.
21 * Permission to use, copy, modify, and distribute this software and its
22 * documentation for any purpose and without fee is hereby granted, provided
23 * that the above copyright notice appear in all copies and that both that
24 * copyright notice and this permission notice appear in supporting
25 * documentation, and that the name of Digital Equipment Corporation not be
26 * used in advertising or publicity pertaining to distribution of the
27 * software without specific, written prior permission.
34 * We sometimes malloc strings and then expose them as const char*'s. This
35 * macro is used when we free these strings in order to avoid -Wcast-qual
38 #define UNCONSTIFY(const_ptr) ((void *) (uintptr_t) (const_ptr))
41 streq(const char *s1, const char *s2)
43 return strcmp(s1, s2) == 0;
47 streq_not_null(const char *s1, const char *s2)
55 istreq(const char *s1, const char *s2)
57 return strcasecmp(s1, s2) == 0;
61 istreq_prefix(const char *s1, const char *s2)
63 return strncasecmp(s1, s2, strlen(s1)) == 0;
67 strdup_safe(const char *s)
69 return s ? strdup(s) : NULL;
73 isempty(const char *s)
75 return s == NULL || s[0] == '\0';
78 #define MIN(a, b) ((a) < (b) ? (a) : (b))
79 #define MAX(a, b) ((a) > (b) ? (a) : (b))
81 /* Compiler Attributes */
83 #if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__CYGWIN__)
84 # define XKB_EXPORT __attribute__((visibility("default")))
85 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
86 # define XKB_EXPORT __global
87 #else /* not gcc >= 4 and not Sun Studio >= 8 */
91 #if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 203)
92 # define ATTR_PRINTF(x,y) __attribute__((__format__(__printf__, x, y)))
93 #else /* not gcc >= 2.3 */
94 # define ATTR_PRINTF(x,y)
97 #if (defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 205)) \
98 || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
99 # define ATTR_NORETURN __attribute__((__noreturn__))
101 # define ATTR_NORETURN
104 #if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 296)
105 #define ATTR_MALLOC __attribute__((__malloc__))