change libversionShow syntax and other fixes for vxWorks

This commit is contained in:
2015-10-20 16:13:54 +02:00
parent b2765bfea9
commit 3b6048cfe3
+38 -25
View File
@@ -54,8 +54,6 @@ epicsShareFunc int epicsShareAPI iocshCmd (const char *cmd);
int requireDebug=0;
static int firstTime = 1;
#if defined (vxWorks)
#include <symLib.h>
@@ -254,8 +252,11 @@ static int runLoadScript(const char* script, const char* module, const char* ver
{
char *scriptpath = NULL;
char *subst = NULL;
const char *mylocation = getLibLocation("require");
if (!mylocation) return -1;
const char *mylocation = getenv("require_DIR");
if (requireDebug)
printf("require: runLoadScript %s, loc=%s\n", script, mylocation);
if (!mylocation) return 0;
if (asprintf(&scriptpath, "%s/%s", mylocation, script) < 0) return -1;
if (asprintf(&subst, "MODULE=%s,VERSION=%s", module, version) < 0) return -1;
runScript(scriptpath, subst);
@@ -329,7 +330,7 @@ static int setupDbPath(const char* module, const char* dbdir)
return 0;
}
static void registerModule(const char* module, const char* version, const char* location)
void registerModule(const char* module, const char* version, const char* location)
{
moduleitem* m;
size_t lm = strlen(module) + 1;
@@ -389,7 +390,7 @@ static BOOL findLibRelease (
return TRUE;
}
static void registerExternalModules()
void registerExternalModules()
{
/* iterate over all symbols */
symEach(sysSymTbl, (FUNCPTR)findLibRelease, 0);
@@ -495,27 +496,34 @@ const char* getLibLocation(const char* libname)
return NULL;
}
int libversionShow(const char* pattern, int showLocation)
int libversionShow(int showLocation, const char* outfile)
{
moduleitem* m;
int lm, lv;
FILE* out = stdout;
if (firstTime) /* can only happen on vxWorks */
if (outfile)
{
firstTime=0;
registerExternalModules();
}
out = fopen(outfile, "w");
if (out < 0)
{
fprintf(stderr, "can't open %s: %s\n",
outfile, strerror(errno));
return -1;
}
}
for (m = loadedModules; m; m=m->next)
{
if (pattern && *pattern && !strstr(m->content, pattern)) continue;
lm = strlen(m->content)+1;
lv = strlen(m->content+lm)+1;
epicsStdoutPrintf("%20s %-20s %s\n",
fprintf(out, "%20s %-20s %s\n",
m->content,
m->content+lm,
showLocation ? m->content+lm+lv : "");
}
if (outfile)
fclose(out);
return 0;
}
@@ -680,12 +688,6 @@ int require(const char* module, const char* version, const char* args)
int status;
char* versionstr;
if (firstTime) /* can only happen on vxWorks */
{
firstTime=0;
registerExternalModules();
}
if (getenv("T_A") == NULL)
putenvprintf("T_A=%s", targetArch);
@@ -908,6 +910,12 @@ int runScript(const char* filename, const char* args)
/* execute line by line after expanding macros with arguments or environment */
if ((line_raw = malloc(line_raw_size)) == NULL) goto error;
if ((line_exp = malloc(line_exp_size)) == NULL) goto error;
if (requireDebug)
{
printf("runScript: line_raw=%p\n", line_raw);
printf("runScript: line_exp=%p\n", line_exp);
}
while (fgets(line_raw, line_raw_size, file))
{
const unsigned char* p;
@@ -929,8 +937,12 @@ int runScript(const char* filename, const char* args)
{
if (requireDebug)
printf("runScript: grow expand buffer: len=%ld size=%ld\n", len, line_exp_size);
free(line_exp);
if ((line_exp = malloc(line_exp_size *= 2)) == NULL) goto error;
if (requireDebug)
printf("runScript: free = %p\n", line_exp);
if ((line_exp = realloc(line_exp, line_exp_size *= 2)) == NULL) goto error;
sleep(1);
if (requireDebug)
printf("runScript: alloc = %p\n", line_exp);
}
printf("%s\n", line_exp);
p=(unsigned char*)line_exp;
@@ -1381,13 +1393,13 @@ static void requireFunc (const iocshArgBuf *args)
require(args[0].sval, args[1].sval, args[2].sval);
}
static const iocshArg libversionShowArg0 = { "pattern", iocshArgString };
static const iocshArg libversionShowArg1 = { "showLocation", iocshArgInt };
static const iocshArg libversionShowArg0 = { "showLocation", iocshArgInt };
static const iocshArg libversionShowArg1 = { "outputfile", iocshArgString };
static const iocshArg * const libversionArgs[2] = { &libversionShowArg0, &libversionShowArg1 };
static const iocshFuncDef libversionShowDef = { "libversionShow", 2, libversionArgs };
static void libversionShowFunc (const iocshArgBuf *args)
{
libversionShow(args[0].sval, args[1].ival);
libversionShow(args[0].ival, args[1].sval);
}
static const iocshArg ldArg0 = { "library", iocshArgString };
@@ -1409,6 +1421,7 @@ static void runScriptFunc (const iocshArgBuf *args)
static void requireRegister(void)
{
static int firstTime = 1;
if (firstTime) {
firstTime = 0;
iocshRegister (&ldDef, ldFunc);