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 8static const char elsieid[] = "@(#)scheck.c 8.19"; 9#endif /* !defined lint */ 10#endif /* !defined NOID */ 11 12#ifndef lint 13static const char rcsid[] = 14 "$FreeBSD$"; 15#endif /* not lint */ 16 17/*LINTLIBRARY*/ 18 19#include "private.h" 20 21const char * 22scheck(string, format) 23const char * const string; 24const char * const format; 25{ 26 register char * fbuf; 27 register const char * fp; 28 register char * tp; 29 register int c; 30 register const char * result; 31 char dummy; 32 33 result = ""; 34 if (string == NULL || format == NULL) 35 return result; 36 fbuf = imalloc((int) (2 * strlen(format) + 4)); 37 if (fbuf == NULL) 38 return result; 39 fp = format; 40 tp = fbuf; 41 while ((*tp++ = c = *fp++) != '\0') { 42 if (c != '%') 43 continue; 44 if (*fp == '%') { 45 *tp++ = *fp++; 46 continue; 47 } 48 *tp++ = '*'; 49 if (*fp == '*') 50 ++fp; 51 while (is_digit(*fp)) 52 *tp++ = *fp++; 53 if (*fp == 'l' || *fp == 'h') 54 *tp++ = *fp++; 55 else if (*fp == '[') 56 do *tp++ = *fp++; 57 while (*fp != '\0' && *fp != ']'); 58 if ((*tp++ = *fp++) == '\0') 59 break; 60 } 61 *(tp - 1) = '%'; 62 *tp++ = 'c'; 63 *tp = '\0'; 64 if (sscanf(string, fbuf, &dummy) != 1) 65 result = (char *) format; 66 ifree(fbuf); 67 return result; 68} 69