ftmacros.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. * Copyright (c) 1994, 1995, 1996
  3. * The Regents of the University of California. All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright
  11. * notice, this list of conditions and the following disclaimer in the
  12. * documentation and/or other materials provided with the distribution.
  13. * 3. All advertising materials mentioning features or use of this software
  14. * must display the following acknowledgement:
  15. * This product includes software developed by the Computer Systems
  16. * Engineering Group at Lawrence Berkeley Laboratory.
  17. * 4. Neither the name of the University nor of the Laboratory may be used
  18. * to endorse or promote products derived from this software without
  19. * specific prior written permission.
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. * SUCH DAMAGE.
  32. */
  33. #ifndef ftmacros_h
  34. #define ftmacros_h
  35. /*
  36. * Define some feature test macros to make sure that everything we want
  37. * to be declared gets declared.
  38. *
  39. * On some UN*Xes we need to force strtok_r() to be declared.
  40. * We do *NOT* want to define _POSIX_C_SOURCE, as that tends
  41. * to make non-POSIX APIs that we use unavailable.
  42. * XXX - is there no portable way to say "please pollute the
  43. * namespace to the maximum extent possible"?
  44. */
  45. #if defined(sun) || defined(__sun)
  46. #define __EXTENSIONS__
  47. /*
  48. * We also need to define _XPG4_2 in order to get
  49. * the Single UNIX Specification version of
  50. * recvmsg().
  51. */
  52. #define _XPG4_2
  53. #elif defined(_hpux) || defined(hpux) || defined(__hpux)
  54. #define _REENTRANT
  55. /*
  56. * We need this to get the versions of socket functions that
  57. * use socklen_t. Define it only if it's not already defined,
  58. * so we don't get redefiniton warnings.
  59. */
  60. #ifndef _XOPEN_SOURCE_EXTENDED
  61. #define _XOPEN_SOURCE_EXTENDED
  62. #endif
  63. /*
  64. * XXX - the list of PA-RISC options for GCC makes it sound as if
  65. * building code that uses a particular vintage of UNIX API/ABI
  66. * is complicated:
  67. *
  68. * https://gcc.gnu.org/onlinedocs/gcc/HPPA-Options.html
  69. *
  70. * See the description of the -munix flag.
  71. *
  72. * We probably want libpcap to work with programs built for any
  73. * UN*X standard. I'm not sure whether that's possible and, if
  74. * it is, what sort of stuff it'd have to do.
  75. *
  76. * It might also be a requirement that we build with a special
  77. * flag to allow the library to be used with threaded code, at
  78. * least with HP's C compiler; hopefully doing so won't make it
  79. * *not* work with *un*-threaded code.
  80. */
  81. #elif defined(__linux__) || defined(linux) || defined(__linux)
  82. /*
  83. * We can't turn _GNU_SOURCE on because some versions of GNU Libc
  84. * will give the GNU version of strerror_r(), which returns a
  85. * string pointer and doesn't necessarily fill in the buffer,
  86. * rather than the standard version of strerror_r(), which
  87. * returns 0 or an errno and always fills in the buffer. We
  88. * require both of the latter behaviors.
  89. *
  90. * So we try turning everything else on that we can. This includes
  91. * defining _XOPEN_SOURCE as 600, because we want to force crypt()
  92. * to be declared on systems that use GNU libc, such as most Linux
  93. * distributions.
  94. */
  95. #define _POSIX_C_SOURCE 200809L
  96. #define _XOPEN_SOURCE 600
  97. /*
  98. * We turn on both _DEFAULT_SOURCE and _BSD_SOURCE to try to get
  99. * the BSD u_XXX types, such as u_int and u_short, defined. We
  100. * define _DEFAULT_SOURCE first, so that newer versions of GNU libc
  101. * don't whine about _BSD_SOURCE being deprecated; we still have
  102. * to define _BSD_SOURCE to handle older versions of GNU libc that
  103. * don't support _DEFAULT_SOURCE.
  104. */
  105. #define _DEFAULT_SOURCE
  106. #define _BSD_SOURCE
  107. #endif
  108. #endif