BSD 4_3_Tahoe release
[unix-history] / usr / src / etc / tzone / scheck.c
CommitLineData
ca67e7b4
C
1#ifndef lint
2static char sccsid[] = "@(#)scheck.c 1.1 (Berkeley) 3/29/87";
3#endif
4
5/*LINTLIBRARY*/
6
7#include "stdio.h"
8#include "ctype.h"
9
10extern char * imalloc();
11
12char *
13scheck(string, format)
14char * string;
15char * format;
16{
17 register char * fbuf;
18 register char * fp;
19 register char * tp;
20 register int c;
21 register char * result;
22 char dummy;
23
24 result = "";
25 if (string == NULL || format == NULL)
26 return result;
27 fbuf = imalloc(2 * strlen(format) + 4);
28 if (fbuf == NULL)
29 return result;
30 fp = format;
31 tp = fbuf;
32 while ((*tp++ = c = *fp++) != '\0') {
33 if (c != '%')
34 continue;
35 if (*fp == '%') {
36 *tp++ = *fp++;
37 continue;
38 }
39 *tp++ = '*';
40 if (*fp == '*')
41 ++fp;
42 while (isascii(*fp) && isdigit(*fp))
43 *tp++ = *fp++;
44 if (*fp == 'l' || *fp == 'h')
45 *tp++ = *fp++;
46 else if (*fp == '[')
47 do *tp++ = *fp++;
48 while (*fp != '\0' && *fp != ']');
49 if ((*tp++ = *fp++) == '\0')
50 break;
51 }
52 *(tp - 1) = '%';
53 *tp++ = 'c';
54 *tp = '\0';
55 if (sscanf(string, fbuf, &dummy) != 1)
56 result = format;
57 free(fbuf);
58 return result;
59}