You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
secure-delete/SOURCES/0002-Add-progress-bar-for-s...

141 lines
4.2 KiB

From 82e2b68bb43a650e66931dd319ef04624911c430 Mon Sep 17 00:00:00 2001
From: tigro <tigro@msvsphere-os.ru>
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<termwidthv; progi++) {
+ if (progi<progpos)
+ printf("=");
+ else if (progi==progpos)
+ printf(">");
+ 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 <time.h>
#include <sys/time.h>
#include <sys/resource.h>
+#include <math.h>
#include "config.h"
--
2.46.0