Dear Vagrant,

> > +                   else if (*endptr != '\0')
> > +                           fprintf(stderr, "SOURCE_DATE_EPOCHh has 
> > trailing garbage\n");
> 
> 
> Minor typo in error message? Or is the error message trying to indicate
> the problem by example? :)

Very well spotted. I'll leave the hermeneutics of my original
intentions ambiguous for comedic effect ;-)

Updated patch attached..


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      la...@debian.org / chris-lamb.co.uk
       `-
diff --git a/misc.c b/misc.c
index 6adf33b..d6bcee1 100644
--- a/misc.c
+++ b/misc.c
@@ -109,7 +109,8 @@ FILE *open_mcwd(const char *mode)
                 * Ignore the info, if the file is more than 6 hours old
                 */
                getTimeNow(&now);
-               if (now - sbuf.st_mtime > 6 * 60 * 60) {
+               if (now - sbuf.st_mtime > 6 * 60 * 60
+                   && getenv("SOURCE_DATE_EPOCH") == NULL) {
                        fprintf(stderr,
                                "Warning: \"%s\" is out of date, removing it\n",
                                file);
@@ -159,11 +160,33 @@ void print_sector(const char *message, unsigned char 
*data, int size)
 
 time_t getTimeNow(time_t *now)
 {
+       char *endptr;
+       char *source_date_epoch;
+       unsigned long long epoch;
        static int haveTime = 0;
        static time_t sharedNow;
 
        if(!haveTime) {
-               time(&sharedNow);
+               source_date_epoch = getenv("SOURCE_DATE_EPOCH");
+               if (source_date_epoch) {
+                       epoch = strtoull(source_date_epoch, &endptr, 10);
+
+                       if (endptr == source_date_epoch)
+                               fprintf(stderr, "SOURCE_DATE_EPOCH invalid\n");
+                       else if ((errno == ERANGE && (epoch == ULLONG_MAX || 
epoch == 0))
+                                       || (errno != 0 && epoch == 0))
+                               fprintf(stderr, "SOURCE_DATE_EPOCH: strtoull: 
%s: %llu\n",
+                               strerror(errno), epoch);
+                       else if (*endptr != '\0')
+                               fprintf(stderr, "SOURCE_DATE_EPOCH has trailing 
garbage\n");
+                       else if (epoch > ULONG_MAX)
+                               fprintf(stderr, "SOURCE_DATE_EPOCH must be <= 
%lu but saw: %llu\n", ULONG_MAX, epoch);
+                       else {
+                               sharedNow = epoch;
+                       }
+               } else {
+                       time(&sharedNow);
+               }
                haveTime = 1;
        }
        if(now)

Reply via email to