X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fvfs%2Fopen.c;h=54838e94eba69261169ed9c5a578b9118f3da532;hb=e349c65dfdc7bb37c83bcf8eb34f26fe7efc7869;hp=3ac3fa3d22f7cbcd13ba685d85ceecfc257a7bc4;hpb=6098f7e3a0a3247c9517f9b04be814d16a98a564;p=tpg%2Facess2.git diff --git a/Kernel/vfs/open.c b/Kernel/vfs/open.c index 3ac3fa3d..54838e94 100644 --- a/Kernel/vfs/open.c +++ b/Kernel/vfs/open.c @@ -495,6 +495,41 @@ void VFS_Close(int FD) h->Node = NULL; } +/** + * \fn int VFS_ChDir(char *New) + * \brief Change current working directory + */ +int VFS_ChDir(char *New) +{ + char *buf; + tVFS_Node *node; + + // Create Absolute + buf = VFS_GetAbsPath(New); + if(buf == NULL) return -1; + + // Check if path is valid + node = VFS_ParsePath(buf, NULL); + if(!node) return -1; + + // Check if is a directory + if( !(node->Flags & VFS_FFLAG_DIRECTORY) ) { + if(node->Close) node->Close(node); + return -1; + } + // Close node + if(node->Close) node->Close(node); + + // Copy over + strcpy(buf, New); + + // Free old and set new + free( CFGPTR(CFG_VFS_CWD) ); + CFGPTR(CFG_VFS_CWD) = buf; + + return 1; +} + /** * \fn tVFS_Handle *VFS_GetHandle(int FD) * \brief Gets a pointer to the handle information structure