From nobody Mon Nov 02 12:38:01 2026 X-Original-To: dev-commits-src-main@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 4jJB7Z28ZVz6yGQ4 for ; Mon, 02 Nov 2026 12:38:02 +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 4jJB7Z1HFGz3CPG for ; Mon, 02 Nov 2026 12:38:02 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793623082; 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=fXI6xGnxTWYZkEL9QPSI7Av7KokU9k9hiw3EuZbHodV+dCI4jxY/gwD/pU+PKTwOmjMMLQ zxwIP+xN6O3cfI5kV8lEbbVcEoVB8IZH0VCyMDHE/MHoVG44fPxAMi/HWJpH9v7SwNT9yy eGjCftfVTuvL6xOC5g+EC6PpB32qOAqmqywMrnsxY91q52y4FuXOw8XoCvvm/GO38CQYYU UGhG3g/G7GRs0TxHK0MXlKpVYHIvFnSy8QTvXJUqfkXPGhWTY/U09GcYHVQ9IIbjgqP+VH A4MRmhJ5kc5/YpSI1ljf7fYknYBt3d5aBab5IG231j35Ss45Jyc52g5vA/IU7w== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793623082; b=YpTMmFreSLbUa1P2yyr1a6JuUletDqjZshMfp/NDQbUco5CtPyMcWUnT0zYh0mfZIE6uiU CFNvzwpAGaUN1bYhgYuXbsMdl95mr7GRQfGgECOWkwoPwRKOY6d77VWdxIlbJUYGcuVdNt aBKPdrPVS92pp7MZPLq/z9Ia5budopxn/laB/OJCuzC5N6ybvXTRUhUT4FtI7KbV3g9/IH NXz/Fb+2f0khqE1LiS8a6xgreXNUOMZ07oKzlAX1XnFRzJ04gZ7h99MB4UpLpXkeCkXp8u vpV4yluAbffPLXJwl4kNDT4P2peawkRbEG9HSLELL8M/2Sl91+YCAHsVAWNi1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793623082; 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=AumPxc7ITVURQL3EDgYkCmxgfiyF6DVIdQ/ujgE6YlaVepfiMUVOUOSV9RK8BG9pXS0iLF Fv6SlVxknHl3doyys4lLeLmPZBtL6dZImaldPa2gAl7cGeJuEX6JJQEAYIWv/SUb/S0DfP udZhzWJo1ivgxW1OOKmGWNG8rlpTuwImFBJ8XD8wu7iDPqQB3Lhkr0IoYByEVtsTqBXJrH l2T5I4Od1XBIC8QJlmP98byAKSXkjz4PS3deTjTVEzlEaqpk5xWTZxONPkIVHGQEf74MQ8 2gz0s5ni9EsfRyirXFXTzxxONhYzUn3YyBIivjhuSheAeo1pcUDBGU37G1PXyg== 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 4jJB7Z0hYGzmPt for ; Mon, 02 Nov 2026 12:38:02 +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-main X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: Commit messages for the main branch 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);