options/posix: Fix overlapping _SC constants, add _SC_JOB_CONTROL and update strerror

sysdeps/managarm: Pass truncate flag in sys_open and sys_openat

Signed-off-by: Dennisbonke <admin@dennisbonke.com>
This commit is contained in:
Dennisbonke 2020-06-17 15:39:15 +02:00
parent 2fe75fec9d
commit 1b6935e7b5
4 changed files with 14 additions and 6 deletions

View file

@ -332,6 +332,7 @@ char *strerror(int e) {
case EPIPE: s = "Broken pipe (EPIPE)"; break;
case ESPIPE: s = "Seek not possible (ESPIPE)"; break;
case ENXIO: s = "No such device or address (ENXIO)"; break;
case ENOEXEC: s = "Exec format error (ENOEXEC)"; break;
default:
s = "Unknown error code (?)";
}

View file

@ -602,6 +602,9 @@ unsigned long sysconf(int number) {
// TODO: actually return a proper value for _SC_GETGR_R_SIZE_MAX
mlibc::infoLogger() << "\e[31mmlibc: sysconf(_SC_GETGR_R_SIZE_MAX) returns arbitrary value 8\e[39m" << frg::endlog;
return 8;
case _SC_JOB_CONTROL:
// If 1, job control is supported
return 1;
default:
mlibc::panicLogger() << "\e[31mmlibc: sysconf() call is not implemented, number: " << number << "\e[39m" << frg::endlog;
__builtin_unreachable();

View file

@ -99,12 +99,12 @@ extern "C" {
#define _SC_NPROCESSORS_ONLN 6
#define _SC_GETGR_R_SIZE_MAX 7
#define _SC_CHILD_MAX 7
#define _SC_CLK_TCK 8
#define _SC_NGROUPS_MAX 9
#define _SC_VERSION 9
#define _SC_SAVED_IDS 9
#define _SC_JOB_CONTROL 9
#define _SC_CHILD_MAX 8
#define _SC_CLK_TCK 9
#define _SC_NGROUPS_MAX 10
#define _SC_VERSION 11
#define _SC_SAVED_IDS 12
#define _SC_JOB_CONTROL 13
#define STDERR_FILENO 2
#define STDIN_FILENO 0

View file

@ -3215,6 +3215,8 @@ int sys_open(const char *path, int flags, int *fd) {
proto_flags |= managarm::posix::OpenFlags::OF_EXCLUSIVE;
if(flags & __MLIBC_O_NONBLOCK)
proto_flags |= managarm::posix::OpenFlags::OF_NONBLOCK;
if(flags & __MLIBC_O_TRUNC)
proto_flags |= managarm::posix::OpenFlags::OF_TRUNC;
if(flags & __MLIBC_O_CLOEXEC)
proto_flags |= managarm::posix::OpenFlags::OF_CLOEXEC;
@ -3272,6 +3274,8 @@ int sys_openat(int dirfd, const char *path, int flags, int *fd) {
proto_flags |= managarm::posix::OpenFlags::OF_EXCLUSIVE;
if(flags & __MLIBC_O_NONBLOCK)
proto_flags |= managarm::posix::OpenFlags::OF_NONBLOCK;
if(flags & __MLIBC_O_TRUNC)
proto_flags |= managarm::posix::OpenFlags::OF_TRUNC;
if(flags & __MLIBC_O_CLOEXEC)
proto_flags |= managarm::posix::OpenFlags::OF_CLOEXEC;