diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/ape/cmd/pax/warn.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/ape/cmd/pax/warn.c')
-rwxr-xr-x | sys/src/ape/cmd/pax/warn.c | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/sys/src/ape/cmd/pax/warn.c b/sys/src/ape/cmd/pax/warn.c new file mode 100755 index 000000000..7b5daea55 --- /dev/null +++ b/sys/src/ape/cmd/pax/warn.c @@ -0,0 +1,248 @@ +/* $Source: /u/mark/src/pax/RCS/warn.c,v $ + * + * $Revision: 1.2 $ + * + * warn.c - miscellaneous user warning routines + * + * DESCRIPTION + * + * These routines provide the user with various forms of warning + * and informational messages. + * + * AUTHOR + * + * Mark H. Colburn, NAPS International (mark@jhereg.mn.org) + * + * Sponsored by The USENIX Association for public distribution. + * + * Copyright (c) 1989 Mark H. Colburn. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice is duplicated in all such + * forms and that any documentation, advertising materials, and other + * materials related to such distribution and use acknowledge that the + * software was developed * by Mark H. Colburn and sponsored by The + * USENIX Association. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * $Log: warn.c,v $ + * Revision 1.2 89/02/12 10:06:15 mark + * 1.2 release fixes + * + * Revision 1.1 88/12/23 18:02:40 mark + * Initial revision + * + */ + +#ifndef lint +static char *ident = "$Id: warn.c,v 1.2 89/02/12 10:06:15 mark Exp $"; +static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n"; +#endif /* ! lint */ + + +/* Headers */ + +#include "pax.h" + + +/* Function Prototypes */ + +#ifdef __STDC__ + +static void prsize(FILE *, OFFSET); + +#else /* !__STDC__ */ + +static void prsize(); + +#endif /* __STDC__ */ + + +/* warnarch - print an archive-related warning message and offset + * + * DESCRIPTION + * + * Present the user with an error message and an archive offset at + * which the error occured. This can be useful for diagnosing or + * fixing damaged archives. + * + * PARAMETERS + * + * char *msg - A message string to be printed for the user. + * OFFSET adjust - An adjustment which is added to the current + * archive position to tell the user exactly where + * the error occurred. + */ + +#ifdef __STDC__ + +void warnarch(char *msg, OFFSET adjust) + +#else + +void warnarch(msg, adjust) +char *msg; +OFFSET adjust; + +#endif +{ + fprintf(stderr, "%s: [offset ", myname); + prsize(stderr, total - adjust); + fprintf(stderr, "]: %s\n", msg); +} + + +/* strerror - return pointer to appropriate system error message + * + * DESCRIPTION + * + * Get an error message string which is appropriate for the setting + * of the errno variable. + * + * RETURNS + * + * Returns a pointer to a string which has an appropriate error + * message for the present value of errno. The error message + * strings are taken from sys_errlist[] where appropriate. If an + * appropriate message is not available in sys_errlist, then a + * pointer to the string "Unknown error (errno <errvalue>)" is + * returned instead. + */ + +#ifdef __STDC__ + +char *strerror(void) + +#else + +char *strerror() + +#endif +{ +#ifdef _POSIX_SOURCE +#undef strerror + return (strerror(errno)); +#else + static char msg[40]; /* used for "Unknown error" messages */ + + if (errno > 0 && errno < sys_nerr) { + return (sys_errlist[errno]); + } + sprintf(msg, "Unknown error (errno %d)", errno); + return (msg); +#endif +} + + +/* prsize - print a file offset on a file stream + * + * DESCRIPTION + * + * Prints a file offset to a specific file stream. The file offset is + * of the form "%dm+%dk+%d", where the number preceeding the "m" and + * the "k" stand for the number of Megabytes and the number of + * Kilobytes, respectivley, which have been processed so far. + * + * PARAMETERS + * + * FILE *stream - Stream which is to be used for output + * OFFSET size - Current archive position to be printed on the output + * stream in the form: "%dm+%dk+%d". + * + */ + +#ifdef __STDC__ + +static void prsize(FILE *stream, OFFSET size) + +#else + +static void prsize(stream, size) +FILE *stream; /* stream which is used for output */ +OFFSET size; /* current archive position to be printed */ + +#endif + +{ + OFFSET n; + + if (n = (size / (1024L * 1024L))) { + fprintf(stream, "%ldm+", n); + size -= n * 1024L * 1024L; + } + if (n = (size / 1024L)) { + fprintf(stream, "%ldk+", n); + size -= n * 1024L; + } + fprintf(stream, "%ld", size); +} + + +/* fatal - print fatal message and exit + * + * DESCRIPTION + * + * Fatal prints the program's name along with an error message, then + * exits the program with a non-zero return code. + * + * PARAMETERS + * + * char *why - description of reason for termination + * + * RETURNS + * + * Returns an exit code of 1 to the parent process. + */ + +#ifdef __STDC__ + +void fatal(char *why) + +#else + +void fatal(why) +char *why; /* description of reason for termination */ + +#endif +{ + fprintf(stderr, "%s: %s\n", myname, why); + exit(1); +} + + + +/* warn - print a warning message + * + * DESCRIPTION + * + * Print an error message listing the program name, the actual error + * which occurred and an informational message as to why the error + * occurred on the standard error device. The standard error is + * flushed after the error is printed to assure that the user gets + * the message in a timely fasion. + * + * PARAMETERS + * + * char *what - Pointer to string describing what failed. + * char *why - Pointer to string describing why did it failed. + */ + +#ifdef __STDC__ + +void warn(char *what, char *why) + +#else + +void warn(what, why) +char *what; /* message as to what the error was */ +char *why; /* explanation why the error occurred */ + +#endif +{ + fprintf(stderr, "%s: %s : %s\n", myname, what, why); + fflush(stderr); +} |