0.3.0: converge relibc to upstream 0.6.0 + Red Bear patches
This commit is contained in:
-6332
File diff suppressed because it is too large
Load Diff
@@ -1,26 +0,0 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/types_internal.h>
|
||||
|
||||
// TODO: Can be implemented in rust when cbindgen supports "..." syntax
|
||||
|
||||
int sys_open(const char* filename, int flags, mode_t mode);
|
||||
|
||||
int open(const char* filename, int flags, ...) {
|
||||
mode_t mode = 0;
|
||||
va_list ap;
|
||||
va_start(ap, flags);
|
||||
mode = va_arg(ap, mode_t);
|
||||
va_end(ap);
|
||||
return sys_open(filename, flags, mode);
|
||||
}
|
||||
|
||||
int sys_fcntl(int fildes, int cmd, int args);
|
||||
|
||||
int fcntl(int fildes, int cmd, ...) {
|
||||
int args = 0;
|
||||
va_list ap;
|
||||
va_start(ap, cmd);
|
||||
args = va_arg(ap, int);
|
||||
va_end(ap);
|
||||
return sys_fcntl(fildes, cmd, args);
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
// TODO: Can be implemented in rust when cbindgen supports "..." syntax
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
int sys_ptrace(int request, va_list ap);
|
||||
|
||||
int ptrace(int request, ...) {
|
||||
va_list ap;
|
||||
va_start(ap, request);
|
||||
int ret = sys_ptrace(request, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
#include <stdint.h>
|
||||
|
||||
void abort();
|
||||
|
||||
uintptr_t __stack_chk_guard = 0xd048c37519fcadfe;
|
||||
|
||||
__attribute__((noreturn))
|
||||
void __stack_chk_fail(void) {
|
||||
abort();
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
|
||||
typedef struct FILE FILE;
|
||||
|
||||
// TODO: Can be implemented in rust when cbindgen supports "..." syntax
|
||||
|
||||
int vasprintf(char ** strp, const char * fmt, va_list ap);
|
||||
|
||||
int asprintf(char ** strp, const char * fmt, ...) {
|
||||
int ret;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
ret = vasprintf(strp, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int vfprintf(FILE * stream, const char * fmt, va_list ap);
|
||||
|
||||
int fprintf(FILE * stream, const char * fmt, ...) {
|
||||
int ret;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
ret = vfprintf(stream, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int vprintf(const char * fmt, va_list ap);
|
||||
|
||||
int printf(const char * fmt, ...) {
|
||||
int ret;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
ret = vprintf(fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int vsnprintf(char * s, size_t n, const char * fmt, va_list ap);
|
||||
|
||||
int snprintf(char * s, size_t n, const char * fmt, ...) {
|
||||
int ret;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
ret = vsnprintf(s, n, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int vsprintf(char * s, const char * fmt, va_list ap);
|
||||
|
||||
int sprintf(char *s, const char * fmt, ...) {
|
||||
int ret;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
ret = vsprintf(s, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int vfscanf(FILE * stream, const char * fmt, va_list ap);
|
||||
|
||||
int fscanf(FILE * stream, const char * fmt, ...) {
|
||||
int ret;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
ret = vfscanf(stream, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int vscanf(const char * fmt, va_list ap);
|
||||
|
||||
int scanf(const char * fmt, ...) {
|
||||
int ret;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
ret = vscanf(fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int vsscanf(const char * input, const char * fmt, va_list ap);
|
||||
|
||||
int sscanf(const char * input, const char * fmt, ...) {
|
||||
int ret;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
ret = vsscanf(input, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
@@ -3,3 +3,11 @@ double strtod(const char *nptr, char **endptr);
|
||||
long double strtold(const char *nptr, char **endptr) {
|
||||
return (long double)strtod(nptr, endptr);
|
||||
}
|
||||
|
||||
double relibc_ldtod(const long double* val) {
|
||||
return (double)(*val);
|
||||
}
|
||||
|
||||
void relibc_dtold(double val, long double* out) {
|
||||
*out = (long double)val;
|
||||
}
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
|
||||
// TODO: Can be implemented in rust when cbindgen supports "..." syntax
|
||||
|
||||
int execv(const char *path, char *const *argv);
|
||||
|
||||
int execl(const char *path, const char* argv0, ...)
|
||||
{
|
||||
int argc;
|
||||
va_list ap;
|
||||
va_start(ap, argv0);
|
||||
for (argc = 1; va_arg(ap, const char*); argc++);
|
||||
va_end(ap);
|
||||
{
|
||||
int i;
|
||||
char *argv[argc+1];
|
||||
va_start(ap, argv0);
|
||||
argv[0] = (char *)argv0;
|
||||
for (i = 1; i < argc; i++) {
|
||||
argv[i] = va_arg(ap, char *);
|
||||
}
|
||||
argv[i] = NULL;
|
||||
va_end(ap);
|
||||
return execv(path, argv);
|
||||
}
|
||||
}
|
||||
|
||||
int execve(const char *path, char *const *argv, char *const *envp);
|
||||
|
||||
int execle(const char *path, const char* argv0, ...)
|
||||
{
|
||||
int argc;
|
||||
va_list ap;
|
||||
va_start(ap, argv0);
|
||||
for (argc = 1; va_arg(ap, const char *); argc++);
|
||||
va_end(ap);
|
||||
{
|
||||
int i;
|
||||
char *argv[argc+1];
|
||||
char **envp;
|
||||
va_start(ap, argv0);
|
||||
argv[0] = (char *)argv0;
|
||||
for (i = 1; i <= argc; i++) {
|
||||
argv[i] = va_arg(ap, char *);
|
||||
}
|
||||
envp = va_arg(ap, char **);
|
||||
va_end(ap);
|
||||
return execve(path, argv, envp);
|
||||
}
|
||||
}
|
||||
|
||||
int execvp(const char *file, char *const *argv);
|
||||
|
||||
int execlp(const char *file, const char* argv0, ...)
|
||||
{
|
||||
int argc;
|
||||
va_list ap;
|
||||
va_start(ap, argv0);
|
||||
for (argc = 1; va_arg(ap, const char*); argc++);
|
||||
va_end(ap);
|
||||
{
|
||||
int i;
|
||||
char *argv[argc+1];
|
||||
va_start(ap, argv0);
|
||||
argv[0] = (char *)argv0;
|
||||
for (i = 1; i < argc; i++) {
|
||||
argv[i] = va_arg(ap, char *);
|
||||
}
|
||||
argv[i] = NULL;
|
||||
va_end(ap);
|
||||
return execvp(file, argv);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user