From: hadaq Date: Mon, 10 Jan 2005 15:54:45 +0000 (+0000) Subject: message callback also for param library X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=6510cf48e5c4f74309d1146dc181a2361fb032bc;p=daqdata.git message callback also for param library --- diff --git a/allParam/include/allParam.h b/allParam/include/allParam.h index 1eaf74b..a6deddb 100644 --- a/allParam/include/allParam.h +++ b/allParam/include/allParam.h @@ -22,6 +22,8 @@ typedef struct ParamS { char *strerror; } Param; +void Param_registerLogMsg(void (*f) (int, const char *, ...)); + /* constructors and destructor */ int conSetupParam(Param *param, const char *setup); int conParam(Param *param); diff --git a/allParam/tcl/tclParam.c b/allParam/tcl/tclParam.c index 7221b8f..abe80a7 100644 --- a/allParam/tcl/tclParam.c +++ b/allParam/tcl/tclParam.c @@ -1,5 +1,4 @@ -static const char rcsId[] = - "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/tcl/tclParam.c,v 1.30 2003-07-01 16:05:49 hadaq Exp $"; +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/tcl/tclParam.c,v 1.31 2005-01-10 15:54:45 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L #if HAVE_CONFIG_H @@ -13,6 +12,7 @@ static const char rcsId[] = #ifdef PTHREADS #include #endif /* PTHREADS */ +#include #include #include #include @@ -23,7 +23,54 @@ static const char rcsId[] = #include "../include/allParam.h" -static void Param_strerror(Param *, const char *); +/* Allow for registration of a user routine for output of error + * messages and provide a default one + * BUGBUG static variables will eventually break in multithreaded + * environment +*/ +enum { verbEmerg = 0, verbErr = 3, verbDebug = 7 }; + +static void defaultLogMsg(int priority, const char *message, ...) +{ + static int verbosity = -1; + va_list ap; + + if (verbosity == -1) { + char *env; + + env = getenv("PARAM_VERBOSITY"); + if (env != NULL) { + if (strcmp(env, "DEBUG") == 0) { + verbosity = verbDebug; + } else { + verbosity = verbErr; + } + } + } + + if (priority <= verbosity) { + va_start(ap, message); + vfprintf(stderr, message, ap); + fputc('\n', stderr); + va_end(ap); + } +} + +void (*ourLogMsg) (int, const char *, ...) = defaultLogMsg; + +void Param_registerLogMsg(void (*f) (int, const char *, ...)) +{ + ourLogMsg = f; +} + +static void Param_strerror(Param * my, const char *strerror) +{ + my->strerror = realloc(my->strerror, strlen(strerror) + 1); + if (my->strerror != NULL) { + strcpy(my->strerror, strerror); + ourLogMsg(verbErr, "tclParam: %s", strerror); + } +} typedef struct TclParamS { Tcl_Interp *interp; @@ -33,7 +80,7 @@ typedef struct TclParamS { FILE *store; } TclParam; -int conSetupParam(Param *my, const char *setup) +int conSetupParam(Param * my, const char *setup) { int retVal = 0; char *paramFile; @@ -47,8 +94,7 @@ int conSetupParam(Param *my, const char *setup) my->specParam = malloc(sizeof(TclParam)); #ifdef PTHREADS - ((TclParam *) (my->specParam))->interpLock = - malloc(sizeof(pthread_mutex_t)); + ((TclParam *) (my->specParam))->interpLock = malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(((TclParam *) (my->specParam))->interpLock, NULL); #endif /* PTHREADS */ @@ -58,32 +104,21 @@ int conSetupParam(Param *my, const char *setup) } else { my->setup = NULL; } - paramFile = - malloc(((my->setup == - NULL) ? strlen("default") : strlen(setup)) + - strlen("_p.tcl") + 1); - storageFile = - malloc(((my->setup == - NULL) ? strlen("default") : strlen(setup)) + - strlen("_s.tcl") + 1); + paramFile = malloc(((my->setup == NULL) ? strlen("default") : strlen(setup)) + strlen("_p.tcl") + 1); + storageFile = malloc(((my->setup == NULL) ? strlen("default") : strlen(setup)) + strlen("_s.tcl") + 1); sprintf(paramFile, "%s_p.tcl", (my->setup == NULL) ? "default" : setup); - sprintf(storageFile, "%s_s.tcl", - (my->setup == NULL) ? "default" : setup); + sprintf(storageFile, "%s_s.tcl", (my->setup == NULL) ? "default" : setup); #ifdef PTHREADS if (0 == pthread_mutex_lock(((TclParam *) (my->specParam))->interpLock)) { #endif /* PTHREADS */ ((TclParam *) (my->specParam))->interp = Tcl_CreateInterp(); - code = - Tcl_EvalFile(((TclParam *) (my->specParam))->interp, paramFile); + code = Tcl_EvalFile(((TclParam *) (my->specParam))->interp, paramFile); if (code != TCL_OK) { if (*((TclParam *) (my->specParam))->interp->result != 0) { - Param_strerror(my, - ((TclParam *) (my->specParam))->interp-> - result); + Param_strerror(my, ((TclParam *) (my->specParam))->interp->result); } else { - Param_strerror((Param *) my, - "Tcl interpreter cannot read file correctly and does not deliver an error string."); + Param_strerror((Param *) my, "Tcl interpreter cannot read file correctly and does not deliver an error string."); } retVal = -1; } @@ -92,9 +127,7 @@ int conSetupParam(Param *my, const char *setup) } #endif /* PTHREADS */ - if (NULL == - (((TclParam *) (my->specParam))->store = - fopen(storageFile, "a+"))) { + if (NULL == (((TclParam *) (my->specParam))->store = fopen(storageFile, "a+"))) { retVal = -1; } @@ -107,8 +140,7 @@ int conSetupParam(Param *my, const char *setup) } i++; } - if (Param_getString - (my, buffer->nodename, "basedir", &row, my->basedir) + if (Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) { if (Param_getString(my, "glob", "basedir", &row, my->basedir) || (row != 1)) { @@ -128,7 +160,7 @@ int conSetupParam(Param *my, const char *setup) return retVal; } -int conParam(Param *my) +int conParam(Param * my) { int retVal = 0; char *p; @@ -144,8 +176,7 @@ int conParam(Param *my) my->specParam = malloc(sizeof(TclParam)); #ifdef PTHREADS - ((TclParam *) (my->specParam))->interpLock = - malloc(sizeof(pthread_mutex_t)); + ((TclParam *) (my->specParam))->interpLock = malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(((TclParam *) (my->specParam))->interpLock, NULL); #endif /* PTHREADS */ @@ -167,16 +198,12 @@ int conParam(Param *my) if (0 == pthread_mutex_lock(((TclParam *) (my->specParam))->interpLock)) { #endif /* PTHREADS */ ((TclParam *) (my->specParam))->interp = Tcl_CreateInterp(); - code = - Tcl_EvalFile(((TclParam *) (my->specParam))->interp, paramFile); + code = Tcl_EvalFile(((TclParam *) (my->specParam))->interp, paramFile); if (code != TCL_OK) { if (*((TclParam *) (my->specParam))->interp->result != 0) { - Param_strerror(my, - ((TclParam *) (my->specParam))->interp-> - result); + Param_strerror(my, ((TclParam *) (my->specParam))->interp->result); } else { - Param_strerror((Param *) my, - "Tcl interpreter cannot read file correctly and does not deliver an error string."); + Param_strerror((Param *) my, "Tcl interpreter cannot read file correctly and does not deliver an error string."); } retVal = -1; } @@ -185,9 +212,7 @@ int conParam(Param *my) } #endif /* PTHREADS */ - if (NULL == - (((TclParam *) (my->specParam))->store = - fopen(storageFile, "a+"))) { + if (NULL == (((TclParam *) (my->specParam))->store = fopen(storageFile, "a+"))) { return -1; } @@ -200,8 +225,7 @@ int conParam(Param *my) } i++; } - if (Param_getString - (my, buffer->nodename, "basedir", &row, my->basedir) + if (Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) { if (Param_getString(my, "glob", "basedir", &row, my->basedir) || (row != 1)) { @@ -221,7 +245,7 @@ int conParam(Param *my) return retVal; } -void desParam(Param *my) +void desParam(Param * my) { #ifdef PTHREADS if (0 == pthread_mutex_lock(((TclParam *) (my->specParam))->interpLock)) { @@ -243,20 +267,17 @@ void desParam(Param *my) free(my->setup); } -int Param_getInt(const Param *my, const char *name, const char *idx, - int *row, unsigned long int *val) +int Param_getInt(const Param * my, const char *name, const char *idx, int *row, unsigned long int *val) { return Param_getIntArray(my, name, idx, 1, row, val); } -int Param_getString(const Param *my, const char *name, const char *idx, - int *row, char *val) +int Param_getString(const Param * my, const char *name, const char *idx, int *row, char *val) { return Param_getStringArray(my, name, idx, 1, row, &val); } -int Param_getFilename(const Param *my, const char *name, const char *idx, - int *row, char *val) +int Param_getFilename(const Param * my, const char *name, const char *idx, int *row, char *val) { int retVal = 0; int rows = 0; @@ -277,8 +298,7 @@ int Param_getFilename(const Param *my, const char *name, const char *idx, return retVal; } -int Param_getIntArray(const Param *my, const char *name, const char *idx, - int maxrows, int *rows, unsigned long int *val) +int Param_getIntArray(const Param * my, const char *name, const char *idx, int maxrows, int *rows, unsigned long int *val) { int retVal = 0; int i; @@ -289,15 +309,13 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, strval[i] = malloc(PARAM_MAX_VALUE_LEN * sizeof(char)); } *rows = 0; - if ((retVal |= - Param_getStringArray(my, name, idx, maxrows, rows, strval)) == 0) { + if ((retVal |= Param_getStringArray(my, name, idx, maxrows, rows, strval)) == 0) { for (i = 0; i < *rows; i++) { val[i] = strtoul(strval[i], &endptr, 0); if (*endptr != '\0') { *rows = 0; retVal = -1; - Param_strerror((Param *) my, - "Value seems to be no integer."); + Param_strerror((Param *) my, "Value seems to be no integer."); } } } @@ -307,8 +325,7 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, return retVal; } -int Param_getStringArray(const Param *my, const char *name, const char *idx, - int maxrows, int *rows, char **val) +int Param_getStringArray(const Param * my, const char *name, const char *idx, int maxrows, int *rows, char **val) { int retVal = 0; int i; @@ -326,22 +343,15 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, #ifdef PTHREADS if (0 == pthread_mutex_lock(((TclParam *) (my->specParam))->interpLock)) { #endif /* PTHREADS */ - if (Tcl_GetVar2 - (((TclParam *) (my->specParam))->interp, lname, lidx, 0) != 0) { - strcpy(val[0], - Tcl_GetVar2(((TclParam *) (my->specParam))->interp, - lname, lidx, 0)); + if (Tcl_GetVar2(((TclParam *) (my->specParam))->interp, lname, lidx, 0) != 0) { + strcpy(val[0], Tcl_GetVar2(((TclParam *) (my->specParam))->interp, lname, lidx, 0)); *rows = 1; } else { char index[PARAM_MAX_NAME_LEN]; for (i = 0; i < maxrows; i++) { sprintf(index, "%s%d", lidx, i); - if (Tcl_GetVar2 - (((TclParam *) (my->specParam))->interp, lname, index, - 0) != 0) { - strcpy(val[i], - Tcl_GetVar2(((TclParam *) (my->specParam))-> - interp, lname, index, 0)); + if (Tcl_GetVar2(((TclParam *) (my->specParam))->interp, lname, index, 0) != 0) { + strcpy(val[i], Tcl_GetVar2(((TclParam *) (my->specParam))->interp, lname, index, 0)); (*rows)++; } else { i = maxrows; @@ -355,9 +365,7 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, return retVal; } -int Param_getFilenameArray(const Param *my, const char *name, - const char *idx, int maxrows, int *rows, - char **val) +int Param_getFilenameArray(const Param * my, const char *name, const char *idx, int maxrows, int *rows, char **val) { int retVal = 0; int i; @@ -367,8 +375,7 @@ int Param_getFilenameArray(const Param *my, const char *name, value[i] = malloc(PARAM_MAX_VALUE_LEN); } - if (((retVal = - Param_getStringArray(my, name, idx, maxrows, rows, value)) == 0) + if (((retVal = Param_getStringArray(my, name, idx, maxrows, rows, value)) == 0) && (*rows > 0)) { for (i = 0; i < *rows; i++) { if (value[i][0] != '/') { @@ -389,8 +396,7 @@ int Param_getFilenameArray(const Param *my, const char *name, return retVal; } -int Param_getBlob(const Param *my, const char *name, const char *idx, - size_t * size, FILE ** val) +int Param_getBlob(const Param * my, const char *name, const char *idx, size_t * size, FILE ** val) { int retVal = 0; char filename[PARAM_MAX_VALUE_LEN]; @@ -411,8 +417,7 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, return retVal; } -int Param_storeInt(const Param *my, const char *name, const char *idx, - unsigned long int value) +int Param_storeInt(const Param * my, const char *name, const char *idx, unsigned long int value) { char buf[7 + 2 * PARAM_MAX_NAME_LEN + PARAM_MAX_VALUE_LEN]; sprintf(buf, "set %s(%s)\t%lu\n", name, idx, value); @@ -429,8 +434,7 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, return 0; } -int Param_storeString(const Param *my, const char *name, const char *idx, - const char *value) +int Param_storeString(const Param * my, const char *name, const char *idx, const char *value) { char buf[7 + 2 * PARAM_MAX_NAME_LEN + PARAM_MAX_VALUE_LEN]; sprintf(buf, "set %s(%s)\t\"%s\"\n", name, idx, value); @@ -447,19 +451,11 @@ int Param_storeString(const Param *my, const char *name, const char *idx, return 0; } -void Param_clearCache(const Param *my) +void Param_clearCache(const Param * my) { } -const char *Param_getErrStr(const Param *my) +const char *Param_getErrStr(const Param * my) { return my->strerror; } - -static void Param_strerror(Param *my, const char *strerror) -{ - my->strerror = realloc(my->strerror, strlen(strerror) + 1); - if (my->strerror != NULL) { - strcpy(my->strerror, strerror); - } -}