diff --git a/lib/gettime.c b/lib/gettime.c index f4ad3d79..c61c88c3 100644 --- a/lib/gettime.c +++ b/lib/gettime.c @@ -1,8 +1,7 @@ -/* - * SPDX-FileCopyrightText: 2017, Chris Lamb - * - * SPDX-License-Identifier: BSD-3-Clause - */ +// SPDX-FileCopyrightText: 2017, Chris Lamb +// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar +// SPDX-License-Identifier: BSD-3-Clause + #include @@ -12,11 +11,12 @@ #include #include -#include "atoi/strtou_noneg.h" +#include "atoi/a2i.h" #include "defines.h" #include "prototypes.h" #include "shadowlog.h" + /* * gettime() returns the time as the number of seconds since the Epoch * @@ -24,13 +24,12 @@ * Epoch, 1970-01-01 00:00:00 +0000 (UTC), except that if the SOURCE_DATE_EPOCH * environment variable is exported it will use that instead. */ -/*@observer@*/time_t gettime (void) +/*@observer@*/time_t +gettime(void) { - char *end; - char *source_date_epoch; - time_t fallback; - unsigned long long epoch; - FILE *shadow_logfd = log_get_logfd(); + char *source_date_epoch; + FILE *shadow_logfd = log_get_logfd(); + time_t fallback, epoch; fallback = time (NULL); source_date_epoch = shadow_getenv ("SOURCE_DATE_EPOCH"); @@ -38,32 +37,11 @@ if (!source_date_epoch) return fallback; - errno = 0; - epoch = strtoull_noneg(source_date_epoch, &end, 10); - if (errno != 0) { - fprintf (shadow_logfd, - _("Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n"), - strerror(errno)); - } else if (end == source_date_epoch) { - fprintf (shadow_logfd, - _("Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n"), - end); - } else if (*end != '\0') { - fprintf (shadow_logfd, - _("Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n"), - end); - } else if (epoch > ULONG_MAX) { - fprintf (shadow_logfd, - _("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to %lu but was found to be: %llu\n"), - ULONG_MAX, epoch); - } else if ((time_t)epoch > fallback) { - fprintf (shadow_logfd, - _("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to the current time (%lu) but was found to be: %llu\n"), - fallback, epoch); - } else { - /* Valid */ - return epoch; + if (a2i(time_t, &epoch, source_date_epoch, NULL, 10, 0, fallback) == -1) { + fprintf(shadow_logfd, + _("Environment variable $SOURCE_DATE_EPOCH: a2i(\"%s\"): %s"), + source_date_epoch, strerror(errno)); + return fallback; } - - return fallback; + return epoch; }