Handle dates past January 19th, 2038
Try to support dates past year 2038 on systems with 64-bit time_t. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
parent
4fd8f0b11e
commit
a12833ec08
@ -310,7 +310,7 @@ date_arg_from_to(long from, long to, int add_line, const char *fmt_apt,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parse_datearg(const char *str)
|
static long parse_datearg(const char *str)
|
||||||
{
|
{
|
||||||
struct date day;
|
struct date day;
|
||||||
|
|
||||||
@ -329,7 +329,7 @@ static int parse_datearg(const char *str)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parse_datetimearg(const char *str)
|
static long parse_datetimearg(const char *str)
|
||||||
{
|
{
|
||||||
char *date = mem_strdup(str);
|
char *date = mem_strdup(str);
|
||||||
char *time;
|
char *time;
|
||||||
|
@ -630,9 +630,7 @@ void ui_calendar_change_day(int datefmt)
|
|||||||
char *outstr;
|
char *outstr;
|
||||||
int dday, dmonth, dyear;
|
int dday, dmonth, dyear;
|
||||||
int wrong_day = 1;
|
int wrong_day = 1;
|
||||||
const char *mesg_line1 =
|
const char *mesg_line1 = _("The day you entered is not valid");
|
||||||
_("The day you entered is not valid "
|
|
||||||
"(should be between 01/01/1902 and 12/31/2037)");
|
|
||||||
const char *mesg_line2 = _("Press [ENTER] to continue");
|
const char *mesg_line2 = _("Press [ENTER] to continue");
|
||||||
const char *request_date =
|
const char *request_date =
|
||||||
_("Enter the day to go to [ENTER for today] : %s");
|
_("Enter the day to go to [ENTER for today] : %s");
|
||||||
@ -739,10 +737,6 @@ void ui_calendar_move(enum move move, int count)
|
|||||||
t.tm_mday = 1;
|
t.tm_mday = 1;
|
||||||
t.tm_mon = 0;
|
t.tm_mon = 0;
|
||||||
t.tm_year = 2;
|
t.tm_year = 2;
|
||||||
} else if (t.tm_year > 137) {
|
|
||||||
t.tm_mday = 31;
|
|
||||||
t.tm_mon = 11;
|
|
||||||
t.tm_year = 137;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
slctd_day.dd = t.tm_mday;
|
slctd_day.dd = t.tm_mday;
|
||||||
|
@ -651,10 +651,8 @@ char *new_tempfile(const char *prefix)
|
|||||||
*/
|
*/
|
||||||
int check_date(unsigned year, unsigned month, unsigned day)
|
int check_date(unsigned year, unsigned month, unsigned day)
|
||||||
{
|
{
|
||||||
return (year >= 1902 && year <= 2037 && month >= 1 && month <= 12
|
return (year >= 1902 && month >= 1 && month <= 12 && day >= 1 &&
|
||||||
&& day >= 1 && day <= days[month - 1] + (month == 2
|
day <= days[month - 1] + (month == 2 && ISLEAP(year)) ? 1 : 0);
|
||||||
&& ISLEAP(year)) ?
|
|
||||||
1 : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
4
test/data/apts-y2k38-001
Normal file
4
test/data/apts-y2k38-001
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
01/19/2038 [1] Event 1
|
||||||
|
01/20/2038 [1] Event 2
|
||||||
|
01/01/2100 [1] Event 3
|
||||||
|
01/01/9999 [1] Event 4
|
27
test/y2k38-001.sh
Executable file
27
test/y2k38-001.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. "${TEST_INIT:-./test-init.sh}"
|
||||||
|
|
||||||
|
if [ "$1" = 'actual' ]; then
|
||||||
|
"$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-y2k38-001" \
|
||||||
|
-d01/19/2038
|
||||||
|
"$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-y2k38-001" \
|
||||||
|
-d01/20/2038
|
||||||
|
"$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-y2k38-001" \
|
||||||
|
-d01/01/2100
|
||||||
|
"$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-y2k38-001" \
|
||||||
|
-d01/01/9999
|
||||||
|
elif [ "$1" = 'expected' ]; then
|
||||||
|
cat <<EOD
|
||||||
|
01/19/38:
|
||||||
|
* Event 1
|
||||||
|
01/20/38:
|
||||||
|
* Event 2
|
||||||
|
01/01/00:
|
||||||
|
* Event 3
|
||||||
|
01/01/99:
|
||||||
|
* Event 4
|
||||||
|
EOD
|
||||||
|
else
|
||||||
|
./run-test "$0"
|
||||||
|
fi
|
Loading…
x
Reference in New Issue
Block a user