]> granicus.if.org Git - postgresql/blob - src/timezone/scheck.c
Add Olson's public domain timezone library to src/timezone.
[postgresql] / src / timezone / scheck.c
1 #ifndef lint\r
2 #ifndef NOID\r
3 static char     elsieid[] = "@(#)scheck.c       8.15";\r
4 #endif /* !defined lint */\r
5 #endif /* !defined NOID */\r
6 \r
7 /*LINTLIBRARY*/\r
8 \r
9 #include "private.h"\r
10 \r
11 char *\r
12 scheck(string, format)\r
13 const char * const      string;\r
14 const char * const      format;\r
15 {\r
16         register char *         fbuf;\r
17         register const char *   fp;\r
18         register char *         tp;\r
19         register int            c;\r
20         register char *         result;\r
21         char                    dummy;\r
22         static char             nada;\r
23 \r
24         result = &nada;\r
25         if (string == NULL || format == NULL)\r
26                 return result;\r
27         fbuf = imalloc((int) (2 * strlen(format) + 4));\r
28         if (fbuf == NULL)\r
29                 return result;\r
30         fp = format;\r
31         tp = fbuf;\r
32         while ((*tp++ = c = *fp++) != '\0') {\r
33                 if (c != '%')\r
34                         continue;\r
35                 if (*fp == '%') {\r
36                         *tp++ = *fp++;\r
37                         continue;\r
38                 }\r
39                 *tp++ = '*';\r
40                 if (*fp == '*')\r
41                         ++fp;\r
42                 while (is_digit(*fp))\r
43                         *tp++ = *fp++;\r
44                 if (*fp == 'l' || *fp == 'h')\r
45                         *tp++ = *fp++;\r
46                 else if (*fp == '[')\r
47                         do *tp++ = *fp++;\r
48                                 while (*fp != '\0' && *fp != ']');\r
49                 if ((*tp++ = *fp++) == '\0')\r
50                         break;\r
51         }\r
52         *(tp - 1) = '%';\r
53         *tp++ = 'c';\r
54         *tp = '\0';\r
55         if (sscanf(string, fbuf, &dummy) != 1)\r
56                 result = (char *) format;\r
57         ifree(fbuf);\r
58         return result;\r
59 }\r