From 82e2b68bb43a650e66931dd319ef04624911c430 Mon Sep 17 00:00:00 2001 From: tigro Date: Fri, 23 Aug 2024 17:10:33 +0300 Subject: [PATCH 2/3] Add progress bar for sdel --- sdel-lib.c | 52 +++++++++++++++++++++++++++++++++++++++++++++------- sdel-lib.h | 1 + 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/sdel-lib.c b/sdel-lib.c index 508cc56..777b922 100644 --- a/sdel-lib.c +++ b/sdel-lib.c @@ -130,6 +130,35 @@ void sdel_finnish() { __internal_sdel_init = 0; } +void sdel_verbose(int turnv, int termwidthv, double counterv, double writesv){ + + double progress=(counterv/writesv)*1.0; + if (progress>0.0 && progress<=1.0) { + int progpos=termwidthv*progress; + if (turnv<10) + printf("pass:%i [",turnv); + else + printf("pass:%i[",turnv); + + for (int progi=0; progi"); + else + printf(" "); + } + + int progout=(int)floor(progress*100.0); + if (progout<10) + printf("]%i%% \r", progout); + else if (progout<100) + printf("]%i%% \r", progout); + else + printf("]%i%%\r", progout); + fflush(stdout); + } +} /* * secure_overwrite function parameters: * mode = 0 : once overwrite with random data @@ -146,6 +175,7 @@ int sdel_overwrite(int mode, int fd, long start, unsigned long bufsize, unsigned unsigned long writes; unsigned long counter; int turn; + int termwidth = 50; int last = 0; char buf[65535]; FILE *f; @@ -163,6 +193,8 @@ int sdel_overwrite(int mode, int fd, long start, unsigned long bufsize, unsigned writes = 0; /* do the first overwrite */ + if (verbose) + printf("\n"); if (start == 0) rewind(f); else @@ -173,13 +205,14 @@ int sdel_overwrite(int mode, int fd, long start, unsigned long bufsize, unsigned __sdel_fill_buf(std_array_00, bufsize, buf); else __sdel_fill_buf(std_array_ff, bufsize, buf); - if (writes > 0) - for (counter=1; counter<=writes; counter++) + if (writes > 0) + for (counter=1; counter<=writes; counter++){ fwrite(&buf, 1, bufsize, f); // dont care for errors + if (verbose) + sdel_verbose(0,termwidth,(double)counter,(double)writes); + } else do {} while(fwrite(&buf, 1, bufsize, f) == bufsize); - if (verbose) - printf("*"); fflush(f); if (fsync(fd) < 0) FLUSH; @@ -199,8 +232,11 @@ int sdel_overwrite(int mode, int fd, long start, unsigned long bufsize, unsigned if ((turn >= 5) && (turn <= 31)) { __sdel_fill_buf(write_modes[turn-5], bufsize, buf); if (writes > 0) - for (counter = 1; counter <= writes; counter++) + for (counter = 1; counter <= writes; counter++){ fwrite(&buf, 1, bufsize, f); // dont care for errors + if (verbose) + sdel_verbose((turn+1),termwidth,(double)counter,(double)writes); + } else do {} while(fwrite(&buf, 1, bufsize, f) == bufsize); } else { @@ -213,6 +249,8 @@ int sdel_overwrite(int mode, int fd, long start, unsigned long bufsize, unsigned if (! last) __sdel_random_buf(bufsize, buf); fwrite(&buf, 1, bufsize, f); // dont care for errors + if (verbose) + sdel_verbose((turn+1),termwidth,(double)counter,(double)writes); } } else { do { @@ -224,14 +262,14 @@ int sdel_overwrite(int mode, int fd, long start, unsigned long bufsize, unsigned fflush(f); if (fsync(fd) < 0) FLUSH; - if (verbose) - printf("*"); } (void) fclose(f); /* Hard Flush -> Force cached data to be written to disk */ FLUSH; + if (verbose) + printf("\n"); return 0; } diff --git a/sdel-lib.h b/sdel-lib.h index 757795e..a467110 100644 --- a/sdel-lib.h +++ b/sdel-lib.h @@ -13,6 +13,7 @@ #include #include #include +#include #include "config.h" -- 2.46.0