105 lines
2.6 KiB
C
105 lines
2.6 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2012 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. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
/*
|
|
* gtcm_rep_err.c ---
|
|
*
|
|
* Error logging facility.
|
|
*
|
|
*/
|
|
|
|
#ifndef lint
|
|
static char rcsid[] = "$Header:$";
|
|
#endif
|
|
|
|
#include "mdef.h"
|
|
|
|
#include "gtm_stdio.h"
|
|
#include "gtm_stdlib.h"
|
|
#include "gtm_string.h"
|
|
#include "send_msg.h"
|
|
#include "iosp.h"
|
|
#include "util.h"
|
|
#include "trans_log_name.h"
|
|
#include "gtm_syslog.h"
|
|
#include "gtm_time.h"
|
|
|
|
#include "gtcm.h"
|
|
#include "fao_parm.h"
|
|
#include "eintr_wrappers.h"
|
|
#include "sgtm_putmsg.h"
|
|
#include "gtm_limits.h"
|
|
#ifdef __MVS__
|
|
#include "gtm_stat.h"
|
|
#include "gtm_zos_io.h"
|
|
#endif
|
|
|
|
#define GTCM_SERV_LOG "/log/gtcm_server.erlg"
|
|
#define GTM_DIST_PATH "$gtm_dist"
|
|
|
|
GBLREF char *omi_service;
|
|
STATICDEF boolean_t first_error = TRUE;
|
|
STATICDEF char fileName[GTM_PATH_MAX];
|
|
|
|
error_def(ERR_TEXT);
|
|
error_def(ERR_DISTPATHMAX);
|
|
ZOS_ONLY(error_def(ERR_BADTAG);)
|
|
|
|
void gtcm_rep_err(char *msg, int errcode)
|
|
{
|
|
FILE *fp;
|
|
char outbuf[OUT_BUFF_SIZE];
|
|
time_t now;
|
|
int status, retval;
|
|
char *gtm_dist, *filebuf;
|
|
mstr tn;
|
|
MSTR_DEF(val, strlen(GTM_DIST_PATH), GTM_DIST_PATH); /* BYPASSOK */
|
|
|
|
if ('\0' == msg[0])
|
|
sgtm_putmsg(outbuf, VARLSTCNT(2) errcode, 0);
|
|
else
|
|
sgtm_putmsg(outbuf, VARLSTCNT(6) errcode, 0, ERR_TEXT, 2, LEN_AND_STR(msg));
|
|
if (first_error)
|
|
{
|
|
first_error = FALSE;
|
|
filebuf = fileName;
|
|
status = TRANS_LOG_NAME(&val, &tn, fileName, GTM_PATH_MAX, dont_sendmsg_on_log2long);
|
|
if ((SS_LOG2LONG == status) || (tn.len + strlen(GTCM_SERV_LOG) >= GTM_PATH_MAX))
|
|
{
|
|
send_msg(VARLSTCNT(3) ERR_DISTPATHMAX, 1, GTM_PATH_MAX - strlen(GTCM_SERV_LOG));
|
|
exit(ERR_DISTPATHMAX);
|
|
} else if (SS_NORMAL == status)
|
|
filebuf = strcat(fileName, GTCM_SERV_LOG);
|
|
else
|
|
{
|
|
assert(SS_NOLOGNAM == status);
|
|
SPRINTF(fileName, "%s%s", P_tmpdir, GTCM_SERV_LOG);
|
|
}
|
|
}
|
|
# ifdef __MVS__
|
|
if (-1 != gtm_zos_create_tagged_file(fileName, TAG_EBCDIC))
|
|
{
|
|
char *tag_emsg = STRERROR(errno);
|
|
sgtm_putmsg(outbuf, VARLSTCNT(10) ERR_BADTAG, 4, LEN_AND_STR(fileName),
|
|
-1, TAG_EBCDIC, ERR_TEXT, 2, RTS_ERROR_STRING(tag_emsg));
|
|
}
|
|
# endif
|
|
if ((fp = Fopen(fileName, "a")))
|
|
{
|
|
now = time(0);
|
|
FPRINTF(fp, "%s", GTM_CTIME(&now));
|
|
FPRINTF(fp, "server(%s) %s", omi_service, outbuf);
|
|
FCLOSE(fp, status);
|
|
}
|
|
util_out_print(outbuf, OPER); /* Same message goes out to operator log */
|
|
return;
|
|
}
|