00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef RUBY_MISSING_H
00012 #define RUBY_MISSING_H 1
00013
00014 #if defined(__cplusplus)
00015 extern "C" {
00016 #if 0
00017 }
00018 #endif
00019 #endif
00020
00021 #include "ruby/config.h"
00022 #include <stddef.h>
00023 #include <math.h>
00024 #ifdef RUBY_EXTCONF_H
00025 #include RUBY_EXTCONF_H
00026 #endif
00027
00028 #if !defined(HAVE_STRUCT_TIMEVAL) || !defined(HAVE_STRUCT_TIMESPEC)
00029 #if defined(HAVE_TIME_H)
00030 # include <time.h>
00031 #endif
00032 #if defined(HAVE_SYS_TIME_H)
00033 # include <sys/time.h>
00034 #endif
00035 #endif
00036
00037 #if !defined(HAVE_STRUCT_TIMEVAL)
00038 struct timeval {
00039 time_t tv_sec;
00040 long tv_usec;
00041 };
00042 #endif
00043
00044 #if !defined(HAVE_STRUCT_TIMESPEC)
00045 struct timespec {
00046 time_t tv_sec;
00047 long tv_nsec;
00048 };
00049 #endif
00050
00051 #if !defined(HAVE_STRUCT_TIMEZONE)
00052 struct timezone {
00053 int tz_minuteswest;
00054 int tz_dsttime;
00055 };
00056 #endif
00057
00058 #ifdef RUBY_EXPORT
00059 #undef RUBY_EXTERN
00060 #endif
00061 #ifndef RUBY_EXTERN
00062 #define RUBY_EXTERN extern
00063 #endif
00064
00065 #if defined __GNUC__ && __GNUC__ >= 4
00066 #pragma GCC visibility push(default)
00067 #endif
00068
00069 #ifndef HAVE_ACOSH
00070 RUBY_EXTERN double acosh(double);
00071 RUBY_EXTERN double asinh(double);
00072 RUBY_EXTERN double atanh(double);
00073 #endif
00074
00075 #ifndef HAVE_CRYPT
00076 RUBY_EXTERN char *crypt(const char *, const char *);
00077 #endif
00078
00079 #ifndef HAVE_DUP2
00080 RUBY_EXTERN int dup2(int, int);
00081 #endif
00082
00083 #ifndef HAVE_EACCESS
00084 RUBY_EXTERN int eaccess(const char*, int);
00085 #endif
00086
00087 #ifndef HAVE_ROUND
00088 RUBY_EXTERN double round(double);
00089 #endif
00090
00091 #ifndef HAVE_FINITE
00092 RUBY_EXTERN int finite(double);
00093 #endif
00094
00095 #ifndef HAVE_FLOCK
00096 RUBY_EXTERN int flock(int, int);
00097 #endif
00098
00099
00100
00101
00102
00103
00104
00105 #ifndef HAVE_HYPOT
00106 RUBY_EXTERN double hypot(double, double);
00107 #endif
00108
00109 #ifndef HAVE_ERF
00110 RUBY_EXTERN double erf(double);
00111 RUBY_EXTERN double erfc(double);
00112 #endif
00113
00114 #ifndef HAVE_TGAMMA
00115 RUBY_EXTERN double tgamma(double);
00116 #endif
00117
00118 #ifndef HAVE_LGAMMA_R
00119 RUBY_EXTERN double lgamma_r(double, int *);
00120 #endif
00121
00122 #ifndef HAVE_CBRT
00123 RUBY_EXTERN double cbrt(double);
00124 #endif
00125
00126 #if !defined(INFINITY) || !defined(NAN)
00127 union bytesequence4_or_float {
00128 unsigned char bytesequence[4];
00129 float float_value;
00130 };
00131 #endif
00132
00133 #ifdef INFINITY
00134 # define HAVE_INFINITY
00135 #else
00136
00137 RUBY_EXTERN const union bytesequence4_or_float rb_infinity;
00138 # define INFINITY (rb_infinity.float_value)
00139 #endif
00140
00141 #ifdef NAN
00142 # define HAVE_NAN
00143 #else
00144
00145 RUBY_EXTERN const union bytesequence4_or_float rb_nan;
00146 # define NAN (rb_nan.float_value)
00147 #endif
00148
00149 #ifndef isinf
00150 # ifndef HAVE_ISINF
00151 # if defined(HAVE_FINITE) && defined(HAVE_ISNAN)
00152 # ifdef HAVE_IEEEFP_H
00153 # include <ieeefp.h>
00154 # endif
00155 # define isinf(x) (!finite(x) && !isnan(x))
00156 # else
00157 RUBY_EXTERN int isinf(double);
00158 # endif
00159 # endif
00160 #endif
00161
00162 #ifndef isnan
00163 # ifndef HAVE_ISNAN
00164 RUBY_EXTERN int isnan(double);
00165 # endif
00166 #endif
00167
00168
00169
00170
00171
00172
00173
00174 #ifndef HAVE_MEMMOVE
00175 RUBY_EXTERN void *memmove(void *, const void *, size_t);
00176 #endif
00177
00178
00179
00180
00181
00182
00183
00184 #ifndef HAVE_STRCHR
00185 RUBY_EXTERN char *strchr(const char *, int);
00186 RUBY_EXTERN char *strrchr(const char *, int);
00187 #endif
00188
00189 #ifndef HAVE_STRERROR
00190 RUBY_EXTERN char *strerror(int);
00191 #endif
00192
00193 #ifndef HAVE_STRSTR
00194 RUBY_EXTERN char *strstr(const char *, const char *);
00195 #endif
00196
00197
00198
00199
00200
00201
00202
00203 #ifndef HAVE_STRLCPY
00204 RUBY_EXTERN size_t strlcpy(char *, const char*, size_t);
00205 #endif
00206
00207 #ifndef HAVE_STRLCAT
00208 RUBY_EXTERN size_t strlcat(char *, const char*, size_t);
00209 #endif
00210
00211 #ifndef HAVE_SIGNBIT
00212 RUBY_EXTERN int signbit(double x);
00213 #endif
00214
00215 #ifndef HAVE_FFS
00216 RUBY_EXTERN int ffs(int);
00217 #endif
00218
00219 #ifdef BROKEN_CLOSE
00220 #include <sys/types.h>
00221 #include <sys/socket.h>
00222 RUBY_EXTERN int ruby_getpeername(int, struct sockaddr *, socklen_t *);
00223 RUBY_EXTERN int ruby_getsockname(int, struct sockaddr *, socklen_t *);
00224 RUBY_EXTERN int ruby_shutdown(int, int);
00225 RUBY_EXTERN int ruby_close(int);
00226 #endif
00227
00228 #ifndef HAVE_SETPROCTITLE
00229 RUBY_EXTERN void setproctitle(const char *fmt, ...);
00230 #endif
00231
00232 #if defined __GNUC__ && __GNUC__ >= 4
00233 #pragma GCC visibility pop
00234 #endif
00235
00236 #if defined(__cplusplus)
00237 #if 0
00238 {
00239 #endif
00240 }
00241 #endif
00242
00243 #endif
00244