home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / crt / src / perror.c < prev    next >
C/C++ Source or Header  |  1998-06-17  |  2KB  |  79 lines

  1. /***
  2. *perror.c - print system error message
  3. *
  4. *       Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
  5. *
  6. *Purpose:
  7. *       defines perror() - print system error message
  8. *       System error message are indexed by errno; conforms to XENIX
  9. *       standard, with much compatability with 1983 uniforum draft standard.
  10. *
  11. *******************************************************************************/
  12.  
  13. #include <cruntime.h>
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include <syserr.h>
  18. #include <mtdll.h>
  19. #include <io.h>
  20.  
  21. #if defined (_M_M68K) || defined (_M_MPPC)
  22. #include <fcntl.h>
  23. #include <share.h>
  24. #endif  /* defined (_M_M68K) || defined (_M_MPPC) */
  25.  
  26. /***
  27. *void perror(message) - print system error message
  28. *
  29. *Purpose:
  30. *       prints user's error message, then follows it with ": ", then the system
  31. *       error message, then a newline.  All output goes to stderr.  If user's
  32. *       message is NULL or a null string, only the system error message is
  33. *       printer.  If errno is weird, prints "Unknown error".
  34. *
  35. *Entry:
  36. *       const char *message - users message to prefix system error message
  37. *
  38. *Exit:
  39. *       Prints message; no return value.
  40. *
  41. *Exceptions:
  42. *
  43. *******************************************************************************/
  44.  
  45. void __cdecl perror (
  46.         REG1 const char *message
  47.         )
  48. {
  49.  
  50. #if defined (_WIN32)
  51.         REG2 int fh = 2;
  52.  
  53.         _lock_fh(fh);       /* acquire file handle lock */
  54. #endif  /* defined (_WIN32) */
  55.  
  56.         if (message && *message)
  57.         {
  58.  
  59. #if defined (_WIN32)
  60.             _write_lk(fh,(char *)message,strlen(message));
  61.             _write_lk(fh,": ",2);
  62. #else  /* defined (_WIN32) */
  63.             fprintf(stderr,"%s", (char *)message);
  64.             fprintf(stderr,": ");
  65. #endif  /* defined (_WIN32) */
  66.         }
  67.  
  68.         message = _sys_err_msg( errno );
  69.  
  70. #if defined (_WIN32)
  71.         _write_lk(fh,(char *)message,strlen(message));
  72.         _write_lk(fh,"\n",1);
  73.  
  74.         _unlock_fh(fh);     /* release file handle lock */
  75. #else  /* defined (_WIN32) */
  76.         fprintf(stderr,"%s\n", (char *)message);
  77. #endif  /* defined (_WIN32) */
  78. }
  79.