haiku/src/bin/error.c
François Revol c87d0ba1fb E2BIG wasn't catched by the sed scripts... added.
Some #ifdefs to allow building under BeOS.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22665 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-22 16:01:15 +00:00

342 lines
6.1 KiB
C

/*
* Copyright 2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <SupportDefs.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
extern const char *__progname;
struct error_pair {
status_t value;
const char *name;
} kErrorNames[] = {
#define E(e) { e, #e }
// generated by:
// tr ' ,=\t()+' '\n\n\n\n\n\n\n' <headers/os/support/Errors.h | grep '\(^B_\|^E[A-Z0-9]\)' | sort | uniq | awk '{ print "\tE(" $1 ")," }'
E(B_ALREADY_RUNNING),
E(B_AMBIGUOUS_APP_LAUNCH),
E(B_APP_ERROR_BASE),
E(B_BAD_ADDRESS),
E(B_BAD_DATA),
E(B_BAD_HANDLER),
E(B_BAD_IMAGE_ID),
E(B_BAD_INDEX),
E(B_BAD_MIME_SNIFFER_RULE),
E(B_BAD_PORT_ID),
E(B_BAD_REPLY),
E(B_BAD_SCRIPT_SYNTAX),
E(B_BAD_SEM_ID),
E(B_BAD_SUBSCRIBER),
E(B_BAD_TEAM_ID),
E(B_BAD_THREAD_ID),
E(B_BAD_THREAD_STATE),
E(B_BAD_TYPE),
E(B_BAD_VALUE),
E(B_BUFFER_NOT_AVAILABLE),
#ifdef B_BUFFER_OVERFLOW
E(B_BUFFER_OVERFLOW),
#endif
E(B_BUSTED_PIPE),
E(B_BUSY),
E(B_CANCELED),
E(B_CROSS_DEVICE_LINK),
E(B_DEBUGGER_ALREADY_INSTALLED),
E(B_DEVICE_ERROR_BASE),
E(B_DEVICE_FULL),
#ifdef B_DEVICE_NOT_FOUND
E(B_DEVICE_NOT_FOUND),
#endif
E(B_DEV_BAD_DRIVE_NUM),
E(B_DEV_BAD_PID),
E(B_DEV_CONFIGURATION_ERROR),
E(B_DEV_CRC_ERROR),
E(B_DEV_DATA_OVERRUN),
E(B_DEV_DATA_UNDERRUN),
E(B_DEV_DISABLED_BY_USER),
E(B_DEV_DOOR_OPEN),
E(B_DEV_FIFO_OVERRUN),
E(B_DEV_FIFO_UNDERRUN),
E(B_DEV_FORMAT_ERROR),
E(B_DEV_ID_ERROR),
E(B_DEV_INVALID_IOCTL),
E(B_DEV_INVALID_PIPE),
E(B_DEV_MEDIA_CHANGED),
E(B_DEV_MEDIA_CHANGE_REQUESTED),
E(B_DEV_MULTIPLE_ERRORS),
E(B_DEV_NOT_READY),
E(B_DEV_NO_MEDIA),
E(B_DEV_NO_MEMORY),
E(B_DEV_PENDING),
E(B_DEV_READ_ERROR),
E(B_DEV_RECALIBRATE_ERROR),
E(B_DEV_RESOURCE_CONFLICT),
E(B_DEV_SEEK_ERROR),
E(B_DEV_STALLED),
E(B_DEV_TIMEOUT),
E(B_DEV_TOO_LATE),
E(B_DEV_UNEXPECTED_PID),
E(B_DEV_UNREADABLE),
E(B_DEV_WRITE_ERROR),
E(B_DIRECTORY_NOT_EMPTY),
E(B_DONT_DO_THAT),
E(B_DUPLICATE_REPLY),
E(B_ENTRY_NOT_FOUND),
E(B_ERROR),
E(B_ERRORS_END),
E(B_FILE_ERROR),
E(B_FILE_EXISTS),
E(B_FILE_NOT_FOUND),
#ifdef B_FILE_TOO_LARGE
E(B_FILE_TOO_LARGE),
#endif
E(B_GENERAL_ERROR_BASE),
E(B_INTERFACE_ERROR_BASE),
E(B_INTERRUPTED),
E(B_IO_ERROR),
E(B_IS_A_DIRECTORY),
E(B_LAST_BUFFER_ERROR),
E(B_LAUNCH_FAILED),
E(B_LAUNCH_FAILED_APP_IN_TRASH),
E(B_LAUNCH_FAILED_APP_NOT_FOUND),
E(B_LAUNCH_FAILED_EXECUTABLE),
E(B_LAUNCH_FAILED_FILES_APP_NOT_FOUND),
E(B_LAUNCH_FAILED_NO_PREFERRED_APP),
E(B_LAUNCH_FAILED_NO_RESOLVE_LINK),
E(B_LINK_LIMIT),
E(B_MAIL_ACCESS_ERROR),
E(B_MAIL_ERROR_BASE),
E(B_MAIL_INVALID_MAIL),
E(B_MAIL_NO_DAEMON),
E(B_MAIL_NO_RECIPIENT),
E(B_MAIL_UNKNOWN_FIELD),
E(B_MAIL_UNKNOWN_HOST),
E(B_MAIL_UNKNOWN_USER),
E(B_MAIL_WRONG_PASSWORD),
E(B_MEDIA_ERROR_BASE),
E(B_MESSAGE_TO_SELF),
E(B_MIDI_ERROR_BASE),
E(B_MISMATCHED_VALUES),
E(B_MISSING_LIBRARY),
E(B_MISSING_SYMBOL),
E(B_NAME_IN_USE),
E(B_NAME_NOT_FOUND),
E(B_NAME_TOO_LONG),
E(B_NOT_ALLOWED),
E(B_NOT_AN_EXECUTABLE),
E(B_NOT_A_DIRECTORY),
E(B_NOT_A_MESSAGE),
#ifdef B_NOT_SUPPORTED
E(B_NOT_SUPPORTED),
#endif
E(B_NO_ERROR),
E(B_NO_INIT),
E(B_NO_MEMORY),
E(B_NO_MORE_FDS),
E(B_NO_MORE_PORTS),
E(B_NO_MORE_SEMS),
E(B_NO_MORE_TEAMS),
E(B_NO_MORE_THREADS),
E(B_NO_PRINT_SERVER),
E(B_OK),
E(B_OS_ERROR_BASE),
E(B_PARTITION_TOO_SMALL),
E(B_PERMISSION_DENIED),
E(B_POSIX_ERROR_BASE),
E(B_PRINT_ERROR_BASE),
E(B_READ_ONLY_DEVICE),
E(B_RESOURCE_NOT_FOUND),
E(B_RESOURCE_UNAVAILABLE),
#ifdef B_RESULT_NOT_REPRESENTABLE
E(B_RESULT_NOT_REPRESENTABLE),
#endif
E(B_SERVER_NOT_FOUND),
#ifdef B_SHUTDOWN_CANCELLED
E(B_SHUTDOWN_CANCELLED),
#endif
#ifdef B_SHUTTING_DOWN
E(B_SHUTTING_DOWN),
#endif
E(B_STORAGE_ERROR_BASE),
E(B_STREAM_NOT_FOUND),
E(B_SUBSCRIBER_NOT_ENTERED),
E(B_TIMED_OUT),
#ifdef B_TOO_MANY_ARGS
E(B_TOO_MANY_ARGS),
#endif
E(B_TRANSLATION_ERROR_BASE),
E(B_UNKNOWN_MIME_TYPE),
E(B_UNSUPPORTED),
E(B_WOULD_BLOCK),
E(E2BIG),
E(EACCES),
E(EADDRINUSE),
E(EADDRNOTAVAIL),
E(EAFNOSUPPORT),
E(EAGAIN),
E(EALREADY),
E(EBADF),
#ifdef EBADMSG
E(EBADMSG),
#endif
E(EBUSY),
#ifdef ECANCELED
E(ECANCELED),
#endif
E(ECHILD),
E(ECONNABORTED),
E(ECONNREFUSED),
E(ECONNRESET),
E(EDEADLK),
#ifdef EDESTADDRREQ
E(EDESTADDRREQ),
#endif
E(EDOM),
#ifdef EDQUOT
E(EDQUOT),
#endif
E(EEXIST),
E(EFAULT),
E(EFBIG),
E(EFPOS),
#ifdef EHOSTDOWN
E(EHOSTDOWN),
#endif
E(EHOSTUNREACH),
#ifdef EIDRM
E(EIDRM),
#endif
E(EILSEQ),
E(EINPROGRESS),
E(EINTR),
E(EINVAL),
E(EIO),
E(EISCONN),
E(EISDIR),
E(ELOOP),
E(EMFILE),
E(EMLINK),
E(EMSGSIZE),
#ifdef EMULTIHOP
E(EMULTIHOP),
#endif
E(ENAMETOOLONG),
E(ENETDOWN),
E(ENETRESET),
E(ENETUNREACH),
E(ENFILE),
E(ENOBUFS),
#ifdef ENODATA
E(ENODATA),
#endif
E(ENODEV),
E(ENOENT),
E(ENOEXEC),
E(ENOLCK),
#ifdef ENOLINK
E(ENOLINK),
#endif
E(ENOMEM),
E(ENOMSG),
E(ENOPROTOOPT),
E(ENOSPC),
#ifdef ENOSR
E(ENOSR),
#endif
#ifdef ENOSTR
E(ENOSTR),
#endif
E(ENOSYS),
E(ENOTCONN),
E(ENOTDIR),
E(ENOTEMPTY),
E(ENOTSOCK),
#ifdef ENOTSUP
E(ENOTSUP),
#endif
E(ENOTTY),
E(ENXIO),
E(EOPNOTSUPP),
E(EOVERFLOW),
E(EPERM),
E(EPFNOSUPPORT),
E(EPIPE),
#ifdef EPROTO
E(EPROTO),
#endif
E(EPROTONOSUPPORT),
E(EPROTOTYPE),
E(ERANGE),
E(EROFS),
E(ESHUTDOWN),
E(ESIGPARM),
E(ESPIPE),
E(ESRCH),
E(ESTALE),
#ifdef ETIME
E(ETIME),
#endif
E(ETIMEDOUT),
#ifdef ETXTBSY
E(ETXTBSY),
#endif
E(EWOULDBLOCK),
E(EXDEV),
{ 0, NULL }
};
static void
usage(void)
{
fprintf(stderr, "usage: %s <error number>\n"
"Prints clear text error messages for given error numbers.\n", __progname);
exit(-1);
}
static void
print_error(char *number)
{
char *end;
int32 error = (int32)strtoll(number, &end, 0);
// strtol() cuts off hex numbers that have the highest bit set
if (end[0]) {
// not a number, check names
int i;
struct error_pair *p = kErrorNames;
while (p->name && strcmp(p->name, number))
p++;
if (!p->name) {
fprintf(stderr, "%s: invalid number (%s)\n", __progname, number);
exit(1);
}
error = p->value;
}
printf("0x%lx: %s\n", error, strerror(error));
}
int
main(int argc, char *argv[])
{
int32 i;
if (argc < 2)
usage();
for (i = 1; i < argc; i++) {
print_error(argv[i]);
}
return 0;
}