1192625Sedwin/* 2192625Sedwin** This file is in the public domain, so clarified as of 3192625Sedwin** 2006-07-17 by Arthur David Olson. 4192625Sedwin*/ 5192625Sedwin 62702Swollman#ifndef lint 72702Swollman#ifndef NOID 8192625Sedwinstatic const char elsieid[] = "@(#)scheck.c 8.19"; 92702Swollman#endif /* !defined lint */ 102702Swollman#endif /* !defined NOID */ 112702Swollman 1230829Scharnier#ifndef lint 1330829Scharnierstatic const char rcsid[] = 1450479Speter "$FreeBSD$"; 1530829Scharnier#endif /* not lint */ 1630829Scharnier 172702Swollman/*LINTLIBRARY*/ 182702Swollman 192702Swollman#include "private.h" 202702Swollman 21192625Sedwinconst char * 222702Swollmanscheck(string, format) 232702Swollmanconst char * const string; 2442997Swollmanconst char * const format; 252702Swollman{ 262702Swollman register char * fbuf; 272702Swollman register const char * fp; 282702Swollman register char * tp; 292702Swollman register int c; 30192625Sedwin register const char * result; 312702Swollman char dummy; 322702Swollman 33192625Sedwin result = ""; 342702Swollman if (string == NULL || format == NULL) 352702Swollman return result; 3617211Swollman fbuf = imalloc((int) (2 * strlen(format) + 4)); 372702Swollman if (fbuf == NULL) 382702Swollman return result; 392702Swollman fp = format; 402702Swollman tp = fbuf; 412702Swollman while ((*tp++ = c = *fp++) != '\0') { 422702Swollman if (c != '%') 432702Swollman continue; 442702Swollman if (*fp == '%') { 452702Swollman *tp++ = *fp++; 462702Swollman continue; 472702Swollman } 482702Swollman *tp++ = '*'; 492702Swollman if (*fp == '*') 502702Swollman ++fp; 5117211Swollman while (is_digit(*fp)) 522702Swollman *tp++ = *fp++; 532702Swollman if (*fp == 'l' || *fp == 'h') 542702Swollman *tp++ = *fp++; 552702Swollman else if (*fp == '[') 562702Swollman do *tp++ = *fp++; 572702Swollman while (*fp != '\0' && *fp != ']'); 582702Swollman if ((*tp++ = *fp++) == '\0') 592702Swollman break; 602702Swollman } 612702Swollman *(tp - 1) = '%'; 622702Swollman *tp++ = 'c'; 632702Swollman *tp = '\0'; 642702Swollman if (sscanf(string, fbuf, &dummy) != 1) 6579858Sdd result = (char *) format; 662702Swollman ifree(fbuf); 672702Swollman return result; 682702Swollman} 69