1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
*/
#include "bootlib.h"
/* OS_CHDIR -- Change the current default directory. Note that the kernel
* procedure ZFCHDR should only be called with the full pathname of a
* directory.
*/
int
os_chdir (char *dir)
{
XCHAR dpath[SZ_PATHNAME+1];
XCHAR osdir[SZ_PATHNAME+1];
XINT sz_osdir, status, x_maxch=SZ_PATHNAME;
os_fpathname (dir, (char *)dpath, SZ_PATHNAME);
os_strupk ((char *)dpath, osdir, SZ_PATHNAME);
ZFXDIR (osdir, osdir, &x_maxch, &sz_osdir);
if (sz_osdir <= 0) {
/* Dir is a subdirectory, not a full pathname. Note that this
* only works for an immediate subdirectory, and does not work
* for paths relative to the cwd.
*/
ZFGCWD (osdir, &x_maxch, &sz_osdir);
os_strupk ((char *)osdir, osdir, SZ_PATHNAME);
os_strupk (dir, dpath, SZ_PATHNAME);
ZFSUBD (osdir, &x_maxch, dpath, &sz_osdir);
os_strpak (osdir, (char *)dpath, SZ_PATHNAME);
}
ZFCHDR (dpath, &status);
return (status);
}
|