Annotation of 43BSDReno/share/zoneinfo/scheck.c, revision 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.