]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
"now - 2 hours" should be the same as "2 hours ago"
authorTim Kientzle <kientzle@acm.org>
Sat, 1 Dec 2012 06:03:54 +0000 (22:03 -0800)
committerTim Kientzle <kientzle@acm.org>
Sat, 1 Dec 2012 06:03:54 +0000 (22:03 -0800)
This was broken by a mis-parsing of the "2 hours" phrase.

libarchive/archive_getdate.c
libarchive/test/test_archive_getdate.c

index f8b5a28d583d2cf35a53ffecb6c1aec0afa86241..aaa9d6fa128413ddcf88c6ea923f4a6f5717f787 100644 (file)
@@ -369,8 +369,8 @@ relunitphrase(struct gdstate *gds)
            && gds->tokenp[1].token == tSEC_UNIT) {
                /* "1 day" */
                gds->HaveRel++;
-               gds->RelSeconds += gds->tokenp[1].value * gds->tokenp[2].value;
-               gds->tokenp += 3;
+               gds->RelSeconds += gds->tokenp[0].value * gds->tokenp[1].value;
+               gds->tokenp += 2;
                return 1;
        }
        if (gds->tokenp[0].token == '-'
@@ -403,7 +403,7 @@ relunitphrase(struct gdstate *gds)
                /* "now", "tomorrow" */
                gds->HaveRel++;
                gds->RelSeconds += gds->tokenp[0].value;
-               ++gds->tokenp;
+               gds->tokenp += 1;
                return 1;
        }
        if (gds->tokenp[0].token == tMONTH_UNIT) {
@@ -1022,10 +1022,11 @@ int
 main(int argc, char **argv)
 {
     time_t     d;
+    time_t     now = time(NULL);
 
     while (*++argv != NULL) {
            (void)printf("Input: %s\n", *argv);
-           d = get_date(*argv);
+           d = get_date(now, *argv);
            if (d == -1)
                    (void)printf("Bad format - couldn't convert.\n");
            else
index 4be359bb356d1c7e6028b91a99942212341b4e5c..30a13aee9194b3e4b7f9df3a5fba3e995743fecb 100644 (file)
@@ -43,6 +43,8 @@ DEFINE_TEST(test_archive_getdate)
        assertEqualInt(get_date(now, "2004/01/29 513 mest"), 1075345980);
        assertEqualInt(get_date(now, "99/02/17 7pm utc"), 919278000);
        assertEqualInt(get_date(now, "02/17/99 7:11am est"), 919253460);
+       assertEqualInt(get_date(now, "now - 2 hours"),
+           get_date(now, "2 hours ago"));
        /* It's important that we handle ctime() format. */
        assertEqualInt(get_date(now, "Sun Feb 22 17:38:26 PST 2009"),
            1235353106);