From 1cb0c5b4d0428a136f81f5446860fd58c611527b Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Thu, 27 Sep 2018 13:35:10 +0200 Subject: [PATCH 1/2] Fix command line functions: print error if required arguments are missing --- modules/database/src/ioc/db/dbAccess.c | 11 ++++++++++- modules/database/src/ioc/db/dbBkpt.c | 12 ++++++++++++ modules/database/src/ioc/db/dbNotify.c | 6 +++++- modules/database/src/ioc/db/dbState.c | 5 +++++ modules/database/src/ioc/db/db_test.c | 12 ++++++++++++ modules/database/src/ioc/misc/dlload.c | 9 +++++++++ modules/libcom/src/osi/os/Darwin/osdEnv.c | 5 +++++ modules/libcom/src/osi/os/default/osdEnv.c | 5 +++++ modules/libcom/src/osi/os/iOS/osdEnv.c | 5 +++++ modules/libcom/src/osi/os/vxWorks/osdEnv.c | 5 +++++ 10 files changed, 73 insertions(+), 2 deletions(-) diff --git a/modules/database/src/ioc/db/dbAccess.c b/modules/database/src/ioc/db/dbAccess.c index cd7535194..beef82919 100644 --- a/modules/database/src/ioc/db/dbAccess.c +++ b/modules/database/src/ioc/db/dbAccess.c @@ -754,13 +754,22 @@ long dbBufferSize(short dbr_type, long options, long no_elements) } int dbLoadDatabase(const char *file, const char *path, const char *subs) { + if (!file) { + printf("Usage: dbLoadDatabase (\"file\", \"path\", \"subs\")\n"); + return -1; + } return dbReadDatabase(&pdbbase, file, path, subs); } int dbLoadRecords(const char* file, const char* subs) { - int status = dbReadDatabase(&pdbbase, file, 0, subs); + int status; + if (!file) { + printf("Usage: dbLoadRecords (\"file\", \"subs\")\n"); + return -1; + } + status = dbReadDatabase(&pdbbase, file, 0, subs); if (!status && dbLoadRecordsHook) dbLoadRecordsHook(file, subs); return status; diff --git a/modules/database/src/ioc/db/dbBkpt.c b/modules/database/src/ioc/db/dbBkpt.c index 8e7bf3a2b..03120f49d 100644 --- a/modules/database/src/ioc/db/dbBkpt.c +++ b/modules/database/src/ioc/db/dbBkpt.c @@ -283,6 +283,10 @@ long dbb(const char *record_name) /* * Convert name to address */ + if (!record_name) { + printf("Usage: dbb (\"record_name\")\n"); + return -1; + } status = dbNameToAddr(record_name, &addr); if (status == S_db_notFound) printf(" BKPT> Record %s not found\n", record_name); @@ -403,6 +407,10 @@ long dbd(const char *record_name) /* * Convert name to address */ + if (!record_name) { + printf("Usage: dbd (\"record_name\")\n"); + return -1; + } status = dbNameToAddr(record_name, &addr); if (status == S_db_notFound) printf(" BKPT> Record %s not found\n", record_name); @@ -846,6 +854,10 @@ long dbap(const char *record_name) /* * Convert name to address */ + if (!record_name) { + printf("Usage: dbap (\"record_name\")\n"); + return -1; + } status = dbNameToAddr(record_name, &addr); if (status == S_db_notFound) printf(" BKPT> Record %s not found\n", record_name); diff --git a/modules/database/src/ioc/db/dbNotify.c b/modules/database/src/ioc/db/dbNotify.c index c718d3740..65c9c1dbf 100644 --- a/modules/database/src/ioc/db/dbNotify.c +++ b/modules/database/src/ioc/db/dbNotify.c @@ -596,9 +596,13 @@ long dbtpn(char *pname, char *pvalue) tpnInfo *ptpnInfo; processNotify *ppn=NULL; + if (!pname) { + printf("Usage: dbtpn (\"name\", \"value\")\n"); + return -1; + } chan = dbChannelCreate(pname); if (!chan) { - printf("dbtpn: No such channel"); + printf("dbtpn: No such channel\n"); return -1; } diff --git a/modules/database/src/ioc/db/dbState.c b/modules/database/src/ioc/db/dbState.c index 6de7735cd..88deab4e9 100644 --- a/modules/database/src/ioc/db/dbState.c +++ b/modules/database/src/ioc/db/dbState.c @@ -49,6 +49,11 @@ dbStateId dbStateCreate(const char *name) { dbStateId id; + if (!name) + { + printf("Usage: dbStateCreate (\"name\")\n"); + return NULL; + } if ((id = dbStateFind(name))) return id; diff --git a/modules/database/src/ioc/db/db_test.c b/modules/database/src/ioc/db/db_test.c index 8d7ad31b1..6f58e061d 100644 --- a/modules/database/src/ioc/db/db_test.c +++ b/modules/database/src/ioc/db/db_test.c @@ -40,6 +40,10 @@ int gft(const char *pname) short type; int i; + if (!pname) { + printf("Usage: gft (\"name\")\n"); + return -1; + } chan = dbChannel_create(pname); if (!chan) { printf("Channel couldn't be created\n"); @@ -94,6 +98,10 @@ int pft(const char *pname, const char *pvalue) unsigned char charvalue; double doublevalue; + if (!pname || !pvalue) { + printf("Usage: pft (\"name\", \"value\")\n"); + return -1; + } chan = dbChannel_create(pname); if (!chan) { printf("Channel couldn't be created\n"); @@ -223,6 +231,10 @@ int tpn(const char *pname, const char *pvalue) tpnInfo *ptpnInfo; processNotify *ppn = NULL; + if (!pname || !pvalue) { + printf("Usage: tpn (\"name\", \"value\")\n"); + return -1; + } chan = dbChannel_create(pname); if (!chan) { printf("Channel couldn't be created\n"); diff --git a/modules/database/src/ioc/misc/dlload.c b/modules/database/src/ioc/misc/dlload.c index 5b0591d5f..48117f55b 100644 --- a/modules/database/src/ioc/misc/dlload.c +++ b/modules/database/src/ioc/misc/dlload.c @@ -23,3 +23,12 @@ static void dlloadRegistar(void) { iocshRegister(&dlloadFuncDef, dlloadCallFunc); } epicsExportRegistrar(dlloadRegistar); + +#ifdef vxWorks +void dlload(const char* name) +{ + if (!epicsLoadLibrary(name)) { + printf("epicsLoadLibrary failed: %s\n", epicsLoadError()); + } +} +#endif diff --git a/modules/libcom/src/osi/os/Darwin/osdEnv.c b/modules/libcom/src/osi/os/Darwin/osdEnv.c index ab3f93644..e7e90097f 100644 --- a/modules/libcom/src/osi/os/Darwin/osdEnv.c +++ b/modules/libcom/src/osi/os/Darwin/osdEnv.c @@ -35,6 +35,11 @@ */ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value) { + if (!name) { + printf ("Usage: epicsEnvSet (\"name\", \"value\")\n"); + return; + } + iocshEnvClear(name); setenv(name, value, 1); } diff --git a/modules/libcom/src/osi/os/default/osdEnv.c b/modules/libcom/src/osi/os/default/osdEnv.c index 682bcc934..d7f95099f 100644 --- a/modules/libcom/src/osi/os/default/osdEnv.c +++ b/modules/libcom/src/osi/os/default/osdEnv.c @@ -36,6 +36,11 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val { char *cp; + if (!name) { + printf ("Usage: epicsEnvSet (\"name\", \"value\")\n"); + return; + } + iocshEnvClear(name); cp = mallocMustSucceed (strlen (name) + strlen (value) + 2, "epicsEnvSet"); diff --git a/modules/libcom/src/osi/os/iOS/osdEnv.c b/modules/libcom/src/osi/os/iOS/osdEnv.c index a32cce5ef..c1ffd3694 100644 --- a/modules/libcom/src/osi/os/iOS/osdEnv.c +++ b/modules/libcom/src/osi/os/iOS/osdEnv.c @@ -32,6 +32,11 @@ */ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value) { + if (!name) { + printf ("Usage: epicsEnvSet (\"name\", \"value\")\n"); + return; + } + iocshEnvClear(name); setenv(name, value, 1); } diff --git a/modules/libcom/src/osi/os/vxWorks/osdEnv.c b/modules/libcom/src/osi/os/vxWorks/osdEnv.c index c81f49316..ebc06af13 100644 --- a/modules/libcom/src/osi/os/vxWorks/osdEnv.c +++ b/modules/libcom/src/osi/os/vxWorks/osdEnv.c @@ -37,6 +37,11 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val { char *cp; + if (!name) { + printf ("Usage: epicsEnvSet (\"name\", \"value\")\n"); + return; + } + iocshEnvClear(name); cp = mallocMustSucceed (strlen (name) + strlen (value) + 2, "epicsEnvSet"); From d44f5616a9991e0743bcc79856bad6b2804bdc7e Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Thu, 27 Sep 2018 13:35:45 +0200 Subject: [PATCH 2/2] add missing command line functions to vxWorks shell --- modules/libcom/src/iocsh/libComRegister.c | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/modules/libcom/src/iocsh/libComRegister.c b/modules/libcom/src/iocsh/libComRegister.c index d3a5cfac4..0c8d7ea53 100644 --- a/modules/libcom/src/iocsh/libComRegister.c +++ b/modules/libcom/src/iocsh/libComRegister.c @@ -66,6 +66,17 @@ static void echoCallFunc(const iocshArgBuf *args) printf("%s\n", str); } +#ifdef vxWorks +void echo(char* str) +{ + if (str) + dbTranslateEscape(str, str); + else + str = ""; + printf("%s\n", str); +} +#endif + /* chdir */ static const iocshArg chdirArg0 = { "directory name",iocshArgString}; static const iocshArg * const chdirArgs[1] = {&chdirArg0}; @@ -117,6 +128,13 @@ static void epicsParamShowCallFunc(const iocshArgBuf *args) epicsPrtEnvParams (); } +#ifdef vxWorks +void epicsParamShow() +{ + epicsPrtEnvParams (); +} +#endif + /* epicsPrtEnvParams */ static const iocshFuncDef epicsPrtEnvParamsFuncDef = {"epicsPrtEnvParams",0,0}; static void epicsPrtEnvParamsCallFunc(const iocshArgBuf *args) @@ -156,6 +174,13 @@ static void iocLogDisableCallFunc(const iocshArgBuf *args) iocLogDisable = args[0].ival; } +#ifdef vxWorks +void setIocLogDisable(int val) +{ + iocLogDisable = val; +} +#endif + /* iocLogShow */ static const iocshArg iocLogShowArg0 = {"level",iocshArgInt}; static const iocshArg * const iocLogShowArgs[1] = {&iocLogShowArg0}; @@ -205,6 +230,13 @@ static void errlogCallFunc(const iocshArgBuf *args) errlogPrintfNoConsole("%s\n", args[0].sval); } +#ifdef vxWorks +void errlog(const char *message) +{ + errlogPrintfNoConsole("%s\n", message); +} +#endif + /* iocLogPrefix */ static const iocshArg iocLogPrefixArg0 = { "prefix",iocshArgString}; static const iocshArg * const iocLogPrefixArgs[1] = {&iocLogPrefixArg0};