From a5b1bafc0b3655eb4a7854323dfb1da4cc7da1e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 16 Feb 2005 04:15:14 +0000 Subject: [PATCH] New "error" command; unlike the previous, this should work :) Added it to the build. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11389 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/bin/Jamfile | 1 + src/apps/bin/error.c | 98 +++++++++++++++++++------------------------- 2 files changed, 44 insertions(+), 55 deletions(-) diff --git a/src/apps/bin/Jamfile b/src/apps/bin/Jamfile index 469638eefa..a5e5b5a545 100644 --- a/src/apps/bin/Jamfile +++ b/src/apps/bin/Jamfile @@ -13,6 +13,7 @@ StdBinCommands driveinfo.c # echo.c eject.c + error.c finddir.c hd.c ideinfo.c diff --git a/src/apps/bin/error.c b/src/apps/bin/error.c index 1c1b8d0a67..b314b53e33 100644 --- a/src/apps/bin/error.c +++ b/src/apps/bin/error.c @@ -1,67 +1,55 @@ -// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ -// -// Copyright (c) 2001-2003, OpenBeOS -// -// This software is part of the OpenBeOS distribution and is covered -// by the OpenBeOS license. -// -// -// File: error.c -// Author: Daniel Reinhold (danielre@users.sf.net) -// Description: prints error message text for OS error codes -// -// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ +/* + * Copyright 2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + */ + + +#include -#include #include +#include #include -#include -#include -void print_error(char *); +extern const char *__progname; + + +static void +usage(void) +{ + fprintf(stderr, "usage: %s \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]) { + fprintf(stderr, "%s: invalid number (%s)\n", __progname, number); + exit(1); + } + + printf("0x%lx: %s\n", error, strerror(error)); +} int main(int argc, char *argv[]) { - if (argc != 2) - printf("Usage: error number\n" - "Prints the message text for OS error codes. " - "The error number can be in decimal, hex or octal.\n"); - else - print_error(argv[1]); - + int32 i; + + if (argc < 2) + usage(); + + for (i = 1; i < argc; i++) { + print_error(argv[i]); + } + return 0; } - - -void -print_error(char *str) -{ - uint32 err; - int base = 10; - char *end; - - if (str[0] == '0') { - if (tolower(str[1]) == 'x') - base = 16; - else - base = 8; - } - - errno = 0; - err = strtoul(str, &end, base); - - if (errno) { - fprintf(stderr, "%s: %s\n", str, strerror(errno)); - exit(1); - } - - if (*end) { - fprintf(stderr, "%s: invalid number\n", str); - exit(1); - } - - printf("0x%x: %s\n", err, strerror(err)); -}