internal.h 4.0 KB
Newer Older
1 2 3 4
/*
 * internal.h: internal definitions just used by code from the library
 */

5 6
#ifndef __VIR_INTERNAL_H__
#define __VIR_INTERNAL_H__
7

8
#include <errno.h>
9
#include <limits.h>
10
#include <verify.h>
11

12 13 14 15
#ifdef HAVE_SYS_SYSLIMITS_H
#include <sys/syslimits.h>
#endif

16 17 18 19 20 21
/* The library itself is allowed to use deprecated functions /
 * variables, so effectively undefine the deprecated attribute
 * which would otherwise be defined in libvirt.h.
 */
#define VIR_DEPRECATED /*empty*/

22 23
#include "gettext.h"

24 25 26
#include "libvirt/libvirt.h"
#include "libvirt/virterror.h"

27 28
#include "libvirt_internal.h"

29 30 31 32 33 34 35 36 37 38 39 40 41
/* On architectures which lack these limits, define them (ie. Cygwin).
 * Note that the libvirt code should be robust enough to handle the
 * case where actual value is longer than these limits (eg. by setting
 * length correctly in second argument to gethostname and by always
 * using strncpy instead of strcpy).
 */
#ifndef HOST_NAME_MAX
#define HOST_NAME_MAX 256
#endif

#ifndef IF_NAMESIZE
#define IF_NAMESIZE 16
#endif
42

43 44 45 46
#ifndef INET_ADDRSTRLEN
#define INET_ADDRSTRLEN 16
#endif

47
#define _(str) dgettext(GETTEXT_PACKAGE, (str))
48
#define N_(str) dgettext(GETTEXT_PACKAGE, (str))
49

50 51 52
/* String equality tests, suggested by Jim Meyering. */
#define STREQ(a,b) (strcmp((a),(b)) == 0)
#define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0)
53 54
#define STRNEQ(a,b) (strcmp((a),(b)) != 0)
#define STRCASENEQ(a,b) (strcasecmp((a),(b)) != 0)
55
#define STREQLEN(a,b,n) (strncmp((a),(b),(n)) == 0)
56
#define STRCASEEQLEN(a,b,n) (strncasecmp((a),(b),(n)) == 0)
57
#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0)
58
#define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0)
59
#define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0)
60 61 62 63

#define NUL_TERMINATE(buf) do { (buf)[sizeof(buf)-1] = '\0'; } while (0)
#define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))

64
/* C99 uses __func__.  __FUNCTION__ is legacy. */
65
#ifndef __GNUC__
66
#define __FUNCTION__ __func__
67 68 69
#endif

#ifdef __GNUC__
70 71

#ifndef __GNUC_PREREQ
72 73 74 75
#if defined __GNUC__ && defined __GNUC_MINOR__
# define __GNUC_PREREQ(maj, min)                                        \
    ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
#else
76 77
#define __GNUC_PREREQ(maj,min) 0
#endif
78 79 80 81

/* Work around broken limits.h on debian etch */
#if defined _GCC_LIMITS_H_ && ! defined ULLONG_MAX
#define ULLONG_MAX   ULONG_LONG_MAX
82
#endif
83

84 85
#endif /* __GNUC__ */

D
Daniel Veillard 已提交
86 87 88 89 90
/**
 * ATTRIBUTE_UNUSED:
 *
 * Macro to flag conciously unused parameters to functions
 */
91
#ifndef ATTRIBUTE_UNUSED
92
#define ATTRIBUTE_UNUSED __attribute__((__unused__))
93
#endif
94 95

/**
96
 * ATTRIBUTE_FMT_PRINTF
97
 *
98
 * Macro used to check printf like functions, if compiling
99
 * with gcc.
100 101 102 103
 *
 * We use gnulib which guarentees we always have GNU style
 * printf format specifiers even on broken Win32 platforms
 * hence we have to force 'gnu_printf' for new GCC
104
 */
105 106 107 108 109 110
#ifndef ATTRIBUTE_FMT_PRINTF
#if __GNUC_PREREQ (4, 4)
#define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (gnu_printf, fmtpos,argpos)))
#else
#define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (printf, fmtpos,argpos)))
#endif
111 112
#endif

113 114 115 116 117 118 119 120
#ifndef ATTRIBUTE_RETURN_CHECK
#if __GNUC_PREREQ (3, 4)
#define ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__))
#else
#define ATTRIBUTE_RETURN_CHECK
#endif
#endif

121 122 123 124 125 126 127 128
#ifndef ATTRIBUTE_NONNULL
# if __GNUC_PREREQ (3, 3)
#  define ATTRIBUTE_NONNULL(m) __attribute__((__nonnull__(m)))
# else
#  define ATTRIBUTE_NONNULL(m)
# endif
#endif

129
#else
130
#ifndef ATTRIBUTE_UNUSED
131
#define ATTRIBUTE_UNUSED
132 133 134 135 136
#endif
#ifndef ATTRIBUTE_FMT_PRINTF
#define ATTRIBUTE_FMT_PRINTF(...)
#endif
#ifndef ATTRIBUTE_RETURN_CHECK
137
#define ATTRIBUTE_RETURN_CHECK
138
#endif
139
#endif				/* __GNUC__ */
140

141 142 143 144 145 146 147
/*
 * Use this when passing possibly-NULL strings to printf-a-likes.
 */
#define NULLSTR(s) \
    ((void)verify_true(sizeof *(s) == sizeof (char)), \
     (s) ? (s) : "(null)")

D
Daniel Veillard 已提交
148 149 150 151 152 153 154 155 156
/**
 * TODO:
 *
 * macro to flag unimplemented blocks
 */
#define TODO 								\
    fprintf(stderr, "Unimplemented block at %s:%d\n",			\
            __FILE__, __LINE__);

157
#endif                          /* __VIR_INTERNAL_H__ */