added epicsGetStdin/epicsSetStdin and stdout and stderr
This commit is contained in:
@@ -16,7 +16,69 @@
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "epicsThread.h"
|
||||
|
||||
#define epicsExportSharedSymbols
|
||||
#define epicsStdioPVT
|
||||
#include "epicsStdio.h"
|
||||
|
||||
/* Currently this file has nothing*/
|
||||
static epicsThreadOnceId onceId = EPICS_THREAD_ONCE_INIT;
|
||||
static epicsThreadPrivateId stdinThreadPrivateId;
|
||||
static epicsThreadPrivateId stdoutThreadPrivateId;
|
||||
static epicsThreadPrivateId stderrThreadPrivateId;
|
||||
|
||||
static void once(void *junk)
|
||||
{
|
||||
stdinThreadPrivateId = epicsThreadPrivateCreate();
|
||||
stdoutThreadPrivateId = epicsThreadPrivateCreate();
|
||||
stderrThreadPrivateId = epicsThreadPrivateCreate();
|
||||
}
|
||||
|
||||
FILE * epicsShareAPI epicsGetStdin(void)
|
||||
{
|
||||
FILE *fp;
|
||||
|
||||
epicsThreadOnce(&onceId,once,0);
|
||||
fp = epicsThreadPrivateGet(stdinThreadPrivateId);
|
||||
if(!fp) fp = stdin;
|
||||
return fp;
|
||||
}
|
||||
|
||||
void epicsShareAPI epicsSetStdin(FILE *fp)
|
||||
{
|
||||
epicsThreadOnce(&onceId,once,0);
|
||||
epicsThreadPrivateSet(stdinThreadPrivateId,fp);
|
||||
}
|
||||
|
||||
FILE * epicsShareAPI epicsGetStdout(void)
|
||||
{
|
||||
FILE *fp;
|
||||
|
||||
epicsThreadOnce(&onceId,once,0);
|
||||
fp = epicsThreadPrivateGet(stdoutThreadPrivateId);
|
||||
if(!fp) fp = stdout;
|
||||
return fp;
|
||||
}
|
||||
|
||||
void epicsShareAPI epicsSetStdout(FILE *fp)
|
||||
{
|
||||
epicsThreadOnce(&onceId,once,0);
|
||||
epicsThreadPrivateSet(stdoutThreadPrivateId,fp);
|
||||
}
|
||||
|
||||
FILE * epicsShareAPI epicsGetStderr(void)
|
||||
{
|
||||
FILE *fp;
|
||||
|
||||
epicsThreadOnce(&onceId,once,0);
|
||||
fp = epicsThreadPrivateGet(stderrThreadPrivateId);
|
||||
if(!fp) fp = stderr;
|
||||
return fp;
|
||||
}
|
||||
|
||||
void epicsShareAPI epicsSetStderr(FILE *fp)
|
||||
{
|
||||
epicsThreadOnce(&onceId,once,0);
|
||||
epicsThreadPrivateSet(stderrThreadPrivateId,fp);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,22 @@ epicsShareFunc void epicsShareAPI epicsTempName (
|
||||
char * pNameBuf, size_t nameBufLength );
|
||||
epicsShareFunc FILE * epicsShareAPI epicsTempFile ();
|
||||
|
||||
epicsShareFunc FILE * epicsShareAPI epicsGetStdin(void);
|
||||
epicsShareFunc FILE * epicsShareAPI epicsGetStdout(void);
|
||||
epicsShareFunc FILE * epicsShareAPI epicsGetStderr(void);
|
||||
epicsShareFunc void epicsShareAPI epicsSetStdin(FILE *);
|
||||
epicsShareFunc void epicsShareAPI epicsSetStdout(FILE *);
|
||||
epicsShareFunc void epicsShareAPI epicsSetStderr(FILE *);
|
||||
|
||||
#ifndef epicsStdioPVT
|
||||
#undef stdin
|
||||
#define stdin epicsGetStdin()
|
||||
#undef stdout
|
||||
#define stdout epicsGetStdout()
|
||||
#undef stderr
|
||||
#define stderr epicsGetStderr()
|
||||
#endif /* epicsStdioPVT */
|
||||
|
||||
|
||||
/*
|
||||
* truncate to specified size (we dont use truncate()
|
||||
|
||||
@@ -699,10 +699,7 @@ void *epicsThreadPrivateGet(epicsThreadPrivateId id)
|
||||
void *value;
|
||||
|
||||
assert(epicsThreadOnceCalled);
|
||||
value = pthread_getspecific(*key);
|
||||
if(errVerbose && !value)
|
||||
errlogPrintf("epicsThreadPrivateGet: pthread_getspecific returned 0\n");
|
||||
return(value);
|
||||
return pthread_getspecific(*key);
|
||||
}
|
||||
|
||||
double epicsThreadSleepQuantum ()
|
||||
|
||||
Reference in New Issue
Block a user