kernel+libc: Add uname()
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
a99a0e5a54
commit
9eab0886b6
@ -37,6 +37,7 @@ set(SOURCES
|
|||||||
src/sys/stat.cpp
|
src/sys/stat.cpp
|
||||||
src/sys/chdir.cpp
|
src/sys/chdir.cpp
|
||||||
src/sys/link.cpp
|
src/sys/link.cpp
|
||||||
|
src/sys/uname.cpp
|
||||||
src/fs/VFS.cpp
|
src/fs/VFS.cpp
|
||||||
src/fs/tmpfs/FileSystem.cpp
|
src/fs/tmpfs/FileSystem.cpp
|
||||||
src/fs/devices/DeviceRegistry.cpp
|
src/fs/devices/DeviceRegistry.cpp
|
||||||
|
25
kernel/src/sys/uname.cpp
Normal file
25
kernel/src/sys/uname.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include "arch/CPU.h"
|
||||||
|
#include "memory/MemoryManager.h"
|
||||||
|
#include "sys/Syscall.h"
|
||||||
|
#include <bits/struct_utsname.h>
|
||||||
|
#include <luna/CString.h>
|
||||||
|
|
||||||
|
Result<u64> sys_uname(Registers*, SyscallArgs args)
|
||||||
|
{
|
||||||
|
utsname* buf = (utsname*)args[0];
|
||||||
|
|
||||||
|
utsname result;
|
||||||
|
|
||||||
|
strncpy(result.sysname, "moon", _UTSNAME_LENGTH);
|
||||||
|
strncpy(result.nodename, "lunar", _UTSNAME_LENGTH);
|
||||||
|
|
||||||
|
// FIXME: Hardcode these at build time instead of in code.
|
||||||
|
strncpy(result.release, "0.1", _UTSNAME_LENGTH);
|
||||||
|
strncpy(result.version, "alpha", _UTSNAME_LENGTH);
|
||||||
|
|
||||||
|
strncpy(result.machine, CPU::platform_string(), _UTSNAME_LENGTH);
|
||||||
|
|
||||||
|
if (!MemoryManager::copy_to_user_typed(buf, &result)) return err(EFAULT);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
17
libc/include/bits/struct_utsname.h
Normal file
17
libc/include/bits/struct_utsname.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/* bits/struct_utsname.h: The utsname structure. */
|
||||||
|
|
||||||
|
#ifndef _BITS_STRUCT_UTSNAME_H
|
||||||
|
#define _BITS_STRUCT_UTSNAME_H
|
||||||
|
|
||||||
|
#define _UTSNAME_LENGTH 256
|
||||||
|
|
||||||
|
struct utsname
|
||||||
|
{
|
||||||
|
char sysname[_UTSNAME_LENGTH];
|
||||||
|
char nodename[_UTSNAME_LENGTH];
|
||||||
|
char release[_UTSNAME_LENGTH];
|
||||||
|
char version[_UTSNAME_LENGTH];
|
||||||
|
char machine[_UTSNAME_LENGTH];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
20
libc/include/sys/utsname.h
Normal file
20
libc/include/sys/utsname.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/* sys/utsname.h: Kernel name and information. */
|
||||||
|
|
||||||
|
#ifndef _SYS_UTSNAME_H
|
||||||
|
#define _SYS_UTSNAME_H
|
||||||
|
|
||||||
|
#include <bits/struct_utsname.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get kernel name and information. */
|
||||||
|
int uname(struct utsname* buf);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -4,7 +4,7 @@
|
|||||||
_e(exit) _e(clock_gettime) _e(mmap) _e(munmap) _e(usleep) _e(openat) _e(close) _e(read) _e(getpid) _e(write) \
|
_e(exit) _e(clock_gettime) _e(mmap) _e(munmap) _e(usleep) _e(openat) _e(close) _e(read) _e(getpid) _e(write) \
|
||||||
_e(lseek) _e(mkdir) _e(execve) _e(mknod) _e(fork) _e(waitpid) _e(getppid) _e(fcntl) _e(getdents) _e(getuid) \
|
_e(lseek) _e(mkdir) _e(execve) _e(mknod) _e(fork) _e(waitpid) _e(getppid) _e(fcntl) _e(getdents) _e(getuid) \
|
||||||
_e(geteuid) _e(getgid) _e(getegid) _e(setuid) _e(setgid) _e(seteuid) _e(setegid) _e(chmod) _e(chown) \
|
_e(geteuid) _e(getgid) _e(getegid) _e(setuid) _e(setgid) _e(seteuid) _e(setegid) _e(chmod) _e(chown) \
|
||||||
_e(ioctl) _e(fstatat) _e(chdir) _e(getcwd) _e(unlinkat)
|
_e(ioctl) _e(fstatat) _e(chdir) _e(getcwd) _e(unlinkat) _e(uname)
|
||||||
|
|
||||||
enum Syscalls
|
enum Syscalls
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user