From f065cbde7ec718abacee989efb5e5d6372dcfd50 Mon Sep 17 00:00:00 2001 From: Ryan Kavanagh Date: Fri, 11 Sep 2020 11:49:11 -0400 Subject: Better error handling, and a verbose option --- cleanup.c | 58 +++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/cleanup.c b/cleanup.c index da9268e..429c8c2 100644 --- a/cleanup.c +++ b/cleanup.c @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -30,7 +31,7 @@ const double mind = 30.0; const double maxd = 90.0; const double max_size = 33554432; // 32MB -char* paths[1] = {"/var/www/users/tmp"}; +char* paths[2] = {"/var/www/users/~tmp", NULL}; int main(int argc, char * const argv[]) @@ -43,30 +44,49 @@ main(int argc, char * const argv[]) double file_age = 0; time_t curr_time = time(NULL); - file_system = fts_open(paths, 0, NULL); + int verbose, ch; - if (file_system != NULL) { - while ((node = fts_read(file_system)) != NULL) { - switch (node->fts_info) { - case FTS_F: - if (stat(node->fts_name, &attr) == -1) - err(1, NULL); - file_age = difftime(curr_time, attr.st_mtime); - cutoff = mind + (mind - maxd) * \ - pow((double) attr.st_size / (double) max_size - 1, 3.0); + verbose = 0; + while ((ch = getopt(argc, argv, "v")) != -1) { + switch (ch) { + case 'v': + verbose = 1; + break; + } + } + argc -= optind; + argv += optind; + + if ((file_system = fts_open(paths, 0, NULL)) == NULL) + errx(1, NULL); - if (file_age >= cutoff) { - // printf("%s age %fs cuttoff %fs size %lld B delete\n", \ - // node->fts_name, file_age, cutoff, attr.st_size); - unlink(node->fts_name); - } - break; - default: - break; + while ((node = fts_read(file_system)) != NULL) { + if (node->fts_errno) + err(node->fts_errno, "%s", node->fts_path); + + switch (node->fts_info) { + case FTS_F: + if (stat(node->fts_name, &attr) == -1) + err(1, NULL); + file_age = difftime(curr_time, attr.st_mtime); + cutoff = mind + (mind - maxd) * 86400 * + pow((double) attr.st_size / (double) max_size - 1, 3.0); + if (verbose) + printf("%s age %fs cuttoff %fs size %lldB\n", + node->fts_name, file_age, cutoff, attr.st_size); + if (file_age >= cutoff) { + unlink(node->fts_name); + if (verbose) + printf("%s deleted\n", node->fts_name); } + break; + default: + break; } } + fts_close(file_system); + return 0; } -- cgit v1.2.3