1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 23:47:45 +00:00

Miscellaneous compat work while seeing if GNU coreutils would build.

This commit is contained in:
Andreas Kling 2018-11-07 10:23:16 +01:00
parent a7f1d892a9
commit d7a41579e5
12 changed files with 92 additions and 2 deletions

View file

@ -25,6 +25,7 @@ LIBC_OBJS = \
termcap.o \
setjmp.o \
stat.o \
mntent.o \
entry.o
OBJS = $(AK_OBJS) $(LIBC_OBJS)

View file

@ -37,6 +37,8 @@
__ERROR(ENAMETOOLONG, "Name too long") \
__ERROR(ELOOP, "Too many symlinks") \
__ERROR(EOVERFLOW, "Overflow") \
__ERROR(EOPNOTSUPP, "Operation not supported") \
__ERROR(ENOSYS, "No such syscall") \
__ERROR(ENOTIMPL, "Not implemented") \
enum __errno_values {

View file

@ -1,3 +1,8 @@
#pragma once
#include <stdint.h>
#define PATH_MAX 4096
#define INT_MAX INT32_MAX
#define INT_MIN INT32_MIN

13
LibC/mntent.cpp Normal file
View file

@ -0,0 +1,13 @@
#include <mntent.h>
#include <assert.h>
extern "C" {
struct mntent* getmntent(FILE* stream)
{
assert(false);
return nullptr;
}
}

23
LibC/mntent.h Normal file
View file

@ -0,0 +1,23 @@
#pragma once
#include <sys/cdefs.h>
#include <stdio.h>
__BEGIN_DECLS
#define MOUNTED "/etc/mtab"
#define MNTTAB "/etc/fstab"
struct mntent {
char* mnt_fsname;
char* mnt_dir;
char* mnt_type;
char* mnt_opts;
int mnt_freq;
int mnt_passno;
};
struct mntent* getmntent(FILE* stream);
__END_DECLS

View file

@ -0,0 +1,4 @@
#pragma once
#include <sys/cdefs.h>
#include <sys/types.h>

View file

@ -12,5 +12,15 @@ typedef signed int int32_t;
typedef signed short int16_t;
typedef signed char int8_t;
#define INT8_MIN (-128)
#define INT16_MIN (-32767-1)
#define INT32_MIN (-2147483647-1)
#define INT8_MAX (127)
#define INT16_MAX (32767)
#define INT32_MAX (2147483647)
#define UINT8_MAX (255)
#define UINT16_MAX (65535)
#define UINT32_MAX (4294967295U)
__END_DECLS

View file

@ -72,6 +72,8 @@ int fputc(int ch, FILE* stream)
{
assert(stream);
write(stream->fd, &ch, 1);
if (stream->eof)
return EOF;
return (byte)ch;
}
@ -85,10 +87,31 @@ int putchar(int ch)
return putc(ch, stdout);
}
int fputs(const char* s, FILE* stream)
{
for (; *s; ++s) {
int rc = putc(*s, stream);
if (rc == EOF)
return EOF;
}
return putc('\n', stream);
}
int puts(const char* s)
{
fputs(s, stdout);
}
void clearerr(FILE* stream)
{
assert(stream);
stream->eof = false;
stream->error = false;
}
int ferror(FILE* stream)
{
return stream->error;
}
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream)
@ -190,6 +213,7 @@ FILE* fopen(const char* pathname, const char* mode)
auto* fp = (FILE*)malloc(sizeof(FILE));
fp->fd = fd;
fp->eof = false;
fp->error = 0;
return fp;
}
@ -201,6 +225,7 @@ FILE* fdopen(int fd, const char* mode)
auto* fp = (FILE*)malloc(sizeof(FILE));
fp->fd = fd;
fp->eof = false;
fp->error = 0;
return fp;
}

View file

@ -16,6 +16,7 @@ __BEGIN_DECLS
struct __STDIO_FILE {
int fd;
int eof;
int error;
};
typedef struct __STDIO_FILE FILE;
@ -34,6 +35,7 @@ FILE* fopen(const char* pathname, const char* mode);
int fclose(FILE*);
void rewind(FILE*);
void clearerr(FILE*);
int ferror(FILE*);
int feof(FILE*);
int fflush(FILE*);
size_t fread(void* ptr, size_t size, size_t nmemb, FILE*);
@ -42,6 +44,9 @@ int fprintf(FILE*, const char* fmt, ...);
int printf(const char* fmt, ...);
int sprintf(char* buffer, const char* fmt, ...);
int putchar(int ch);
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 fscanf(FILE*, const char* fmt, ...);

View file

@ -6,5 +6,6 @@
__BEGIN_DECLS
mode_t umask(mode_t);
int chmod(const char* pathname, mode_t);
__END_DECLS

View file

@ -22,8 +22,8 @@ typedef uint32_t blksize_t;
typedef uint32_t blkcnt_t;
typedef uint32_t time_t;
typedef uint32_t suseconds_t;
typedef uint32_t clock_t;
typedef uint32_t socklen_t;
struct timeval {
time_t tv_sec;