summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Denker <jsd@av8n.com>2012-07-29 23:26:28 -0700
committerJohn Denker <jsd@av8n.com>2012-07-29 23:26:28 -0700
commitf8be4baf5a2318363b42f8883f66ed8a976dfc79 (patch)
tree9f747a0423647b016376fe353ceea197a5848cbf
parent2f6fd23b841c1f4e3c18d1cbfd228784aa8c3298 (diff)
scan40 appears to be working, much cleaner than last week's version
-rw-r--r--tools/libltgrey.c63
-rw-r--r--tools/libltgrey.h7
-rw-r--r--tools/ltgrey.c77
-rw-r--r--tools/utils.c16
-rw-r--r--tools/utils.h1
5 files changed, 78 insertions, 86 deletions
diff --git a/tools/libltgrey.c b/tools/libltgrey.c
index 3a60daa..4e92665 100644
--- a/tools/libltgrey.c
+++ b/tools/libltgrey.c
@@ -32,11 +32,6 @@ const int minimum_age(15*minute);
const int maximum_age(32*day);
const int probation(4*hour);
-// beware: access illogically comes *before* modification
-// in the array passed to utimes:
-const int upd_ac(0);
-const int upd_mod(1);
-
#if 0
void exeunt(const int sts){
if (sts == ex_good) exit(sts);
@@ -408,8 +403,16 @@ done:
}
state_40 whatsit::get40(const string mid){
- string fname = parent_dir + "/quarante/mid_" + mid;
- cerr << ".... " << fname << endl;
+ timeval junk[2];
+ return get40(mid, junk);
+}
+
+state_40 whatsit::get40(const string mid, timeval times[2]){
+ timeval now;
+ gettimeofday(&now, NULL);
+ times[0] = times[1] = now; // in case of early return
+ string fname = parent_dir + "/quarante/mid_" + purify(mid);
+ //xxx cerr << ".... " << fname << endl;
struct stat mid_stat;
int rslt = stat(fname.c_str(), &mid_stat);
if (rslt != 0) {
@@ -419,8 +422,10 @@ state_40 whatsit::get40(const string mid){
perror(0);
return fail;
}
- timeval now;
- gettimeofday(&now, NULL);
+ times[upd_ac ].tv_sec = mid_stat.st_atime;
+ times[upd_ac ].tv_usec = 0;
+ times[upd_mod].tv_sec = mid_stat.st_mtime;
+ times[upd_mod].tv_usec = 0;
int mod_age = now.tv_sec - mid_stat.st_mtime;
// int ac_age = now.tv_sec - mid_stat.st_atime;
if (mod_age < minimum_age) return green;
@@ -429,8 +434,8 @@ state_40 whatsit::get40(const string mid){
}
int whatsit::set40(const string mid, const int shift){
- string fname = parent_dir + "/quarante/mid_" + mid;
- cerr << ".... " << fname << endl;
+ string fname = parent_dir + "/quarante/mid_" + purify(mid);
+ //xxx cerr << ".... " << fname << endl;
int fd = creat(fname.c_str(), 0644);
if (fd < 0){
cerr << progid << ": create failed for '"
@@ -465,3 +470,39 @@ int whatsit::set40(const string mid, const int shift){
}
return 0;
}
+
+void whatsit::scan40(const int copies){
+ timeval now;
+ gettimeofday(&now, NULL);
+ using namespace boost::filesystem;
+
+ string dir40 = parent_dir + "/quarante";
+
+ if (is_directory(dir40)) {
+ for (directory_iterator itr(dir40); itr!=directory_iterator(); ++itr) {
+ string basename = itr->path().filename();
+ if (is_regular_file(itr->status())) {
+ string tag("mid_");
+ if (prefix(tag, basename)) {
+ for (int ii = 0; ii < copies; ii++)
+ cout << setw(20) << left << basename; // display filename only
+
+ timeval times[2];
+ state_40 rslt = get40(basename.substr(tag.length()), times);
+ int mod_age = now.tv_sec - times[upd_mod].tv_sec;
+ int ac_age = now.tv_sec - times[upd_ac ].tv_sec;
+ cout << setw(10) << right << time_out(mod_age)
+ << " " << setw(10) << right << time_out(ac_age);
+ cout << " " << decode_40[rslt];
+ cout << endl;
+ } else {
+ /* filename does not begin with tag "mid_" */
+ }
+ }
+ }
+ }
+ else {
+ // starting point is not a directory:
+ cout << (exists(dir40) ? "Found: " : "Not found: ") << dir40 << '\n';
+ }
+}
diff --git a/tools/libltgrey.h b/tools/libltgrey.h
index cf744d1..14ed144 100644
--- a/tools/libltgrey.h
+++ b/tools/libltgrey.h
@@ -3,6 +3,11 @@
#include <vector>
#include <map>
+// beware: access illogically comes *before* modification
+// in the array passed to utimes:
+const int upd_ac(0);
+const int upd_mod(1);
+
#define state_40_macro \
foo(unseen) \
foo(green) \
@@ -40,5 +45,7 @@ public:
void dump(const std::string var);
int maybe_mkdir(const std::string somedir, const std::string msg);
state_40 get40(const std::string mid);
+ state_40 get40(const std::string mid, timeval times[2]);
int set40(const std::string mid, const int shift);
+ void scan40(const int copies);
};
diff --git a/tools/ltgrey.c b/tools/ltgrey.c
index bb43b80..1494338 100644
--- a/tools/ltgrey.c
+++ b/tools/ltgrey.c
@@ -33,7 +33,7 @@ int main(int _argc, char** _argv){
string set40_mid;
while (argc > 0) {
string arg = argv[0]; argc--; argv++;
- if (prefix(arg, "-scan")) {
+ if (prefix(arg, "-scan40")) {
scanmode++;
} else if (prefix(arg, "-copy")) {
copies++;
@@ -99,8 +99,7 @@ int main(int _argc, char** _argv){
}
if (scanmode) {
- string dirname = parent_dir + "/quarante";
- scan(foo.progid, dirname, copies);
+ foo.scan40(copies);
return 0;
}
@@ -108,75 +107,3 @@ int main(int _argc, char** _argv){
return sts;
}
-
-//////////////////////////////////////////////////////////////////////
-// requires apt-get install libboost-filesystem-dev:
-#include <boost/filesystem.hpp>
-#include <iomanip>
-#include <sys/types.h> /* for stat(), getaddrinfo() */
-#include <sys/stat.h> /* for stat() */
-#include <unistd.h> /* for stat() */
-#include <stdio.h> /* for perror */
-#include <sstream>
-
-const int minute(60);
-const int hour(60*minute);
-const int day(24*hour);
-
-const int minimum_age(15*minute);
-const int maximum_age(32*day);
-const int probation(4*hour);
-
-void scan(const string progid, const string p, const int copies){
- timeval now;
- gettimeofday(&now, NULL);
- using namespace boost::filesystem;
-
- if (is_directory(p)) {
- for (directory_iterator itr(p); itr!=directory_iterator(); ++itr) {
- string basename = itr->path().filename();
- for (int ii = 0; ii < copies; ii++)
- cout << setw(20) << left << basename << ' '; // display filename only
- if (is_regular_file(itr->status())) {
-// cout << " [" << file_size(itr->path()) << ']';
- struct stat mystat;
- string fn = p + "/" + basename;
- int rslt = stat(fn.c_str(), &mystat);
- if (rslt != 0){
- cerr << progid << ": stat failed for '"
- << fn << "' : ";
- perror(0);
- }
- int mod_age = now.tv_sec - mystat.st_mtime;
- int ac_age = now.tv_sec - mystat.st_atime;
- cout << setw(10) << time_out(mod_age)
- << " " << setw(10) << time_out(ac_age);
- if (0) {
-
- } else if (mod_age < 0) {
- cout << " penalty";
- } else if (mod_age < ac_age) {
- cout << " parole";
- } else if (mod_age - ac_age < minimum_age // early bird, or completely unused
- && mod_age > probation) { // did not diligently resubmit
- cout << " disprobation";
- if (mod_age != ac_age) cout << "!";
- } else if (mod_age < minimum_age) {
- cout << " young";
- if (mod_age != ac_age) cout << "!";
- } else if (mod_age == ac_age) {
- cout << " unused";
- } else if (mod_age > maximum_age) {
- cout << " expired";
- } else {
- cout << " OK";
- }
- }
- cout << '\n';
- }
- }
- else {
- // starting point is not a directory:
- cout << (exists(p) ? "Found: " : "Not found: ") << p << '\n';
- }
-}
diff --git a/tools/utils.c b/tools/utils.c
index aecbfda..c544f20 100644
--- a/tools/utils.c
+++ b/tools/utils.c
@@ -3,6 +3,7 @@
#include <iomanip>
//#include <stdlib.h> /* for abs() */
#include <cmath>
+#include <ctype.h> /* for isalnum() */
// strip off the directory part of a path, leaving just
// the basic filename
@@ -58,3 +59,18 @@ std::string ltrim(const std::string foo){
if (where == foo.npos) return foo;
return foo.substr(where);
}
+
+static const std::string Pure_Enough("+-_.,@%~");
+
+std::string purify(const std::string arg){
+ using namespace std;
+ string rslt(arg);
+ for (string::iterator ptr = rslt.begin();
+ ptr != rslt.end(); ptr++){
+ char ch = *ptr;
+ if (isalnum(ch)) continue;
+ if (Pure_Enough.find(ch) != string::npos) continue;
+ *ptr = '~';
+ }
+ return rslt;
+}
diff --git a/tools/utils.h b/tools/utils.h
index ec467c6..cbcb795 100644
--- a/tools/utils.h
+++ b/tools/utils.h
@@ -4,3 +4,4 @@ std::string time_out(const int _ttt);
std::string toLower(const std::string a);
std::string ltrim(const std::string a);
+std::string purify(const std::string arg);