From 37da4bd7785ad12956e3ab88a13a09ed242f09ee Mon Sep 17 00:00:00 2001 From: hadaq Date: Mon, 27 May 2002 13:29:52 +0000 Subject: [PATCH] *** empty log message *** --- allParam/ca/client/caParam.c | 278 +++++++++++++++++++++++++++-------- allParam/file/fileParam.c | 51 ++++--- allParam/include/allParam.h | 3 +- allParam/tcl/tclParam.c | 54 ++++--- 4 files changed, 285 insertions(+), 101 deletions(-) diff --git a/allParam/ca/client/caParam.c b/allParam/ca/client/caParam.c index badced1..7965d35 100644 --- a/allParam/ca/client/caParam.c +++ b/allParam/ca/client/caParam.c @@ -1,4 +1,4 @@ -static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/client/caParam.c,v 1.16 2002-05-23 01:50:27 hadaq Exp $"; +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/client/caParam.c,v 1.17 2002-05-27 13:29:52 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L #include @@ -16,12 +16,14 @@ static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuild #include -#define TIMEOUTEVT 0.002 +#define TIMEOUTEVT 0.0002 +#define TIMEOUTSG 10.0 #define TIMEOUTIO 10.0 static void Param_copyStringsToAllocMem(struct event_handler_args args); static void Param_copyIntsToAllocMem(struct event_handler_args args); static void Param_copyBlobToAllocMem(struct event_handler_args args); +static void Param_confirmStore(struct event_handler_args args); static void Param_returnPVName(const Param *my, const char *, const char *, const char *, char *); static void Param_strerror(Param *, const char *); static int Param_getIntArrayCache(const Param *, const char *, const char *, int, int *, unsigned long int *); @@ -60,6 +62,10 @@ typedef struct ParamBlobResultS { int *isReady; } ParamBlobResult; +typedef struct ParamConfirmStoreStructS { + int *isReady; +} ParamConfirmStoreStruct; + int conSetupParam(Param *my, const char *setup) { struct utsname bufferS, *buffer = &bufferS; @@ -142,7 +148,7 @@ int Param_getFilename(const Param *my, const char *name, const char *idx, int *r int Param_getIntArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, unsigned long int *val) { - int isReadyS, *isReady = &isReadyS; + int isReady; int retVal = 0; int status; int found = 1; @@ -153,6 +159,9 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma *rows = 0; if(Param_getIntArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) { +#ifdef SYNCHRONOUS_GROUP + CA_SYNC_GID pgid; +#endif pPVName = malloc((strlen("HAD:PI:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char)); Param_returnPVName(my, "PI", name, idx, pPVName); @@ -163,32 +172,54 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma Param_strerror((Param *) my, ca_message(status)); retVal = -1; } else { - - if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { +#ifdef SYNCHRONOUS_GROUP + ca_sg_create(&pgid); +#endif + do { + status = ca_pend_io(TIMEOUTIO); + } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT)); + if(status != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; } if(found == 1) { +#ifndef SYNCHRONOUS_GROUP ParamIntResult resultS, *result = &resultS; result->val = val; result->rows = rows; result->maxrows = maxrows; result->my = my; result->retVal = &retVal; - result->isReady = isReady; - *isReady = 1; + result->isReady = &isReady; + isReady = 1; status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyIntsToAllocMem, result); +#else + status = ca_sg_array_get(pgid, ca_field_type(chan), ca_element_count(chan), chan, val); +#endif Param_strerror((Param *) my, ca_message(status)); +#ifndef SYNCHRONOUS_GROUP do { - status = ca_pend_event(TIMEOUTEVT); - } while(*isReady == 1); + ca_pend_event(TIMEOUTEVT); + } while(isReady == 1); +#else + if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_TIMEOUT) { + retVal = 0; + *rows = 0; + } else if (status == ECA_NORMAL) { + retVal = 0; + *rows = maxrows > ca_element_count(chan) ? ca_element_count(chan) : maxrows; + } else { + retVal = -1; + *rows = 0; + } + ca_sg_delete(pgid); +#endif + } + if((status = ca_clear_channel(chan)) != ECA_NORMAL) { + Param_strerror((Param *) my, ca_message(status)); } - } - - if((status = ca_clear_channel(chan)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); } free(pPVName); @@ -208,7 +239,7 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma int Param_getStringArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val) { - int isReadyS, *isReady = &isReadyS; + int isReady; int retVal = 0; int status; int found = 1; @@ -219,6 +250,9 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int *rows = 0; if(Param_getStringArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) { +#ifdef SYNCHRONOUS_GROUP + CA_SYNC_GID pgid; +#endif pPVName = malloc((strlen("HAD:PS:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char)); Param_returnPVName(my, "PS", name, idx, pPVName); @@ -229,28 +263,50 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int Param_strerror((Param *) my, ca_message(status)); retVal = -1; } else { - - if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { +#ifdef SYNCHRONOUS_GROUP + ca_sg_create(&pgid); +#endif + do { + status = ca_pend_io(TIMEOUTIO); + } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT)); + if(status != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; } if(found == 1) { +#ifndef SYNCHRONOUS_GROUP ParamStringResult resultS, *result = &resultS; result->val = val; result->rows = rows; result->maxrows = maxrows; result->my = my; result->retVal = &retVal; - result->isReady = isReady; - *isReady = 1; + result->isReady = &isReady; + isReady = 1; status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result); +#else + status = ca_sg_array_get(pgid, ca_field_type(chan), ca_element_count(chan), chan, val); +#endif Param_strerror((Param *) my, ca_message(status)); - +#ifndef SYNCHRONOUS_GROUP do { - status = ca_pend_event(TIMEOUTEVT); - } while(*isReady == 1); + ca_pend_event(TIMEOUTEVT); + } while(isReady == 1); +#else + if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_TIMEOUT) { + retVal = 0; + *rows = 0; + } else if (status == ECA_NORMAL) { + retVal = 0; + *rows = maxrows > ca_element_count(chan) ? ca_element_count(chan) : maxrows; + } else { + retVal = -1; + *rows = 0; + } + ca_sg_delete(pgid); +#endif } if((status = ca_clear_channel(chan)) != ECA_NORMAL) { @@ -275,7 +331,7 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int int Param_getFilenameArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val) { - int isReadyS, *isReady = &isReadyS; + int isReady; int retVal = 0; int status; int found = 1; @@ -287,6 +343,9 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i *rows = 0; if(Param_getStringArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) { +#ifdef SYNCHRONOUS_GROUP + CA_SYNC_GID pgid; +#endif pPVName = malloc((strlen("HAD:PF:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char)); Param_returnPVName(my, "PF", name, idx, pPVName); @@ -297,33 +356,53 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i Param_strerror((Param *) my, ca_message(status)); retVal = -1; } else { - - if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { +#ifdef SYNCHRONOUS_GROUP + ca_sg_create(&pgid); +#endif + do { + status = ca_pend_io(TIMEOUTIO); + } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT)); + if(status != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; } if(found == 1) { +#ifndef SYNCHRONOUS_GROUP ParamStringResult resultS, *result = &resultS; - result->val = val; + result->val = prefixVal; result->rows = rows; result->maxrows = maxrows; result->my = my; result->retVal = &retVal; - result->isReady = isReady; - *isReady = 1; + result->isReady = &isReady; + isReady = 1; for (i = 0 ; i < maxrows ; i++) { prefixVal[i] = malloc(PARAM_MAX_VALUE_LEN); } - result->val = prefixVal; - status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result); +#else + status = ca_sg_array_get(pgid, ca_field_type(chan), ca_element_count(chan), chan, prefixVal); +#endif Param_strerror((Param *) my, ca_message(status)); - +#ifndef SYNCHRONOUS_GROUP do { - status = ca_pend_event(TIMEOUTEVT); - } while(*isReady == 1); + ca_pend_event(TIMEOUTEVT); + } while(isReady == 1); +#else + if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_TIMEOUT) { + retVal = 0; + *rows = 0; + } else if (status == ECA_NORMAL) { + retVal = 0; + *rows = maxrows > ca_element_count(chan) ? ca_element_count(chan) : maxrows; + } else { + retVal = -1; + *rows = 0; + } + ca_sg_delete(pgid); +#endif for (i = 0 ; i < *rows ; i++) { if (*prefixVal[i] == '/') { @@ -337,10 +416,9 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i free(prefixVal[i]); } } - } - - if((status = ca_clear_channel(chan)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); + if((status = ca_clear_channel(chan)) != ECA_NORMAL) { + Param_strerror((Param *) my, ca_message(status)); + } } free(pPVName); @@ -360,7 +438,10 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *size, FILE **val) { - int isReadyS, *isReady = &isReadyS; +#ifdef SYNCHRONOUS_GROUP + CA_SYNC_GID pgid; +#endif + int isReady; int retVal = 0; int status; int found = 1; @@ -377,8 +458,13 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si Param_strerror((Param *) my, ca_message(status)); retVal = -1; } else { - - if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { +#ifdef SYNCHRONOUS_GROUP + ca_sg_create(&pgid); +#endif + do { + status = ca_pend_io(TIMEOUTIO); + } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT)); + if(status != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; @@ -390,25 +476,41 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si } if(found == 1) { +#ifndef SYNCHRONOUS_GROUP ParamBlobResult resultS, *result = &resultS; result->val = val; result->size = size; result->my = my; result->retVal = &retVal; - result->isReady = isReady; - *isReady = 1; + result->isReady = &isReady; + isReady = 1; status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyBlobToAllocMem, result); +#else + status = ca_sg_array_get(pgid, ca_field_type(chan), ca_element_count(chan), chan, val); +#endif + Param_strerror((Param *) my, ca_message(status)); +#ifndef SYNCHRONOUS_GROUP + do { + ca_pend_event(TIMEOUTEVT); + } while(isReady == 1); +#else + if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_TIMEOUT) { + retVal = 0; + *size = 0; + } else if (status == ECA_NORMAL) { + retVal = 0; + *size = ca_element_count(chan) * sizeof(DBR_LONG); + } else { + retVal = -1; + *size = 0; + } + ca_sg_delete(pgid); +#endif + } + if((status = ca_clear_channel(chan)) != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); - - do { - status = ca_pend_event(TIMEOUTEVT); - } while(*isReady == 1); } - } - - if((status = ca_clear_channel(chan)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); } free(pPVName); @@ -418,6 +520,9 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned long int value) { +#ifdef SYNCHRONOUS_GROUP + CA_SYNC_GID pgid; +#endif int retVal = 0; int status; int found = 1; @@ -434,19 +539,40 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned Param_strerror((Param *) my, ca_message(status)); retVal = -1; } else { - - if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { +#ifdef SYNCHRONOUS_GROUP + ca_sg_create(&pgid); +#endif + do { + status = ca_pend_io(TIMEOUTIO); + } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT)); + if(status != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; } if(found == 1) { - status = ca_put(DBR_LONG, chan, &value); +#ifndef SYNCHRONOUS_GROUP + ParamConfirmStoreStruct confirmS, *confirm = &confirmS; + int isReady = 1; + confirm->isReady = &isReady; + + status = ca_array_put_callback(DBR_LONG, 1, chan, &value, Param_confirmStore, confirm); +#else + status = ca_sg_array_put(pgid, DBR_LONG, 1, chan, &value); +#endif Param_strerror((Param *) my, ca_message(status)); - - if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); +#ifndef SYNCHRONOUS_GROUP + do { + ca_pend_event(TIMEOUTEVT); + } while(isReady == 1); +#else + if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_NORMAL) { + retVal = 0; + } else { + retVal = -1; } + ca_sg_delete(pgid); +#endif } if((status = ca_clear_channel(chan)) != ECA_NORMAL) { @@ -461,6 +587,9 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned int Param_storeString(const Param *my, const char *name, const char *idx, const char *value) { +#ifdef SYNCHRONOUS_GROUP + CA_SYNC_GID pgid; +#endif int retVal = 0; int status; int found = 1; @@ -477,19 +606,40 @@ int Param_storeString(const Param *my, const char *name, const char *idx, const Param_strerror((Param *) my, ca_message(status)); retVal = -1; } else { - - if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { +#ifdef SYNCHRONOUS_GROUP + ca_sg_create(&pgid); +#endif + do { + status = ca_pend_io(TIMEOUTIO); + } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT)); + if(status != ECA_NORMAL) { Param_strerror((Param *) my, ca_message(status)); found = 0; retVal = 0; } if(found == 1) { - status = ca_put(DBR_STRING, chan, value); - Param_strerror((Param *) my, ca_message(status)); +#ifndef SYNCHRONOUS_GROUP + ParamConfirmStoreStruct confirmS, *confirm = &confirmS; + int isReady = 1; + confirm->isReady = &isReady; - if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) { - Param_strerror((Param *) my, ca_message(status)); + status = ca_array_put_callback(DBR_STRING, 1, chan, value, Param_confirmStore, confirm); +#else + status = ca_sg_array_put(pgid, DBR_STRING, 1, chan, &value); +#endif + Param_strerror((Param *) my, ca_message(status)); +#ifndef SYNCHRONOUS_GROUP + do { + ca_pend_event(TIMEOUTEVT); + } while(isReady == 1); +#else + if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_NORMAL) { + retVal = 0; + } else { + retVal = -1; } + ca_sg_delete(pgid); +#endif } if((status = ca_clear_channel(chan)) != ECA_NORMAL) { @@ -581,6 +731,12 @@ static void Param_copyBlobToAllocMem(struct event_handler_args args) *(result->isReady) = 0; } +static void Param_confirmStore(struct event_handler_args args) +{ + ParamConfirmStoreStruct *result = args.usr; + *(result->isReady) = 0; +} + static void Param_returnPVName(const Param *my, const char *type, const char *name, const char *idx, char *pPVName) { int i; diff --git a/allParam/file/fileParam.c b/allParam/file/fileParam.c index 27b8d3a..7bc8493 100644 --- a/allParam/file/fileParam.c +++ b/allParam/file/fileParam.c @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/file/fileParam.c,v 1.18 2002-05-27 13:29:52 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L #include @@ -8,6 +9,7 @@ #include #include #include +#include #include @@ -28,6 +30,8 @@ int conSetupParam(Param *my, const char *setup) char *storageFile; FILE *f; char buf[2 * (PARAM_MAX_NAME_LEN + 1)]; + int row = 0; + struct utsname bufferS, *buffer = &bufferS; my->strerror = NULL; my->specParam = malloc(sizeof(FileParam)); @@ -89,6 +93,16 @@ int conSetupParam(Param *my, const char *setup) free(paramFile); free(storageFile); + if(retVal == 0) { + my->basedir = malloc(PARAM_MAX_VALUE_LEN); + uname(buffer); + if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) { + strcpy(my->basedir, ""); + } else if (strlen(my->basedir)) { + strcat(my->basedir, "/"); + } + } + return retVal; } @@ -100,6 +114,8 @@ int conParam(Param *my) FILE *f; char buf[2 * (PARAM_MAX_NAME_LEN + 1)]; char *tmp; + int row = 0; + struct utsname bufferS, *buffer = &bufferS; my->strerror = NULL; my->setup = NULL; @@ -166,6 +182,16 @@ int conParam(Param *my) free(paramFile); free(storageFile); + if(retVal == 0) { + my->basedir = malloc(PARAM_MAX_VALUE_LEN); + uname(buffer); + if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) { + strcpy(my->basedir, ""); + } else if (strlen(my->basedir)) { + strcat(my->basedir, "/"); + } + } + return retVal; } @@ -182,6 +208,7 @@ void desParam(Param *my) free((FileParam *) (my->specParam)); fclose(((FileParam *) (my->specParam))->store); + free(my->basedir); if(my->setup != NULL) { free(my->setup); } @@ -208,14 +235,9 @@ int Param_getFilename(const Param *my, const char *name, const char *idx, int *r strcpy(val, value); *row = 1; } else { - if ((Param_getString(my, "glob", "basedir", &rows, val) == 0) && (rows == 1)) { - strcat(val, "/"); - strcat(val, value); - *row = 1; - } else { - strcpy(val, value); - *row = 1; - } + strcpy(val, my->basedir); + strcat(val, value); + *row = 1; } } else { *row = 0; @@ -286,7 +308,6 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int int Param_getFilenameArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val) { int retVal = 0; - int row = 0; int i; char *value[PARAM_MAX_ARRAY_LEN]; @@ -295,20 +316,14 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i } if (((retVal = Param_getStringArray(my, name, idx, maxrows, rows, value)) == 0) && (*rows > 0)) { - char basedir[PARAM_MAX_VALUE_LEN]; - if ((Param_getString(my, "glob", "basedir", &row, basedir) == 0) && (row == 1)) { - strcat(basedir, "/"); - } else { - strcpy(basedir, ""); - } for (i = 0 ; i < *rows ; i++) { if (value[i][0] != '/') { - strcpy(val[i], basedir); + strcpy(val[i], my->basedir); + strcat(val[i], value[i]); } else { - strcpy(val[i], ""); + strcpy(val[i], value[i]); } - strcat(val[i], value[i]); } } else { *rows = 0; diff --git a/allParam/include/allParam.h b/allParam/include/allParam.h index efaba35..6952d18 100644 --- a/allParam/include/allParam.h +++ b/allParam/include/allParam.h @@ -14,9 +14,10 @@ extern "C" { #define PARAM_MAX_NAME_LEN 128 typedef struct ParamS { - char *strerror; + char *basedir; char *setup; void *specParam; + char *strerror; } Param; int conSetupParam(Param *, const char *); diff --git a/allParam/tcl/tclParam.c b/allParam/tcl/tclParam.c index e509acd..f4b47d7 100644 --- a/allParam/tcl/tclParam.c +++ b/allParam/tcl/tclParam.c @@ -1,3 +1,4 @@ +static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/tcl/tclParam.c,v 1.21 2002-05-27 13:29:52 hadaq Exp $"; #define _POSIX_C_SOURCE 199509L #include @@ -8,6 +9,7 @@ #include #include #include +#include #include @@ -26,6 +28,8 @@ int conSetupParam(Param *my, const char *setup) char *paramFile; char *storageFile; int code; + int row = 0; + struct utsname bufferS, *buffer = &bufferS; my->strerror = NULL; my->specParam = malloc(sizeof(TclParam)); @@ -36,7 +40,6 @@ 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); sprintf(paramFile, "%s_p.tcl", (my->setup == NULL) ? "default" : setup); @@ -57,6 +60,16 @@ int conSetupParam(Param *my, const char *setup) retVal = -1; } + if(retVal == 0) { + my->basedir = malloc(PARAM_MAX_VALUE_LEN); + uname(buffer); + if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) { + strcpy(my->basedir, ""); + } else if (strlen(my->basedir)) { + strcat(my->basedir, "/"); + } + } + free(paramFile); free(storageFile); @@ -69,6 +82,8 @@ int conParam(Param *my) char *paramFile; char *storageFile; int code; + int row = 0; + struct utsname bufferS, *buffer = &bufferS; my->strerror = NULL; my->setup = NULL; @@ -98,6 +113,16 @@ int conParam(Param *my) return -1; } + if(retVal == 0) { + my->basedir = malloc(PARAM_MAX_VALUE_LEN); + uname(buffer); + if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) { + strcpy(my->basedir, ""); + } else if (strlen(my->basedir)) { + strcat(my->basedir, "/"); + } + } + return retVal; } @@ -107,6 +132,7 @@ void desParam(Param *my) fclose(((TclParam *) (my->specParam))->store); free((TclParam *) (my->specParam)); + free(my->basedir); if(my->setup != NULL) { free(my->setup); } @@ -131,17 +157,11 @@ int Param_getFilename(const Param *my, const char *name, const char *idx, int *r if (((retVal = Param_getString(my, name, idx, &rows, value)) == 0) && (rows == 1)) { if (value[0] == '/') { strcpy(val, value); - *row = 1; } else { - if ((Param_getString(my, "glob", "basedir", &rows, val) == 0) && (rows == 1)) { - strcat(val, "/"); - strcat(val, value); - *row = 1; - } else { - strcpy(val, value); - *row = 1; - } + strcpy(val, my->basedir); + strcat(val, value); } + *row = 1; } else { *row = 0; } @@ -211,7 +231,6 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int int Param_getFilenameArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val) { int retVal = 0; - int row = 0; int i; char *value[PARAM_MAX_ARRAY_LEN]; @@ -220,20 +239,13 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i } if (((retVal = Param_getStringArray(my, name, idx, maxrows, rows, value)) == 0) && (*rows > 0)) { - char basedir[PARAM_MAX_VALUE_LEN]; - - if ((Param_getString(my, "glob", "basedir", &row, basedir) == 0) && (row == 1)) { - strcat(basedir, "/"); - } else { - strcpy(basedir, ""); - } for (i = 0 ; i < *rows ; i++) { if (value[i][0] != '/') { - strcpy(val[i], basedir); + strcpy(val[i], my->basedir); + strcat(val[i], value[i]); } else { - strcpy(val[i], ""); + strcpy(val[i], value[i]); } - strcat(val[i], value[i]); } } else { *rows = 0; -- 2.43.0