static char sccsid
[] = "@(#)getwd.c 5.3 (Berkeley) %G%";
* return codes SUCCESS | FAIL
getwd(wkdir
); /* Call Eunice C library version instead */
if ((fp
= rpopen("PATH=/bin:/usr/bin:/usr/ucb;pwd 2>&-", "r")) == NULL
)
if (fgets(wkdir
, 100, fp
) == NULL
) {
if (*(c
= wkdir
+ strlen(wkdir
) - 1) == '\n')
* gwd uses 'reverting' version of popen
* which runs process with permissions of real gid/uid
* rather than the effective gid/uid.
#define tst(a,b) (*mode == 'r'? (b) : (a))
static int popen_pid
[20];
register myside
, hisside
, pid
;
myside
= tst(p
[WTR
], p
[RDR
]);
hisside
= tst(p
[RDR
], p
[WTR
]);
if((pid
= fork()) == 0) {
/* myside and hisside reverse roles in child */
dup2(hisside
, tst(0, 1));
execl("/bin/sh", "sh", "-c", cmd
, (char *)0);
return(fdopen(myside
, mode
));
register f
, r
, (*hstat
)(), (*istat
)(), (*qstat
)();
istat
= signal(SIGINT
, SIG_IGN
);
qstat
= signal(SIGQUIT
, SIG_IGN
);
hstat
= signal(SIGHUP
, SIG_IGN
);
while((r
= wait(&status
)) != popen_pid
[f
] && r
!= -1)