1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. 24 */ 25 26 #include <sys/param.h> 27 #include <libintl.h> 28 #include <string.h> 29 #include <stdlib.h> 30 #include <stdarg.h> 31 #include <stdio.h> 32 #include <errno.h> 33 34 #include "utils.h" 35 36 static char PNAME_FMT[] = "%s: "; 37 static char ERRNO_FMT[] = ": %s\n"; 38 39 static char *pname; 40 41 /*PRINTFLIKE1*/ 42 void 43 warn(const char *format, ...) 44 { 45 int err = errno; 46 va_list alist; 47 if (pname != NULL) 48 (void) fprintf(stderr, gettext(PNAME_FMT), pname); 49 va_start(alist, format); 50 (void) vfprintf(stderr, format, alist); 51 va_end(alist); 52 if (strchr(format, '\n') == NULL) 53 (void) fprintf(stderr, gettext(ERRNO_FMT), strerror(err)); 54 } 55 56 /*PRINTFLIKE1*/ 57 void 58 die(char *format, ...) 59 { 60 int err = errno; 61 va_list alist; 62 63 if (pname != NULL) 64 (void) fprintf(stderr, gettext(PNAME_FMT), pname); 65 va_start(alist, format); 66 (void) vfprintf(stderr, format, alist); 67 va_end(alist); 68 if (strchr(format, '\n') == NULL) 69 (void) fprintf(stderr, gettext(ERRNO_FMT), strerror(err)); 70 exit(E_ERROR); 71 } 72 73 char * 74 setpname(char *arg0) 75 { 76 char *p = strrchr(arg0, '/'); 77 78 if (p == NULL) 79 p = arg0; 80 else 81 p++; 82 pname = p; 83 return (pname); 84 } 85