internal.h 3.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 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 70 71 72

#ifndef __GNUC_PREREQ
#define __GNUC_PREREQ(maj,min) 0
#endif

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

/**
 * ATTRIBUTE_FORMAT
 *
 * Macro used to check printf/scanf-like functions, if compiling
 * with gcc.
 */
#ifndef ATTRIBUTE_FORMAT
#define ATTRIBUTE_FORMAT(args...) __attribute__((__format__ (args)))
90 91
#endif

92 93 94 95 96 97 98 99
#ifndef ATTRIBUTE_RETURN_CHECK
#if __GNUC_PREREQ (3, 4)
#define ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__))
#else
#define ATTRIBUTE_RETURN_CHECK
#endif
#endif

100 101 102
#else
#define ATTRIBUTE_UNUSED
#define ATTRIBUTE_FORMAT(...)
103
#define ATTRIBUTE_RETURN_CHECK
104
#endif				/* __GNUC__ */
105

106 107 108 109 110 111 112
/*
 * 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 已提交
113 114 115 116 117 118 119 120 121
/**
 * TODO:
 *
 * macro to flag unimplemented blocks
 */
#define TODO 								\
    fprintf(stderr, "Unimplemented block at %s:%d\n",			\
            __FILE__, __LINE__);

122
#endif                          /* __VIR_INTERNAL_H__ */