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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (pid == 0) {
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <AK/Vector.h>
|
||||
#include "i386.h"
|
||||
#include <VirtualFileSystem/VirtualFileSystem.h>
|
||||
#include <VirtualFileSystem/UnixTypes.h>
|
||||
#include "TTY.h"
|
||||
|
||||
class FileHandle;
|
||||
@ -123,6 +124,8 @@ public:
|
||||
int sys$ttyname_r(int fd, char*, size_t);
|
||||
pid_t sys$fork(RegisterDump&);
|
||||
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();
|
||||
|
||||
|
@ -136,6 +136,10 @@ static DWORD handle(RegisterDump& regs, DWORD function, DWORD arg1, DWORD arg2,
|
||||
return current->sys$geteuid();
|
||||
case Syscall::PosixGetegid:
|
||||
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:
|
||||
kprintf("<%u> int0x80: Unknown function %x requested {%x, %x, %x}\n", current->pid(), function, arg1, arg2, arg3);
|
||||
break;
|
||||
|
@ -51,6 +51,8 @@ enum Function {
|
||||
PosixExecve = 0x2019,
|
||||
PosixGeteuid = 0x2020,
|
||||
PosixGetegid = 0x2021,
|
||||
PosixSignal = 0x2022,
|
||||
PosixIsatty = 0x2023,
|
||||
};
|
||||
|
||||
void initialize();
|
||||
|
@ -21,6 +21,8 @@ LIBC_OBJS = \
|
||||
scanf.o \
|
||||
pwd.o \
|
||||
times.o \
|
||||
termcap.o \
|
||||
setjmp.o \
|
||||
entry.o
|
||||
|
||||
OBJS = $(AK_OBJS) $(LIBC_OBJS)
|
||||
|
@ -13,16 +13,17 @@ struct dirent {
|
||||
char d_name[256];
|
||||
};
|
||||
|
||||
struct DIR {
|
||||
struct __DIR {
|
||||
int fd;
|
||||
dirent cur_ent;
|
||||
struct dirent cur_ent;
|
||||
char* buffer;
|
||||
size_t buffer_size;
|
||||
char* nextptr;
|
||||
};
|
||||
typedef struct __DIR DIR;
|
||||
|
||||
DIR* opendir(const char* name);
|
||||
dirent* readdir(DIR* dirp);
|
||||
struct dirent* readdir(DIR* dirp);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
@ -11,5 +11,16 @@ int kill(pid_t pid, int sig)
|
||||
__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);
|
||||
sighandler_t signal(int sig, sighandler_t);
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0)
|
||||
#define SIG_ERR ((__sighandler_t)-1)
|
||||
@ -28,7 +29,6 @@ int kill(pid_t, int sig);
|
||||
#define SIG_UNBLOCK 1
|
||||
#define SIG_SETMASK 2
|
||||
|
||||
|
||||
#define SIGHUP 1
|
||||
#define SIGINT 2
|
||||
#define SIGQUIT 3
|
||||
@ -44,6 +44,10 @@ int kill(pid_t, int sig);
|
||||
#define SIGPIPE 13
|
||||
#define SIGALRM 14
|
||||
#define SIGTERM 15
|
||||
#define SIGCONT 18
|
||||
#define SIGTSTP 20
|
||||
#define SIGTTIN 21
|
||||
#define SIGTTOU 22
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
@ -4,6 +4,16 @@
|
||||
|
||||
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)
|
||||
{
|
||||
uint8_t* bdest = (uint8_t*)dest;
|
||||
@ -48,11 +58,23 @@ size_t strlen(const char* str)
|
||||
|
||||
int strcmp(const char* s1, const char* s2)
|
||||
{
|
||||
for (; *s1 == *s2; ++s1, ++s2) {
|
||||
if (*s1 == 0)
|
||||
while (*s1 == *s2++)
|
||||
if (*s1++ == 0)
|
||||
return 0;
|
||||
}
|
||||
return *(const unsigned char*)s1 < *(const unsigned char*)s2 ? -1 : 1;
|
||||
return *(const unsigned char*)s1 - *(const unsigned char*)--s2;
|
||||
}
|
||||
|
||||
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)
|
||||
|
@ -7,8 +7,12 @@ __BEGIN_DECLS
|
||||
|
||||
size_t strlen(const char*);
|
||||
int strcmp(const char*, const char*);
|
||||
int strncmp(const char*, const char*, size_t);
|
||||
int memcmp(const 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);
|
||||
char* strcpy(char* dest, const char* src);
|
||||
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);
|
||||
}
|
||||
|
||||
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 gid_t;
|
||||
|
||||
typedef void (*__sighandler_t)(int);
|
||||
typedef __sighandler_t sighandler_t;
|
||||
|
||||
#ifdef SERENITY
|
||||
// FIXME: Support 64-bit offsets!
|
||||
typedef signed_dword off_t;
|
||||
|
Loading…
Reference in New Issue
Block a user