diff options
author | Sami Kerola | 2016-07-17 17:35:40 +0200 |
---|---|---|
committer | Sami Kerola | 2017-02-05 00:39:37 +0100 |
commit | 6b3cb186690438caa84bea336f9b380d8159d940 (patch) | |
tree | a52aa45297bdd7840c5f568e1e0b6da55560a04c /sys-utils | |
parent | hwclock: use symbolic magic values passed in between functions (diff) | |
download | kernel-qcow2-util-linux-6b3cb186690438caa84bea336f9b380d8159d940.tar.gz kernel-qcow2-util-linux-6b3cb186690438caa84bea336f9b380d8159d940.tar.xz kernel-qcow2-util-linux-6b3cb186690438caa84bea336f9b380d8159d940.zip |
hwclock: remove magic constants from interpret_date_string()
The constants function returned were not used. In same go clean up
execution flow a little bit.
Reviewed-by: J William Piggott <elseifthen@gmx.com>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'sys-utils')
-rw-r--r-- | sys-utils/hwclock.c | 65 |
1 files changed, 27 insertions, 38 deletions
diff --git a/sys-utils/hwclock.c b/sys-utils/hwclock.c index e4885d563..99ae29ed1 100644 --- a/sys-utils/hwclock.c +++ b/sys-utils/hwclock.c @@ -658,23 +658,17 @@ display_time(const bool hclock_valid, struct timeval hwctime) static int interpret_date_string(const struct hwclock_control *ctl, time_t *const time_p) { - FILE *date_child_fp; - char *date_command; + FILE *date_child_fp = NULL; + char *date_command = NULL; char *date_resp = NULL; size_t len = 0; const char magic[] = "seconds-into-epoch="; - int retcode; /* our eventual return code */ - int rc; /* local return code */ + int retcode = 1; + long seconds_since_epoch; if (!ctl->date_opt) { warnx(_("No --date option specified.")); - return 14; - } - - /* prevent overflow - a security risk */ - if (strlen(ctl->date_opt) > sizeof(date_command) - 50) { - warnx(_("--date argument too long")); - return 13; + return retcode; } /* Quotes in date_opt would ruin the date command we construct. */ @@ -682,7 +676,7 @@ static int interpret_date_string(const struct hwclock_control *ctl, warnx(_ ("The value of the --date option is not a valid date.\n" "In particular, it contains quotation marks.")); - return 12; + return retcode; } xasprintf(&date_command, "date --date=\"%s\" +%s%%s", @@ -694,14 +688,12 @@ static int interpret_date_string(const struct hwclock_control *ctl, if (date_child_fp == NULL) { warn(_("Unable to run 'date' program in /bin/sh shell. " "popen() failed")); - free(date_command); - return 10; + goto out; } if (getline(&date_resp, &len, date_child_fp) < 0) { warn(_("getline() failed")); - free(date_command); - return 15; + goto out; } if (ctl->debug) printf(_("response from date command = %s\n"), date_resp); @@ -711,32 +703,29 @@ static int interpret_date_string(const struct hwclock_control *ctl, "The command was:\n %s\n" "The response was:\n %s"), program_invocation_short_name, date_command, date_resp); - retcode = 8; + goto out; + } + + if (sscanf(date_resp + sizeof(magic) - 1, "%ld", &seconds_since_epoch) < 1) { + warnx(_("The date command issued by %s returned " + "something other than an integer where the " + "converted time value was expected.\n" + "The command was:\n %s\n" + "The response was:\n %s\n"), + program_invocation_short_name, date_command, date_resp); } else { - long seconds_since_epoch; - rc = sscanf(date_resp + sizeof(magic) - 1, "%ld", - &seconds_since_epoch); - if (rc < 1) { - warnx(_("The date command issued by %s returned " - "something other than an integer where the " - "converted time value was expected.\n" - "The command was:\n %s\n" - "The response was:\n %s\n"), - program_invocation_short_name, date_command, - date_resp); - retcode = 6; - } else { - retcode = 0; - *time_p = seconds_since_epoch; - if (ctl->debug) - printf(_("date string %s equates to " - "%ld seconds since 1969.\n"), - ctl->date_opt, *time_p); - } + retcode = 0; + *time_p = seconds_since_epoch; + if (ctl->debug) + printf(_("date string %s equates to " + "%ld seconds since 1969.\n"), + ctl->date_opt, *time_p); } + out: free(date_command); free(date_resp); - pclose(date_child_fp); + if (date_child_fp) + pclose(date_child_fp); return retcode; } |