120 lines
2.6 KiB
C
120 lines
2.6 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2009 Fidelity Information Services, Inc *
|
|
* *
|
|
* This source code contains the intellectual property *
|
|
* of its copyright holder(s), and is made available *
|
|
* under a license. If you do not know the terms of *
|
|
* the license, please stop and do not read further. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
#include "mdef.h"
|
|
#include "gtm_string.h"
|
|
#ifdef SYS_ERRLIST_INCLUDE
|
|
#include SYS_ERRLIST_INCLUDE
|
|
#endif
|
|
#include "error.h"
|
|
#include "gtmmsg.h"
|
|
|
|
GBLREF bool dec_nofac;
|
|
|
|
#define ERR_TAG "ENO"
|
|
|
|
|
|
void gtm_getmsg (int4 msgnum, mstr *msgbuf)
|
|
{
|
|
short int m_len, faclen, taglen, j, sever;
|
|
char *cp;
|
|
const char *top, *msgp, *fac;
|
|
char outbuf[32];
|
|
char_ptr_t tag;
|
|
const err_msg *msg;
|
|
const err_ctl *ctl;
|
|
|
|
ctl = err_check(msgnum);
|
|
if (ctl != 0)
|
|
{
|
|
assert((msgnum & FACMASK(ctl->facnum)) && (MSGMASK(msgnum, ctl->facnum) <= ctl->msg_cnt));
|
|
j = MSGMASK(msgnum, ctl->facnum);
|
|
msg = ctl->fst_msg + j - 1;
|
|
msgp = msg->msg;
|
|
tag = (char_ptr_t)msg->tag;
|
|
fac = ctl->facname;
|
|
sever = SEVMASK(msgnum);
|
|
} else
|
|
{
|
|
sever = ERROR;
|
|
tag = (char_ptr_t)outbuf;
|
|
if ((MAX_SYSERR > msgnum) && (msgnum > 0))
|
|
{
|
|
assert(NULL != STRERROR(1)); /* OSF/1 check; can happen with 64-bit pointers and bad declaration */
|
|
cp = (char *)tag;
|
|
MEMCPY_LIT(cp, ERR_TAG);
|
|
cp += strlen(ERR_TAG);
|
|
cp = (char *)i2asc((uchar_ptr_t)cp, msgnum);
|
|
*cp = '\0';
|
|
msgp = STRERROR(msgnum);
|
|
} else
|
|
{
|
|
tag = "UNKNOWN";
|
|
msgp = "Unknown system error !SL";
|
|
}
|
|
fac = "SYSTEM";
|
|
}
|
|
m_len = strlen(msgp);
|
|
if (!dec_nofac)
|
|
{
|
|
m_len += (faclen = strlen(fac));
|
|
m_len += 4; /* %-<sev>- */
|
|
m_len += (taglen = strlen((const char *)tag));
|
|
m_len += 2; /* , */
|
|
}
|
|
m_len = m_len > msgbuf->len - 1 ? msgbuf->len - 1 : m_len;
|
|
cp = msgbuf->addr;
|
|
top = cp + m_len;
|
|
if (!dec_nofac)
|
|
{
|
|
if (cp < top)
|
|
*cp++ = '%';
|
|
|
|
j = faclen > top-cp ? top-cp : faclen;
|
|
if (j)
|
|
{
|
|
memcpy(cp, fac, j);
|
|
cp += j;
|
|
}
|
|
if (cp < top)
|
|
*cp++ = '-';
|
|
if (cp < top)
|
|
{
|
|
switch(sever)
|
|
{
|
|
case SUCCESS: *cp++ = 'S'; break;
|
|
case INFO: *cp++ = 'I'; break;
|
|
case WARNING: *cp++ = 'W'; break;
|
|
case ERROR: *cp++ = 'E'; break;
|
|
case SEVERE: *cp++ = 'F'; break;
|
|
default: *cp++ = 'U'; break;
|
|
}
|
|
}
|
|
if (cp < top)
|
|
*cp++ = '-';
|
|
j = taglen > top-cp ? top-cp : taglen;
|
|
if (j)
|
|
{
|
|
memcpy(cp, tag, j);
|
|
cp += j;
|
|
}
|
|
if (cp < top)
|
|
*cp++ = ',';
|
|
if (cp < top)
|
|
*cp++ = ' ';
|
|
}
|
|
|
|
memcpy(cp, msgp, top - cp);
|
|
cp += top - cp;
|
|
msgbuf->len = m_len;
|
|
*cp++ = 0;
|
|
}
|