date and time created 90/02/02 17:24:08 by bostic
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Sat, 3 Feb 1990 09:24:08 +0000 (01:24 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Sat, 3 Feb 1990 09:24:08 +0000 (01:24 -0800)
SCCS-vsn: share/zoneinfo/scheck.c 5.1

usr/src/share/zoneinfo/scheck.c [new file with mode: 0644]

diff --git a/usr/src/share/zoneinfo/scheck.c b/usr/src/share/zoneinfo/scheck.c
new file mode 100644 (file)
index 0000000..64df712
--- /dev/null
@@ -0,0 +1,65 @@
+#ifndef lint
+#ifndef NOID
+static char    elsieid[] = "@(#)scheck.c       8.9";
+#endif /* !defined lint */
+#endif /* !defined NOID */
+
+/*LINTLIBRARY*/
+
+#include "stdio.h"
+#include "ctype.h"
+#include "string.h"
+#include "stdlib.h"
+#include "nonstd.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;
+
+       result = "";
+       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;
+}