iocsh: set PWD
Set the env variable PWD during libCom IOC shell function registration. Change environment variable PWD when a user calls cd from the IOC shell
This commit is contained in:
committed by
Michael Davidsaver
parent
dd09afc4e8
commit
614961da17
@@ -27,6 +27,30 @@
|
|||||||
#include "epicsGeneralTime.h"
|
#include "epicsGeneralTime.h"
|
||||||
#include "libComRegister.h"
|
#include "libComRegister.h"
|
||||||
|
|
||||||
|
/* Register the PWD environment variable when the cd IOC shell function is
|
||||||
|
* registered. This variable contains the current directory path.
|
||||||
|
*/
|
||||||
|
static void updatePWD() {
|
||||||
|
static int lasterror;
|
||||||
|
char buf[1024];
|
||||||
|
char *pwd = getcwd(buf, sizeof(buf));
|
||||||
|
if (pwd) {
|
||||||
|
pwd[sizeof(buf) - 1] = '\0';
|
||||||
|
lasterror = 0;
|
||||||
|
epicsEnvSet("PWD", buf);
|
||||||
|
} else {
|
||||||
|
if(lasterror!=errno) {
|
||||||
|
lasterror = errno;
|
||||||
|
if (errno == ERANGE) {
|
||||||
|
fprintf(stderr, "Warning: Current path exceeds %u characters\n",
|
||||||
|
(unsigned)sizeof(buf));
|
||||||
|
} else {
|
||||||
|
perror("getcwd");
|
||||||
|
}
|
||||||
|
fprintf(stderr, "Warning: Unable to update $PWD\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* date */
|
/* date */
|
||||||
void date(const char *format)
|
void date(const char *format)
|
||||||
@@ -83,6 +107,8 @@ static void chdirCallFunc(const iocshArgBuf *args)
|
|||||||
if (args[0].sval == NULL ||
|
if (args[0].sval == NULL ||
|
||||||
iocshSetError(chdir(args[0].sval))) {
|
iocshSetError(chdir(args[0].sval))) {
|
||||||
fprintf(stderr, "Invalid directory path, ignored\n");
|
fprintf(stderr, "Invalid directory path, ignored\n");
|
||||||
|
} else {
|
||||||
|
updatePWD();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,9 +117,10 @@ static const iocshFuncDef pwdFuncDef = {"pwd", 0, 0,
|
|||||||
"Print name of current/working directory\n"};
|
"Print name of current/working directory\n"};
|
||||||
static void pwdCallFunc (const iocshArgBuf *args)
|
static void pwdCallFunc (const iocshArgBuf *args)
|
||||||
{
|
{
|
||||||
char buf[256];
|
char buf[1024];
|
||||||
char *pwd = getcwd ( buf, sizeof(buf) - 1 );
|
char *pwd = getcwd ( buf, sizeof(buf) );
|
||||||
if ( pwd ) {
|
if ( pwd ) {
|
||||||
|
buf[sizeof(buf)-1u] = '\0';
|
||||||
printf ( "%s\n", pwd );
|
printf ( "%s\n", pwd );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -449,6 +476,8 @@ void epicsStdCall libComRegister(void)
|
|||||||
iocshRegister(&chdirFuncDef, chdirCallFunc);
|
iocshRegister(&chdirFuncDef, chdirCallFunc);
|
||||||
iocshRegister(&pwdFuncDef, pwdCallFunc);
|
iocshRegister(&pwdFuncDef, pwdCallFunc);
|
||||||
|
|
||||||
|
updatePWD();
|
||||||
|
|
||||||
iocshRegister(&epicsEnvSetFuncDef, epicsEnvSetCallFunc);
|
iocshRegister(&epicsEnvSetFuncDef, epicsEnvSetCallFunc);
|
||||||
iocshRegister(&epicsEnvUnsetFuncDef, epicsEnvUnsetCallFunc);
|
iocshRegister(&epicsEnvUnsetFuncDef, epicsEnvUnsetCallFunc);
|
||||||
iocshRegister(&epicsParamShowFuncDef, epicsParamShowCallFunc);
|
iocshRegister(&epicsParamShowFuncDef, epicsParamShowCallFunc);
|
||||||
|
|||||||
Reference in New Issue
Block a user