diff --git a/require.c b/require.c index 97a25d251c09634793972b685e317984033afe59..fa1bdd5a9e1066bfd3c5867b9928780639981bda 100644 --- a/require.c +++ b/require.c @@ -25,7 +25,7 @@ #ifdef BASE_VERSION #define EPICS_3_13 -#define epicsStdoutPrintf printf +#define epicsGetStdout() stdout extern int dbLoadDatabase(const char *filename, const char *path, const char *substitutions); extern int dbLoadTemplate(const char *filename); int dbLoadRecords(const char *filename, const char *substitutions) @@ -501,7 +501,7 @@ int libversionShow(int showLocation, const char* outfile) moduleitem* m; int lm, lv; - FILE* out = stdout; + FILE* out = epicsGetStdout(); if (outfile) { @@ -512,7 +512,7 @@ int libversionShow(int showLocation, const char* outfile) outfile, strerror(errno)); return -1; } - } + } for (m = loadedModules; m; m=m->next) { lm = strlen(m->content)+1; @@ -522,6 +522,7 @@ int libversionShow(int showLocation, const char* outfile) m->content+lm, showLocation ? m->content+lm+lv : ""); } + fflush(out); if (outfile) fclose(out); return 0; @@ -861,7 +862,7 @@ int runScript(const char* filename, const char* args) FILE* file = NULL; char* line_raw = NULL; char* line_exp = NULL; - long line_raw_size = 100; + long line_raw_size = 256; long line_exp_size = line_raw_size; char** pairs; int status = 0; @@ -933,16 +934,18 @@ int runScript(const char* filename, const char* args) if (requireDebug) printf("runScript raw line (%ld chars): '%s'\n", len, line_raw); /* expand and check the buffer size (different epics versions write different may number of bytes)*/ - while ((len = labs(macExpandString(mac, line_raw, line_exp, line_exp_size-1))) >= line_exp_size-2) + while ((len = labs(macExpandString(mac, line_raw, line_exp, +#ifdef EPICS_3_13 + /* 3.13 version of macExpandString is broken and may write more than allowed */ + line_exp_size/2))) >= line_exp_size/2) +#else + line_exp_size-1))) >= line_exp_size-2) +#endif { if (requireDebug) printf("runScript: grow expand buffer: len=%ld size=%ld\n", len, line_exp_size); - 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); + free(line_exp); + if ((line_exp = malloc(line_exp_size *= 2)) == NULL) goto error; } printf("%s\n", line_exp); p=(unsigned char*)line_exp;