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 } 66