summaryrefslogtreecommitdiffstats
path: root/usr.sbin/zic/scheck.c
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1994-09-13 03:29:24 +0000
committerwollman <wollman@FreeBSD.org>1994-09-13 03:29:24 +0000
commit4872ce12519edfd154167590c7a98f287c4d671c (patch)
tree7c0f1addb808a9cb99263be94b6164dee93ac96c /usr.sbin/zic/scheck.c
downloadFreeBSD-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.c62
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;
+}
OpenPOWER on IntegriCloud