#include "mcs.h"
static const char *msg[] = {
"%s: malloc memory allocation failure.\n",
"%s: multiple -n only allowed for -d option.\n",
"%s: elf_version() failed - libelf.a out of date.\n",
"%s: %s: cannot open file.\n",
"%s: libelf error.\n",
"%s: %s: cannot open temporary file\n",
"%s: %s: write system failure: %s: file not manipulated.\n",
"%s: %s: malformed archive at %ld\n",
"%s: %s: invalid file type\n",
"%s: %s: file not manipulated\n",
"%s: WARNING: %s: Cannot manipulate file.\n",
"%s: %s: no section header table.\n",
"%s: %s: trouble reading file\n",
"%s: %s: read system failure: %s: file not manipulated.\n",
"%s: %s: write system failure: %s: file not manipulated.\n",
"%s: %s: lseek system failure: %s: file not manipulated.\n",
"%s: WARNING: %s: symbol table deleted from archive \n",
"execute `ar -ts %s` to restore symbol table.\n",
"%s: %s: read system failure\n",
"%s: %s: can't open file for writing\n",
"%s: %s: Cannot print contents of a NOBITS section (%s)\n",
"%s: %s: Warning: Cannot delete section (%s)\n\t\tfrom a segment.\n",
"%s: %s: Warning: Cannot delete section (%s)\n"
"\t\tbecause its relocation section (%s) is in a segment\n",
"%s: %s: Cannot append to a NOBITS section (%s)\n",
"%s: %s: Warning: Cannot append to section (%s)\n\t\tin a segment\n",
"%s: %s: Cannot compress a NOBITS section (%s)\n",
"%s: %s: Warning: Cannot compress a section (%s)\n\t\tin a segment\n",
"%s: %s: access error.\n",
"%s: /ftruncate/lseek/write system failure: %s: file may be destroyed.\n"
};
void
error_message(int args, ...)
{
int mes = args;
char *message = gettext((char *)msg[mes]);
int flag;
char *sys_mes;
va_list ap;
va_start(ap, args);
flag = va_arg(ap, int);
sys_mes = va_arg(ap, char *);
switch (mes) {
case MALLOC_ERROR:
case USAGE_ERROR:
case ELFVER_ERROR:
case EXEC_AR_ERROR:
case LIBELF_ERROR:
(void) fprintf(stderr, message, va_arg(ap, char *));
break;
case OPEN_ERROR:
case ACCESS_ERROR:
case OPEN_TEMP_ERROR:
case FILE_TYPE_ERROR:
case NOT_MANIPULATED_ERROR:
case WRN_MANIPULATED_ERROR:
case NO_SECT_TABLE_ERROR:
case READ_ERROR:
case SYM_TAB_AR_ERROR:
case READ_SYS_ERROR:
case OPEN_WRITE_ERROR:
(void) fprintf(stderr, message, va_arg(ap, char *),
va_arg(ap, char *));
break;
case WRITE_ERROR:
case READ_MANI_ERROR:
case WRITE_MANI_ERROR:
case LSEEK_MANI_ERROR:
case ACT_PRINT_ERROR:
case ACT_DELETE1_ERROR:
case ACT_APPEND1_ERROR:
case ACT_APPEND2_ERROR:
case ACT_COMPRESS1_ERROR:
case ACT_COMPRESS2_ERROR: {
char *a = va_arg(ap, char *);
char *b = va_arg(ap, char *);
char *c = va_arg(ap, char *);
(void) fprintf(stderr, message, a, b, c);
break;
}
case ACT_DELETE2_ERROR: {
char *a = va_arg(ap, char *);
char *b = va_arg(ap, char *);
char *c = va_arg(ap, char *);
char *d = va_arg(ap, char *);
(void) fprintf(stderr, message, a, b, c, d);
break;
}
case GETARHDR_ERROR: {
char *a = va_arg(ap, char *);
char *b = va_arg(ap, char *);
long c = va_arg(ap, long);
(void) fprintf(stderr, message, a, b, c);
break;
}
default:
(void) fprintf(stderr, "internal error: error_message(%d)\n",
mes);
mcs_exit(100);
}
if (flag != PLAIN_ERROR)
(void) fprintf(stderr, "\t%s\n", sys_mes);
va_end(ap);
}