Skip to content

Commit

Permalink
Some compat work towards making GCC's libstdc++ build.
Browse files Browse the repository at this point in the history
  • Loading branch information
awesomekling committed Feb 25, 2019
1 parent 93c0dfd commit 0b957ed
Show file tree
Hide file tree
Showing 9 changed files with 121 additions and 12 deletions.
7 changes: 7 additions & 0 deletions LibC/ctype.h
Original file line number Diff line number Diff line change
Expand Up @@ -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); }

Expand All @@ -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)
Expand All @@ -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 changes: 23 additions & 0 deletions LibC/errno_numbers.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 :^)")


Expand Down
6 changes: 5 additions & 1 deletion LibC/locale.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@

#include <sys/cdefs.h>

__BEGIN_DECLS

enum {
LC_ALL,
LC_NUMERIC,
LC_CTYPE,
LC_COLLATE,
};

__BEGIN_DECLS
struct lconv {
};

struct lconv* localeconv();
char* setlocale(int category, const char* locale);

__END_DECLS
Expand Down
45 changes: 45 additions & 0 deletions LibC/math.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 19 additions & 9 deletions LibC/stdint.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 11 additions & 2 deletions LibC/stdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,22 @@ 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*);
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*);
Expand All @@ -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 changes: 4 additions & 0 deletions LibC/stdlib.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *));
Expand Down
3 changes: 3 additions & 0 deletions LibC/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 4 additions & 0 deletions LibC/time.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down

0 comments on commit 0b957ed

Please sign in to comment.