Prechádzať zdrojové kódy

Some compat work towards making GCC's libstdc++ build.

Andreas Kling 6 rokov pred
rodič
commit
0b957ed2b1
9 zmenil súbory, kde vykonal 121 pridanie a 12 odobranie
  1. 7 0
      LibC/ctype.h
  2. 23 0
      LibC/errno_numbers.h
  3. 5 1
      LibC/locale.h
  4. 45 0
      LibC/math.h
  5. 19 9
      LibC/stdint.h
  6. 11 2
      LibC/stdio.h
  7. 4 0
      LibC/stdlib.h
  8. 3 0
      LibC/string.h
  9. 4 0
      LibC/time.h

+ 7 - 0
LibC/ctype.h

@@ -75,6 +75,11 @@ ALWAYS_INLINE int __isxdigit(int c)
     return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
 }
 
+ALWAYS_INLINE int __isgraph(int c)
+{
+    return __isalnum(c) || __ispunct(c);
+}
+
 #ifdef __cplusplus
 #define __CTYPE_FUNC(name) static inline int name(int c) { return __ ## name(c); }
 
@@ -91,6 +96,7 @@ __CTYPE_FUNC(isalpha)
 __CTYPE_FUNC(isalnum)
 __CTYPE_FUNC(iscntrl)
 __CTYPE_FUNC(isxdigit)
+__CTYPE_FUNC(isgraph)
 #else
 #define isascii(c) __isascii(c)
 #define isspace(c) __isspace(c)
@@ -105,6 +111,7 @@ __CTYPE_FUNC(isxdigit)
 #define isalnum(c) __isalnum(c)
 #define iscntrl(c) __iscntrl(c)
 #define isxdigit(c) __isxdigit(c)
+#define isgraph(c) __isgraph(c)
 #endif
 
 __END_DECLS

+ 23 - 0
LibC/errno_numbers.h

@@ -48,6 +48,29 @@
     __ERROR(ENOTEMPTY,      "Directory not empty") \
     __ERROR(EDOM,           "Math argument out of domain") \
     __ERROR(ECONNREFUSED,   "Connection refused") \
+    __ERROR(EADDRNOTAVAIL,  "Address not available") \
+    __ERROR(EISCONN,        "Already connected") \
+    __ERROR(ECONNABORTED,   "Connection aborted") \
+    __ERROR(EALREADY,       "Connection already in progress") \
+    __ERROR(ECONNRESET,     "Connection reset") \
+    __ERROR(EDESTADDRREQ,   "Desination address required") \
+    __ERROR(EHOSTUNREACH,   "Host unreachable") \
+    __ERROR(EILSEQ,         "Illegal byte sequence") \
+    __ERROR(EMSGSIZE,       "Message size") \
+    __ERROR(ENETDOWN,       "Network down") \
+    __ERROR(ENETUNREACH,    "Network unreachable") \
+    __ERROR(ENETRESET,      "Network reset") \
+    __ERROR(ENOBUFS,        "No buffer space") \
+    __ERROR(ENOLCK,         "No lock available") \
+    __ERROR(ENOMSG,         "No message") \
+    __ERROR(ENOPROTOOPT,    "No protocol option") \
+    __ERROR(ENOTCONN,       "Not connected") \
+    __ERROR(EWOULDBLOCK,    "Operation would block") \
+    __ERROR(EPROTONOSUPPORT,"Protocol not supported") \
+    __ERROR(EDEADLK,        "Resource deadlock would occur") \
+    __ERROR(ETIMEDOUT,      "Timed out") \
+    __ERROR(EPROTOTYPE,     "Wrong protocol type") \
+    __ERROR(EINPROGRESS,    "Operation in progress") \
     __ERROR(EMAXERRNO,      "The highest errno +1 :^)")
 
 

+ 5 - 1
LibC/locale.h

@@ -2,6 +2,8 @@
 
 #include <sys/cdefs.h>
 
