From nobody Mon Nov 02 12:38:01 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4jJB7g3mKVz6yGvW for ; Mon, 02 Nov 2026 12:38:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jJB7g1kL8z3CGW for ; Mon, 02 Nov 2026 12:38:07 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793623087; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lVBwfC5aQFrHKQjzg9CxiUaeKZpionMiOxT5+8JFqoo=; b=PRVDIAkk6r6zUSH4uVKSZlziooV4+AK0o40b8saBUIcgB9V5x0w/5EIx+CFfr8yGg8d8Bm RAJ8Gs2WF38F1gQb+616BaskVIC6tkjUeaIjGNhhwUONnwTQf+9mS8ikL2PJlh9Urr9+df uuY9Piv78DYPeRRN1vVQ5uoXB27KTLQMCFAvJd7f3dbNfkuyJVMlqt13NVEpdYy5FrJeRo 0Hw2GAYXny79bQ+tgEGWwjZfqy7WFuusuZKB/rgpOGtTKmrBtJDwJEVERknEZG3/JiUAuu IKbkMWod7sBJFgFqEHlBgVdFkeyF5BVR5IU6EMP3DbA/EoAaZT1m2Eq6zdqR3A== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793623087; b=iMaL+Cofd9XC137a8DlyxOPFTe6RMFUWfyTXvSoFy4bUQp3I/1W09aShtZeYI0nkrNTGg6 tOypK4qqUTlBypeFUPBBL7uPC8qDC13DhKLMbYkettrzDzc9DxPpnrRaOXz1WpcYmb+nET 7HlJq13DqcOLYjc3AYJE7Pas7t+RNKoFrbfO+jeywp8GVuc4G4iDDjmF/uJTidMuiLnj2c tYwudHOcLg9J7K6Alk2DjrGB8u9W4tjXQC/gOZTUCJSwTRvi7RodJ7GodbUih7mXhhLyv9 /DdH5w4IDS92tuMKthYqEN6DMw6x6QEEV91z1lbzsT2DD88T6dLoZKUNYJAy7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793623087; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lVBwfC5aQFrHKQjzg9CxiUaeKZpionMiOxT5+8JFqoo=; b=KpO628m7WYJFjZ7CbDH7bKKml/HHjEwvuewGqclKC9aJNZTClJzZmcjAa8xHVhMoCdoGbW q8K0ioFgkb5izxdE8ZnFEkVCbFJoeLT6lRaRMujj8xG+gnAJIOXQsP+YQtzCLf+gUwSfYi zUwRPUmYbzuiC1Esv6I7NiIP4UCMtkpeUIBLH92HrySf/UnBGpNZfWY4tP4wxtz7IPJlQ9 hF8FNJI1EGCtiioNXJE3Wygj6s8LwsvHAZWtGDYGbDu4UG/vTp1StNsho+dq8nEXszzdaN K6jzJf0pyRBQkCSegEoD6XkIQuUDjU/8yUvo3cEEL1MxxjZLxfPTtR2NC7nLPw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jJB7g11t0zlyc for ; Mon, 02 Nov 2026 12:38:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 30595 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 02 Nov 2026 12:38:01 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 581d5098ec2c - main - libfetch: Use C locale for dates List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: Commit messages for all branches of the src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 581d5098ec2c9738db8a98bb1ef3c36ca33033b9 Auto-Submitted: auto-generated Date: Mon, 02 Nov 2026 12:38:01 +0000 Message-Id: <6ae88429.30595.78f01b19@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=581d5098ec2c9738db8a98bb1ef3c36ca33033b9 commit 581d5098ec2c9738db8a98bb1ef3c36ca33033b9 Author: Dag-Erling Smørgrav AuthorDate: 2026-11-02 12:27:46 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-11-02 12:28:39 +0000 libfetch: Use C locale for dates MFC after: 1 week PR: 299084 Reviewed by: arrowd, kevans Differential Revision: https://reviews.freebsd.org/D60901 --- lib/libfetch/http.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/libfetch/http.c b/lib/libfetch/http.c index 8fe98c57446d..feb88f9c1452 100644 --- a/lib/libfetch/http.c +++ b/lib/libfetch/http.c @@ -77,6 +77,7 @@ #include #include #include +#include #ifdef WITH_SSL #include @@ -121,6 +122,15 @@ #define HTTP_ERROR(xyz) ((xyz) >= 400 && (xyz) <= 599) +static locale_t +fetch_time_locale(void) +{ + static locale_t loc; + + if (loc == NULL) + loc = newlocale(LC_TIME_MASK, "C", NULL); + return (loc); +} /***************************************************************************** * I/O functions for decoding chunked streams @@ -854,20 +864,20 @@ out: static int http_parse_mtime(const char *p, time_t *mtime) { - char locale[64], *r; struct tm tm; + char *r; - strlcpy(locale, setlocale(LC_TIME, NULL), sizeof(locale)); - setlocale(LC_TIME, "C"); - r = strptime(p, "%a, %d %b %Y %H:%M:%S GMT", &tm); + r = strptime_l(p, "%a, %d %b %Y %H:%M:%S GMT", &tm, + fetch_time_locale()); /* * Some proxies use UTC in response, but it should still be * parsed. RFC2616 states GMT and UTC are exactly equal for HTTP. */ - if (r == NULL) - r = strptime(p, "%a, %d %b %Y %H:%M:%S UTC", &tm); + if (r == NULL) { + r = strptime_l(p, "%a, %d %b %Y %H:%M:%S UTC", &tm, + fetch_time_locale()); + } /* XXX should add support for date-2 and date-3 */ - setlocale(LC_TIME, locale); if (r == NULL) return (-1); DEBUGF("last modified: [%04d-%02d-%02d %02d:%02d:%02d]\n", @@ -1647,8 +1657,8 @@ http_request_body(struct url *URL, const char *op, struct url_stat *us, if (ims && url->ims_time) { timestruct = gmtime((time_t *)&url->ims_time); - (void)strftime(timebuf, 80, "%a, %d %b %Y %T GMT", - timestruct); + (void)strftime_l(timebuf, 80, "%a, %d %b %Y %T GMT", + timestruct, fetch_time_locale()); if (verbose) fetch_info("If-Modified-Since: %s", timebuf); http_cmd(conn, "If-Modified-Since: %s", timebuf);