/* * internal.h: internal definitions just used by code from the library */ #ifndef __VIR_INTERNAL_H__ #define __VIR_INTERNAL_H__ #include #include #ifdef HAVE_SYS_SYSLIMITS_H #include #endif #ifdef HAVE_PTHREAD_H #include #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*/ #define pthread_sigmask(h, s, o) sigprocmask((h), (s), (o)) #endif /* 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*/ #include "gettext.h" #include "libvirt/libvirt.h" #include "libvirt/virterror.h" /* 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 #ifndef INET_ADDRSTRLEN #define INET_ADDRSTRLEN 16 #endif #define _(str) dgettext(GETTEXT_PACKAGE, (str)) #define N_(str) dgettext(GETTEXT_PACKAGE, (str)) /* String equality tests, suggested by Jim Meyering. */ #define STREQ(a,b) (strcmp((a),(b)) == 0) #define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0) #define STRNEQ(a,b) (strcmp((a),(b)) != 0) #define STRCASENEQ(a,b) (strcasecmp((a),(b)) != 0) #define STREQLEN(a,b,n) (strncmp((a),(b),(n)) == 0) #define STRCASEEQLEN(a,b,n) (strncasecmp((a),(b),(n)) == 0) #define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0) #define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0) #define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0) #define NUL_TERMINATE(buf) do { (buf)[sizeof(buf)-1] = '\0'; } while (0) #define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) /* C99 uses __func__. __FUNCTION__ is legacy. */ #ifndef __GNUC__ #define __FUNCTION__ __func__ #endif #ifdef __GNUC__ #ifndef __GNUC_PREREQ #define __GNUC_PREREQ(maj,min) 0 #endif /** * ATTRIBUTE_UNUSED: * * Macro to flag conciously unused parameters to functions */ #ifndef ATTRIBUTE_UNUSED #define ATTRIBUTE_UNUSED __attribute__((__unused__)) #endif /** * ATTRIBUTE_FORMAT * * Macro used to check printf/scanf-like functions, if compiling * with gcc. */ #ifndef ATTRIBUTE_FORMAT #define ATTRIBUTE_FORMAT(args...) __attribute__((__format__ (args))) #endif #ifndef ATTRIBUTE_RETURN_CHECK #if __GNUC_PREREQ (3, 4) #define ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__)) #else #define ATTRIBUTE_RETURN_CHECK #endif #endif #else #define ATTRIBUTE_UNUSED #define ATTRIBUTE_FORMAT(...) #define ATTRIBUTE_RETURN_CHECK #endif /* __GNUC__ */ /** * TODO: * * macro to flag unimplemented blocks */ #define TODO \ fprintf(stderr, "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); #endif /* __VIR_INTERNAL_H__ */