1/************************************************ 2 3 missing.h - prototype for *.c in ./missing, and 4 for missing timeval struct 5 6 $Author: nagachika $ 7 created at: Sat May 11 23:46:03 JST 2002 8 9************************************************/ 10 11#ifndef RUBY_MISSING_H 12#define RUBY_MISSING_H 1 13 14#if defined(__cplusplus) 15extern "C" { 16#if 0 17} /* satisfy cc-mode */ 18#endif 19#endif 20 21#include "ruby/config.h" 22#include <stddef.h> 23#include <math.h> /* for INFINITY and NAN */ 24#ifdef RUBY_EXTCONF_H 25#include RUBY_EXTCONF_H 26#endif 27 28#if !defined(HAVE_STRUCT_TIMEVAL) || !defined(HAVE_STRUCT_TIMESPEC) 29#if defined(HAVE_TIME_H) 30# include <time.h> 31#endif 32#if defined(HAVE_SYS_TIME_H) 33# include <sys/time.h> 34#endif 35#endif 36 37#if !defined(HAVE_STRUCT_TIMEVAL) 38struct timeval { 39 time_t tv_sec; /* seconds */ 40 long tv_usec; /* microseconds */ 41}; 42#endif /* HAVE_STRUCT_TIMEVAL */ 43 44#if !defined(HAVE_STRUCT_TIMESPEC) 45struct timespec { 46 time_t tv_sec; /* seconds */ 47 long tv_nsec; /* nanoseconds */ 48}; 49#endif 50 51#if !defined(HAVE_STRUCT_TIMEZONE) 52struct timezone { 53 int tz_minuteswest; 54 int tz_dsttime; 55}; 56#endif 57 58#ifdef RUBY_EXPORT 59#undef RUBY_EXTERN 60#endif 61#ifndef RUBY_EXTERN 62#define RUBY_EXTERN extern 63#endif 64 65#if defined __GNUC__ && __GNUC__ >= 4 66#pragma GCC visibility push(default) 67#endif 68 69#ifndef HAVE_ACOSH 70RUBY_EXTERN double acosh(double); 71RUBY_EXTERN double asinh(double); 72RUBY_EXTERN double atanh(double); 73#endif 74 75#ifndef HAVE_CRYPT 76RUBY_EXTERN char *crypt(const char *, const char *); 77#endif 78 79#ifndef HAVE_DUP2 80RUBY_EXTERN int dup2(int, int); 81#endif 82 83#ifndef HAVE_EACCESS 84RUBY_EXTERN int eaccess(const char*, int); 85#endif 86 87#ifndef HAVE_ROUND 88RUBY_EXTERN double round(double); /* numeric.c */ 89#endif 90 91#ifndef HAVE_FINITE 92RUBY_EXTERN int finite(double); 93#endif 94 95#ifndef HAVE_FLOCK 96RUBY_EXTERN int flock(int, int); 97#endif 98 99/* 100#ifndef HAVE_FREXP 101RUBY_EXTERN double frexp(double, int *); 102#endif 103*/ 104 105#ifndef HAVE_HYPOT 106RUBY_EXTERN double hypot(double, double); 107#endif 108 109#ifndef HAVE_ERF 110RUBY_EXTERN double erf(double); 111RUBY_EXTERN double erfc(double); 112#endif 113 114#ifndef HAVE_TGAMMA 115RUBY_EXTERN double tgamma(double); 116#endif 117 118#ifndef HAVE_LGAMMA_R 119RUBY_EXTERN double lgamma_r(double, int *); 120#endif 121 122#ifndef HAVE_CBRT 123RUBY_EXTERN double cbrt(double); 124#endif 125 126#if !defined(INFINITY) || !defined(NAN) 127union bytesequence4_or_float { 128 unsigned char bytesequence[4]; 129 float float_value; 130}; 131#endif 132 133#ifdef INFINITY 134# define HAVE_INFINITY 135#else 136/** @internal */ 137RUBY_EXTERN const union bytesequence4_or_float rb_infinity; 138# define INFINITY (rb_infinity.float_value) 139#endif 140 141#ifdef NAN 142# define HAVE_NAN 143#else 144/** @internal */ 145RUBY_EXTERN const union bytesequence4_or_float rb_nan; 146# define NAN (rb_nan.float_value) 147#endif 148 149#ifndef isinf 150# ifndef HAVE_ISINF 151# if defined(HAVE_FINITE) && defined(HAVE_ISNAN) 152# ifdef HAVE_IEEEFP_H 153# include <ieeefp.h> 154# endif 155# define isinf(x) (!finite(x) && !isnan(x)) 156# else 157RUBY_EXTERN int isinf(double); 158# endif 159# endif 160#endif 161 162#ifndef isnan 163# ifndef HAVE_ISNAN 164RUBY_EXTERN int isnan(double); 165# endif 166#endif 167 168/* 169#ifndef HAVE_MEMCMP 170RUBY_EXTERN int memcmp(const void *, const void *, size_t); 171#endif 172*/ 173 174#ifndef HAVE_MEMMOVE 175RUBY_EXTERN void *memmove(void *, const void *, size_t); 176#endif 177 178/* 179#ifndef HAVE_MODF 180RUBY_EXTERN double modf(double, double *); 181#endif 182*/ 183 184#ifndef HAVE_STRCHR 185RUBY_EXTERN char *strchr(const char *, int); 186RUBY_EXTERN char *strrchr(const char *, int); 187#endif 188 189#ifndef HAVE_STRERROR 190RUBY_EXTERN char *strerror(int); 191#endif 192 193#ifndef HAVE_STRSTR 194RUBY_EXTERN char *strstr(const char *, const char *); 195#endif 196 197/* 198#ifndef HAVE_STRTOL 199RUBY_EXTERN long strtol(const char *, char **, int); 200#endif 201*/ 202 203#ifndef HAVE_STRLCPY 204RUBY_EXTERN size_t strlcpy(char *, const char*, size_t); 205#endif 206 207#ifndef HAVE_STRLCAT 208RUBY_EXTERN size_t strlcat(char *, const char*, size_t); 209#endif 210 211#ifndef HAVE_SIGNBIT 212RUBY_EXTERN int signbit(double x); 213#endif 214 215#ifndef HAVE_FFS 216RUBY_EXTERN int ffs(int); 217#endif 218 219#ifdef BROKEN_CLOSE 220#include <sys/types.h> 221#include <sys/socket.h> 222RUBY_EXTERN int ruby_getpeername(int, struct sockaddr *, socklen_t *); 223RUBY_EXTERN int ruby_getsockname(int, struct sockaddr *, socklen_t *); 224RUBY_EXTERN int ruby_shutdown(int, int); 225RUBY_EXTERN int ruby_close(int); 226#endif 227 228#ifndef HAVE_SETPROCTITLE 229RUBY_EXTERN void setproctitle(const char *fmt, ...); 230#endif 231 232#if defined __GNUC__ && __GNUC__ >= 4 233#pragma GCC visibility pop 234#endif 235 236#if defined(__cplusplus) 237#if 0 238{ /* satisfy cc-mode */ 239#endif 240} /* extern "C" { */ 241#endif 242 243#endif /* RUBY_MISSING_H */ 244