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.
141 lines
4.2 KiB
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
|
|
|