xread/xwrite: clip MAX_IO_SIZE to SSIZE_MAX
[gitweb.git] / date.c
diff --git a/date.c b/date.c
index df20d0ba1d9c5d9fa03316968c1b7038659add05..29f15404feab0d98f377b312a3fcf5d8888fdb0a 100644 (file)
--- a/date.c
+++ b/date.c
@@ -711,6 +711,28 @@ int parse_date_basic(const char *date, unsigned long *timestamp, int *offset)
        return 0; /* success */
 }
 
+int parse_expiry_date(const char *date, unsigned long *timestamp)
+{
+       int errors = 0;
+
+       if (!strcmp(date, "never") || !strcmp(date, "false"))
+               *timestamp = 0;
+       else if (!strcmp(date, "all") || !strcmp(date, "now"))
+               /*
+                * We take over "now" here, which usually translates
+                * to the current timestamp.  This is because the user
+                * really means to expire everything she has done in
+                * the past, and by definition reflogs are the record
+                * of the past, and there is nothing from the future
+                * to be kept.
+                */
+               *timestamp = ULONG_MAX;
+       else
+               *timestamp = approxidate_careful(date, &errors);
+
+       return errors;
+}
+
 int parse_date(const char *date, char *result, int maxlen)
 {
        unsigned long timestamp;