internal.h 3.2 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 10
#include <limits.h>

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

15
#ifdef HAVE_PTHREAD_H
R
Richard W.M. Jones 已提交
16 17 18 19 20 21 22 23 24
#include <pthread.h>
#define PTHREAD_MUTEX_T(v) pthread_mutex_t v
#else
/* Mutex functions disappear if we don't have pthread. */
#define PTHREAD_MUTEX_T(v) /*empty*/
#define pthread_mutex_init(lk,p) /*empty*/
#define pthread_mutex_destroy(lk) /*empty*/
#define pthread_mutex_lock(lk) /*empty*/
#define pthread_mutex_unlock(lk) /*empty*/
25
#define pthread_sigmask(h, s, o) sigprocmask((h), (s), (o))
R
Richard W.M. Jones 已提交
26 27
#endif

28 29 30 31 32 33
/* 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*/

34 35
#include "gettext.h"

36 37 38
#include "libvirt/libvirt.h"
#include "libvirt/virterror.h"

39 40 41 42 43 44 45 46 47 48 49 50 51
/* 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
52

53 54 55 56
#ifndef INET_ADDRSTRLEN
#define INET_ADDRSTRLEN 16
#endif

57
#define _(str) dgettext(GETTEXT_PACKAGE, (str))
58
#define N_(str) dgettext(GETTEXT_PACKAGE, (str))
59

60 61 62
/* String equality tests, suggested by Jim Meyering. */
#define STREQ(a,b) (strcmp((a),(b)) == 0)
#define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0)
63 64
#define STRNEQ(a,b) (strcmp((a),(b)) != 0)
#define STRCASENEQ(a,b) (strcasecmp((a),(b)) != 0)
65
#define STREQLEN(a,b,n) (strncmp((a),(b),(n)) == 0)
66
#define STRCASEEQLEN(a,b,n) (strncasecmp((a),(b),(n)) == 0)
67
#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0)
68
#define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0)
69
#define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0)
70 71 72 73

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

74
/* C99 uses __func__.  __FUNCTION__ is legacy. */
75
#ifndef __GNUC__
76
#define __FUNCTION__ __func__
77 78 79
#endif

#ifdef __GNUC__
80 81 82 83 84

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

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

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

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

112 113 114
#else
#define ATTRIBUTE_UNUSED
#define ATTRIBUTE_FORMAT(...)
115
#define ATTRIBUTE_RETURN_CHECK
116
#endif				/* __GNUC__ */
117

D
Daniel Veillard 已提交
118 119 120 121 122 123 124 125 126
/**
 * TODO:
 *
 * macro to flag unimplemented blocks
 */
#define TODO 								\
    fprintf(stderr, "Unimplemented block at %s:%d\n",			\
            __FILE__, __LINE__);

127
#endif                          /* __VIR_INTERNAL_H__ */