Home | History | Annotate | Download | only in tzcode
      1 /*
      2 ** This file is in the public domain, so clarified as of
      3 ** 2006-07-17 by Arthur David Olson.
      4 */
      5 
      6 #ifndef lint
      7 #ifndef NOID
      8 static char	elsieid[] = "@(#)scheck.c	8.19";
      9 #endif /* !defined lint */
     10 #endif /* !defined NOID */
     11 
     12 /*LINTLIBRARY*/
     13 
     14 #include "private.h"
     15 
     16 const char *
     17 scheck(string, format)
     18 const char * const	string;
     19 const char * const	format;
     20 {
     21 	register char *		fbuf;
     22 	register const char *	fp;
     23 	register char *		tp;
     24 	register int		c;
     25 	register const char *	result;
     26 	char			dummy;
     27 
     28 	result = "";
     29 	if (string == NULL || format == NULL)
     30 		return result;
     31 	fbuf = imalloc((int) (2 * strlen(format) + 4));
     32 	if (fbuf == NULL)
     33 		return result;
     34 	fp = format;
     35 	tp = fbuf;
     36 	while ((*tp++ = c = *fp++) != '\0') {
     37 		if (c != '%')
     38 			continue;
     39 		if (*fp == '%') {
     40 			*tp++ = *fp++;
     41 			continue;
     42 		}
     43 		*tp++ = '*';
     44 		if (*fp == '*')
     45 			++fp;
     46 		while (is_digit(*fp))
     47 			*tp++ = *fp++;
     48 		if (*fp == 'l' || *fp == 'h')
     49 			*tp++ = *fp++;
     50 		else if (*fp == '[')
     51 			do *tp++ = *fp++;
     52 				while (*fp != '\0' && *fp != ']');
     53 		if ((*tp++ = *fp++) == '\0')
     54 			break;
     55 	}
     56 	*(tp - 1) = '%';
     57 	*tp++ = 'c';
     58 	*tp = '\0';
     59 	if (sscanf(string, fbuf, &dummy) != 1)
     60 		result = (char *) format;
     61 	ifree(fbuf);
     62 	return result;
     63 }
     64