#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#include "adjustment.h"
#include "dbDefs.h"
#include "epicsThread.h"
#include "cantProceed.h"
#include "epicsMutex.h"
#include "epicsEvent.h"
#include "epicsInterrupt.h"
#include "errMdef.h"
#include "errSymTbl.h"
#include "ellLib.h"
#include "errlog.h"
#include "epicsStdio.h"
#include "epicsExit.h"
Go to the source code of this file.
|
int | errlogPrintf (const char *pFormat,...) |
|
int | errlogVprintf (const char *pFormat, va_list pvar) |
|
int | errlogMessage (const char *message) |
|
int | errlogPrintfNoConsole (const char *pFormat,...) |
|
int | errlogVprintfNoConsole (const char *pFormat, va_list pvar) |
|
int | errlogSevPrintf (errlogSevEnum severity, const char *pFormat,...) |
|
int | errlogSevVprintf (errlogSevEnum severity, const char *pFormat, va_list pvar) |
|
const char * | errlogGetSevEnumString (errlogSevEnum severity) |
|
void | errlogSetSevToLog (errlogSevEnum severity) |
|
errlogSevEnum | errlogGetSevToLog (void) |
|
void | errlogAddListener (errlogListener listener, void *pPrivate) |
|
int | errlogRemoveListeners (errlogListener listener, void *pPrivate) |
|
int | eltc (int yesno) |
|
int | errlogSetConsole (FILE *stream) |
|
void | errPrintf (long status, const char *pFileName, int lineno, const char *pformat,...) |
|
int | errlogInit2 (int bufsize, int maxMsgSize) |
|
int | errlogInit (int bufsize) |
|
void | errlogFlush (void) |
|
#define MAX_MESSAGE_SIZE 256 |
Definition at line 368 of file errlog.c.
372 pvtData.toConsole = yesno;
int errlogInit(int bufsize)
Definition at line 317 of file errlog.c.
326 "errlogAddListener");
330 ellAdd(&pvtData.listenerList,&plistenerNode->
node);
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
int errlogInit(int bufsize)
void ellAdd(ELLLIST *pList, ELLNODE *pNode)
Adds a node to the end of a list.
LIBCOM_API void * callocMustSucceed(size_t count, size_t size, const char *msg)
A calloc() that never returns NULL.
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
void errlogFlush |
( |
void |
| ) |
|
Definition at line 529 of file errlog.c.
539 count =
ellCount(&pvtData.msgQueue);
#define ellCount(PLIST)
Report the number of nodes in a list.
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
LIBCOM_API void epicsEventMustWait(epicsEventId id)
Wait for an event (see epicsEventWait()).
int errlogInit(int bufsize)
#define epicsEventSignal(ID)
A synonym for epicsEventTrigger().
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition at line 297 of file errlog.c.
int errlogInit(int bufsize)
LIBCOM_API const char * errlogSevEnumString[]
Definition at line 311 of file errlog.c.
314 return pvtData.sevToLog;
int errlogInit(int bufsize)
int errlogInit |
( |
int |
bufsize | ) |
|
Definition at line 524 of file errlog.c.
int errlogInit2(int bufsize, int maxMsgSize)
int errlogInit2 |
( |
int |
bufsize, |
|
|
int |
maxMsgSize |
|
) |
| |
Definition at line 500 of file errlog.c.
517 if (pvtData.errlogInitFailed) {
518 fprintf(
stderr,
"errlogInit failed\n");
#define EPICS_THREAD_ONCE_INIT
LIBCOM_API void epicsStdCall epicsThreadOnce(epicsThreadOnceId *id, EPICSTHREADFUNC, void *arg)
int errlogMessage |
( |
const char * |
message | ) |
|
Definition at line 180 of file errlog.c.
int errlogPrintf(const char *pFormat,...)
int errlogPrintf |
( |
const char * |
pFormat, |
|
|
|
... |
|
) |
| |
Definition at line 105 of file errlog.c.
114 (
"errlogPrintf called from interrupt level\n");
121 if (pvtData.atExit || (isOkToBlock && pvtData.toConsole)) {
124 va_start(pvar, pFormat);
125 nchar = vfprintf(console, pFormat, pvar);
133 pbuffer = msgbufGetFree(isOkToBlock);
137 va_start(pvar, pFormat);
138 nchar = tvsnPrint(pbuffer, pvtData.maxMsgSize, pFormat?pFormat:
"", pvar);
140 msgbufSetSize(nchar);
int errlogInit(int bufsize)
LIBCOM_API int epicsInterruptIsInterruptContext(void)
LIBCOM_API void epicsInterruptContextMessage(const char *message)
int epicsStdCall epicsThreadIsOkToBlock(void)
int errlogPrintfNoConsole |
( |
const char * |
pFormat, |
|
|
|
... |
|
) |
| |
Definition at line 186 of file errlog.c.
193 (
"errlogPrintfNoConsole called from interrupt level\n");
198 va_start(pvar, pFormat);
int errlogInit(int bufsize)
LIBCOM_API int epicsInterruptIsInterruptContext(void)
int errlogVprintfNoConsole(const char *pFormat, va_list pvar)
LIBCOM_API void epicsInterruptContextMessage(const char *message)
int errlogRemoveListeners |
( |
errlogListener |
listener, |
|
|
void * |
pPrivate |
|
) |
| |
Definition at line 334 of file errlog.c.
344 while (plistenerNode) {
348 plistenerNode->
pPrivate == pPrivate) {
353 plistenerNode = pnext;
363 "errlogRemoveListeners: No listeners found\n");
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
int errlogInit(int bufsize)
#define ellNext(PNODE)
Find the next node in list.
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
void ellDelete(ELLLIST *pList, ELLNODE *pNode)
Deletes a node from a list.
#define ellFirst(PLIST)
Find the first node in list.
int errlogSetConsole |
( |
FILE * |
stream | ) |
|
Definition at line 376 of file errlog.c.
379 pvtData.console = stream;
int errlogInit(int bufsize)
Definition at line 305 of file errlog.c.
308 pvtData.sevToLog = severity;
int errlogInit(int bufsize)
int errlogSevPrintf |
( |
errlogSevEnum |
severity, |
|
|
const char * |
pFormat, |
|
|
|
... |
|
) |
| |
Definition at line 229 of file errlog.c.
237 (
"errlogSevPrintf called from interrupt level\n");
242 if (pvtData.sevToLog > severity)
246 if (pvtData.atExit || (isOkToBlock && pvtData.toConsole)) {
250 va_start(pvar, pFormat);
251 vfprintf(console, pFormat, pvar);
256 va_start(pvar, pFormat);
int errlogInit(int bufsize)
LIBCOM_API int epicsInterruptIsInterruptContext(void)
int errlogSevVprintf(errlogSevEnum severity, const char *pFormat, va_list pvar)
LIBCOM_API void epicsInterruptContextMessage(const char *message)
int epicsStdCall epicsThreadIsOkToBlock(void)
const char * errlogGetSevEnumString(errlogSevEnum severity)
int errlogSevVprintf |
( |
errlogSevEnum |
severity, |
|
|
const char * |
pFormat, |
|
|
va_list |
pvar |
|
) |
| |
Definition at line 262 of file errlog.c.
271 (
"errlogSevVprintf called from interrupt level\n");
280 pnext = msgbufGetFree(isOkToBlock);
285 pnext += nchar; totalChar += nchar;
286 nchar = tvsnPrint(pnext, pvtData.maxMsgSize - totalChar - 1, pFormat, pvar);
287 pnext += nchar; totalChar += nchar;
288 if (pnext[-1] !=
'\n') {
292 msgbufSetSize(totalChar);
int errlogInit(int bufsize)
LIBCOM_API int epicsInterruptIsInterruptContext(void)
LIBCOM_API void epicsInterruptContextMessage(const char *message)
int epicsStdCall epicsThreadIsOkToBlock(void)
const char * errlogGetSevEnumString(errlogSevEnum severity)
int errlogVprintf |
( |
const char * |
pFormat, |
|
|
va_list |
pvar |
|
) |
| |
Definition at line 144 of file errlog.c.
153 (
"errlogVprintf called from interrupt level\n");
162 pbuffer = msgbufGetFree(isOkToBlock);
164 console = pvtData.console ? pvtData.console :
stderr;
165 vfprintf(console, pFormat, pvar);
170 nchar = tvsnPrint(pbuffer, pvtData.maxMsgSize, pFormat?pFormat:
"", pvar);
171 if (pvtData.atExit || (isOkToBlock && pvtData.toConsole)) {
172 console = pvtData.console ? pvtData.console :
stderr;
173 fprintf(console,
"%s", pbuffer);
176 msgbufSetSize(nchar);
int errlogInit(int bufsize)
LIBCOM_API int epicsInterruptIsInterruptContext(void)
LIBCOM_API void epicsInterruptContextMessage(const char *message)
int epicsStdCall epicsThreadIsOkToBlock(void)
int errlogVprintfNoConsole |
( |
const char * |
pFormat, |
|
|
va_list |
pvar |
|
) |
| |
Definition at line 204 of file errlog.c.
211 (
"errlogVprintfNoConsole called from interrupt level\n");
219 pbuffer = msgbufGetFree(1);
223 nchar = tvsnPrint(pbuffer, pvtData.maxMsgSize, pFormat?pFormat:
"", pvar);
224 msgbufSetSize(nchar);
int errlogInit(int bufsize)
LIBCOM_API int epicsInterruptIsInterruptContext(void)
LIBCOM_API void epicsInterruptContextMessage(const char *message)
void errPrintf |
( |
long |
status, |
|
|
const char * |
pFileName, |
|
|
int |
lineno, |
|
|
const char * |
pformat, |
|
|
|
... |
|
) |
| |
Definition at line 383 of file errlog.c.
407 if (pvtData.atExit || (isOkToBlock && pvtData.toConsole)) {
411 fprintf(console,
"filename=\"%s\" line number=%d\n",
414 fprintf(console,
"%s ", name);
416 va_start(pvar, pformat);
417 vfprintf(console, pformat, pvar);
419 fputc(
'\n', console);
426 pnext = msgbufGetFree(isOkToBlock);
431 nchar = sprintf(pnext,
"filename=\"%s\" line number=%d\n",
433 pnext += nchar; totalChar += nchar;
437 nchar = sprintf(pnext,
"%s ",name);
438 pnext += nchar; totalChar += nchar;
440 va_start(pvar, pformat);
441 nchar = tvsnPrint(pnext, pvtData.maxMsgSize - totalChar - 1, pformat, pvar);
449 msgbufSetSize(totalChar);
int errlogInit(int bufsize)
LIBCOM_API int epicsInterruptIsInterruptContext(void)
LIBCOM_API void errSymLookup(long status, char *pBuf, size_t bufLength)
LIBCOM_API void epicsInterruptContextMessage(const char *message)
int epicsStdCall epicsThreadIsOkToBlock(void)