/* See LICENSE file for copyright and license details. */ #include #include #include #include #include #include #include #include "util.h" int rflag = 0; void rm(const char *); int main(int argc, char *argv[]) { int i; if(argc == 1) eprintf("usage: %s [-r] files...\n", argv[0]); for(i = 1; i < argc; i++) { if(!strcmp(argv[i], "-r")) rflag = 1; else rm(argv[i]); } return EXIT_SUCCESS; } void rm(const char *path) { if(remove(path) == -1){ if(errno == ENOTEMPTY && rflag){ DIR *d = opendir(path); struct dirent *ent; char prev[BUFSIZ]; if(!getcwd(prev, sizeof prev)) eprintf("getcwd:"); if(chdir(path)) eprintf("chdir %s:", path); while((ent = readdir(d))) if(strcmp(ent->d_name, "..") && strcmp(ent->d_name, ".")) rm(ent->d_name); closedir(d); if(chdir(prev) == -1) eprintf("chdir %s:", prev); if(remove(path) == -1) eprintf("remove %s:", path); }else eprintf("remove %s:", path); } }