changed the field name "m_type" to "m_dataType" to avoid

collision with a MACRO that is defined by the SENS IP stack
which is mandatory in WRS's Tornado II product.

dont use sprintf() buffer for exceptions
This commit is contained in:
Jeff Hill
1999-09-14 23:49:08 +00:00
parent 51deb91ce7
commit 90e5cbad9c

View File

@@ -106,7 +106,7 @@ unsigned long count,
chid chix,
const void *pvalue
);
LOCAL void ca_default_exception_handler(struct exception_handler_args args);
LOCAL void ca_default_exception_handler (struct exception_handler_args args);
LOCAL int cac_push_msg(
struct ioc_in_use *piiu,
@@ -978,7 +978,7 @@ int reply_type
mptr->m_cmmd = htons (CA_PROTO_SEARCH);
mptr->m_available = chix->cid;
mptr->m_type = reply_type;
mptr->m_dataType = reply_type;
mptr->m_count = htons (CA_MINOR_VERSION);
mptr->m_cid = chix->cid;
@@ -1301,7 +1301,7 @@ LOCAL int issue_get_callback(evid monix, ca_uint16_t cmmd)
/* msg header only on db read notify req */
hdr.m_cmmd = htons (cmmd);
hdr.m_type = htons ((ca_uint16_t)monix->type);
hdr.m_dataType = htons ((ca_uint16_t)monix->type);
hdr.m_count = htons (count);
hdr.m_available = monix->id;
hdr.m_postsize = 0;
@@ -1723,7 +1723,7 @@ const void *pvalue
# endif /*CONVERSION_REQUIRED*/
hdr.m_cmmd = htons(cmd);
hdr.m_type = htons(((ca_uint16_t)type));
hdr.m_dataType = htons(((ca_uint16_t)type));
hdr.m_count = htons(((ca_uint16_t)count));
hdr.m_cid = chix->id.sid;
hdr.m_available = id;
@@ -2066,7 +2066,7 @@ int ca_request_event(evid monix)
/* msg header */
msg.m_header.m_cmmd = htons(CA_PROTO_EVENT_ADD);
msg.m_header.m_available = monix->id;
msg.m_header.m_type = htons((ca_uint16_t)monix->type);
msg.m_header.m_dataType = htons((ca_uint16_t)monix->type);
msg.m_header.m_count = htons(count);
msg.m_header.m_cid = chix->id.sid;
msg.m_header.m_postsize = sizeof(msg.m_info);
@@ -2304,7 +2304,7 @@ int epicsShareAPI ca_clear_event (evid monix)
/* msg header */
hdr.m_cmmd = htons(CA_PROTO_EVENT_CANCEL);
hdr.m_available = pMon->id;
hdr.m_type = htons(chix->privType);
hdr.m_dataType = htons(chix->privType);
hdr.m_count = htons(chix->privCount);
hdr.m_cid = chix->id.sid;
hdr.m_postsize = 0;
@@ -2456,7 +2456,7 @@ int epicsShareAPI ca_clear_channel (chid pChan)
hdr.m_cmmd = htons(CA_PROTO_CLEAR_CHANNEL);
hdr.m_available = pChan->cid;
hdr.m_cid = pChan->id.sid;
hdr.m_type = htons(0);
hdr.m_dataType = htons(0);
hdr.m_count = htons(0);
hdr.m_postsize = 0;
@@ -2820,13 +2820,6 @@ void genLocalExcepWFL (long stat, char *ctx, char *pFile, unsigned lineNo)
{
struct exception_handler_args args;
/*
* NOOP if they disable exceptions
*/
if (!ca_static->ca_exception_func) {
return;
}
args.usr = (void *) ca_static->ca_exception_arg;
args.chid = NULL;
args.type = -1;
@@ -2837,10 +2830,21 @@ void genLocalExcepWFL (long stat, char *ctx, char *pFile, unsigned lineNo)
args.ctx = ctx;
args.pFile = pFile;
args.lineNo = lineNo;
LOCK;
(*ca_static->ca_exception_func) (args);
UNLOCK;
/*
* dont lock if there is no CA context
*/
if (ca_static==NULL) {
ca_default_exception_handler (args);
}
/*
* NOOP if they disable exceptions
*/
else if (ca_static->ca_exception_func!=NULL) {
LOCK;
(*ca_static->ca_exception_func) (args);
UNLOCK;
}
}
/*
@@ -2867,12 +2871,9 @@ READONLY char * epicsShareAPI ca_message (long ca_status)
if( msgNo < NELEMENTS(ca_message_text) ){
return ca_message_text[msgNo];
}
else {
sprintf(ca_static->ca_new_err_code_msg_buf,
"new CA message number %u known only by server - see caerr.h",
msgNo);
return ca_static->ca_new_err_code_msg_buf;
}
else {
return "new CA message number known only by server - see caerr.h";
}
}
/*
@@ -2884,56 +2885,63 @@ const char *message,
const char *pfilenm,
int lineno)
{
static const char *severity[] =
{
"Warning",
"Success",
"Error",
"Info",
"Fatal",
"Fatal",
"Fatal",
"Fatal"
};
ca_signal_formated (ca_status, pfilenm, lineno, message);
}
ca_printf(
"CA.Client.Diagnostic..............................................\n");
/*
* ca_signal_formated()
*/
void epicsShareAPI ca_signal_formated (long ca_status, const char *pfilenm,
int lineno, const char *pFormat, ...)
{
va_list theArgs;
static const char *severity[] =
{
"Warning",
"Success",
"Error",
"Info",
"Fatal",
"Fatal",
"Fatal",
"Fatal"
};
va_start (theArgs, pFormat);
ca_printf (
"CA.Client.Diagnostic..............................................\n");
ca_printf (
" %s: \"%s\"\n",
severity[CA_EXTRACT_SEVERITY(ca_status)],
ca_message (ca_status));
ca_printf(
" Message: \"%s\"\n", ca_message(ca_status));
if(message)
if (pFormat) {
ca_printf (" Context: \"");
ca_vPrintf (pFormat, theArgs);
ca_printf ("\"\n");
}
if (pfilenm) {
ca_printf(
" Source File: %s Line Number: %d\n",
pfilenm,
lineno);
}
/*
* Terminate execution if unsuccessful
*/
if( !(ca_status & CA_M_SUCCESS) &&
CA_EXTRACT_SEVERITY(ca_status) != CA_K_WARNING ){
abort();
}
ca_printf(
" Severity: \"%s\" Context: \"%s\"\n",
severity[CA_EXTRACT_SEVERITY(ca_status)],
message);
else
ca_printf(
" Severity: %s\n", severity[CA_EXTRACT_SEVERITY(ca_status)]);
if(pfilenm){
ca_printf(
" Source File: %s Line Number: %d\n",
pfilenm,
lineno);
}
/*
*
*
* Terminate execution if unsuccessful
*
*
*/
if( !(ca_status & CA_M_SUCCESS) &&
CA_EXTRACT_SEVERITY(ca_status) != CA_K_WARNING ){
abort();
}
ca_printf(
"..................................................................\n");
"..................................................................\n");
va_end (theArgs);
}
@@ -3008,7 +3016,7 @@ int echo_request(struct ioc_in_use *piiu, ca_time *pCurrentTime)
int status;
hdr.m_cmmd = htons(CA_PROTO_ECHO);
hdr.m_type = htons(0);
hdr.m_dataType = htons(0);
hdr.m_count = htons(0);
hdr.m_cid = htons(0);
hdr.m_available = htons(0);
@@ -3041,7 +3049,7 @@ void noop_msg(struct ioc_in_use *piiu)
int status;
hdr.m_cmmd = htons(CA_PROTO_NOOP);
hdr.m_type = htons(0);
hdr.m_dataType = htons(0);
hdr.m_count = htons(0);
hdr.m_cid = htons(0);
hdr.m_available = htons(0);
@@ -3240,29 +3248,27 @@ int issue_claim_channel (chid pchan)
*
*
*/
LOCAL void ca_default_exception_handler(struct exception_handler_args args)
LOCAL void ca_default_exception_handler (struct exception_handler_args args)
{
const char *pCtx;
/*
* LOCK around use of sprintf buffer
*/
LOCK;
if (args.chid && args.op != CA_OP_OTHER) {
sprintf(sprintf_buf,
"%s - with request chan=%s op=%ld data type=%s count=%ld",
args.ctx,
ca_name(args.chid),
args.op,
dbr_type_to_text(args.type),
args.count);
pCtx = sprintf_buf;
ca_signal_formated (
args.stat,
args.pFile,
args.lineNo,
"%s - with request chan=%s op=%ld data type=%s count=%ld",
args.ctx,
ca_name (args.chid),
args.op,
dbr_type_to_text(args.type),
args.count);
}
else {
pCtx = args.ctx;
ca_signal_formated (
args.stat,
args.pFile,
args.lineNo,
args.ctx);
}
ca_signal_with_file_and_lineno(args.stat, pCtx, args.pFile, args.lineNo);
UNLOCK;
}
/*
@@ -3424,28 +3430,43 @@ int (*ca_printf_func)(const char *pformat, va_list args)
/*
* ca_printf()
*/
int epicsShareAPI ca_printf(char *pformat, ...)
int epicsShareAPI ca_printf (const char *pformat, ...)
{
int (*ca_printf_func)(const char *pformat, va_list args);
va_list theArgs;
int status;
va_start(theArgs, pformat);
ca_printf_func = epicsVprintf;
if (ca_static) {
if (ca_static->ca_printf_func) {
ca_printf_func = ca_static->ca_printf_func;
}
}
status = (*ca_printf_func) (pformat, theArgs);
va_end(theArgs);
return status;
va_list theArgs;
int status;
va_start (theArgs, pformat);
status = ca_vPrintf (pformat, theArgs);
va_end (theArgs);
return status;
}
/*
* ca_vPrintf()
*/
int epicsShareAPI ca_vPrintf (const char *pformat, va_list args)
{
int (*ca_printf_func)(const char *pformat, va_list args);
if (ca_static) {
if (ca_static->ca_printf_func) {
ca_printf_func = ca_static->ca_printf_func;
}
else {
ca_printf_func = epicsVprintf;
}
}
else {
ca_printf_func = epicsVprintf;
}
return (*ca_printf_func) (pformat, args);
}
/*
* ca_get_field_type()
*/