mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-22 12:35:14 +00:00
Make syscall invocations look pleasant.
Old: Syscall::invoke(Syscall::SC_foo, (dword)arg1, (dword)arg2) New: syscall(SC_foo, arg1, arg2)
This commit is contained in:
parent
36bd53b36a
commit
3a0a8848fb
Notes:
sideshowbarker
2024-07-19 16:07:42 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/3a0a8848fb5
13 changed files with 75 additions and 72 deletions
|
@ -67,12 +67,6 @@
|
|||
__ENUMERATE_SYSCALL(utime) \
|
||||
__ENUMERATE_SYSCALL(sync) \
|
||||
|
||||
|
||||
#define DO_SYSCALL_A0(function) Syscall::invoke((dword)(function))
|
||||
#define DO_SYSCALL_A1(function, arg1) Syscall::invoke((dword)(function), (dword)(arg1))
|
||||
#define DO_SYSCALL_A2(function, arg1, arg2) Syscall::invoke((dword)(function), (dword)(arg1), (dword)(arg2))
|
||||
#define DO_SYSCALL_A3(function, arg1, arg2, arg3) Syscall::invoke((dword)(function), (dword)(arg1), (dword)(arg2), (dword)arg3)
|
||||
|
||||
namespace Syscall {
|
||||
|
||||
enum Function {
|
||||
|
@ -112,25 +106,34 @@ inline dword invoke(Function function)
|
|||
return result;
|
||||
}
|
||||
|
||||
inline dword invoke(Function function, dword arg1)
|
||||
template<typename T1>
|
||||
inline dword invoke(Function function, T1 arg1)
|
||||
{
|
||||
dword result;
|
||||
asm volatile("int $0x80":"=a"(result):"a"(function),"d"(arg1):"memory");
|
||||
asm volatile("int $0x80":"=a"(result):"a"(function),"d"((dword)arg1):"memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
inline dword invoke(Function function, dword arg1, dword arg2)
|
||||
template<typename T1, typename T2>
|
||||
inline dword invoke(Function function, T1 arg1, T2 arg2)
|
||||
{
|
||||
dword result;
|
||||
asm volatile("int $0x80":"=a"(result):"a"(function),"d"(arg1),"c"(arg2):"memory");
|
||||
asm volatile("int $0x80":"=a"(result):"a"(function),"d"((dword)arg1),"c"((dword)arg2):"memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
inline dword invoke(Function function, dword arg1, dword arg2, dword arg3)
|
||||
template<typename T1, typename T2, typename T3>
|
||||
inline dword invoke(Function function, T1 arg1, T2 arg2, T3 arg3)
|
||||
{
|
||||
dword result;
|
||||
asm volatile("int $0x80":"=a"(result):"a"(function),"d"(arg1),"c"(arg2),"b"(arg3):"memory");
|
||||
asm volatile("int $0x80":"=a"(result):"a"(function),"d"((dword)arg1),"c"((dword)arg2),"b"((dword)arg3):"memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#define __ENUMERATE_SYSCALL(x) using Syscall::SC_ ##x;
|
||||
ENUMERATE_SYSCALLS
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#define syscall Syscall::invoke
|
||||
|
|
|
@ -53,7 +53,7 @@ dirent* readdir(DIR* dirp)
|
|||
if (!dirp->buffer) {
|
||||
// FIXME: Figure out how much to actually allocate.
|
||||
dirp->buffer = (char*)malloc(4096);
|
||||
ssize_t nread = Syscall::invoke(Syscall::SC_get_dir_entries, (dword)dirp->fd, (dword)dirp->buffer, 4096);
|
||||
ssize_t nread = syscall(SC_get_dir_entries, dirp->fd, dirp->buffer, 4096);
|
||||
dirp->buffer_size = nread;
|
||||
dirp->nextptr = dirp->buffer;
|
||||
}
|
||||
|
|
|
@ -23,10 +23,10 @@ extern "C" int _start()
|
|||
int status = 254;
|
||||
int argc;
|
||||
char** argv;
|
||||
int rc = Syscall::invoke(Syscall::SC_get_arguments, (dword)&argc, (dword)&argv);
|
||||
int rc = syscall(SC_get_arguments, &argc, &argv);
|
||||
if (rc < 0)
|
||||
goto epilogue;
|
||||
rc = Syscall::invoke(Syscall::SC_get_environment, (dword)&environ);
|
||||
rc = syscall(SC_get_environment, &environ);
|
||||
if (rc < 0)
|
||||
goto epilogue;
|
||||
status = main(argc, argv);
|
||||
|
@ -35,7 +35,7 @@ extern "C" int _start()
|
|||
fflush(stderr);
|
||||
|
||||
epilogue:
|
||||
Syscall::invoke(Syscall::SC_exit, status);
|
||||
syscall(SC_exit, status);
|
||||
|
||||
// Birger's birthday <3
|
||||
return 20150614;
|
||||
|
|
|
@ -11,7 +11,7 @@ int fcntl(int fd, int cmd, ...)
|
|||
va_list ap;
|
||||
va_start(ap, cmd);
|
||||
dword extra_arg = va_arg(ap, dword);
|
||||
int rc = Syscall::invoke(Syscall::SC_fcntl, (dword)fd, (dword)cmd, extra_arg);
|
||||
int rc = syscall(SC_fcntl, fd, cmd, extra_arg);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ int ioctl(int fd, unsigned request, ...)
|
|||
va_list ap;
|
||||
va_start(ap, request);
|
||||
unsigned arg = va_arg(ap, unsigned);
|
||||
int rc = Syscall::invoke(Syscall::SC_ioctl, (dword)fd, (dword)request, (dword)arg);
|
||||
int rc = syscall(SC_ioctl, fd, request, arg);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,19 +8,19 @@ extern "C" {
|
|||
void* mmap(void* addr, size_t size, int prot, int flags, int fd, off_t offset)
|
||||
{
|
||||
Syscall::SC_mmap_params params { (dword)addr, size, prot, flags, fd, offset };
|
||||
int rc = Syscall::invoke(Syscall::SC_mmap, (dword)¶ms);
|
||||
int rc = syscall(SC_mmap, ¶ms);
|
||||
__RETURN_WITH_ERRNO(rc, (void*)rc, (void*)-1);
|
||||
}
|
||||
|
||||
int munmap(void* addr, size_t size)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_munmap, (dword)addr, (dword)size);
|
||||
int rc = syscall(SC_munmap, addr, size);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int set_mmap_name(void* addr, size_t size, const char* name)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_set_mmap_name, (dword)addr, (dword)size, (dword)name);
|
||||
int rc = syscall(SC_set_mmap_name, addr, size, name);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,13 +8,13 @@ extern "C" {
|
|||
|
||||
int kill(pid_t pid, int sig)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_kill, (dword)pid, (dword)sig);
|
||||
int rc = syscall(SC_kill, pid, sig);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int killpg(int pgrp, int sig)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_killpg, (dword)pgrp, (dword)sig);
|
||||
int rc = syscall(SC_killpg, pgrp, sig);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ sighandler_t signal(int signum, sighandler_t handler)
|
|||
|
||||
int sigaction(int signum, const struct sigaction* act, struct sigaction* old_act)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_sigaction, (dword)signum, (dword)act, (dword)old_act);
|
||||
int rc = syscall(SC_sigaction, signum, act, old_act);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
@ -83,13 +83,13 @@ int sigismember(const sigset_t* set, int sig)
|
|||
|
||||
int sigprocmask(int how, const sigset_t* set, sigset_t* old_set)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_sigprocmask, (dword)how, (dword)set, (dword)old_set);
|
||||
int rc = syscall(SC_sigprocmask, how, set, old_set);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int sigpending(sigset_t* set)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_sigpending, (dword)set);
|
||||
int rc = syscall(SC_sigpending, set);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,12 +6,12 @@ extern "C" {
|
|||
|
||||
mode_t umask(mode_t mask)
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_umask, (dword)mask);
|
||||
return syscall(SC_umask, mask);
|
||||
}
|
||||
|
||||
int mkdir(const char* pathname, mode_t mode)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_mkdir, (dword)pathname, (dword)mode);
|
||||
int rc = syscall(SC_mkdir, pathname, mode);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ time_t time(time_t* tloc)
|
|||
|
||||
int gettimeofday(struct timeval* tv, struct timezone*)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_gettimeofday, (dword)tv);
|
||||
int rc = syscall(SC_gettimeofday, tv);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
|
||||
clock_t times(struct tms* buf)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_times, (dword)buf);
|
||||
int rc = syscall(SC_times, buf);
|
||||
__RETURN_WITH_ERRNO(rc, rc, (clock_t)-1);
|
||||
}
|
||||
|
|
|
@ -13,49 +13,49 @@ extern "C" {
|
|||
|
||||
pid_t fork()
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_fork);
|
||||
int rc = syscall(SC_fork);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int execve(const char* filename, const char** argv, const char** envp)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_execve, (dword)filename, (dword)argv, (dword)envp);
|
||||
int rc = syscall(SC_execve, filename, argv, envp);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
uid_t getuid()
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_getuid);
|
||||
return syscall(SC_getuid);
|
||||
}
|
||||
|
||||
gid_t getgid()
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_getgid);
|
||||
return syscall(SC_getgid);
|
||||
}
|
||||
|
||||
uid_t geteuid()
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_geteuid);
|
||||
return syscall(SC_geteuid);
|
||||
}
|
||||
|
||||
gid_t getegid()
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_getegid);
|
||||
return syscall(SC_getegid);
|
||||
}
|
||||
|
||||
pid_t getpid()
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_getpid);
|
||||
return syscall(SC_getpid);
|
||||
}
|
||||
|
||||
pid_t getppid()
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_getppid);
|
||||
return syscall(SC_getppid);
|
||||
}
|
||||
|
||||
pid_t setsid()
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_setsid);
|
||||
int rc = syscall(SC_setsid);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
@ -71,19 +71,19 @@ int tcsetpgrp(int fd, pid_t pgid)
|
|||
|
||||
int setpgid(pid_t pid, pid_t pgid)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_setpgid, (dword)pid, (dword)pgid);
|
||||
int rc = syscall(SC_setpgid, pid, pgid);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
pid_t getpgid(pid_t pid)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_getpgid, (dword)pid);
|
||||
int rc = syscall(SC_getpgid, pid);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
pid_t getpgrp()
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_getpgrp);
|
||||
int rc = syscall(SC_getpgrp);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
@ -91,26 +91,26 @@ int open(const char* path, int options, ...)
|
|||
{
|
||||
va_list ap;
|
||||
va_start(ap, options);
|
||||
int rc = Syscall::invoke(Syscall::SC_open, (dword)path, (dword)options, (dword)ap);
|
||||
int rc = syscall(SC_open, path, options, ap);
|
||||
va_end(ap);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
ssize_t read(int fd, void* buf, size_t count)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_read, (dword)fd, (dword)buf, (dword)count);
|
||||
int rc = syscall(SC_read, fd, buf, count);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
ssize_t write(int fd, const void* buf, size_t count)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_write, (dword)fd, (dword)buf, (dword)count);
|
||||
int rc = syscall(SC_write, fd, buf, count);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int ttyname_r(int fd, char* buffer, size_t size)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_ttyname_r, (dword)fd, (dword)buffer, (dword)size);
|
||||
int rc = syscall(SC_ttyname_r, fd, buffer, size);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
@ -124,43 +124,43 @@ char* ttyname(int fd)
|
|||
|
||||
int close(int fd)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_close, fd);
|
||||
int rc = syscall(SC_close, fd);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
pid_t waitpid(pid_t waitee, int* wstatus, int options)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_waitpid, waitee, (dword)wstatus, (dword)options);
|
||||
int rc = syscall(SC_waitpid, waitee, wstatus, options);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int lstat(const char* path, struct stat* statbuf)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_lstat, (dword)path, (dword)statbuf);
|
||||
int rc = syscall(SC_lstat, path, statbuf);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int stat(const char* path, struct stat* statbuf)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_stat, (dword)path, (dword)statbuf);
|
||||
int rc = syscall(SC_stat, path, statbuf);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int fstat(int fd, struct stat *statbuf)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_fstat, (dword)fd, (dword)statbuf);
|
||||
int rc = syscall(SC_fstat, fd, statbuf);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int chdir(const char* path)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_chdir, (dword)path);
|
||||
int rc = syscall(SC_chdir, path);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
char* getcwd(char* buffer, size_t size)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_getcwd, (dword)buffer, (dword)size);
|
||||
int rc = syscall(SC_getcwd, buffer, size);
|
||||
__RETURN_WITH_ERRNO(rc, buffer, nullptr);
|
||||
}
|
||||
|
||||
|
@ -172,24 +172,24 @@ char* getwd(char* buf)
|
|||
|
||||
int sleep(unsigned seconds)
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_sleep, (dword)seconds);
|
||||
return syscall(SC_sleep, seconds);
|
||||
}
|
||||
|
||||
int gethostname(char* buffer, size_t size)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_gethostname, (dword)buffer, (dword)size);
|
||||
int rc = syscall(SC_gethostname, buffer, size);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
ssize_t readlink(const char* path, char* buffer, size_t size)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_readlink, (dword)path, (dword)buffer, (dword)size);
|
||||
int rc = syscall(SC_readlink, path, buffer, size);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
off_t lseek(int fd, off_t offset, int whence)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_lseek, (dword)fd, (dword)offset, (dword)whence);
|
||||
int rc = syscall(SC_lseek, fd, offset, whence);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
@ -205,66 +205,66 @@ int unlink(const char*)
|
|||
|
||||
int isatty(int fd)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_isatty, (dword)fd);
|
||||
int rc = syscall(SC_isatty, fd);
|
||||
__RETURN_WITH_ERRNO(rc, 1, 0);
|
||||
}
|
||||
|
||||
int getdtablesize()
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_getdtablesize);
|
||||
int rc = syscall(SC_getdtablesize);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int dup(int old_fd)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_dup, (dword)old_fd);
|
||||
int rc = syscall(SC_dup, old_fd);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int dup2(int old_fd, int new_fd)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_dup2, (dword)old_fd, (dword)new_fd);
|
||||
int rc = syscall(SC_dup2, old_fd, new_fd);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int setgroups(size_t size, const gid_t* list)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_getgroups, (dword)size, (dword)list);
|
||||
int rc = syscall(SC_getgroups, size, list);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int getgroups(int size, gid_t list[])
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_getgroups, (dword)size, (dword)list);
|
||||
int rc = syscall(SC_getgroups, size, list);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int pipe(int pipefd[2])
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_pipe, (dword)pipefd);
|
||||
int rc = syscall(SC_pipe, pipefd);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
unsigned int alarm(unsigned int seconds)
|
||||
{
|
||||
return Syscall::invoke(Syscall::SC_alarm, (dword)seconds);
|
||||
return syscall(SC_alarm, seconds);
|
||||
}
|
||||
|
||||
int setuid(uid_t uid)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_setuid, (dword)uid);
|
||||
int rc = syscall(SC_setuid, uid);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int setgid(uid_t gid)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_setgid, (dword)gid);
|
||||
int rc = syscall(SC_setgid, gid);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int access(const char* pathname, int mode)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_access, (dword)pathname, (dword)mode);
|
||||
int rc = syscall(SC_access, pathname, mode);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
@ -290,13 +290,13 @@ long pathconf(const char* path, int name)
|
|||
|
||||
void _exit(int status)
|
||||
{
|
||||
Syscall::invoke(Syscall::SC_exit, (dword)status);
|
||||
syscall(SC_exit, status);
|
||||
assert(false);
|
||||
}
|
||||
|
||||
void sync()
|
||||
{
|
||||
Syscall::invoke(Syscall::SC_sync);
|
||||
syscall(SC_sync);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
|
||||
int utime(const char* pathname, const struct utimbuf* buf)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_utime, (dword)pathname, (dword)buf);
|
||||
int rc = syscall(SC_utime, (dword)pathname, (dword)buf);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
|||
|
||||
int uname(struct utsname* buf)
|
||||
{
|
||||
int rc = Syscall::invoke(Syscall::SC_uname, (dword)buf);
|
||||
int rc = syscall(SC_uname, buf);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue