Annotation of 43BSDReno/share/zoneinfo/scheck.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: #ifndef NOID
                      3: static char    elsieid[] = "@(#)scheck.c       8.9";
                      4: #endif /* !defined lint */
                      5: #endif /* !defined NOID */
                      6: 
                      7: /*LINTLIBRARY*/
                      8: 
                      9: #include "stdio.h"
                     10: #include "ctype.h"
                     11: #include "string.h"
                     12: #include "stdlib.h"
                     13: #include "nonstd.h"
                     14: 
                     15: extern char *  imalloc P((int n));
                     16: extern void    ifree P((char * p));
                     17: 
                     18: char *
                     19: scheck(string, format)
                     20: const char * const     string;
                     21: const char * const     format;
                     22: {
                     23:        register char *         fbuf;
                     24:        register const char *   fp;
                     25:        register char *         tp;
                     26:        register int            c;
                     27:        register char *         result;
                     28:        char                    dummy;
                     29: 
                     30:        result = "";
                     31:        if (string == NULL || format == NULL)
                     32:                return result;
                     33:        fbuf = imalloc(2 * strlen(format) + 4);
                     34:        if (fbuf == NULL)
                     35:                return result;
                     36:        fp = format;
                     37:        tp = fbuf;
                     38:        while ((*tp++ = c = *fp++) != '\0') {
                     39:                if (c != '%')
                     40:                        continue;
                     41:                if (*fp == '%') {
                     42:                        *tp++ = *fp++;
                     43:                        continue;
                     44:                }
                     45:                *tp++ = '*';
                     46:                if (*fp == '*')
                     47:                        ++fp;
                     48:                while (isascii(*fp) && isdigit(*fp))
                     49:                        *tp++ = *fp++;
                     50:                if (*fp == 'l' || *fp == 'h')
                     51:                        *tp++ = *fp++;
                     52:                else if (*fp == '[')
                     53:                        do *tp++ = *fp++;
                     54:                                while (*fp != '\0' && *fp != ']');
                     55:                if ((*tp++ = *fp++) == '\0')
                     56:                        break;
                     57:        }
                     58:        *(tp - 1) = '%';
                     59:        *tp++ = 'c';
                     60:        *tp = '\0';
                     61:        if (sscanf(string, fbuf, &dummy) != 1)
                     62:                result = (char *) format;
                     63:        ifree(fbuf);
                     64:        return result;
                     65: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.