Re: [PATCH] Add support for TZ names with <> in tzset
Brian Inglis <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Organization | Systematic Software |
| Message-ID | <[email protected]> |
On 2020-11-16 08:13, Corinna Vinschen via Newlib wrote: > Hi Earle, > > On Nov 14 15:03, Earle F. Philhower, III via Newlib wrote: >> Howdy all, >> >> Attached is a patch which extends the tzset() function to support a format >> for "unnamed" TZ environment timezones which use "<+/-nn>" as the timezone >> name instead of an alphabetic name. These are supported in glibc and are >> present in several major TZ databases that we use on the ESP8266 Arduino >> core. For example, >> >>> #define TZ_Africa_Casablanca "<+01>-1" >> >> The existing tzset sscanf format string breaks at the first "+", assuming >> it's the >> beginning of the offset. This patch special-cases names beginning with "<" >> to >> circumvent the issue. >> >> Signed-off-by: Earle F. Philhower, III <[email protected]> > > Basically this looks ok. I have two nits, though. > > - Now that the scanning got more complicated than a single sscanf call, > this crys out for a helper function doing the actual scanning for > both, std and dst strings. This could be an inline function which is > only inlined > #if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) > > - The strcat call seems a bit heavy. What about sth like this instead: > > __tzname_ptr[n - 1] = '>'; > __tzname_ptr[n] = '\0'; Should consider modifying the PD TZ project tzcode reference src localtime.c tzparse() https://github.com/eggert/tz/blob/master/localtime.c#L1069 (contributed to the public domain by Guy Harris): handles all the POSIX rules string edge cases to Paul Eggert's satisfaction, and gets patched if any upstream org (every distro) or vendor (all OSes) reports a problem. -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada This email may be disturbing to some readers as it contains too much technical detail. Reader discretion is advised. [Data in binary units and prefixes, physical quantities in SI.]