Bool CFileNameTo(U8 *dst,U8 *src) { MemSet(dst,0,CDIR_FILENAME_LEN); if (!FileNameChk(src)) return FALSE; StrCpy(dst,src); return TRUE; } I64 Name2DirClus(CDrv *dv,U8 *dirname) { Bool cont=TRUE,unlock; I64 cur_dir_clus; CDirEntry de; U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); DrvChk(dv); try { unlock=DrvLock(dv); cur_dir_clus=dv->root_clus; while (*buf && cont) { StrFirstRem(buf,"/",buf2); if (*buf2) { switch (dv->fs_type) { case FSt_REDSEA: cont=RedSeaFileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS); break; case FSt_FAT32: cont=FAT32FileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS); break; case FSt_ISO9660: cont=ISO1FileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS); break; default: throw('Drv'); } cur_dir_clus=de.clus; } } if (!cont) { PrintErr("File not found: \"%s\".\n",dirname); cur_dir_clus=0; } if (unlock) DrvUnlock(dv); } catch if (unlock) DrvUnlock(dv); Free(buf); Free(buf2); return cur_dir_clus; } I64 Name2ParentDirClus(CDrv *dv,U8 *dirname) { Bool cont=TRUE,unlock; I64 cur_dir_clus,cur_dir_clus2; CDirEntry de; U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); DrvChk(dv); try { unlock=DrvLock(dv); cur_dir_clus=cur_dir_clus2=dv->root_clus; while (*buf && cont) { cur_dir_clus2=cur_dir_clus; StrFirstRem(buf,"/",buf2); if (*buf2) { switch (dv->fs_type) { case FSt_REDSEA: cont=RedSeaFileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS); break; case FSt_FAT32: cont=FAT32FileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS); break; case FSt_ISO9660: cont=ISO1FileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS); break; default: throw('Drv'); } cur_dir_clus=de.clus; } } if (!cont) { PrintErr("File not found: \"%s\".\n",dirname); cur_dir_clus2=0; } if (unlock) DrvUnlock(dv); } catch if (unlock) DrvUnlock(dv); Free(buf); Free(buf2); return cur_dir_clus2; }