home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / std_unix / pax / 2 / warn.c < prev   
C/C++ Source or Header  |  1989-01-07  |  5KB  |  241 lines

  1. /* $Source: /u/mark/src/pax/RCS/warn.c,v $
  2.  *
  3.  * $Revision: 1.1 $
  4.  *
  5.  * warn.c - miscellaneous user warning routines 
  6.  *
  7.  * DESCRIPTION
  8.  *
  9.  *    These routines provide the user with various forms of warning
  10.  *    and informational messages.
  11.  *
  12.  * AUTHOR
  13.  *
  14.  *     Mark H. Colburn, NAPS International (mark@jhereg.mn.org)
  15.  *
  16.  * Sponsored by The USENIX Association for public distribution. 
  17.  *
  18.  * Copyright (c) 1989 Mark H. Colburn.
  19.  * All rights reserved.
  20.  *
  21.  * Redistribution and use in source and binary forms are permitted
  22.  * provided that the above copyright notice is duplicated in all such 
  23.  * forms and that any documentation, advertising materials, and other 
  24.  * materials related to such distribution and use acknowledge that the 
  25.  * software was developed * by Mark H. Colburn and sponsored by The 
  26.  * USENIX Association. 
  27.  *
  28.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  29.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  30.  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  31.  *
  32.  * $Log:    warn.c,v $
  33.  * Revision 1.1  88/12/23  18:02:40  mark
  34.  * Initial revision
  35.  * 
  36.  */
  37.  
  38. #ifndef lint
  39. static char *ident = "$Id: warn.c,v 1.1 88/12/23 18:02:40 mark Rel $";
  40. static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  41. #endif /* ! lint */
  42.  
  43.  
  44. /* Headers */
  45.  
  46. #include "pax.h"
  47.  
  48.  
  49. /* Function Prototypes */
  50.  
  51. #ifdef __STDC__
  52.  
  53. static void prsize(FILE *, OFFSET);
  54.  
  55. #else /* !__STDC__ */
  56.  
  57. static void prsize();
  58.  
  59. #endif /* __STDC__ */
  60.  
  61.  
  62. /* warnarch - print an archive-related warning message and offset
  63.  *
  64.  * DESCRIPTION
  65.  *
  66.  *    Present the user with an error message and an archive offset at
  67.  *    which the error occured.   This can be useful for diagnosing or
  68.  *    fixing damaged archives.
  69.  *
  70.  * PARAMETERS
  71.  *
  72.  *    char     *msg    - A message string to be printed for the user.
  73.  *    OFFSET     adjust    - An adjustment which is added to the current 
  74.  *              archive position to tell the user exactly where 
  75.  *              the error occurred.
  76.  */
  77.  
  78. #ifdef __STDC__
  79.  
  80. void warnarch(char *msg, OFFSET adjust)
  81.  
  82. #else 
  83.  
  84. void warnarch(msg, adjust)
  85. char           *msg;
  86. OFFSET          adjust;
  87.  
  88. #endif
  89. {
  90.     fprintf(stderr, "%s: [offset ", myname);
  91.     prsize(stderr, total - adjust);
  92.     fprintf(stderr, "]: %s\n", msg);
  93. }
  94.  
  95.  
  96. /* syserr - return pointer to appropriate system error message
  97.  *
  98.  * DESCRIPTION
  99.  *
  100.  *    Get an error message string which is appropriate for the setting
  101.  *    of the errno variable.
  102.  *
  103.  * RETURNS
  104.  *
  105.  *    Returns a pointer to a string which has an appropriate error
  106.  *    message for the present value of errno.  The error message
  107.  *    strings are taken from sys_errlist[] where appropriate.  If an
  108.  *    appropriate message is not available in sys_errlist, then a
  109.  *    pointer to the string "Unknown error (errno <errvalue>)" is 
  110.  *    returned instead.
  111.  */
  112.  
  113. #ifdef __STDC__
  114.  
  115. char *syserr(void)
  116.  
  117. #else
  118.  
  119. char *syserr()
  120.  
  121. #endif
  122. {
  123.     static char     msg[40];        /* used for "Unknown error" messages */
  124.  
  125.     if (errno > 0 && errno < sys_nerr) {
  126.     return (sys_errlist[errno]);
  127.     }
  128.     sprintf(msg, "Unknown error (errno %d)", errno);
  129.     return (msg);
  130. }
  131.  
  132.  
  133. /* prsize - print a file offset on a file stream
  134.  *
  135.  * DESCRIPTION
  136.  *
  137.  *    Prints a file offset to a specific file stream.  The file offset is
  138.  *    of the form "%dm+%dk+%d", where the number preceeding the "m" and
  139.  *    the "k" stand for the number of Megabytes and the number of
  140.  *    Kilobytes, respectivley, which have been processed so far.
  141.  *
  142.  * PARAMETERS
  143.  *
  144.  *    FILE  *stream    - Stream which is to be used for output 
  145.  *    OFFSET size    - Current archive position to be printed on the output 
  146.  *              stream in the form: "%dm+%dk+%d".
  147.  *
  148.  */
  149.  
  150. #ifdef __STDC__
  151.  
  152. static void prsize(FILE *stream, OFFSET size)
  153.  
  154. #else
  155.  
  156. static void prsize(stream, size)
  157. FILE           *stream;        /* stream which is used for output */
  158. OFFSET          size;        /* current archive position to be printed */
  159.  
  160. #endif
  161.  
  162. {
  163.     OFFSET          n;
  164.  
  165.     if (n = (size / (1024 * 1024))) {
  166.     fprintf(stream, "%ldm+", n);
  167.     size -= n * 1024 * 1024;
  168.     }
  169.     if (n = (size / 1024)) {
  170.     fprintf(stream, "%ldk+", n);
  171.     size -= n * 1024;
  172.     }
  173.     fprintf(stream, "%ld", size);
  174. }
  175.  
  176.  
  177. /* fatal - print fatal message and exit
  178.  *
  179.  * DESCRIPTION
  180.  *
  181.  *    Fatal prints the program's name along with an error message, then
  182.  *    exits the program with a non-zero return code.
  183.  *
  184.  * PARAMETERS
  185.  *
  186.  *    char     *why    - description of reason for termination 
  187.  *        
  188.  * RETURNS
  189.  *
  190.  *    Returns an exit code of 1 to the parent process.
  191.  */
  192.  
  193. #ifdef __STDC__
  194.  
  195. void fatal(char *why)
  196.  
  197. #else
  198.  
  199. void fatal(why)
  200. char           *why;        /* description of reason for termination */
  201.  
  202. #endif
  203. {
  204.     fprintf(stderr, "%s: %s\n", myname, why);
  205.     exit(1);
  206. }
  207.  
  208.  
  209.  
  210. /* warn - print a warning message
  211.  *
  212.  * DESCRIPTION
  213.  *
  214.  *    Print an error message listing the program name, the actual error
  215.  *    which occurred and an informational message as to why the error
  216.  *    occurred on the standard error device.  The standard error is
  217.  *    flushed after the error is printed to assure that the user gets
  218.  *    the message in a timely fasion.
  219.  *
  220.  * PARAMETERS
  221.  *
  222.  *    char *what    - Pointer to string describing what failed.
  223.  *    char *why    - Pointer to string describing why did it failed.
  224.  */
  225.  
  226. #ifdef __STDC__
  227.  
  228. void warn(char *what, char *why)
  229.  
  230. #else
  231.  
  232. void warn(what, why)
  233. char           *what;        /* message as to what the error was */
  234. char           *why;        /* explanation why the error occurred */
  235.  
  236. #endif
  237. {
  238.     fprintf(stderr, "%s: %s : %s\n", myname, what, why);
  239.     fflush(stderr);
  240. }
  241.