From a15c1111b86655dfc965cee21ead1633a00495fd Mon Sep 17 00:00:00 2001 From: Giacomo Tesio Date: Wed, 20 Nov 2019 00:19:59 +0100 Subject: [PATCH] libposix: POSIX_rmdir --- sys/include/posix.h | 3 ++- sys/src/lib/posix/files.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/sys/include/posix.h b/sys/include/posix.h index baa62a7..f8727f4 100644 --- a/sys/include/posix.h +++ b/sys/include/posix.h @@ -1,7 +1,7 @@ /* * This file is part of Jehanne. * - * Copyright (C) 2017-2018 Giacomo Tesio + * Copyright (C) 2017-2019 Giacomo Tesio * * This is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -324,6 +324,7 @@ extern int POSIX_pipe(int *errnop, int fildes[2]); extern int POSIX_umask(int *errnop, int mask); extern int POSIX_fcntl(int *errnop, int fd, PosixFDCmds cmd, uintptr_t arg); extern long POSIX_sysconf(int *errnop, PosixSysConfNames name); +extern int POSIX_rmdir(int *errnop, const char *name); extern int POSIX_sigaddset(int *errnop, PosixSignalMask *set, int signo); extern int POSIX_sigdelset(int *errnop, PosixSignalMask *set, int signo); diff --git a/sys/src/lib/posix/files.c b/sys/src/lib/posix/files.c index fa76288..d28dbfd 100644 --- a/sys/src/lib/posix/files.c +++ b/sys/src/lib/posix/files.c @@ -543,6 +543,35 @@ POSIX_unlink(int *errnop, const char *name) return -1; } +int +POSIX_rmdir(int *errnop, const char *name) +{ + Dir *db; + long ret; + if(name == nil || name[0] == 0){ + *errnop = __libposix_get_errno(PosixENOENT); + return -1; + } + ret = sys_remove(name); + switch(ret){ + case 0: + return 0; + case ~0: + db = nil; + if((db=dirstat(name))!=nil && (db->qid.type&QTDIR)){ + *errnop = __libposix_translate_errstr((uintptr_t)POSIX_rmdir); + } else { + *errnop = __libposix_get_errno(PosixENOTDIR); + } + free(db); + break; + default: + *errnop = ret; + break; + } + return -1; +} + int POSIX_fstat(int *errnop, int file, void *pstat) {