util.c revision 302408
1133819Stjr/*- 2133819Stjr * Copyright (c) 2003-2007 Tim Kientzle 3133819Stjr * All rights reserved. 4133819Stjr * 5133819Stjr * Redistribution and use in source and binary forms, with or without 6163761Snetchild * modification, are permitted provided that the following conditions 7133819Stjr * are met: 8133819Stjr * 1. Redistributions of source code must retain the above copyright 9133819Stjr * notice, this list of conditions and the following disclaimer 10133819Stjr * in this position and unchanged. 11133819Stjr * 2. Redistributions in binary form must reproduce the above copyright 12133819Stjr * notice, this list of conditions and the following disclaimer in the 13133819Stjr * documentation and/or other materials provided with the distribution. 14164199Sru * 15133819Stjr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16133819Stjr * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17161330Sjhb * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18161330Sjhb * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19133819Stjr * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20133819Stjr * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21133819Stjr * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22133819Stjr * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23133819Stjr * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24133819Stjr * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25133819Stjr */ 26133819Stjr 27133819Stjr#include <sys/cdefs.h> 28133819Stjr__FBSDID("$FreeBSD: stable/11/usr.bin/ar/util.c 200462 2009-12-13 03:14:06Z delphij $"); 29133819Stjr 30133819Stjr#include <sys/queue.h> 31133819Stjr#include <sys/types.h> 32133819Stjr#include <errno.h> 33133819Stjr#include <stdarg.h> 34143198Ssobomax#include <stdio.h> 35133819Stjr#include <stdlib.h> 36133819Stjr#include <string.h> 37133819Stjr 38133819Stjr#include "ar.h" 39133819Stjr 40133819Stjrstatic void bsdar_vwarnc(struct bsdar *, int code, 41133819Stjr const char *fmt, va_list ap); 42133819Stjrstatic void bsdar_verrc(struct bsdar *bsdar, int code, 43133819Stjr const char *fmt, va_list ap); 44133819Stjr 45133819Stjrstatic void 46133819Stjrbsdar_vwarnc(struct bsdar *bsdar, int code, const char *fmt, va_list ap) 47133819Stjr{ 48133819Stjr 49133819Stjr fprintf(stderr, "%s: warning: ", bsdar->progname); 50133819Stjr vfprintf(stderr, fmt, ap); 51133819Stjr if (code != 0) 52133819Stjr fprintf(stderr, ": %s", strerror(code)); 53133819Stjr fprintf(stderr, "\n"); 54133819Stjr} 55133819Stjr 56133819Stjrvoid 57133819Stjrbsdar_warnc(struct bsdar *bsdar, int code, const char *fmt, ...) 58133819Stjr{ 59133819Stjr va_list ap; 60133819Stjr 61133819Stjr va_start(ap, fmt); 62133819Stjr bsdar_vwarnc(bsdar, code, fmt, ap); 63133819Stjr va_end(ap); 64133819Stjr} 65133819Stjr 66133819Stjrstatic void 67133819Stjrbsdar_verrc(struct bsdar *bsdar, int code, const char *fmt, va_list ap) 68133819Stjr{ 69133819Stjr 70133819Stjr fprintf(stderr, "%s: fatal: ", bsdar->progname); 71133819Stjr vfprintf(stderr, fmt, ap); 72133819Stjr if (code != 0) 73133819Stjr fprintf(stderr, ": %s", strerror(code)); 74133819Stjr fprintf(stderr, "\n"); 75133819Stjr} 76133819Stjr 77133819Stjrvoid 78133819Stjrbsdar_errc(struct bsdar *bsdar, int eval, int code, const char *fmt, ...) 79133819Stjr{ 80133819Stjr va_list ap; 81133819Stjr 82133819Stjr va_start(ap, fmt); 83133819Stjr bsdar_verrc(bsdar, code, fmt, ap); 84156919Snetchild va_end(ap); 85156919Snetchild exit(eval); 86156919Snetchild} 87156919Snetchild