[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [PATCH v2] libbb: code shrink parse_datestr (again)
From: Ron Yorston <rmy () pobox ! com>
Date: 2021-09-18 20:20:43
Message-ID: 61464a1b.5ECBS1aGOCKlmgUL%rmy () pobox ! com
[Download RAW message or body]
Commit 9fe1548bb (date,touch: allow timezone offsets in dates)
mentioned the similarity between '@' format dates and those with
timezone offsets. It didn't notice that as a result there's
common code which can be shared.
function old new delta
parse_datestr 730 687 -43
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-43) Total: -43 bytes
v2: A different version of gcc complained about the label appearing
before a declaration. Make it happy.
Signed-off-by: Ron Yorston <rmy@pobox.com>
---
libbb/time.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/libbb/time.c b/libbb/time.c
index 41a69c754..48c16e5f1 100644
--- a/libbb/time.c
+++ b/libbb/time.c
@@ -13,6 +13,7 @@
int FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
{
char end = '\0';
+ time_t t;
#if ENABLE_DESKTOP
/*
* strptime is BIG: ~1k in uclibc, ~10k in glibc
@@ -47,9 +48,6 @@ int FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
if (endp && *endp == '\0') {
#if ENABLE_FEATURE_TIMEZONE
if (strchr(fmt, 'z')) {
- time_t t;
- struct tm *utm;
-
/* we have timezone offset: obtain Unix time_t */
ptm->tm_sec -= ptm->tm_gmtoff;
ptm->tm_isdst = 0;
@@ -57,11 +55,7 @@ int FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
if (t == (time_t)-1)
break;
/* convert Unix time_t to struct tm in user's locale */
- utm = localtime(&t);
- if (!utm)
- break;
- *ptm = *utm;
- return 0;
+ goto localise;
}
#endif
return 1;
@@ -141,13 +135,14 @@ int FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
} else
#endif /* ENABLE_DESKTOP */
if (date_str[0] == '@') {
- time_t t;
if (sizeof(t) <= sizeof(long))
t = bb_strtol(date_str + 1, NULL, 10);
else /* time_t is 64 bits but longs are smaller */
t = bb_strtoll(date_str + 1, NULL, 10);
if (!errno) {
- struct tm *lt = localtime(&t);
+ struct tm *lt;
+ IF_FEATURE_TIMEZONE(localise:)
+ lt = localtime(&t);
if (lt) {
*ptm = *lt;
return 0;
--
2.31.1
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic