X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fparse-duration.c;h=8952a8fae393e1db92a119615b55b7d2cb0dbd21;hb=aeb898d88cddc17cefc7738940b4917e9ee27933;hp=91f5291c5b981a6e36fa3276acbd6a670c8c4ba6;hpb=6c95f03dbe22357828df688bc272f893afff4492;p=gnulib.git diff --git a/lib/parse-duration.c b/lib/parse-duration.c index 91f5291c5..8952a8fae 100644 --- a/lib/parse-duration.c +++ b/lib/parse-duration.c @@ -1,5 +1,5 @@ /* Parse a time duration and return a seconds count - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. Written by Bruce Korb , 2008. This program is free software: you can redistribute it and/or modify @@ -452,7 +452,7 @@ parse_period (cch_t * in_pz) } static time_t -parse_non_iso8601(cch_t * pz) +parse_non_iso8601 (cch_t * pz) { whats_done_t whatd_we_do = NOTHING_IS_DONE; @@ -566,38 +566,24 @@ parse_non_iso8601(cch_t * pz) time_t parse_duration (char const * pz) { - time_t res = 0; - while (isspace ((unsigned char)*pz)) pz++; - do { - if (*pz == 'P') - { - res = parse_period (pz + 1); - if (res == BAD_TIME) - break; - return res; - } - - if (*pz == 'T') - { - res = parse_time (pz + 1); - if (res == BAD_TIME) - break; - return res; - } - - if (! isdigit ((unsigned char)*pz)) - break; + switch (*pz) + { + case 'P': + return parse_period (pz + 1); - res = parse_non_iso8601 (pz); - if (res != BAD_TIME) - return res; + case 'T': + return parse_time (pz + 1); - } while (0); + default: + if (isdigit ((unsigned char)*pz)) + return parse_non_iso8601 (pz); - return BAD_TIME; + errno = EINVAL; + return BAD_TIME; + } } /*