home *** CD-ROM | disk | FTP | other *** search
- /* $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
- {
- #ifdef DF_TRACE_DEBUG
- printf("DF_TRACE_DEBUG: void warnarch() in warn.c\n");
- #endif
- fprintf(stderr, "%s: [offset ", myname);
- prsize(stderr, total - adjust);
- fprintf(stderr, "]: %s\n", msg);
- }
-
-
- #ifdef STRERROR /* Xn */
- /* 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(int errno) /* Xn */
-
- #else
-
- char *strerror(errno) /* Xn */
- int errno; /* Xn */
-
- #endif
- {
- static char msg[40]; /* used for "Unknown error" messages */
-
- #ifdef DF_TRACE_DEBUG
- printf("DF_TRACE_DEBUG: char *strerror() in warn.c\n");
- #endif
- if (errno > 0 && errno < sys_nerr) {
- return (sys_errlist[errno]);
- }
- sprintf(msg, "Unknown error (errno %d)", errno);
- return (msg);
- }
- #endif /* Xn */
-
-
- /* 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;
-
- #ifdef DF_TRACE_DEBUG
- printf("DF_TRACE_DEBUG: static void prsize() in warn.c\n");
- #endif
- if ((n = (size / (1024L * 1024L))) != (OFFSET)0) { /* Xn */
- fprintf(stream, "%ldm+", n);
- size -= n * 1024L * 1024L;
- }
- if ((n = (size / 1024L)) != (OFFSET)0) { /* Xn */
- 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
- {
- #ifdef DF_TRACE_DEBUG
- printf("DF_TRACE_DEBUG: void fatal() in warn.c\n");
- #endif
- #ifdef _POSIX_SOURCE
- perror(why);
- #endif
- fprintf(stderr, "%s: %s\n", myname, why);
- #if 1 && WIN_NT
- if (ppid == (pid_t) 1 && globulation == 0)
- deglobulate();
- #endif
- 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
- {
- #ifdef DF_TRACE_DEBUG
- printf("DF_TRACE_DEBUG: void warn() in warn.c\n");
- #endif
- fprintf(stderr, "%s: %s : %s\n", myname, what, why);
- fflush(stderr);
- }
-