hbase

heirloom base
git clone git://git.2f30.org/hbase
Log | Files | Refs | README

vpfmt.c (2201B)


      1 /*
      2  * Copyright (c) 2003 Gunnar Ritter
      3  *
      4  * This software is provided 'as-is', without any express or implied
      5  * warranty. In no event will the authors be held liable for any damages
      6  * arising from the use of this software.
      7  *
      8  * Permission is granted to anyone to use this software for any purpose,
      9  * including commercial applications, and to alter it and redistribute
     10  * it freely, subject to the following restrictions:
     11  *
     12  * 1. The origin of this software must not be misrepresented; you must not
     13  *    claim that you wrote the original software. If you use this software
     14  *    in a product, an acknowledgment in the product documentation would be
     15  *    appreciated but is not required.
     16  *
     17  * 2. Altered source versions must be plainly marked as such, and must not be
     18  *    misrepresented as being the original software.
     19  *
     20  * 3. This notice may not be removed or altered from any source distribution.
     21  */
     22 /*	Sccsid @(#)vpfmt.c	1.2 (gritter) 9/21/03	*/
     23 
     24 #include <stdio.h>
     25 #include <stdarg.h>
     26 
     27 #include "pfmt.h"
     28 
     29 extern char	*pfmt_label__;
     30 
     31 /*
     32  * Strip catalog and msgnum from s, but only if they actually appear.
     33  */
     34 static const char *
     35 begin(const char *s, long flags)
     36 {
     37 	const char	*sp;
     38 
     39 	if (flags & MM_NOGET)
     40 		return s;
     41 	sp = s;
     42 	if (*sp && *sp != ':') {
     43 		sp++;
     44 		while (*sp && *sp != '/' && *sp != ':' && sp - s < 14)
     45 			sp++;
     46 	}
     47 	if (*sp++ != ':')
     48 		return s;
     49 	while (*sp >= '0' && *sp <= '9')
     50 		sp++;
     51 	if (*sp++ != ':' || *sp == '\0')
     52 		return s;
     53 	return sp;
     54 }
     55 
     56 int
     57 vpfmt(FILE *stream, long flags, const char *fmt, va_list ap)
     58 {
     59 	int	n = 0;
     60 	const char	*severity = NULL;
     61 	char	sevbuf[25];
     62 
     63 	if ((flags&MM_NOSTD) == 0) {
     64 		if (flags & MM_ACTION)
     65 			severity = "TO FIX";
     66 		else switch (flags & 0377) {
     67 		case MM_HALT:
     68 			severity = "HALT";
     69 			break;
     70 		case MM_WARNING:
     71 			severity = "WARNING";
     72 			break;
     73 		case MM_INFO:
     74 			severity = "INFO";
     75 			break;
     76 		case MM_ERROR:
     77 			severity = "ERROR";
     78 			break;
     79 		default:
     80 			snprintf(sevbuf, sizeof sevbuf, "SEV=%ld", flags&0377);
     81 			severity = sevbuf;
     82 		}
     83 		if (pfmt_label__)
     84 			n = fprintf(stream, "%s: ", pfmt_label__);
     85 		if (severity)
     86 			n += fprintf(stream, "%s: ", severity);
     87 	}
     88 	n += vfprintf(stream, begin(fmt, flags), ap);
     89 	return n;
     90 }