scheck.c revision 79858
1219820Sjeff#ifndef lint 2219820Sjeff#ifndef NOID 3219820Sjeffstatic const char elsieid[] = "@(#)scheck.c 8.15"; 4219820Sjeff#endif /* !defined lint */ 5219820Sjeff#endif /* !defined NOID */ 6219820Sjeff 7219820Sjeff#ifndef lint 8219820Sjeffstatic const char rcsid[] = 9219820Sjeff "$FreeBSD: head/usr.sbin/zic/scheck.c 79858 2001-07-18 11:27:04Z dd $"; 10219820Sjeff#endif /* not lint */ 11219820Sjeff 12219820Sjeff/*LINTLIBRARY*/ 13219820Sjeff 14219820Sjeff#include "private.h" 15219820Sjeff 16219820Sjeffchar * 17219820Sjeffscheck(string, format) 18219820Sjeffconst char * const string; 19219820Sjeffconst char * const format; 20219820Sjeff{ 21219820Sjeff register char * fbuf; 22219820Sjeff register const char * fp; 23219820Sjeff register char * tp; 24219820Sjeff register int c; 25219820Sjeff register char * result; 26219820Sjeff char dummy; 27219820Sjeff static char nada; 28219820Sjeff 29219820Sjeff result = &nada; 30219820Sjeff if (string == NULL || format == NULL) 31219820Sjeff return result; 32219820Sjeff fbuf = imalloc((int) (2 * strlen(format) + 4)); 33219820Sjeff if (fbuf == NULL) 34219820Sjeff return result; 35219820Sjeff fp = format; 36219820Sjeff tp = fbuf; 37219820Sjeff while ((*tp++ = c = *fp++) != '\0') { 38219820Sjeff if (c != '%') 39219820Sjeff continue; 40219820Sjeff if (*fp == '%') { 41219820Sjeff *tp++ = *fp++; 42219820Sjeff continue; 43219820Sjeff } 44219820Sjeff *tp++ = '*'; 45219820Sjeff if (*fp == '*') 46219820Sjeff ++fp; 47219820Sjeff while (is_digit(*fp)) 48219820Sjeff *tp++ = *fp++; 49219820Sjeff if (*fp == 'l' || *fp == 'h') 50219820Sjeff *tp++ = *fp++; 51219820Sjeff else if (*fp == '[') 52219820Sjeff do *tp++ = *fp++; 53219820Sjeff while (*fp != '\0' && *fp != ']'); 54219820Sjeff if ((*tp++ = *fp++) == '\0') 55219820Sjeff break; 56219820Sjeff } 57219820Sjeff *(tp - 1) = '%'; 58219820Sjeff *tp++ = 'c'; 59219820Sjeff *tp = '\0'; 60219820Sjeff if (sscanf(string, fbuf, &dummy) != 1) 61219820Sjeff result = (char *) format; 62219820Sjeff ifree(fbuf); 63219820Sjeff return result; 64219820Sjeff} 65219820Sjeff