1*cf5a6c84SAndroid Build Coastguard Worker /* rmdir.c - remove directory/path 2*cf5a6c84SAndroid Build Coastguard Worker * 3*cf5a6c84SAndroid Build Coastguard Worker * Copyright 2008 Rob Landley <[email protected]> 4*cf5a6c84SAndroid Build Coastguard Worker * 5*cf5a6c84SAndroid Build Coastguard Worker * See http://opengroup.org/onlinepubs/9699919799/utilities/rmdir.html 6*cf5a6c84SAndroid Build Coastguard Worker 7*cf5a6c84SAndroid Build Coastguard Worker USE_RMDIR(NEWTOY(rmdir, "<1(ignore-fail-on-non-empty)p(parents)", TOYFLAG_BIN)) 8*cf5a6c84SAndroid Build Coastguard Worker 9*cf5a6c84SAndroid Build Coastguard Worker config RMDIR 10*cf5a6c84SAndroid Build Coastguard Worker bool "rmdir" 11*cf5a6c84SAndroid Build Coastguard Worker default y 12*cf5a6c84SAndroid Build Coastguard Worker help 13*cf5a6c84SAndroid Build Coastguard Worker usage: rmdir [-p] [DIR...] 14*cf5a6c84SAndroid Build Coastguard Worker 15*cf5a6c84SAndroid Build Coastguard Worker Remove one or more directories. 16*cf5a6c84SAndroid Build Coastguard Worker 17*cf5a6c84SAndroid Build Coastguard Worker -p Remove path 18*cf5a6c84SAndroid Build Coastguard Worker --ignore-fail-on-non-empty Ignore failures caused by non-empty directories 19*cf5a6c84SAndroid Build Coastguard Worker */ 20*cf5a6c84SAndroid Build Coastguard Worker 21*cf5a6c84SAndroid Build Coastguard Worker #define FOR_rmdir 22*cf5a6c84SAndroid Build Coastguard Worker #include "toys.h" 23*cf5a6c84SAndroid Build Coastguard Worker do_rmdir(char * name)24*cf5a6c84SAndroid Build Coastguard Workerstatic void do_rmdir(char *name) 25*cf5a6c84SAndroid Build Coastguard Worker { 26*cf5a6c84SAndroid Build Coastguard Worker char *temp; 27*cf5a6c84SAndroid Build Coastguard Worker 28*cf5a6c84SAndroid Build Coastguard Worker do { 29*cf5a6c84SAndroid Build Coastguard Worker if (rmdir(name)) { 30*cf5a6c84SAndroid Build Coastguard Worker if (!FLAG(ignore_fail_on_non_empty) || errno != ENOTEMPTY) 31*cf5a6c84SAndroid Build Coastguard Worker perror_msg_raw(name); 32*cf5a6c84SAndroid Build Coastguard Worker return; 33*cf5a6c84SAndroid Build Coastguard Worker } 34*cf5a6c84SAndroid Build Coastguard Worker 35*cf5a6c84SAndroid Build Coastguard Worker // Each -p cycle back up one slash, ignoring trailing and repeated /. 36*cf5a6c84SAndroid Build Coastguard Worker 37*cf5a6c84SAndroid Build Coastguard Worker if (!toys.optflags) return; 38*cf5a6c84SAndroid Build Coastguard Worker do { 39*cf5a6c84SAndroid Build Coastguard Worker if (!(temp = strrchr(name, '/'))) return; 40*cf5a6c84SAndroid Build Coastguard Worker *temp = 0; 41*cf5a6c84SAndroid Build Coastguard Worker } while (!temp[1]); 42*cf5a6c84SAndroid Build Coastguard Worker } while (*name); 43*cf5a6c84SAndroid Build Coastguard Worker } 44*cf5a6c84SAndroid Build Coastguard Worker rmdir_main(void)45*cf5a6c84SAndroid Build Coastguard Workervoid rmdir_main(void) 46*cf5a6c84SAndroid Build Coastguard Worker { 47*cf5a6c84SAndroid Build Coastguard Worker char **s; 48*cf5a6c84SAndroid Build Coastguard Worker 49*cf5a6c84SAndroid Build Coastguard Worker for (s=toys.optargs; *s; s++) do_rmdir(*s); 50*cf5a6c84SAndroid Build Coastguard Worker } 51