Imported Upstream version 1.8.7
[debian/sudo] / include / missing.h
index e7eae3ebab5ff4e103ebc189bb5e3aeecfad63d7..2ada306cd8ad79ecc81f05910965da52eb4bd860 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 1998-2005, 2008, 2009-2010
+ * Copyright (c) 1996, 1998-2005, 2008, 2009-2013
  *     Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * Macros and functions that may be missing on some operating systems.
  */
 
-/* Define away __attribute__ for non-gcc or old gcc */
-#if !defined(__GNUC__) || __GNUC__ < 2 || __GNUC__ == 2 && __GNUC_MINOR__ < 5
-# define __attribute__(x)
-#endif
-
-/* For silencing gcc warnings about rcsids */
-#ifndef __unused
-# if defined(__GNUC__) && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ > 7)
-#  define __unused     __attribute__((__unused__))
+#ifndef __GNUC_PREREQ__
+# ifdef __GNUC__
+#  define __GNUC_PREREQ__(ma, mi) \
+       ((__GNUC__ > (ma)) || (__GNUC__ == (ma) && __GNUC_MINOR__ >= (mi)))
 # else
-#  define __unused
+#  define __GNUC_PREREQ__(ma, mi)      0
 # endif
 #endif
 
+/* Define away __attribute__ for non-gcc or old gcc */
+#if !defined(__attribute__) && !__GNUC_PREREQ__(2, 5)
+# define __attribute__(x)
+#endif
+
 /* For catching format string mismatches */
 #ifndef __printflike
-# if defined(__GNUC__) && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# if __GNUC_PREREQ__(2, 7)
 #  define __printflike(f, v)   __attribute__((__format__ (__printf__, f, v)))
 # else
 #  define __printflike(f, v)
 # endif
 #endif
 
+/* Hint to compiler that returned pointer is unique (malloc but not realloc). */
+#ifndef __malloc_like
+# if __GNUC_PREREQ__(2, 96)
+#  define __malloc_like        __attribute__((__malloc__))
+# else
+#  define __malloc_like
+# endif
+#endif
+
+#ifndef __dso_public
+# ifdef HAVE_DSO_VISIBILITY
+#  if defined(__GNUC__)
+#   define __dso_public        __attribute__((__visibility__("default")))
+#   define __dso_hidden        __attribute__((__visibility__("hidden")))
+#  elif defined(__SUNPRO_C)
+#   define __dso_public        __global
+#   define __dso_hidden __hidden
+#  else
+#   define __dso_public        __declspec(dllexport)
+#   define __dso_hidden
+#  endif
+# else
+#  define __dso_public
+#  define __dso_hidden
+# endif
+#endif
+
 /*
  * Some systems lack full limit definitions.
  */
 #endif
 
 #ifndef PATH_MAX
-# ifdef MAXPATHLEN
-#  define PATH_MAX             MAXPATHLEN
+# ifdef _POSIX_PATH_MAX
+#  define PATH_MAX             _POSIX_PATH_MAX
 # else
-#  ifdef _POSIX_PATH_MAX
-#   define PATH_MAX            _POSIX_PATH_MAX
-#  else
-#   define PATH_MAX            1024
-#  endif
+#  define PATH_MAX             256
 # endif
 #endif
 
-#ifndef MAXHOSTNAMELEN
-# define MAXHOSTNAMELEN                64
+#ifndef HOST_NAME_MAX
+# ifdef _POSIX_HOST_NAME_MAX
+#  define HOST_NAME_MAX                _POSIX_HOST_NAME_MAX
+# else
+#  define HOST_NAME_MAX                255
+# endif
 #endif
 
 /*
 #endif
 
 /*
- * BSD defines these in <sys/param.h> but others may not.
+ * BSD defines these in <sys/param.h> but we don't include that anymore.
  */
 #ifndef MIN
 # define MIN(a,b) (((a)<(b))?(a):(b))
 # define MAX(a,b) (((a)>(b))?(a):(b))
 #endif
 
+/* Macros to set/clear/test flags. */
+#undef SET
+#define SET(t, f)      ((t) |= (f))
+#undef CLR
+#define CLR(t, f)      ((t) &= ~(f))
+#undef ISSET
+#define ISSET(t, f)     ((t) & (f))
+
+/*
+ * Some systems define this in <sys/param.h> but we don't include that anymore.
+ */
+#ifndef howmany
+# define howmany(x, y) (((x) + ((y) - 1)) / (y))
+#endif
+
+/*
+ * Older systems may be missing stddef.h and/or offsetof macro
+ */
+#ifndef offsetof
+# ifdef __offsetof
+#  define offsetof(type, field) __offsetof(type, field)
+# else
+#  define offsetof(type, field) ((size_t)(&((type *)0)->field))
+# endif
+#endif
+
 /*
  * Simple isblank() macro and function for systems without it.
  */
@@ -195,13 +248,20 @@ typedef struct sigaction sigaction_t;
 #ifndef HAVE_GETPROGNAME
 # ifdef HAVE___PROGNAME
 extern const char *__progname;
-#  define getprogname()          (__progname)
+#  define getprogname()                (__progname)
 # else
 const char *getprogname(void);
 void setprogname(const char *);
-#endif /* HAVE___PROGNAME */
+# endif /* HAVE___PROGNAME */
 #endif /* !HAVE_GETPROGNAME */
 
+/*
+ * Declare errno if errno.h doesn't do it for us.
+ */
+#if defined(HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
+extern int errno;
+#endif /* !HAVE_DECL_ERRNO */
+
 #ifndef timevalclear
 # define timevalclear(tv)      ((tv)->tv_sec = (tv)->tv_usec = 0)
 #endif
@@ -248,6 +308,11 @@ void setprogname(const char *);
 # endif
 #endif
 
+/* For sig2str() */
+#ifndef SIG2STR_MAX
+# define SIG2STR_MAX 32
+#endif
+
 #ifndef WCOREDUMP
 # define WCOREDUMP(x)  ((x) & 0x80)
 #endif
@@ -328,6 +393,9 @@ int mkstemps(char *, int);
 #ifndef HAVE_NANOSLEEP
 int nanosleep(const struct timespec *, struct timespec *);
 #endif
+#ifndef HAVE_PW_DUP
+struct passwd *pw_dup(const struct passwd *);
+#endif
 #ifndef HAVE_SETENV
 int setenv(const char *, const char *, int);
 #endif
@@ -337,5 +405,8 @@ int unsetenv(const char *);
 #ifndef HAVE_STRSIGNAL
 char *strsignal(int);
 #endif
+#ifndef HAVE_SIG2STR
+int sig2str(int, char *);
+#endif
 
 #endif /* _SUDO_MISSING_H */