xref: /freebsd/contrib/tcp_wrappers/percent_m.c (revision 14f102eacc8434a5a1f96466752578a4167140c9)
12aef6930SMark Murray  /*
22aef6930SMark Murray   * Replace %m by system error message.
32aef6930SMark Murray   *
42aef6930SMark Murray   * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
52aef6930SMark Murray   */
62aef6930SMark Murray 
72aef6930SMark Murray #ifndef lint
82aef6930SMark Murray static char sccsid[] = "@(#) percent_m.c 1.1 94/12/28 17:42:37";
92aef6930SMark Murray #endif
102aef6930SMark Murray 
112aef6930SMark Murray #include <stdio.h>
122aef6930SMark Murray #include <errno.h>
132aef6930SMark Murray #include <string.h>
142aef6930SMark Murray 
152aef6930SMark Murray #ifndef SYS_ERRLIST_DEFINED
162aef6930SMark Murray extern char *sys_errlist[];
172aef6930SMark Murray extern int sys_nerr;
182aef6930SMark Murray #endif
192aef6930SMark Murray 
202aef6930SMark Murray #include "mystdarg.h"
212aef6930SMark Murray 
percent_m(char * obuf,char * ibuf)22*14f102eaSEd Maste char   *percent_m(char *obuf, char *ibuf)
232aef6930SMark Murray {
242aef6930SMark Murray     char   *bp = obuf;
252aef6930SMark Murray     char   *cp = ibuf;
262aef6930SMark Murray 
272aef6930SMark Murray     while (*bp = *cp)
282aef6930SMark Murray 	if (*cp == '%' && cp[1] == 'm') {
292aef6930SMark Murray 	    if (errno < sys_nerr && errno > 0) {
302aef6930SMark Murray 		strcpy(bp, sys_errlist[errno]);
312aef6930SMark Murray 	    } else {
322aef6930SMark Murray 		sprintf(bp, "Unknown error %d", errno);
332aef6930SMark Murray 	    }
342aef6930SMark Murray 	    bp += strlen(bp);
352aef6930SMark Murray 	    cp += 2;
362aef6930SMark Murray 	} else {
372aef6930SMark Murray 	    bp++, cp++;
382aef6930SMark Murray 	}
392aef6930SMark Murray     return (obuf);
402aef6930SMark Murray }
41