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