From e234e0a2d42a2a78bd1129b0579840c5a88fdfc8 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Tue, 22 Nov 2011 18:21:01 +0100 Subject: [PATCH] execve(2) now sets errno=EACCESS on non-buffer files. --- libmaxsi/decl/errno_values.h | 1 + libmaxsi/error.cpp | 5 +++-- sortix/process.cpp | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libmaxsi/decl/errno_values.h b/libmaxsi/decl/errno_values.h index 72fa458f..4dfaf979 100644 --- a/libmaxsi/decl/errno_values.h +++ b/libmaxsi/decl/errno_values.h @@ -18,5 +18,6 @@ #define EPERM 26 #define EIO 27 #define ENOEXEC 28 +#define EACCESS 29 #endif diff --git a/libmaxsi/error.cpp b/libmaxsi/error.cpp index 0ddb1245..69956b96 100644 --- a/libmaxsi/error.cpp +++ b/libmaxsi/error.cpp @@ -32,7 +32,7 @@ namespace Maxsi { DEFN_SYSCALL1(int, SysRegisterErrno, 28, int*); - extern "C" int errno = 0; + extern "C" { int errno = 0; } extern "C" void init_error_functions() { @@ -58,9 +58,10 @@ namespace Maxsi case ENOMEM: return (char*) "Not enough space"; case ERANGE: return (char*) "Result too large"; case EISDIR: return (char*) "Is a directory"; - case EPERM: return (char*) "Permission denied"; + case EPERM: return (char*) "Operation not permitted"; case EIO: return (char*) "Input/output error"; case ENOEXEC: return (char*) "Not executable"; + case EACCESS: return (char*) "Permission denied"; default: return (char*) "Unknown error condition"; } } diff --git a/sortix/process.cpp b/sortix/process.cpp index 52c45caa..e3de57c1 100644 --- a/sortix/process.cpp +++ b/sortix/process.cpp @@ -397,7 +397,7 @@ namespace Sortix delete[] abs; if ( !dev ) { return NULL; } - if ( !dev->IsType(Device::BUFFER) ) { dev->Unref(); return NULL; } + if ( !dev->IsType(Device::BUFFER) ) { Error::Set(EACCESS); dev->Unref(); return NULL; } return (DevBuffer*) dev; }