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:
parent
bca4b71bfa
commit
5f36a5f22e
10 changed files with 118 additions and 2 deletions
|
@ -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);
|
||||
|
|
|
@ -27,6 +27,7 @@ enum Function {
|
|||
PosixMmap = 0x1995,
|
||||
PosixMunmap = 0x1996,
|
||||
GetDirEntries = 0x1997,
|
||||
PosixLstat = 0x1998,
|
||||
};
|
||||
|
||||
void initialize();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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.
Loading…
Add table
Add a link
Reference in a new issue