pud: increase the resolution of the cached timestamp of the position file
authorFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 15 Oct 2015 10:38:29 +0000 (12:38 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 15 Oct 2015 12:47:56 +0000 (14:47 +0200)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/pud/src/posFile.c

index 3899cda..7ce8ee2 100644 (file)
@@ -38,7 +38,11 @@ static bool started = false;
 
 /** type to hold the cached stat result */
 typedef struct _CachedStat {
-       time_t timeStamp; /* Time of last modification (second resolution) */
+#if defined(__linux__) && !defined(__ANDROID__)
+  struct timespec timeStamp; /* Time of last modification (full resolution) */
+#else
+  time_t timeStamp; /* Time of last modification (second resolution) */
+#endif
 } CachedStat;
 
 /** the cached stat result */
@@ -64,7 +68,7 @@ bool startPositionFile(void) {
                return false;
        }
 
-       cachedStat.timeStamp = -1;
+       memset(&cachedStat, 0, sizeof(cachedStat));
 
        started = true;
        return true;
@@ -120,6 +124,7 @@ bool readPositionFile(char * fileName, nmeaINFO * nmeaInfo) {
        int fd;
        struct stat statBuf;
        FILE * fp = NULL;
+       void * mtim;
        unsigned int lineNumber = 0;
        char * name = NULL;
        char * value = NULL;
@@ -139,7 +144,13 @@ bool readPositionFile(char * fileName, nmeaINFO * nmeaInfo) {
                goto out;
        }
 
-       if (!memcmp(&cachedStat.timeStamp, &statBuf.st_mtime, sizeof(cachedStat.timeStamp))) {
+#if defined(__linux__) && !defined(__ANDROID__)
+       mtim = &statBuf.st_mtim;
+#else
+       mtim = &statBuf.st_mtime;
+#endif
+
+       if (!memcmp(&cachedStat.timeStamp, mtim, sizeof(cachedStat.timeStamp))) {
                /* file did not change since last read */
                goto out;
        }