comerr.c
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:3k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)comerr.c 1.19 98/09/05 Copyright 1985 J. Schilling */
  2. /*
  3.  * Routines for printing command errors
  4.  *
  5.  * Copyright (c) 1985 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #include <mconfig.h>
  23. #include <stdio.h>
  24. #include <standard.h>
  25. #include <stdxlib.h>
  26. #include <vadefs.h>
  27. #include <strdefs.h>
  28. #ifndef HAVE_STRERROR
  29. extern char *sys_errlist[];
  30. extern int sys_nerr;
  31. #endif
  32. LOCAL int _comerr __PR((int, int, const char *, va_list));
  33. /* VARARGS1 */
  34. #ifdef PROTOTYPES
  35. void comerr(const char *msg, ...)
  36. #else
  37. void comerr(msg, va_alist)
  38. char *msg;
  39. va_dcl
  40. #endif
  41. {
  42. va_list args;
  43. #ifdef PROTOTYPES
  44. va_start(args, msg);
  45. #else
  46. va_start(args);
  47. #endif
  48. (void)_comerr(TRUE, geterrno(), msg, args);
  49. /* NOTREACHED */
  50. va_end(args);
  51. }
  52. /* VARARGS2 */
  53. #ifdef PROTOTYPES
  54. void comerrno(int err, const char *msg, ...)
  55. #else
  56. void comerrno(err, msg, va_alist)
  57. int err;
  58. char *msg;
  59. va_dcl
  60. #endif
  61. {
  62. va_list args;
  63. #ifdef PROTOTYPES
  64. va_start(args, msg);
  65. #else
  66. va_start(args);
  67. #endif
  68. (void)_comerr(TRUE, err, msg, args);
  69. /* NOTREACHED */
  70. va_end(args);
  71. }
  72. /* VARARGS1 */
  73. #ifdef PROTOTYPES
  74. int errmsg(const char *msg, ...)
  75. #else
  76. int errmsg(msg, va_alist)
  77. char *msg;
  78. va_dcl
  79. #endif
  80. {
  81. va_list args;
  82. int ret;
  83. #ifdef PROTOTYPES
  84. va_start(args, msg);
  85. #else
  86. va_start(args);
  87. #endif
  88. ret = _comerr(FALSE, geterrno(), msg, args);
  89. va_end(args);
  90. return (ret);
  91. }
  92. /* VARARGS2 */
  93. #ifdef PROTOTYPES
  94. int errmsgno(int err, const char *msg, ...)
  95. #else
  96. int errmsgno(err, msg, va_alist)
  97. int err;
  98. char *msg;
  99. va_dcl
  100. #endif
  101. {
  102. va_list args;
  103. int ret;
  104. #ifdef PROTOTYPES
  105. va_start(args, msg);
  106. #else
  107. va_start(args);
  108. #endif
  109. ret = _comerr(FALSE, err, msg, args);
  110. va_end(args);
  111. return (ret);
  112. }
  113. LOCAL int _comerr(exflg, err, msg, args)
  114. int exflg;
  115. int err;
  116. const char *msg;
  117. va_list args;
  118. {
  119. char errbuf[20];
  120. char *errnam;
  121. char *prognam = get_progname();
  122. if (err < 0) {
  123. error("%s: %r", prognam, msg, args);
  124. } else {
  125. errnam = errmsgstr(err);
  126. if (errnam == NULL) {
  127. (void)sprintf(errbuf, "Error %d", err);
  128. errnam = errbuf;
  129. }
  130. error("%s: %s. %r", prognam, errnam, msg, args);
  131. }
  132. if (exflg) {
  133. exit(err);
  134. /* NOTREACHED */
  135. }
  136. return(err);
  137. }
  138. char *
  139. errmsgstr(err)
  140. int err;
  141. {
  142. #ifdef HAVE_STRERROR
  143. return (strerror(err));
  144. #else
  145. if (err < 0 || err >= sys_nerr) {
  146. return (NULL);
  147. } else {
  148. return (sys_errlist[err]);
  149. }
  150. #endif
  151. }