]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
curl-util: use curl_getdate instead of implementing http spec
authorjane400 <jane400@postmarketos.org>
Wed, 15 Jan 2025 00:24:20 +0000 (01:24 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 15 Jan 2025 18:33:45 +0000 (03:33 +0900)
Available since curl 7.1, which is less than the version required in
meson.build

https://curl.se/libcurl/c/curl_getdate.html

src/import/curl-util.c

index 85c4f9b4620b90795db3ed413d7bee5594fa8ede..efb7e6d7c4cdc3ca818b9cf7e5155fbbd1e2c055 100644 (file)
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <errno.h>
 #include <fcntl.h>
 
 #include "alloc-util.h"
@@ -385,27 +386,17 @@ int curl_header_strdup(const void *contents, size_t sz, const char *field, char
 }
 
 int curl_parse_http_time(const char *t, usec_t *ret) {
-        _cleanup_(freelocalep) locale_t loc = (locale_t) 0;
-        const char *e;
-        struct tm tm;
-
         assert(t);
         assert(ret);
 
-        loc = newlocale(LC_TIME_MASK, "C", (locale_t) 0);
-        if (loc == (locale_t) 0)
-                return -errno;
-
-        /* RFC822 */
-        e = strptime_l(t, "%a, %d %b %Y %H:%M:%S %Z", &tm, loc);
-        if (!e || *e != 0)
-                /* RFC 850 */
-                e = strptime_l(t, "%A, %d-%b-%y %H:%M:%S %Z", &tm, loc);
-        if (!e || *e != 0)
-                /* ANSI C */
-                e = strptime_l(t, "%a %b %d %H:%M:%S %Y", &tm, loc);
-        if (!e || *e != 0)
+        time_t v = curl_getdate(t, NULL);
+        if (v == (time_t) -1)
                 return -EINVAL;
 
-        return mktime_or_timegm_usec(&tm, /* usec= */ true, ret);
+        if ((usec_t) v >= USEC_INFINITY / USEC_PER_SEC) /* check overflow */
+                return -ERANGE;
+
+        *ret = (usec_t) v * USEC_PER_SEC;
+
+        return 0;
 }