From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic301-3.consmr.mail.bf2.yahoo.com (sonic301-3.consmr.mail.bf2.yahoo.com [74.6.129.42]) by sourceware.org (Postfix) with ESMTPS id D82F43858031 for ; Sat, 12 Dec 2020 17:56:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org D82F43858031 X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1607795806; bh=KmOlayLpWMe66ystc7oDd+t3pPapm8KTyCNeWRF39ZH=; h=Date:From:To:Subject:From:Subject; b=kOhcLKlImuvskirLwVYQg7y0OFr1TQVZVwZfT3ksExLm1xGbNunW97zYgC0qLLbP7D0YABmDNFtOJQU4RsURMQe1Urwcw8P6WWTOW/aPbc//pVdmxcgldvqhWIJ7mhcFFPCNY0C0AuyYApXSX9R4oQw4oCyW5IoDrXC8w4U8sg0PHenBLdx8+aDCvq+jH/xtyPQGkDPGA0lByjgXg3pNhqxDBHbQ/ZHx6rlgIGrjZKm53aA3x3U53qPEul2yp1mIwBxIi1lBC2Aqwg+5XMCWOomyLBtGpdKQFiImlDiYn6kspAXz4cV1jBXLUHFwJyMgqXeTrRgjkdTYuvx22oVNIQ== X-YMail-OSG: 6CcCLq0VM1kaW49X1zyU2kMfdHk3WJnwWj5_YICRPB12i_LggLrjH9ufN9kG7cx iHJ.hcANnRyzdItfG6vjAFCq4FIBQPbe4DYmtBSX3tM.5dInftZsPIkl.dmSC_xFbXGRQhvmzIBO NTjFK_Dsk8J21aubuO2z4yI4kDGtiZzZSJebGGGa19kEzvZW4GHNibGEk8JaHwi16cSsvM9Cx8Oy g7H9wP8sYSGli5gnGP4Tw2VX6vfv925MuYDCrrp6jLYZyWRJSzucKguLySiM2Vn_J1tt7r2jcoTn A6Lm8l95.26ACBWi2jtJGO4NVpHYLU2VfuF4yL2b9y3hKUpAjRsp8PViBQTxedbOY8i8sohDL99K CSE6RptfFwp_ewzmEPBYi.Sk0KlvLJkVd6SelcHmWdeaF.40jit9NikdKPbdtJYjDfkBYciaGXp5 4i0G1o26tSn.NLdahqC.LD_52pGjnanSO1as3WOz60RedR.lELYR4GGsbbEFM.RfPq2xxQYoCsT5 aO72H2LvYFtBeR62Wkvj_O7oOcVA3sy9MJ_5FQkBwLlQmqfOl6vyRmkGchSEomzgfMysRbTBg6GQ 6NXtD3ct_aVZWUh3tqK8hgEDRXpcLCF1klihp5vbN0NmFMoLkM5Dcjb2saINZnWRRmAQOGlUnQwo dRsZUNuiOacffJge6aufBICkkIYpT2GObMl_RD98keMI.xwFWX_J4evdBVhfmOroYDy8grd.N8kw qOaRfd3gj5tcSLBN_VqY76mHsFSKyTtKC.HUWB3UdfkmVVibkP6bfGsS0ancAqvezWYOjBxOFI9E jqEEpUnKdYu_cPK7FHIH37A7QQzLqa4S3NAo5.UNAXNQf6B10StkKSCbBa3UXFncoiLRCpESGbTH j.sfahWezoOV3DvHWIaEdy3jK11YUoalskvSMt00cXUfYnelyy0YlsLVfMwfVtog1D.95enIycVO pPG0rrrwLLc6l7YF.QzGZvQS5uSoqVoAghCVDbHGkaNJ8aFonCuDKR2iLYA47e7_7RB30E3fO6GT dUuah9AiOk9PWSaPS.BvmnRl2eczD8Mvy6CP3rAnc6q6Hnxu6.pD5z.SVM_NgOVHhLcXLG.W.2J7 w8vyPK6jCId.OQ6.gXzKA_wdl_TiW1AtojdMY2NRujmdmOMrttAtKfNCp2OTbPo0MOxkJ8BqzaHF NHK83bI4jIIuKhYHDQgaIQWWT9o3YlZ2HsfWqM0mzEJ_5ERC07AYX8sK7o5sJUdg6NSzcqaIY2w2 jOKuD.POFBQibvX3llkO3yJ1p.4sCl1JVbnMSOvye_YwG4qcfj1jqo62Mu4H_8QcCXfCvh95UMiG JafxyHwqvR0deCF8ihkEsdCESNULgJj_o4kL7XAkiqyqYmyTHzy_3fGcv4Dmdp.d1Oa8YTTB0rHS k0VUxQnKh3G8nOL12CKNyEc5DtETOk2beUZjyPdQrmuv2Xmk7VhZhITvxQCcLIViYx8s9iY9Cl0i bOFVBJ6ZVOKaPPlUioOPmsDv94nzbCOY20n5HPKJLfJrai0cGDt.XX3BscPI_JOlYUddh1xjqQv2 w1ktLldY0P4hv2qk6WzJ.uPIgXcYF1QDa7iJrtrddR4lBMmLu4wHhahKiyobUdYhRARqQ.TgpK0a 5f55Fnnmi.JlU6cPN7lHF5Sl15ERRtZWevMDEL6vD.IiE4hBDcLKhR2aPMLKF0lP0PLSLcw3IMDK 4Ceq.VStEUQqJAcVEhwmav0Fl3imsMpd8_b99A5xGX2uojNZOFAnUHXT2Vw7mTWxEt8jm8lwKPVO 2WxjFTb_OLshK8FFt1vGxQCKBhAUfM165qc8HcRUa8NKoo51Ottl4iOsgNS3Hk2S.lBSFRRJ_uES gTjrQzHmsu2yjPogNShtZmDVXzzUvZ6f8rfHTcr3cq0mdJ1uxFb5djKHm_BvIBW99RWOHm2RcPb5 z1oqxsuqjj3qlH_bLqK1RQyZ6Z2YCoVjyIaWuc_efqA0ABYg64ckR6T1DB70XzAXgz26ySMUosdB Is0lICZ37mUUF.b9PmnbWdrBS64CdTAKgzyVq76XR1KYIV809QzFMQ0tej88iyTt4xuUJlS00fnu jR.pOBKnB.pp3RfI9Hf2EGobQeRTh8k_j6jE__JUwRCCI_Br.vyEWXclN0aHZqivXH_zsN0rBG0v Hr8e7qwqp5lhdN_HWtJ6cOFy8ZeuuONzKOcBk_7Qy9wZxCfq.ngaHQX58lhvjAcSRyr80nMo_8Ji MezTU0TLH.2Ss6wXeMl_pc3R1MnjL6dM.xGlom19tl6GntIdrJoxG9wR02IjQK3C4wabRCSAIFA0 4wlLDEPsEzYqpywbF5.dbztkH88oFOYJoGh4ios8rLKIVXip6arYMe7vpwR.44n797US6KqCVvEN Z83ww_aSD2DQkStd9L0lyggbMu8XOt8BGMFHPAOFaP.KctVlihGCK4skO300X8F6Bkd7a2w0TFeq lvvggIhBASqdXmTW2CnAm Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.bf2.yahoo.com with HTTP; Sat, 12 Dec 2020 17:56:46 +0000 Date: Sat, 12 Dec 2020 17:56:45 +0000 (UTC) From: "Earle F. Philhower, III" To: "newlib@sourceware.org" Message-ID: <1223838587.4607472.1607795805086@mail.yahoo.com> In-Reply-To: <76c91228-465f-1c99-9a8e-6269063b04bd@SystematicSw.ab.ca> References: <080401d6bada$6c52f060$44f8d120$.ref@yahoo.com> <080401d6bada$6c52f060$44f8d120$@yahoo.com> <20201116151359.GD41926@calimero.vinschen.de> <3a5f706a-f1c0-595f-ff96-e674cb72e233@SystematicSw.ab.ca> <76c91228-465f-1c99-9a8e-6269063b04bd@SystematicSw.ab.ca> Subject: Re: [PATCH] Add support for TZ names with <> in tzset MIME-Version: 1.0 X-Mailer: WebService/1.1.17111 YMailNorrin Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0 X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Dec 2020 17:56:49 -0000 > On 2020-11-16 18:43, C Howland via Newlib wrote:>> On Monday, November 16= , 2020 5:30 PM, Brian Inglis wrote: >>> On 2020-11-16 08:13, Corinna Vinschen via Newlib wrote: >>>> On Nov 14 15:03, Earle F. Philhower, III via Newlib wrote: >>>>> Attached is a patch which extends the tzset() function to support a= =20 >>>>> format for "unnamed" TZ environment timezones which use "<+/-nn>" as >>>>> the timezone name instead of an alphabetic name.=C2=A0 These are supp= orted >>>>> in glibc and are present in several major TZ databases that we use on >>>>> the ESP8266 Arduino core.=C2=A0 For example, ...>>>> Basically this looks ok.=C2=A0 I have two nits, though.>>>> - Now t= hat the scanning got more complicated than a single sscanf call, >>>>=C2=A0 =C2=A0 this crys out for a helper function doing the actual scan= ning for >>>>=C2=A0 =C2=A0 both, std and dst strings.=C2=A0 This could be an inline = function which is >>>>=C2=A0 =C2=A0 only inlined >>>>=C2=A0 =C2=A0 #if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMI= ZE_SIZE__)>>>> - The strcat call seems a bit heavy.=C2=A0 What about sth li= ke this instead: Thanks Corinna.=C2=A0 I've factored out the common name scanner to its own static function, removed the strcat in favor of your suggestion, and added documentation in the code about its function. However, I'm not sure it makes sense to worry about size/speed optimizations here.=C2=A0 This is tzset_r and the normal case is to call it ~1 time per application startup to set the localtime offsets using the TZ environment variable, and never again. >>> Should consider modifying the PD TZ project tzcode reference src >>> lo= caltime.c tzparse() >>>=C2=A0=C2=A0=C2=A0 https://github.com/eggert/tz/blob/master/localtime.c#= L1069 ... Brian, thanks for the suggestion but I'd be very worried about opening up this function so completely.=C2=A0 There's unfortunately not a set of un= it tests for the time routines in newlib, and there's not any particular issue that's seen other than this timezone naming scheme. Updated patch follows, I hope it addresses the issues above.Anything missin= g, please do let me know. ----Extends the tzset() function to support TZ environment timezon= es names. For example, "<+01>-1" is the timezone environment for TZ_Africa_Casablanca Signed-off-by: Earle F. Philhower, III --- =C2=A0newlib/libc/time/tzset_r.c | 28 ++++++++++++++++++++++++++-- =C2=A01 file changed, 26 insertions(+), 2 deletions(-) diff --git a/newlib/libc/time/tzset_r.c b/newlib/libc/time/tzset_r.c index 9e0cf834b..61228ab72 100644 --- a/newlib/libc/time/tzset_r.c +++ b/newlib/libc/time/tzset_r.c @@ -13,6 +13,30 @@ static char __tzname_std[11]; =C2=A0static char __tzname_dst[11]; =C2=A0static char *prev_tzenv =3D NULL; =C2=A0 +/* Handle parsing of both unquoted and forms of the timzeone name= . */ +/* Returns 0 on failure, 1 on successful parsing, placing name and count i= n */ +/* passed-in __tzname, n variables. */ +static int +__parse_tzname_string(const char *tzenv, char *__tzname, int *n) +{ +=C2=A0 if (tzenv[0] =3D=3D '<') +=C2=A0=C2=A0=C2=A0 { +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* This is of the quoted form "<[+-]nn>" so= needs a different parsing */ +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (sscanf (tzenv, "%9[^>]>%n", __tzname, n= ) <=3D 0) +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return 0; +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* Include the final > in the timezone name= */ +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __tzname[*n - 1] =3D '>'; +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __tzname[*n] =3D 0; +=C2=A0=C2=A0=C2=A0 } +=C2=A0 else +=C2=A0=C2=A0=C2=A0 { +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* Unquoted timezone format parser */ +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (sscanf (tzenv, "%10[^0-9,+-]%n", __tzna= me, n) <=3D 0) +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return 0; +=C2=A0=C2=A0=C2=A0 } +=C2=A0 return 1; +} + =C2=A0void =C2=A0_tzset_unlocked_r (struct _reent *reent_ptr) =C2=A0{ @@ -45,7 +69,7 @@ _tzset_unlocked_r (struct _reent *reent_ptr) =C2=A0=C2=A0 if (*tzenv =3D=3D ':') =C2=A0=C2=A0=C2=A0=C2=A0 ++tzenv; =C2=A0 =C2=A0 -=C2=A0 if (sscanf (tzenv, "%10[^0-9,+-]%n", __tzname_std, &n) <=3D 0) +=C2=A0 if (!__parse_tzname_string (tzenv, __tzname_std, &n)) =C2=A0=C2=A0=C2=A0=C2=A0 return; =C2=A0=20 =C2=A0=C2=A0 tzenv +=3D n; @@ -69,7 +93,7 @@ _tzset_unlocked_r (struct _reent *reent_ptr) =C2=A0=C2=A0 _tzname[0] =3D __tzname_std; =C2=A0=C2=A0 tzenv +=3D n; =C2=A0 =C2=A0 -=C2=A0 if (sscanf (tzenv, "%10[^0-9,+-]%n", __tzname_dst, &n) <=3D 0) +=C2=A0 if (!__parse_tzname_string (tzenv, __tzname_dst, &n)) =C2=A0=C2=A0=C2=A0=C2=A0 { /* No dst */ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 _tzname[1] =3D _tzname[0]; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 _timezone =3D tz->__tzrule[0].offset; --=20 2.17.1 Thanks,-EFP3 =20