mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-05 05:56:53 +03:00
More random compat hacking towards getting bash to build.
I'm now at the build stage where it complains about a bajillion missing symbols. This is a good place to be!
This commit is contained in:
parent
e76312ab63
commit
82f84bab11
Notes:
sideshowbarker
2024-07-19 18:33:23 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/82f84bab114
@ -1174,6 +1174,22 @@ int Process::sys$uname(utsname* buf)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Process::sys$isatty(int fd)
|
||||||
|
{
|
||||||
|
auto* handle = fileHandleIfExists(fd);
|
||||||
|
if (!handle)
|
||||||
|
return -EBADF;
|
||||||
|
if (!handle->isTTY())
|
||||||
|
return -ENOTTY;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Unix::sighandler_t Process::sys$signal(int signum, Unix::sighandler_t handler)
|
||||||
|
{
|
||||||
|
dbgprintf("sys$signal: %d => L%x\n", signum, handler);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
int Process::sys$kill(pid_t pid, int signal)
|
int Process::sys$kill(pid_t pid, int signal)
|
||||||
{
|
{
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
#include "i386.h"
|
#include "i386.h"
|
||||||
#include <VirtualFileSystem/VirtualFileSystem.h>
|
#include <VirtualFileSystem/VirtualFileSystem.h>
|
||||||
|
#include <VirtualFileSystem/UnixTypes.h>
|
||||||
#include "TTY.h"
|
#include "TTY.h"
|
||||||
|
|
||||||
class FileHandle;
|
class FileHandle;
|
||||||
@ -123,6 +124,8 @@ public:
|
|||||||
int sys$ttyname_r(int fd, char*, size_t);
|
int sys$ttyname_r(int fd, char*, size_t);
|
||||||
pid_t sys$fork(RegisterDump&);
|
pid_t sys$fork(RegisterDump&);
|
||||||
int sys$execve(const char* filename, const char** argv, const char** envp);
|
int sys$execve(const char* filename, const char** argv, const char** envp);
|
||||||
|
Unix::sighandler_t sys$signal(int signum, Unix::sighandler_t);
|
||||||
|
int sys$isatty(int fd);
|
||||||
|
|
||||||
static void initialize();
|
static void initialize();
|
||||||
|
|
||||||
|
@ -136,6 +136,10 @@ static DWORD handle(RegisterDump& regs, DWORD function, DWORD arg1, DWORD arg2,
|
|||||||
return current->sys$geteuid();
|
return current->sys$geteuid();
|
||||||
case Syscall::PosixGetegid:
|
case Syscall::PosixGetegid:
|
||||||
return current->sys$getegid();
|
return current->sys$getegid();
|
||||||
|
case Syscall::PosixSignal:
|
||||||
|
return (dword)current->sys$signal((int)arg1, (Unix::sighandler_t)arg2);
|
||||||
|
case Syscall::PosixIsatty:
|
||||||
|
return current->sys$isatty((int)arg1);
|
||||||
default:
|
default:
|
||||||
kprintf("<%u> int0x80: Unknown function %x requested {%x, %x, %x}\n", current->pid(), function, arg1, arg2, arg3);
|
kprintf("<%u> int0x80: Unknown function %x requested {%x, %x, %x}\n", current->pid(), function, arg1, arg2, arg3);
|
||||||
break;
|
break;
|
||||||
|
@ -51,6 +51,8 @@ enum Function {
|
|||||||
PosixExecve = 0x2019,
|
PosixExecve = 0x2019,
|
||||||
PosixGeteuid = 0x2020,
|
PosixGeteuid = 0x2020,
|
||||||
PosixGetegid = 0x2021,
|
PosixGetegid = 0x2021,
|
||||||
|
PosixSignal = 0x2022,
|
||||||
|
PosixIsatty = 0x2023,
|
||||||
};
|
};
|
||||||
|
|
||||||
void initialize();
|
void initialize();
|
||||||
|
@ -21,6 +21,8 @@ LIBC_OBJS = \
|
|||||||
scanf.o \
|
scanf.o \
|
||||||
pwd.o \
|
pwd.o \
|
||||||
times.o \
|
times.o \
|
||||||
|
termcap.o \
|
||||||
|
setjmp.o \
|
||||||
entry.o
|
entry.o
|
||||||
|
|
||||||
OBJS = $(AK_OBJS) $(LIBC_OBJS)
|
OBJS = $(AK_OBJS) $(LIBC_OBJS)
|
||||||
|
@ -13,16 +13,17 @@ struct dirent {
|
|||||||
char d_name[256];
|
char d_name[256];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DIR {
|
struct __DIR {
|
||||||
int fd;
|
int fd;
|
||||||
dirent cur_ent;
|
struct dirent cur_ent;
|
||||||
char* buffer;
|
char* buffer;
|
||||||
size_t buffer_size;
|
size_t buffer_size;
|
||||||
char* nextptr;
|
char* nextptr;
|
||||||
};
|
};
|
||||||
|
typedef struct __DIR DIR;
|
||||||
|
|
||||||
DIR* opendir(const char* name);
|
DIR* opendir(const char* name);
|
||||||
dirent* readdir(DIR* dirp);
|
struct dirent* readdir(DIR* dirp);
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@ -11,5 +11,16 @@ int kill(pid_t pid, int sig)
|
|||||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sighandler_t signal(int signum, sighandler_t handler)
|
||||||
|
{
|
||||||
|
sighandler_t old_handler = (sighandler_t)Syscall::invoke(Syscall::PosixSignal, (dword)signum, (dword)handler);
|
||||||
|
if (old_handler == SIG_ERR) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return SIG_ERR;
|
||||||
|
}
|
||||||
|
errno = 0;
|
||||||
|
return old_handler;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ struct sigaction {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int kill(pid_t, int sig);
|
int kill(pid_t, int sig);
|
||||||
|
sighandler_t signal(int sig, sighandler_t);
|
||||||
|
|
||||||
#define SIG_DFL ((__sighandler_t)0)
|
#define SIG_DFL ((__sighandler_t)0)
|
||||||
#define SIG_ERR ((__sighandler_t)-1)
|
#define SIG_ERR ((__sighandler_t)-1)
|
||||||
@ -28,7 +29,6 @@ int kill(pid_t, int sig);
|
|||||||
#define SIG_UNBLOCK 1
|
#define SIG_UNBLOCK 1
|
||||||
#define SIG_SETMASK 2
|
#define SIG_SETMASK 2
|
||||||
|
|
||||||
|
|
||||||
#define SIGHUP 1
|
#define SIGHUP 1
|
||||||
#define SIGINT 2
|
#define SIGINT 2
|
||||||
#define SIGQUIT 3
|
#define SIGQUIT 3
|
||||||
@ -44,6 +44,10 @@ int kill(pid_t, int sig);
|
|||||||
#define SIGPIPE 13
|
#define SIGPIPE 13
|
||||||
#define SIGALRM 14
|
#define SIGALRM 14
|
||||||
#define SIGTERM 15
|
#define SIGTERM 15
|
||||||
|
#define SIGCONT 18
|
||||||
|
#define SIGTSTP 20
|
||||||
|
#define SIGTTIN 21
|
||||||
|
#define SIGTTOU 22
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@ -4,6 +4,16 @@
|
|||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
|
void bzero(void* dest, size_t n)
|
||||||
|
{
|
||||||
|
memset(dest, 0, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcopy(const void* src, void* dest, size_t n)
|
||||||
|
{
|
||||||
|
memmove(dest, src, n);
|
||||||
|
}
|
||||||
|
|
||||||
void* memset(void* dest, int c, size_t n)
|
void* memset(void* dest, int c, size_t n)
|
||||||
{
|
{
|
||||||
uint8_t* bdest = (uint8_t*)dest;
|
uint8_t* bdest = (uint8_t*)dest;
|
||||||
@ -48,11 +58,23 @@ size_t strlen(const char* str)
|
|||||||
|
|
||||||
int strcmp(const char* s1, const char* s2)
|
int strcmp(const char* s1, const char* s2)
|
||||||
{
|
{
|
||||||
for (; *s1 == *s2; ++s1, ++s2) {
|
while (*s1 == *s2++)
|
||||||
if (*s1 == 0)
|
if (*s1++ == 0)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
return *(const unsigned char*)s1 - *(const unsigned char*)--s2;
|
||||||
return *(const unsigned char*)s1 < *(const unsigned char*)s2 ? -1 : 1;
|
}
|
||||||
|
|
||||||
|
int strncmp(const char* s1, const char* s2, size_t n)
|
||||||
|
{
|
||||||
|
if (!n)
|
||||||
|
return 0;
|
||||||
|
do {
|
||||||
|
if (*s1 != *s2++)
|
||||||
|
return *(const unsigned char*)s1 - *(const unsigned char*)--s2;
|
||||||
|
if (*s1++ == 0)
|
||||||
|
break;
|
||||||
|
} while (--n);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int memcmp(const void* v1, const void* v2, size_t n)
|
int memcmp(const void* v1, const void* v2, size_t n)
|
||||||
|
@ -7,8 +7,12 @@ __BEGIN_DECLS
|
|||||||
|
|
||||||
size_t strlen(const char*);
|
size_t strlen(const char*);
|
||||||
int strcmp(const char*, const char*);
|
int strcmp(const char*, const char*);
|
||||||
|
int strncmp(const char*, const char*, size_t);
|
||||||
int memcmp(const void*, const void*, size_t);
|
int memcmp(const void*, const void*, size_t);
|
||||||
void memcpy(void*, const void*, size_t);
|
void memcpy(void*, const void*, size_t);
|
||||||
|
void memmove(void*, const void*, size_t);
|
||||||
|
void bzero(void*, size_t);
|
||||||
|
void bcopy(const void*, void*, size_t);
|
||||||
void* memset(void*, int, size_t);
|
void* memset(void*, int, size_t);
|
||||||
char* strcpy(char* dest, const char* src);
|
char* strcpy(char* dest, const char* src);
|
||||||
char* strncpy(char* dest, const char* src, size_t);
|
char* strncpy(char* dest, const char* src, size_t);
|
||||||
|
10
LibC/termcap.cpp
Normal file
10
LibC/termcap.cpp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#include <termcap.h>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
char PC;
|
||||||
|
char* UP;
|
||||||
|
char* BC;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
12
LibC/termcap.h
Normal file
12
LibC/termcap.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
extern char PC;
|
||||||
|
extern char* UP;
|
||||||
|
extern char* BC;
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
198
LibC/termios.h
198
LibC/termios.h
@ -0,0 +1,198 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
|
||||||
|
#define NCCS 32
|
||||||
|
|
||||||
|
typedef uint32_t tcflag_t;
|
||||||
|
typedef uint8_t cc_t;
|
||||||
|
|
||||||
|
struct termios {
|
||||||
|
tcflag_t c_iflag;
|
||||||
|
tcflag_t c_oflag;
|
||||||
|
tcflag_t c_cflag;
|
||||||
|
tcflag_t c_lflag;
|
||||||
|
cc_t c_cc[NCCS];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* c_cc characters */
|
||||||
|
#define VINTR 0
|
||||||
|
#define VQUIT 1
|
||||||
|
#define VERASE 2
|
||||||
|
#define VKILL 3
|
||||||
|
#define VEOF 4
|
||||||
|
#define VTIME 5
|
||||||
|
#define VMIN 6
|
||||||
|
#define VSWTC 7
|
||||||
|
#define VSTART 8
|
||||||
|
#define VSTOP 9
|
||||||
|
#define VSUSP 10
|
||||||
|
#define VEOL 11
|
||||||
|
#define VREPRINT 12
|
||||||
|
#define VDISCARD 13
|
||||||
|
#define VWERASE 14
|
||||||
|
#define VLNEXT 15
|
||||||
|
#define VEOL2 16
|
||||||
|
|
||||||
|
/* c_iflag bits */
|
||||||
|
#define IGNBRK 0000001
|
||||||
|
#define BRKINT 0000002
|
||||||
|
#define IGNPAR 0000004
|
||||||
|
#define PARMRK 0000010
|
||||||
|
#define INPCK 0000020
|
||||||
|
#define ISTRIP 0000040
|
||||||
|
#define INLCR 0000100
|
||||||
|
#define IGNCR 0000200
|
||||||
|
#define ICRNL 0000400
|
||||||
|
#define IUCLC 0001000
|
||||||
|
#define IXON 0002000
|
||||||
|
#define IXANY 0004000
|
||||||
|
#define IXOFF 0010000
|
||||||
|
#define IMAXBEL 0020000
|
||||||
|
#define IUTF8 0040000
|
||||||
|
|
||||||
|
/* c_oflag bits */
|
||||||
|
#define OPOST 0000001
|
||||||
|
#define OLCUC 0000002
|
||||||
|
#define ONLCR 0000004
|
||||||
|
#define OCRNL 0000010
|
||||||
|
#define ONOCR 0000020
|
||||||
|
#define ONLRET 0000040
|
||||||
|
#define OFILL 0000100
|
||||||
|
#define OFDEL 0000200
|
||||||
|
#if defined __USE_MISC || defined __USE_XOPEN
|
||||||
|
# define NLDLY 0000400
|
||||||
|
# define NL0 0000000
|
||||||
|
# define NL1 0000400
|
||||||
|
# define CRDLY 0003000
|
||||||
|
# define CR0 0000000
|
||||||
|
# define CR1 0001000
|
||||||
|
# define CR2 0002000
|
||||||
|
# define CR3 0003000
|
||||||
|
# define TABDLY 0014000
|
||||||
|
# define TAB0 0000000
|
||||||
|
# define TAB1 0004000
|
||||||
|
# define TAB2 0010000
|
||||||
|
# define TAB3 0014000
|
||||||
|
# define BSDLY 0020000
|
||||||
|
# define BS0 0000000
|
||||||
|
# define BS1 0020000
|
||||||
|
# define FFDLY 0100000
|
||||||
|
# define FF0 0000000
|
||||||
|
# define FF1 0100000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define VTDLY 0040000
|
||||||
|
#define VT0 0000000
|
||||||
|
#define VT1 0040000
|
||||||
|
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
# define XTABS 0014000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* c_cflag bit meaning */
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
# define CBAUD 0010017
|
||||||
|
#endif
|
||||||
|
#define B0 0000000 /* hang up */
|
||||||
|
#define B50 0000001
|
||||||
|
#define B75 0000002
|
||||||
|
#define B110 0000003
|
||||||
|
#define B134 0000004
|
||||||
|
#define B150 0000005
|
||||||
|
#define B200 0000006
|
||||||
|
#define B300 0000007
|
||||||
|
#define B600 0000010
|
||||||
|
#define B1200 0000011
|
||||||
|
#define B1800 0000012
|
||||||
|
#define B2400 0000013
|
||||||
|
#define B4800 0000014
|
||||||
|
#define B9600 0000015
|
||||||
|
#define B19200 0000016
|
||||||
|
#define B38400 0000017
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
# define EXTA B19200
|
||||||
|
# define EXTB B38400
|
||||||
|
#endif
|
||||||
|
#define CSIZE 0000060
|
||||||
|
#define CS5 0000000
|
||||||
|
#define CS6 0000020
|
||||||
|
#define CS7 0000040
|
||||||
|
#define CS8 0000060
|
||||||
|
#define CSTOPB 0000100
|
||||||
|
#define CREAD 0000200
|
||||||
|
#define PARENB 0000400
|
||||||
|
#define PARODD 0001000
|
||||||
|
#define HUPCL 0002000
|
||||||
|
#define CLOCAL 0004000
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
# define CBAUDEX 0010000
|
||||||
|
#endif
|
||||||
|
#define B57600 0010001
|
||||||
|
#define B115200 0010002
|
||||||
|
#define B230400 0010003
|
||||||
|
#define B460800 0010004
|
||||||
|
#define B500000 0010005
|
||||||
|
#define B576000 0010006
|
||||||
|
#define B921600 0010007
|
||||||
|
#define B1000000 0010010
|
||||||
|
#define B1152000 0010011
|
||||||
|
#define B1500000 0010012
|
||||||
|
#define B2000000 0010013
|
||||||
|
#define B2500000 0010014
|
||||||
|
#define B3000000 0010015
|
||||||
|
#define B3500000 0010016
|
||||||
|
#define B4000000 0010017
|
||||||
|
#define __MAX_BAUD B4000000
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
# define CIBAUD 002003600000 /* input baud rate (not used) */
|
||||||
|
# define CMSPAR 010000000000 /* mark or space (stick) parity */
|
||||||
|
# define CRTSCTS 020000000000 /* flow control */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* c_lflag bits */
|
||||||
|
#define ISIG 0000001
|
||||||
|
#define ICANON 0000002
|
||||||
|
#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
|
||||||
|
# define XCASE 0000004
|
||||||
|
#endif
|
||||||
|
#define ECHO 0000010
|
||||||
|
#define ECHOE 0000020
|
||||||
|
#define ECHOK 0000040
|
||||||
|
#define ECHONL 0000100
|
||||||
|
#define NOFLSH 0000200
|
||||||
|
#define TOSTOP 0000400
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
# define ECHOCTL 0001000
|
||||||
|
# define ECHOPRT 0002000
|
||||||
|
# define ECHOKE 0004000
|
||||||
|
# define FLUSHO 0010000
|
||||||
|
# define PENDIN 0040000
|
||||||
|
#endif
|
||||||
|
#define IEXTEN 0100000
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
# define EXTPROC 0200000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* tcflow() and TCXONC use these */
|
||||||
|
#define TCOOFF 0
|
||||||
|
#define TCOON 1
|
||||||
|
#define TCIOFF 2
|
||||||
|
#define TCION 3
|
||||||
|
|
||||||
|
/* tcflush() and TCFLSH use these */
|
||||||
|
#define TCIFLUSH 0
|
||||||
|
#define TCOFLUSH 1
|
||||||
|
#define TCIOFLUSH 2
|
||||||
|
|
||||||
|
/* tcsetattr uses these */
|
||||||
|
#define TCSANOW 0
|
||||||
|
#define TCSADRAIN 1
|
||||||
|
#define TCSAFLUSH 2
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
@ -184,5 +184,11 @@ int unlink(const char*)
|
|||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int isatty(int fd)
|
||||||
|
{
|
||||||
|
int rc = Syscall::invoke(Syscall::PosixIsatty, (dword)fd);
|
||||||
|
__RETURN_WITH_ERRNO(rc, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,9 @@ typedef dword nlink_t;
|
|||||||
typedef dword uid_t;
|
typedef dword uid_t;
|
||||||
typedef dword gid_t;
|
typedef dword gid_t;
|
||||||
|
|
||||||
|
typedef void (*__sighandler_t)(int);
|
||||||
|
typedef __sighandler_t sighandler_t;
|
||||||
|
|
||||||
#ifdef SERENITY
|
#ifdef SERENITY
|
||||||
// FIXME: Support 64-bit offsets!
|
// FIXME: Support 64-bit offsets!
|
||||||
typedef signed_dword off_t;
|
typedef signed_dword off_t;
|
||||||
|
Loading…
Reference in New Issue
Block a user