fix detection of file modification (now really working)
Stefan Schuermans

Stefan Schuermans commited on 2011-10-24 21:29:34
Showing 2 changed files, with 12 additions and 13 deletions.

... ...
@@ -18,9 +18,10 @@ namespace Blinker {
18 18
  * @param[in] path path to file
19 19
  */
20 20
 File::File(const std::string &path):
21
-  m_path(path),
22
-  m_lastCheck(Time::now())
21
+  m_path(path)
23 22
 {
23
+  // get modification time
24
+  checkModified();
24 25
 }
25 26
 
26 27
 /**
... ...
@@ -38,22 +39,20 @@ const std::string & File::getPath()
38 39
  */
39 40
 bool File::checkModified()
40 41
 {
41
-  /* get current time before getting modification time
42
-     for not missing any modification */
43
-  Time now = Time::now();
44
-
45 42
   // get modification/change times
46 43
   struct stat s;
47 44
   if (stat(m_path.c_str(), &s))
48 45
     return false; // cannot stat -> silently ignore
49
-  Time modified(s.st_mtime);
50
-  Time changed(s.st_ctime);
46
+  Time modifyTime(s.st_mtime);
47
+  Time changeTime(s.st_ctime);
48
+  if (changeTime > modifyTime) // treat change same way as modify
49
+    modifyTime = changeTime;
51 50
 
52
-  // has file been modified/changed since last check
53
-  bool mod = modified >= m_lastCheck || changed >= m_lastCheck;
51
+  // consider file modified if modify time changed since last check
52
+  bool mod = modifyTime > m_lastModifyTime;
54 53
 
55
-  // remember "now" as last check time
56
-  m_lastCheck = now;
54
+  // remember new modify time
55
+  m_lastModifyTime = modifyTime;
57 56
 
58 57
   return mod;
59 58
 }
... ...
@@ -37,7 +37,7 @@ public:
37 37
 
38 38
 protected:
39 39
   std::string m_path;           ///< path to file
40
-  Time m_lastCheck; ///< last time modification time was checked
40
+  Time        m_lastModifyTime; ///< last known modification time was checked
41 41
 }; // class File
42 42
 
43 43
 } // namespace Blinker
44 44