From 4ef056729e5dc97952d04590afe33422ff6bb938 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Sun, 11 Jun 2006 20:06:46 +0000 Subject: [PATCH] (xheader_set_single_keyword): Fix typo. (decode_time): Avoid using gotos. --- src/xheader.c | 51 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/src/xheader.c b/src/xheader.c index 087cb1b..023c0bb 100644 --- a/src/xheader.c +++ b/src/xheader.c @@ -157,7 +157,7 @@ xheader_list_destroy (struct keyword_list **root) static void xheader_set_single_keyword (char *kw) { - USAGE_ERROR ((0, 0, _("Keyword %s is unknown or not yet imlemented"), kw)); + USAGE_ERROR ((0, 0, _("Keyword %s is unknown or not yet implemented"), kw)); } static void @@ -836,8 +836,15 @@ code_time (struct timespec t, char const *keyword, struct xheader *xhdr) xheader_print (xhdr, keyword, code_timespec (t, buf)); } -static bool -decode_time (struct timespec *ts, char const *arg, char const *keyword) +enum decode_time_status + { + decode_time_success, + decode_time_range, + decode_time_bad_header + }; + +static enum decode_time_status +_decode_time (struct timespec *ts, char const *arg, char const *keyword) { time_t s; unsigned long int ns = 0; @@ -853,21 +860,21 @@ decode_time (struct timespec *ts, char const *arg, char const *keyword) { intmax_t i = strtoimax (arg, &arg_lim, 10); if (TYPE_SIGNED (time_t) ? i < TYPE_MINIMUM (time_t) : i < 0) - goto out_of_range; + return decode_time_range; s = i; } else { uintmax_t i = strtoumax (arg, &arg_lim, 10); if (TYPE_MAXIMUM (time_t) < i) - goto out_of_range; + return decode_time_range; s = i; } p = arg_lim; if (errno == ERANGE) - goto out_of_range; + return decode_time_range; if (*p == '.') { @@ -895,7 +902,7 @@ decode_time (struct timespec *ts, char const *arg, char const *keyword) if (ns != 0) { if (s == TYPE_MINIMUM (time_t)) - goto out_of_range; + return decode_time_range; s--; ns = BILLION - ns; } @@ -906,20 +913,34 @@ decode_time (struct timespec *ts, char const *arg, char const *keyword) { ts->tv_sec = s; ts->tv_nsec = ns; - return true; + return decode_time_success; } } - ERROR ((0, 0, _("Malformed extended header: invalid %s=%s"), - keyword, arg)); - return false; + return decode_time_bad_header; +} - out_of_range: - out_of_range_header (keyword, arg, - (uintmax_t) TYPE_MINIMUM (time_t), - TYPE_MAXIMUM (time_t)); - return false; +static bool +decode_time (struct timespec *ts, char const *arg, char const *keyword) +{ + switch (_decode_time (ts, arg, keyword)) + { + case decode_time_success: + return true; + case decode_time_bad_header: + ERROR ((0, 0, _("Malformed extended header: invalid %s=%s"), + keyword, arg)); + return false; + case decode_time_range: + out_of_range_header (keyword, arg, - (uintmax_t) TYPE_MINIMUM (time_t), + TYPE_MAXIMUM (time_t)); + return false; + } + return true; } + + static void code_num (uintmax_t value, char const *keyword, struct xheader *xhdr) { -- 2.44.0