+__BEGIN_DECLS
+
 enum {
     LC_ALL,
     LC_NUMERIC,
@@ -9,8 +11,10 @@ enum {
     LC_COLLATE,
 };
 
-__BEGIN_DECLS
+struct lconv {
+};
 
+struct lconv* localeconv();
 char* setlocale(int category, const char* locale);
 
 __END_DECLS

+ 45 - 0
LibC/math.h

@@ -6,6 +6,51 @@ __BEGIN_DECLS
 
 #define HUGE_VAL 1e10000
 
+double acos(double);
+float acosf(float);
+double asin(double);
+float asinf(float);
+double atan(double);
+float atanf(float);
+double atan2(double, double);
+float atan2f(float, float);
+double cos(double);
+float cosf(float);
+double cosh(double);
+float coshf(float);
+double sin(double);
+float sinf(float);
+double sinh(double);
+float sinhf(float);
+double tan(double);
+float tanf(float);
+double tanh(double);
+float tanhf(float);
+double ceil(double);
+float ceilf(float);
+double floor(double);
+float floorf(float);
+double round(double);
+float roundf(float);
+double fabs(double);
+float fabsf(float);
+double fmod(double);
+float fmodf(float);
+double exp(double);
+float expf(float);
+double frexp(double, int* exp);
+float frexpf(float, int* exp);
+double log(double);
+float logf(float);
+double log10(double);
+float log10f(float);
+double sqrt(double);
+float sqrtf(float);
+double modf(double, double*);
+float modff(float, float*);
+double ldexp(double, int exp);
+double ldexpf(float, int exp);
+
 double pow(double x, double y);
 
 __END_DECLS

+ 19 - 9
LibC/stdint.h

@@ -4,15 +4,25 @@
 
 __BEGIN_DECLS
 
-typedef unsigned long long int uint64_t;
-typedef unsigned int uint32_t;
-typedef unsigned short uint16_t;
-typedef unsigned char uint8_t;
-
-typedef signed long long int int64_t;
-typedef signed int int32_t;
-typedef signed short int16_t;
-typedef signed char int8_t;
+typedef __UINT64_TYPE__ uint64_t;
+typedef __UINT32_TYPE__ uint32_t;
+typedef __UINT16_TYPE__ uint16_t;
+typedef __UINT8_TYPE__ uint8_t;
+
+typedef __INT64_TYPE__ int64_t;
+typedef __INT32_TYPE__ int32_t;
+typedef __INT16_TYPE__ int16_t;
+typedef __INT8_TYPE__ int8_t;
+
+typedef __UINT_FAST8_TYPE__ uint_fast8_t;
+typedef __UINT_FAST16_TYPE__ uint_fast16_t;
+typedef __UINT_FAST32_TYPE__ uint_fast32_t;
+typedef __UINT_FAST64_TYPE__ uint_fast64_t;
+
+typedef __INT_FAST8_TYPE__ int_fast8_t;
+typedef __INT_FAST16_TYPE__ int_fast16_t;
+typedef __INT_FAST32_TYPE__ int_fast32_t;
+typedef __INT_FAST64_TYPE__ int_fast64_t;
 
 #define __int8_t_defined 1
 #define __uint8_t_defined 1

+ 11 - 2
LibC/stdio.h

@@ -37,6 +37,12 @@ extern FILE* stdin;
 extern FILE* stdout;
 extern FILE* stderr;
 
+typedef size_t fpos_t;
+
+int fseek(FILE*, long offset, int whence);
+int fgetpos(FILE*, fpos_t*);
+int fsetpos(FILE*, const fpos_t*);
+long ftell(FILE*);
 char* fgets(char* buffer, int size, FILE*);
 int fputc(int ch, FILE*);
 int fileno(FILE*);
@@ -44,8 +50,9 @@ int fgetc(FILE*);
 int getc(FILE*);
 int getchar();
 int ungetc(int c, FILE*);
+int remove(const char* pathname);
 FILE* fdopen(int fd, const char* mode);
-FILE* fopen(const char* pathname, const char* mode);
+FILE* fopen(const char* pathname, const char* mode); FILE* freopen(const char* pathname, const char* mode, FILE*);
 int fclose(FILE*);
 void rewind(FILE*);
 void clearerr(FILE*);
@@ -68,12 +75,14 @@ int putc(int ch, FILE*);
 int puts(const char*);
 int fputs(const char*, FILE*);
 void perror(const char*);
-int sscanf (const char* buf, const char* fmt, ...);
+int scanf(const char* fmt, ...);
+int sscanf (const char* str, const char* fmt, ...);
 int fscanf(FILE*, const char* fmt, ...);
 int setvbuf(FILE*, char* buf, int mode, size_t);
 void setbuf(FILE*, char* buf);
 void setlinebuf(FILE*);
 int rename(const char* oldpath, const char* newpath);
+FILE* tmpfile();
 
 __END_DECLS
 

+ 4 - 0
LibC/stdlib.h

@@ -16,14 +16,18 @@ void* realloc(void *ptr, size_t);
 char* getenv(const char* name);
 int atoi(const char*);
 long atol(const char*);
+double strtod(const char*, char** endptr);
 long strtol(const char*, char** endptr, int base);
 unsigned long strtoul(const char*, char** endptr, int base);
 void qsort(void* base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
+int atexit(void (*function)());
 __attribute__((noreturn)) void exit(int status);
 __attribute__((noreturn)) void abort();
 char* ptsname(int fd);
 int ptsname_r(int fd, char* buffer, size_t);
 int abs(int);
+long labs(long);
+double atof(const char*);
 int system(const char* command);
 char* mktemp(char*);
 void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

+ 3 - 0
LibC/string.h

@@ -29,6 +29,9 @@ size_t strcspn(const char*, const char* reject);
 char* strerror(int errnum);
 char* strsignal(int signum);
 char* strpbrk(const char*, const char* accept);
+char *strtok(char* str, const char* delim);
+int strcoll(const char *s1, const char *s2);
+size_t strxfrm(char *dest, const char *src, size_t n);
 
 __END_DECLS
 

+ 4 - 0
LibC/time.h

@@ -30,10 +30,14 @@ extern int daylight;
 int gettimeofday(struct timeval*, struct timezone* tz);
 struct tm* localtime(const time_t*);
 struct tm *gmtime(const time_t*);
+time_t mktime(struct tm*);
 time_t time(time_t*);
 char* ctime(const time_t*);
 void tzset();
 char *asctime(const struct tm*);
+clock_t clock();
+double difftime(time_t, time_t);
+size_t strftime(char* s, size_t max, const char* format, const struct tm*);
 
 #define difftime(t1,t0) (double)(t1 - t0)