diff options
author | wollman <wollman@FreeBSD.org> | 1994-09-13 03:29:24 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1994-09-13 03:29:24 +0000 |
commit | 4872ce12519edfd154167590c7a98f287c4d671c (patch) | |
tree | 7c0f1addb808a9cb99263be94b6164dee93ac96c /usr.sbin/zic/scheck.c | |
download | FreeBSD-src-4872ce12519edfd154167590c7a98f287c4d671c.zip FreeBSD-src-4872ce12519edfd154167590c7a98f287c4d671c.tar.gz |
The latest and greatest timezone code from Arthur David Olson, part 1.
This import comprises the `zic' and `zdump' programs.
Obtained from: Arthur David Olson, ftp://elsie.nci.nih.gov/pub/tzcode94g
Diffstat (limited to 'usr.sbin/zic/scheck.c')
-rw-r--r-- | usr.sbin/zic/scheck.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/usr.sbin/zic/scheck.c b/usr.sbin/zic/scheck.c new file mode 100644 index 0000000..4d9616d --- /dev/null +++ b/usr.sbin/zic/scheck.c @@ -0,0 +1,62 @@ +#ifndef lint +#ifndef NOID +static char elsieid[] = "@(#)scheck.c 8.11"; +#endif /* !defined lint */ +#endif /* !defined NOID */ + +/*LINTLIBRARY*/ + +#include "private.h" + +extern char * imalloc P((int n)); +extern void ifree P((char * p)); + +char * +scheck(string, format) +const char * const string; +const char * const format; +{ + register char * fbuf; + register const char * fp; + register char * tp; + register int c; + register char * result; + char dummy; + static char nada[1]; + + result = nada; + if (string == NULL || format == NULL) + return result; + fbuf = imalloc(2 * strlen(format) + 4); + if (fbuf == NULL) + return result; + fp = format; + tp = fbuf; + while ((*tp++ = c = *fp++) != '\0') { + if (c != '%') + continue; + if (*fp == '%') { + *tp++ = *fp++; + continue; + } + *tp++ = '*'; + if (*fp == '*') + ++fp; + while (isascii(*fp) && isdigit(*fp)) + *tp++ = *fp++; + if (*fp == 'l' || *fp == 'h') + *tp++ = *fp++; + else if (*fp == '[') + do *tp++ = *fp++; + while (*fp != '\0' && *fp != ']'); + if ((*tp++ = *fp++) == '\0') + break; + } + *(tp - 1) = '%'; + *tp++ = 'c'; + *tp = '\0'; + if (sscanf(string, fbuf, &dummy) != 1) + result = (char *) format; + ifree(fbuf); + return result; +} |