libposix: make AT_FDCWD value configurable
This commit is contained in:
parent
61c4849bd7
commit
4de95c9bc0
|
@ -180,6 +180,7 @@ typedef enum PosixSignals
|
|||
*
|
||||
* libposix_define_errno to set the value of each PosixError
|
||||
* libposix_define_signal to set the value of each PosixSignal
|
||||
* libposix_define_at_fdcwd to set the value of AT_FDCWD (for fchmodat)
|
||||
* libposix_translate_error to translate error strings to PosixError
|
||||
* libposix_set_signal_trampoline to dispatch signal received as notes
|
||||
* libposix_set_stat_reader
|
||||
|
@ -206,6 +207,9 @@ typedef PosixError (*PosixErrorTranslator)(char* error, uintptr_t caller);
|
|||
*/
|
||||
extern int libposix_translate_error(PosixErrorTranslator translation, uintptr_t caller);
|
||||
|
||||
/* define the value of AT_FDCWD according to the library headers */
|
||||
extern int libposix_define_at_fdcwd(int AT_FDCWD);
|
||||
|
||||
/* define the value of a specific PosixError according to the library headers */
|
||||
extern int libposix_define_errno(PosixError e, int errno);
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
static PosixStatReader __libposix_stat_reader;
|
||||
static PosixOpenTranslator __libposix_open_translation;
|
||||
static int __libposix_AT_FDCWD;
|
||||
|
||||
typedef enum SeekTypes
|
||||
{
|
||||
|
@ -409,14 +410,13 @@ FailWithError:
|
|||
int
|
||||
POSIX_fchmodat(int *errnop, int fd, const char *path, long mode, int flag)
|
||||
{
|
||||
#define AT_FDCWD -100 /* from NetBSD; TODO: get from configuration */
|
||||
Dir *dir, ndir;
|
||||
long cperm = 0;
|
||||
char fullpath[4096], *p;
|
||||
int l;
|
||||
PosixError e;
|
||||
|
||||
if(fd == AT_FDCWD){
|
||||
if(fd == __libposix_AT_FDCWD){
|
||||
return POSIX_chmod(errnop, path, mode);
|
||||
} else if(path == nil){
|
||||
e = PosixENOENT;
|
||||
|
@ -560,3 +560,12 @@ FailWithEIO:
|
|||
*errnop = __libposix_get_errno(PosixEIO);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
libposix_define_at_fdcwd(int AT_FDCWD)
|
||||
{
|
||||
if(__libposix_AT_FDCWD != 0)
|
||||
return -1;
|
||||
__libposix_AT_FDCWD = AT_FDCWD;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue