From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/13074 Path: news.gmane.org!.POSTED!not-for-mail From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH] strptime: add support for %z field descriptor (ISO 8601 timezone) Date: Wed, 25 Jul 2018 12:43:33 +0200 Message-ID: <20180725104333.31485-1-zajec5@gmail.com> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1532515312 18574 195.159.176.226 (25 Jul 2018 10:41:52 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 25 Jul 2018 10:41:52 +0000 (UTC) Cc: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: musl@lists.openwall.com Original-X-From: musl-return-13090-gllmg-musl=m.gmane.org@lists.openwall.com Wed Jul 25 12:41:48 2018 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1fiHEp-0004is-MN for gllmg-musl@m.gmane.org; Wed, 25 Jul 2018 12:41:47 +0200 Original-Received: (qmail 3256 invoked by uid 550); 25 Jul 2018 10:43:55 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 3223 invoked from network); 25 Jul 2018 10:43:55 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=CkTABxplFdEbOZfWOKZ5tw0ltOaOituNTEDZo4EAKqk=; b=aVVIm/mjRstEIZVeRAk+RBJh41zeDAH3DE0rnxrvy1o79gkOPBPMh0L7LX1dyVx31c 1ynQ/zF5VrULke3icB2ceCxyD20Ryzjh9VDchliCKTGCop27MLLzMMk3tlAVZJKdnnlG uI047MM2mmjyqx7U2WfMTBMLPjUQaX4JXZhD1ke+fZBPeA73H+5YpLOkZRtKjCPylerz T4Zu+qZsMCmcy+miLwsNO0EKp4Oll1Uod2bro20lUFXo+4Bj5SHFcs6QkqJc7RLZYtin sY0BWFL8XibBJYD3aq3dFbnEoEz3EoMWrqrL9DF06wzlUgNi4dq/mIqtorIu83qeBtkm vYTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=CkTABxplFdEbOZfWOKZ5tw0ltOaOituNTEDZo4EAKqk=; b=sFMzNvxeMbas525+VmcQApVH3GRF5nWinyvF9AHVicUyVXdKgCwsxwmTBHzT80WjS+ sMWbrB2Hpp/pzPAES66CM1ISZsdC6+0MwfaVnz+ZNWE/zqklEkOrmiJEcDEFv3ag1SLN btrGoOv3V4LsVMNA01y9RspQcnMn8+IUO6OzjAQn1KPMcijBrtf4jS5sdZla0Y1UrQJY ty2osdazUj2AZlHMnHOR1CuDKGO6EAtaxef9ofZAgRCBEpFG8Cb8hf40FjmwoOJEpsW/ FXxH07lAhuhZh0O3GIQOHGigh7jkOt9iIM8V938DyMQ7ZXTBdJKk2AkepXzrIZZhW7PL +p2A== X-Gm-Message-State: AOUpUlGm4g7pCJL7c+PqkDEeCh6vrnkIoXCklJ7KpHAcSznrVx8z4pW+ Eo1jLw92XTD0gQWyj8iIfnGGflOE X-Google-Smtp-Source: AAOMgpf2eD7Kecp6sfWjNsco1fcWB5s7ZAlbOLhMR4H6vGGJQLzNkzPraWe12VAUu34Uq7pibJyiUg== X-Received: by 2002:a2e:7d10:: with SMTP id y16-v6mr14216052ljc.29.1532515423867; Wed, 25 Jul 2018 03:43:43 -0700 (PDT) X-Mailer: git-send-email 2.13.7 Xref: news.gmane.org gmane.linux.lib.musl.general:13074 Archived-At: From: Rafał Miłecki This is glibc extension for parsing ISO 8601 formatted timezone offset. Supported formats are: ±hh:mm, ±hhmm and ±hh. While strptime() contains some helpers for parsing (e.g. numeric_range and numeric_digits) they couldn't be used for %z due to a bigger complexity of that field (two numbers, optional separator). Signed-off-by: Rafał Miłecki --- src/time/strptime.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/time/strptime.c b/src/time/strptime.c index c54a0d8c..f3607bd0 100644 --- a/src/time/strptime.c +++ b/src/time/strptime.c @@ -154,6 +154,25 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri adj = 1900; want_century = 0; goto numeric_digits; + case 'z': + w=2; + if (*s == '+') s++; + else if (*s == '-') neg=1, s++; + else return 0; + tm->__tm_gmtoff = 0; + for (i=0; i<2 && isdigit(*s); i++) + tm->__tm_gmtoff = tm->__tm_gmtoff * 10 + *s++ - '0'; + if (*s == ':' || isdigit(*s)) { + if (*s == ':') s++; + for (i=0; i<2 && isdigit(*s); i++) + tm->__tm_gmtoff = tm->__tm_gmtoff * 10 + *s++ - '0'; + } else { + tm->__tm_gmtoff *= 100; + } + tm->__tm_gmtoff = tm->__tm_gmtoff / 100 * 60 + tm->__tm_gmtoff % 100; + tm->__tm_gmtoff *= 60; + if (neg) tm->__tm_gmtoff = -tm->__tm_gmtoff; + break; case '%': if (*s++ != '%') return 0; break; -- 2.13.7