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 * Copyright(c) 1988 AT&T 23 * All Rights Reserved 24 * 25 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 #include "mcs.h" 29 30 static const char *msg[] = { 31 /* MALLOC_ERROR */ 32 "%s: malloc memory allocation failure.\n", 33 /* USAGE_ERROR */ 34 "%s: multiple -n only allowed for -d option.\n", 35 /* ELFVER_ERROR */ 36 "%s: elf_version() failed - libelf.a out of date.\n", 37 /* OPEN_ERROR */ 38 "%s: %s: cannot open file.\n", 39 /* LIBELF_ERROR */ 40 "%s: libelf error.\n", 41 /* OPEN_TEMP_ERROR */ 42 "%s: %s: cannot open temporary file\n", 43 /* WRITE_ERROR */ 44 "%s: %s: write system failure: %s: file not manipulated.\n", 45 /* GETARHDR_ERROR */ 46 "%s: %s: malformed archive at %ld\n", 47 /* FILE_TYPE_ERROR */ 48 "%s: %s: invalid file type\n", 49 /* NOT_MANIPULATED_ERROR */ 50 "%s: %s: file not manipulated\n", 51 /* WRN_MANIPULATED_ERROR */ 52 "%s: WARNING: %s: Cannot manipulate file.\n", 53 /* NO_SECT_TABLE_ERROR */ 54 "%s: %s: no section header table.\n", 55 /* READ_ERROR */ 56 "%s: %s: trouble reading file\n", 57 /* READ_MANI_ERROR */ 58 "%s: %s: read system failure: %s: file not manipulated.\n", 59 /* WRITE_MANI_ERROR */ 60 "%s: %s: write system failure: %s: file not manipulated.\n", 61 /* LSEEK_MANI_ERROR */ 62 "%s: %s: lseek system failure: %s: file not manipulated.\n", 63 /* SYM_TAB_AR_ERROR */ 64 "%s: WARNING: %s: symbol table deleted from archive \n", 65 /* EXEC_AR_ERROR */ 66 "execute `ar -ts %s` to restore symbol table.\n", 67 /* READ_SYS_ERROR */ 68 "%s: %s: read system failure\n", 69 /* OPEN_WRITE_ERROR */ 70 "%s: %s: can't open file for writing\n", 71 /* ACT_PRINT_ERROR */ 72 "%s: %s: Cannot print contents of a NOBITS section (%s)\n", 73 /* ACT_DELETE1_ERROR */ 74 "%s: %s: Warning: Cannot delete section (%s)\n\t\tfrom a segment.\n", 75 /* ACT_DELETE2_ERROR */ 76 "%s: %s: Warning: Cannot delete section (%s)\n" 77 "\t\tbecause its relocation section (%s) is in a segment\n", 78 /* ACT_APPEND1_ERROR */ 79 "%s: %s: Cannot append to a NOBITS section (%s)\n", 80 /* ACT_APPEND2_ERROR */ 81 "%s: %s: Warning: Cannot append to section (%s)\n\t\tin a segment\n", 82 /* ACT_COMPRESS1_ERROR */ 83 "%s: %s: Cannot compress a NOBITS section (%s)\n", 84 /* ACT_COMPRESS2_ERROR */ 85 "%s: %s: Warning: Cannot compress a section (%s)\n\t\tin a segment\n", 86 /* ACCESS_ERROR */ 87 "%s: %s: access error.\n", 88 /* WRITE_MANI_ERROR2 */ 89 "%s: /ftruncate/lseek/write system failure: %s: file may be destroyed.\n" 90 }; 91 92 void 93 error_message(int args, ...) 94 { 95 int mes = args; 96 char *message = gettext((char *)msg[mes]); 97 int flag; 98 char *sys_mes; 99 va_list ap; 100 va_start(ap, args); 101 102 flag = va_arg(ap, int); 103 sys_mes = va_arg(ap, char *); 104 105 switch (mes) { 106 case MALLOC_ERROR: 107 case USAGE_ERROR: 108 case ELFVER_ERROR: 109 case EXEC_AR_ERROR: 110 case LIBELF_ERROR: 111 /* LINTED */ 112 (void) fprintf(stderr, message, va_arg(ap, char *)); 113 break; 114 case OPEN_ERROR: 115 case ACCESS_ERROR: 116 case OPEN_TEMP_ERROR: 117 case FILE_TYPE_ERROR: 118 case NOT_MANIPULATED_ERROR: 119 case WRN_MANIPULATED_ERROR: 120 case NO_SECT_TABLE_ERROR: 121 case READ_ERROR: 122 case SYM_TAB_AR_ERROR: 123 case READ_SYS_ERROR: 124 case OPEN_WRITE_ERROR: 125 /* LINTED */ 126 (void) fprintf(stderr, message, va_arg(ap, char *), 127 va_arg(ap, char *)); 128 break; 129 case WRITE_ERROR: 130 case READ_MANI_ERROR: 131 case WRITE_MANI_ERROR: 132 case LSEEK_MANI_ERROR: 133 case ACT_PRINT_ERROR: 134 case ACT_DELETE1_ERROR: 135 case ACT_APPEND1_ERROR: 136 case ACT_APPEND2_ERROR: 137 case ACT_COMPRESS1_ERROR: 138 case ACT_COMPRESS2_ERROR: { 139 char *a = va_arg(ap, char *); 140 char *b = va_arg(ap, char *); 141 char *c = va_arg(ap, char *); 142 /* LINTED */ 143 (void) fprintf(stderr, message, a, b, c); 144 break; 145 } 146 case ACT_DELETE2_ERROR: { 147 char *a = va_arg(ap, char *); 148 char *b = va_arg(ap, char *); 149 char *c = va_arg(ap, char *); 150 char *d = va_arg(ap, char *); 151 /* LINTED */ 152 (void) fprintf(stderr, message, a, b, c, d); 153 break; 154 } 155 case GETARHDR_ERROR: { 156 char *a = va_arg(ap, char *); 157 char *b = va_arg(ap, char *); 158 long c = va_arg(ap, long); 159 /* LINTED */ 160 (void) fprintf(stderr, message, a, b, c); 161 break; 162 } 163 default: 164 (void) fprintf(stderr, "internal error: error_message(%d)\n", 165 mes); 166 mcs_exit(100); 167 } 168 169 if (flag != PLAIN_ERROR) 170 (void) fprintf(stderr, "\t%s\n", sys_mes); 171 va_end(ap); 172 } 173