sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit 78fd8698cc9f23fc38b3150e61ea902057ed8c06
parent fbb80983ce607a54ccd9525772c24f9c9526fce6
Author: Connor Lane Smith <cls@lubutu.com>
Date:   Tue, 24 May 2011 13:04:56 +0100

fix rm -r
Diffstat:
Mrm.c | 12++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/rm.c b/rm.c @@ -39,9 +39,17 @@ void rm(const char *path) if(remove(path) == 0) return; if(errno == ENOTEMPTY && rflag) { + char *buf; + long size; struct dirent *d; DIR *dp; + if((size = pathconf(".", _PC_PATH_MAX)) < 0) + size = BUFSIZ; + if(!(buf = malloc(size))) + eprintf("malloc:"); + if(!getcwd(buf, size)) + eprintf("getcwd:"); if(!(dp = opendir(path))) eprintf("opendir %s:", path); if(chdir(path) != 0) @@ -51,8 +59,8 @@ void rm(const char *path) rm(d->d_name); closedir(dp); - if(chdir("..") != 0) - eprintf("chdir:"); + if(chdir(buf) != 0) + eprintf("chdir %s:", buf); if(remove(path) == 0) return; }