diff options
| author | Peter Stephenson <pws@zsh.org> | 2016-02-11 15:23:57 +0000 |
|---|---|---|
| committer | Peter Stephenson <pws@zsh.org> | 2016-02-11 15:23:57 +0000 |
| commit | 6d82ce161a760af4421c1153e78741bda95bf6b6 (patch) | |
| tree | 3c47d24d82c798293e4a01eba16b74527cad950b /Src/utils.c | |
| parent | Missed ChangeLog entry for 37895 (diff) | |
| download | zsh-6d82ce161a760af4421c1153e78741bda95bf6b6.tar zsh-6d82ce161a760af4421c1153e78741bda95bf6b6.tar.gz zsh-6d82ce161a760af4421c1153e78741bda95bf6b6.tar.bz2 zsh-6d82ce161a760af4421c1153e78741bda95bf6b6.tar.lz zsh-6d82ce161a760af4421c1153e78741bda95bf6b6.tar.xz zsh-6d82ce161a760af4421c1153e78741bda95bf6b6.tar.zst zsh-6d82ce161a760af4421c1153e78741bda95bf6b6.zip | |
37946: make rm * warnings more informative.
Now count files that would be deleted up to 100.
Diffstat (limited to 'Src/utils.c')
| -rw-r--r-- | Src/utils.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/Src/utils.c b/Src/utils.c index de4af5a51..12911d3f4 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -2634,13 +2634,36 @@ zsleep_random(long max_us, time_t end_time) int checkrmall(char *s) { + DIR *rmd; + int count = 0; if (!shout) return 1; - fprintf(shout, "zsh: sure you want to delete all the files in "); if (*s != '/') { - nicezputs(pwd[1] ? pwd : "", shout); - fputc('/', shout); + if (pwd[1]) + s = zhtricat(pwd, "/", s); + else + s = dyncat("/", s); } + const int max_count = 100; + if ((rmd = opendir(unmeta(s)))) { + int ignoredots = !isset(GLOBDOTS); + while (zreaddir(rmd, ignoredots)) { + count++; + if (count > max_count) + break; + } + closedir(rmd); + } + if (count > max_count) + fprintf(shout, "zsh: sure you want to delete more than %d files in ", + max_count); + else if (count == 1) + fprintf(shout, "zsh: sure you want to delete the only file in "); + else if (count > 0) + fprintf(shout, "zsh: sure you want to delete all %d files in ", + count); + else + fprintf(shout, "zsh: sure you want to delete all the files in "); nicezputs(s, shout); if(isset(RMSTARWAIT)) { fputs("? (waiting ten seconds)", shout); |
