internal.h 3.6 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 29 30 31 32 33 34 35 36 37 38 39
/* 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
40

41 42 43 44
#ifndef INET_ADDRSTRLEN
#define INET_ADDRSTRLEN 16
#endif

45
#define _(str) dgettext(GETTEXT_PACKAGE, (str))
46
#define N_(str) dgettext(GETTEXT_PACKAGE, (str))
47

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

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

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

#ifdef __GNUC__
68 69

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

D
Daniel Veillard 已提交
78 79 80 81 82
/**
 * ATTRIBUTE_UNUSED:
 *
 * Macro to flag conciously unused parameters to functions
 */
83
#ifndef ATTRIBUTE_UNUSED
84
#define ATTRIBUTE_UNUSED __attribute__((__unused__))
85
#endif
86 87

/**
88
 * ATTRIBUTE_FMT_PRINTF
89
 *
90
 * Macro used to check printf like functions, if compiling
91
 * with gcc.
92 93 94 95
 *
 * 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
96
 */
97 98 99 100 101 102
#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
103 104
#endif

105 106 107 108 109 110 111 112
#ifndef ATTRIBUTE_RETURN_CHECK
#if __GNUC_PREREQ (3, 4)
#define ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__))
#else
#define ATTRIBUTE_RETURN_CHECK
#endif
#endif

113
#else
114
#ifndef ATTRIBUTE_UNUSED
115
#define ATTRIBUTE_UNUSED
116 117 118 119 120
#endif
#ifndef ATTRIBUTE_FMT_PRINTF
#define ATTRIBUTE_FMT_PRINTF(...)
#endif
#ifndef ATTRIBUTE_RETURN_CHECK
121
#define ATTRIBUTE_RETURN_CHECK
122
#endif
123
#endif				/* __GNUC__ */
124

125 126 127 128 129 130 131
/*
 * 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 已提交
132 133 134 135 136 137 138 139 140
/**
 * TODO:
 *
 * macro to flag unimplemented blocks
 */
#define TODO 								\
    fprintf(stderr, "Unimplemented block at %s:%d\n",			\
            __FILE__, __LINE__);

141
#endif                          /* __VIR_INTERNAL_H__ */