1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 17:07:35 +00:00

Add an lstat() syscall and use it to make "ls" nicer.

This commit is contained in:
Andreas Kling 2018-10-24 13:19:36 +02:00
parent bca4b71bfa
commit 5f36a5f22e
10 changed files with 118 additions and 2 deletions

View file

@ -68,6 +68,8 @@ DWORD handle(DWORD function, DWORD arg1, DWORD arg2, DWORD arg3)
return current->sys$spawn((const char*)arg1);
case Syscall::GetDirEntries:
return current->sys$get_dir_entries((int)arg1, (void*)arg2, (size_t)arg3);
case Syscall::PosixLstat:
return current->sys$lstat((const char*)arg1, (void*)arg2);
case Syscall::PosixOpen:
//kprintf("syscall: open('%s', %u)\n", arg1, arg2);
return current->sys$open((const char*)arg1, (size_t)arg2);

View file

@ -27,6 +27,7 @@ enum Function {
PosixMmap = 0x1995,
PosixMunmap = 0x1996,
GetDirEntries = 0x1997,
PosixLstat = 0x1998,
};
void initialize();

View file

@ -700,13 +700,22 @@ int Task::sys$close(int fd)
return 0;
}
int Task::sys$lstat(const char* path, void* statbuf)
{
auto handle = VirtualFileSystem::the().open(move(path));
if (!handle)
return -1;
handle->stat((Unix::stat*)statbuf);
return 0;
}
int Task::sys$open(const char* path, size_t pathLength)
{
Task::checkSanity("sys$open");
#ifdef DEBUG_IO
kprintf("Task::sys$open(): PID=%u, path=%s {%u}\n", m_pid, path, pathLength);
#endif
auto* handle = current->openFile(String(path, pathLength));
auto* handle = openFile(String(path, pathLength));
if (handle)
return handle->fd();
return -1;

View file

@ -92,6 +92,7 @@ public:
int sys$open(const char* path, size_t pathLength);
int sys$close(int fd);
int sys$read(int fd, void* outbuf, size_t nread);
int sys$lstat(const char*, void* statbuf);
int sys$seek(int fd, int offset);
int sys$kill(pid_t pid, int sig);
int sys$geterror() { return m_error; }

View file

@ -10,6 +10,7 @@ PRIVATE BYTE current_attr = 0x07;
void vga_scroll_up()
{
InterruptDisabler disabler;
memcpy(vga_mem, vga_mem + 160, 160 * 24);
memset(vga_mem + (160 * 24), 0, 160);
}

Binary file not shown.