Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #pragma ident "@(#) libu/errmsg/lmessage.c 92.4 10/14/99 17:05:30"
00038 #include <liberrno.h>
00039 #include <errno.h>
00040 #include <fcntl.h>
00041
00042 #if !defined(_ABSOFT)
00043 # include <nl_types.h>
00044 #else
00045 # include "ac_msg_type.h"
00046 #endif
00047
00048 #include <stdio.h>
00049 #include <stdarg.h>
00050 #include <string.h>
00051
00052 #if defined(_ABSOFT) && defined(TARGET_NT)
00053 # include <siohdr.h>
00054 #endif
00055
00056 #include <cray/nlcatmsg.h>
00057
00058 #ifdef _UNICOS
00059 # include <tapereq.h>
00060 extern char **_argv;
00061 # define CMDNAME (*_argv)
00062 #else
00063 # include <cray/portdefs.h>
00064 # define CMDNAME ""
00065 #endif
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 void
00077 _lmessage(int errn, char *severity, va_list args)
00078 {
00079 register int flmn;
00080 char mbuf[MAXMLN+1];
00081 char tbuf[MAXMLN+1];
00082 char *mcnm;
00083 char *bmsg;
00084 char *smsg;
00085 nl_catd mcfd;
00086 #ifdef __mips
00087 static nl_catd lib_mcfd;
00088 static int lib_mcfd_opnd = 0;
00089 int lib_mcat = 0;
00090 #endif
00091
00092 #ifdef _UNICOS
00093 if (_numargs() == 0)
00094 (void) abort();
00095 #endif
00096
00097 mbuf[0] = '\n';
00098 mbuf[1] = '\0';
00099 bmsg = NULL;
00100 smsg = "";
00101 flmn = errn;
00102
00103
00104
00105
00106
00107
00108 if (flmn < 0)
00109 if (flmn == -1)
00110 flmn = FERDPEOF;
00111 else
00112 flmn = -flmn;
00113
00114 if (flmn < BASE) {
00115 mcnm = "sys";
00116 smsg = "UNRECOVERABLE error on system request";
00117 #ifdef _UNICOS
00118
00119
00120
00121
00122
00123
00124 if (flmn == ENOMEM)
00125 bmsg = "Unable to allocate memory.";
00126
00127 if (flmn == EMFILE)
00128 bmsg = "Too many open files.";
00129 #else
00130
00131
00132
00133
00134
00135
00136 bmsg = strerror(flmn);
00137 #endif
00138 }
00139 else
00140 if (flmn < (BASE+999) ||
00141 (flmn >= FDC_ERRB && flmn < (FDC_ERRB+999))) {
00142 mcnm = FEMCN;
00143 #ifdef __mips
00144 lib_mcat = 1;
00145 #endif
00146 smsg = "UNRECOVERABLE library error";
00147
00148
00149
00150
00151
00152
00153 if (flmn == FENOMEMY || flmn == FEFMTMEM ||
00154 flmn == FDC_ERR_NOMEM)
00155 bmsg = "Unable to allocate memory.";
00156 }
00157 #ifdef _UNICOS
00158 else
00159 if (flmn >= ETFIRST && flmn <= ETLAST) {
00160 mcnm = "tape";
00161 smsg = "UNRECOVERABLE tape error";
00162 bmsg = "Consult Appendix C, Tape Subsystem User's Guide, SG-2051";
00163 }
00164 #endif
00165 else {
00166 mcnm = "unknown";
00167 smsg = "UNRECOVERABLE";
00168 bmsg = "Unrecognized error number";
00169 }
00170
00171 if (bmsg != NULL)
00172 (void) strcpy(&mbuf[1], bmsg);
00173
00174 if (severity != NULL)
00175 smsg = severity;
00176
00177
00178
00179 #if defined(__sgi)
00180
00181 if (lib_mcat) {
00182 if (lib_mcfd_opnd) {
00183
00184 mcfd = lib_mcfd;
00185 } else {
00186
00187
00188
00189
00190
00191 mcfd = catopen(mcnm, 0);
00192 lib_mcfd = mcfd;
00193 lib_mcfd_opnd = 1;
00194 }
00195 } else {
00196
00197 mcfd = catopen(mcnm, 0);
00198 }
00199 #else
00200 mcfd = catopen(mcnm, 0);
00201 #endif
00202
00203
00204
00205 (void) catgetmsg(mcfd, NL_MSGSET, flmn, &mbuf[1], MAXMLN);
00206
00207
00208
00209 (void) vsprintf(tbuf, &mbuf[1], args);
00210
00211
00212
00213 (void) catmsgfmt(CMDNAME, mcnm, flmn, smsg, tbuf, &mbuf[1],
00214 MAXMLN, NULL, NULL);
00215
00216
00217 fwrite(mbuf, strlen(mbuf), 1, stderr);
00218
00219 return;
00220 }