xref: /illumos-gate/usr/src/cmd/zic/scheck.c (revision 2a8bcb4e)
1*f430f59aSrobbin /* static char	elsieid[] = "@(#)scheck.c	8.17"; */
27c478bd9Sstevel@tonic-gate 
37c478bd9Sstevel@tonic-gate /*LINTLIBRARY*/
47c478bd9Sstevel@tonic-gate 
57c478bd9Sstevel@tonic-gate #include "private.h"
67c478bd9Sstevel@tonic-gate 
7*f430f59aSrobbin const char *
scheck(string,format)87c478bd9Sstevel@tonic-gate scheck(string, format)
97c478bd9Sstevel@tonic-gate const char * const	string;
10*f430f59aSrobbin const char * const	format;
117c478bd9Sstevel@tonic-gate {
1280868c53Srobbin 	register char		*fbuf;
1380868c53Srobbin 	register const char	*fp;
1480868c53Srobbin 	register char		*tp;
157c478bd9Sstevel@tonic-gate 	register int		c;
16*f430f59aSrobbin 	register const char	*result;
177c478bd9Sstevel@tonic-gate 	char			dummy;
187c478bd9Sstevel@tonic-gate 
19*f430f59aSrobbin 	result = "";
207c478bd9Sstevel@tonic-gate 	if (string == NULL || format == NULL)
217c478bd9Sstevel@tonic-gate 		return (result);
2280868c53Srobbin 	fbuf = imalloc((int)(2 * strlen(format) + 4));
237c478bd9Sstevel@tonic-gate 	if (fbuf == NULL)
247c478bd9Sstevel@tonic-gate 		return (result);
257c478bd9Sstevel@tonic-gate 	fp = format;
267c478bd9Sstevel@tonic-gate 	tp = fbuf;
277c478bd9Sstevel@tonic-gate 	while ((*tp++ = c = *fp++) != '\0') {
287c478bd9Sstevel@tonic-gate 		if (c != '%')
297c478bd9Sstevel@tonic-gate 			continue;
307c478bd9Sstevel@tonic-gate 		if (*fp == '%') {
317c478bd9Sstevel@tonic-gate 			*tp++ = *fp++;
327c478bd9Sstevel@tonic-gate 			continue;
337c478bd9Sstevel@tonic-gate 		}
347c478bd9Sstevel@tonic-gate 		*tp++ = '*';
357c478bd9Sstevel@tonic-gate 		if (*fp == '*')
367c478bd9Sstevel@tonic-gate 			++fp;
377c478bd9Sstevel@tonic-gate 		while (is_digit(*fp))
387c478bd9Sstevel@tonic-gate 			*tp++ = *fp++;
397c478bd9Sstevel@tonic-gate 		if (*fp == 'l' || *fp == 'h')
407c478bd9Sstevel@tonic-gate 			*tp++ = *fp++;
417c478bd9Sstevel@tonic-gate 		else if (*fp == '[')
427c478bd9Sstevel@tonic-gate 			do *tp++ = *fp++;
437c478bd9Sstevel@tonic-gate 				while (*fp != '\0' && *fp != ']');
447c478bd9Sstevel@tonic-gate 		if ((*tp++ = *fp++) == '\0')
457c478bd9Sstevel@tonic-gate 			break;
467c478bd9Sstevel@tonic-gate 	}
477c478bd9Sstevel@tonic-gate 	*(tp - 1) = '%';
487c478bd9Sstevel@tonic-gate 	*tp++ = 'c';
497c478bd9Sstevel@tonic-gate 	*tp = '\0';
507c478bd9Sstevel@tonic-gate 	if (sscanf(string, fbuf, &dummy) != 1)
5180868c53Srobbin 		result = (char *)format;
527c478bd9Sstevel@tonic-gate 	ifree(fbuf);
537c478bd9Sstevel@tonic-gate 	return (result);
547c478bd9Sstevel@tonic-gate }
55