aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jim-clock.c10
-rw-r--r--tests/clock.test4
2 files changed, 8 insertions, 6 deletions
diff --git a/jim-clock.c b/jim-clock.c
index 979b13f..e1c2d76 100644
--- a/jim-clock.c
+++ b/jim-clock.c
@@ -72,12 +72,11 @@ static int clock_cmd_format(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
time_t t;
jim_wide seconds;
struct clock_options options = { 0, "%a %b %d %H:%M:%S %Z %Y" };
+ struct tm *tm;
if (Jim_GetWide(interp, argv[0], &seconds) != JIM_OK) {
return JIM_ERR;
}
- t = seconds;
-
if (argc % 2 == 0) {
return -1;
}
@@ -85,8 +84,11 @@ static int clock_cmd_format(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
return JIM_ERR;
}
- if (strftime(buf, sizeof(buf), options.format, options.gmt ? gmtime(&t) : localtime(&t)) == 0) {
- Jim_SetResultString(interp, "format string too long", -1);
+ t = seconds;
+ tm = options.gmt ? gmtime(&t) : localtime(&t);
+
+ if (tm == NULL || strftime(buf, sizeof(buf), options.format, tm) == 0) {
+ Jim_SetResultString(interp, "format string too long or invalid time", -1);
return JIM_ERR;
}
diff --git a/tests/clock.test b/tests/clock.test
index 4a2deb0..288ce65 100644
--- a/tests/clock.test
+++ b/tests/clock.test
@@ -33,9 +33,9 @@ test clock-3.8 {clock format tests} -body {
} -returnCodes error -result {wrong # args: should be "clock format seconds ?-format string? ?-gmt boolean?"}
test clock-3.9 {clock format tests} {
- set clockval -1
+ set clockval 0
clock format $clockval -format "%a %b %d %I:%M:%S %p %Y" -gmt true
-} "Wed Dec 31 11:59:59 PM 1969"
+} "Thu Jan 01 12:00:00 AM 1970"
test clock-3.10 {clock format tests} -body {
clock format 123 -bad arg