Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.         compat: Some compatibility functions and header inclusions.
  3.         Basic standard C stuff, that may barely be above/around C89.
  4.  
  5.         The mpg123 code is determined to keep it's legacy. A legacy of old, old UNIX.
  6.         It is envisioned to include this compat header instead of any of the "standard" headers, to catch compatibility issues.
  7.         So, don't include stdlib.h or string.h ... include compat.h.
  8.  
  9.         copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1
  10.         see COPYING and AUTHORS files in distribution or http://mpg123.org
  11.         initially written by Thomas Orgis
  12. */
  13.  
  14. #ifndef MPG123_COMPAT_H
  15. #define MPG123_COMPAT_H
  16.  
  17. #include "config.h"
  18.  
  19. #ifdef HAVE_STDLIB_H
  20. /* realloc, size_t */
  21. #include <stdlib.h>
  22. #endif
  23.  
  24. #include        <stdio.h>
  25. #include        <math.h>
  26.  
  27. #ifdef HAVE_SIGNAL_H
  28. #include <signal.h>
  29. #else
  30. #ifdef HAVE_SYS_SIGNAL_H
  31. #include <sys/signal.h>
  32. #endif
  33. #endif
  34.  
  35. #ifdef HAVE_UNISTD_H
  36. #include <unistd.h>
  37. #endif
  38.  
  39. /* Types, types, types. */
  40. /* Do we actually need these two in addition to sys/types.h? As replacement? */
  41. #ifdef HAVE_SYS_TYPES_H
  42. #include <sys/types.h>
  43. #endif
  44. #ifdef HAVE_INTTYPES_H
  45. #include <inttypes.h>
  46. #endif
  47. #ifdef HAVE_STDINT_H
  48. #include <stdint.h>
  49. #endif
  50. /* We want SIZE_MAX, etc. */
  51. #ifdef HAVE_LIMITS_H
  52. #include <limits.h>
  53. #endif
  54.  
  55. #ifndef SIZE_MAX
  56. #define SIZE_MAX ((size_t)-1)
  57. #endif
  58. #ifndef ULONG_MAX
  59. #define ULONG_MAX ((unsigned long)-1)
  60. #endif
  61.  
  62. #ifdef HAVE_STRING_H
  63. #include <string.h>
  64. #endif
  65.  
  66. #ifdef OS2
  67. #include <float.h>
  68. #endif
  69.  
  70. #ifdef HAVE_SYS_TIME_H
  71. #include <sys/time.h>
  72. #endif
  73. /* For select(), I need select.h according to POSIX 2001, else: sys/time.h sys/types.h unistd.h */
  74. #ifdef HAVE_SYS_SELECT_H
  75. #include <sys/select.h>
  76. #endif
  77.  
  78. /* To parse big numbers... */
  79. #ifdef HAVE_ATOLL
  80. #define atobigint atoll
  81. #else
  82. #define atobigint atol
  83. #endif
  84.  
  85. typedef unsigned char byte;
  86.  
  87. /* A safe realloc also for very old systems where realloc(NULL, size) returns NULL. */
  88. void *safe_realloc(void *ptr, size_t size);
  89. #ifndef HAVE_STRERROR
  90. const char *strerror(int errnum);
  91. #endif
  92.  
  93. #ifndef HAVE_STRDUP
  94. char *strdup(const char *s);
  95. #endif
  96.  
  97. /* If we have the size checks enabled, try to derive some sane printfs.
  98.    Simple start: Use max integer type and format if long is not big enough.
  99.    I am hesitating to use %ll without making sure that it's there... */
  100. #if !(defined PLAIN_C89) && (defined SIZEOF_OFF_T) && (SIZEOF_OFF_T > SIZEOF_LONG) && (defined PRIiMAX)
  101. # define OFF_P PRIiMAX
  102. typedef intmax_t off_p;
  103. #else
  104. # define OFF_P "li"
  105. typedef long off_p;
  106. #endif
  107.  
  108. #if !(defined PLAIN_C89) && (defined SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > SIZEOF_LONG) && (defined PRIuMAX)
  109. # define SIZE_P PRIuMAX
  110. typedef uintmax_t size_p;
  111. #else
  112. # define SIZE_P "lu"
  113. typedef unsigned long size_p;
  114. #endif
  115.  
  116. #if !(defined PLAIN_C89) && (defined SIZEOF_SSIZE_T) && (SIZEOF_SSIZE_T > SIZEOF_LONG) && (defined PRIiMAX)
  117. # define SSIZE_P PRIuMAX
  118. typedef intmax_t ssize_p;
  119. #else
  120. # define SSIZE_P "li"
  121. typedef long ssize_p;
  122. #endif
  123.  
  124. #endif
  125.