#include #include #include #include #include #include #include #include #include #define dieusage() die(100,argv0," [-C dir]") #define dienoarg(OPT) \ do { \ carp("missing argument for -"OPT); \ dieusage(); \ } while(0) static time_t now,expiration; static int prompt_confirm(char *file) { char c; buffer_puts(buffer_1,"remove "); buffer_puts(buffer_1,file); buffer_putsflush(buffer_1,"? [y/N]"); if (read(0,&c,1)<=0) return 0; return c=='y' || c=='Y'; } static void delete_shared(char *id) { DIR *dir; struct dirent *ent; dir=opendir("."); if (!dir) diesys(111,"opendir"); while ((ent=readdir(dir))) if (str_start(ent->d_name,id)) unlink(ent->d_name); closedir(dir); } static void run(void) { DIR *dir; struct dirent *ent; struct stat st; dir=opendir("."); if (!dir) diesys(111,"opendir"); while ((ent=readdir(dir))) { if (str_chr(ent->d_name,'.')!=str_len(ent->d_name)) continue; if (stat(ent->d_name,&st)<0) diesys(111,"stat ",ent->d_name); /* ignore alias */ if (now-st.st_mtime > expiration) { if (!prompt_confirm(ent->d_name)) continue; buffer_putsflush(buffer_1,"\n"); delete_shared(ent->d_name); } } } int main(int argc, char **argv) { int i; char *dir="."; errmsg_iam(*argv); for (i=1;i