Merged changes from 3.14 branch to revno 12590
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
|
||||
#define epicsExportSharedSymbols
|
||||
#include "envDefs.h"
|
||||
#include "epicsExit.h"
|
||||
#include "epicsReadline.h"
|
||||
|
||||
#define EPICS_COMMANDLINE_LIBRARY_EPICS 0
|
||||
@@ -84,6 +85,14 @@ struct readlineContext {
|
||||
char *line;
|
||||
};
|
||||
|
||||
static enum {rlNone, rlIdle, rlBusy} rlState = rlNone;
|
||||
|
||||
static void rlExit(void *dummy) {
|
||||
if (rlState == rlBusy)
|
||||
rl_cleanup_after_signal();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Create a command-line context
|
||||
*/
|
||||
@@ -92,6 +101,11 @@ epicsReadlineBegin(FILE *in)
|
||||
{
|
||||
struct readlineContext *readlineContext;
|
||||
|
||||
if (rlState == rlNone) {
|
||||
epicsAtExit(rlExit, NULL);
|
||||
rlState = rlIdle;
|
||||
}
|
||||
|
||||
readlineContext = malloc(sizeof *readlineContext);
|
||||
if (readlineContext != NULL) {
|
||||
readlineContext->in = in;
|
||||
@@ -124,7 +138,9 @@ epicsReadline (const char *prompt, void *context)
|
||||
free (readlineContext->line);
|
||||
readlineContext->line = NULL;
|
||||
if (readlineContext->in == NULL) {
|
||||
rlState = rlBusy;
|
||||
line = readline (prompt);
|
||||
rlState = rlIdle;
|
||||
}
|
||||
else {
|
||||
line = (char *)malloc (linesize * sizeof *line);
|
||||
|
||||
Reference in New Issue
Block a user