UserspaceEmulator: Update virt$lseek and virt$ftruncate for 64bit off_t

The syscalls' prototypes were recently changed in preparation for 64bit
storage in serenity, so update them here as well :^)
This commit is contained in:
Idan Horowitz 2021-03-23 20:37:55 +02:00 committed by Andreas Kling
parent 663dea4a60
commit 0deb0c6891
Notes: sideshowbarker 2024-07-18 21:07:08 +09:00
2 changed files with 12 additions and 6 deletions

View file

@ -148,7 +148,7 @@ private:
u32 virt$fcntl(int fd, int, u32);
int virt$getgroups(ssize_t count, FlatPtr);
int virt$setgroups(ssize_t count, FlatPtr);
int virt$lseek(int fd, off_t offset, int whence);
int virt$lseek(int fd, FlatPtr offset_addr, int whence);
int virt$socket(int, int, int);
int virt$getsockopt(FlatPtr);
int virt$setsockopt(FlatPtr);
@ -184,7 +184,7 @@ private:
u32 virt$allocate_tls(size_t);
int virt$ptsname(int fd, FlatPtr buffer, size_t buffer_size);
int virt$beep();
int virt$ftruncate(int fd, off_t);
int virt$ftruncate(int fd, FlatPtr length_addr);
mode_t virt$umask(mode_t);
int virt$anon_create(size_t, int);
int virt$recvfd(int, int);

View file

@ -457,9 +457,11 @@ int Emulator::virt$get_stack_bounds(FlatPtr base, FlatPtr size)
return 0;
}
int Emulator::virt$ftruncate(int fd, off_t length)
int Emulator::virt$ftruncate(int fd, FlatPtr length_addr)
{
return syscall(SC_ftruncate, fd, length);
off_t length;
mmu().copy_from_vm(&length, length_addr, sizeof(off_t));
return syscall(SC_ftruncate, fd, &length);
}
mode_t Emulator::virt$umask(mode_t mask)
@ -578,9 +580,13 @@ int Emulator::virt$set_process_name(FlatPtr user_buffer, int size)
return syscall(SC_set_process_name, name.characters(), name.length());
}
int Emulator::virt$lseek(int fd, off_t offset, int whence)
int Emulator::virt$lseek(int fd, FlatPtr offset_addr, int whence)
{
return syscall(SC_lseek, fd, offset, whence);
off_t offset;
mmu().copy_from_vm(&offset, offset_addr, sizeof(off_t));
auto rc = syscall(SC_lseek, fd, &offset, whence);
mmu().copy_to_vm(offset_addr, &offset, sizeof(off_t));
return rc;
}
int Emulator::virt$socket(int domain, int type, int protocol)