hschumann2/TempleOS-Source-Code
0847
1 2Bool CFileNameTo(U8 *dst,U8 *src)3{4 MemSet(dst,0,CDIR_FILENAME_LEN);5 if (!FileNameChk(src))6 return FALSE;7 StrCpy(dst,src);8 return TRUE;9}10 11I64 Name2DirClus(CDrv *dv,U8 *dirname)12{13 Bool cont=TRUE,unlock;14 I64 cur_dir_clus;15 CDirEntry de;16 U8 *buf=StrNew(dirname),*buf2=StrNew(dirname);17 DrvChk(dv);18 try {19 unlock=DrvLock(dv);20 cur_dir_clus=dv->root_clus;21 while (*buf && cont) {22 StrFirstRem(buf,"/",buf2);23 if (*buf2) {24 switch (dv->fs_type) {25 case FSt_REDSEA:26 cont=RedSeaFileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS);27 break;28 case FSt_FAT32:29 cont=FAT32FileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS);30 break;31 case FSt_ISO9660:32 cont=ISO1FileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS);33 break;34 default:35 throw('Drv');36 }37 cur_dir_clus=de.clus;38 }39 }40 if (!cont) {41 PrintErr("File not found: \"%s\".\n",dirname);42 cur_dir_clus=0;43 }44 if (unlock)45 DrvUnlock(dv);46 } catch47 if (unlock)48 DrvUnlock(dv);49 Free(buf);50 Free(buf2);51 return cur_dir_clus;52}53 54I64 Name2ParentDirClus(CDrv *dv,U8 *dirname)55{56 Bool cont=TRUE,unlock;57 I64 cur_dir_clus,cur_dir_clus2;58 CDirEntry de;59 U8 *buf=StrNew(dirname),*buf2=StrNew(dirname);60 DrvChk(dv);61 try {62 unlock=DrvLock(dv);63 cur_dir_clus=cur_dir_clus2=dv->root_clus;64 while (*buf && cont) {65 cur_dir_clus2=cur_dir_clus;66 StrFirstRem(buf,"/",buf2);67 if (*buf2) {68 switch (dv->fs_type) {69 case FSt_REDSEA:70 cont=RedSeaFileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS);71 break;72 case FSt_FAT32:73 cont=FAT32FileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS);74 break;75 case FSt_ISO9660:76 cont=ISO1FileFind(dv,cur_dir_clus,buf2,&de,FUF_JUST_DIRS);77 break;78 default:79 throw('Drv');80 }81 cur_dir_clus=de.clus;82 }83 }84 if (!cont) {85 PrintErr("File not found: \"%s\".\n",dirname);86 cur_dir_clus2=0;87 }88 if (unlock)89 DrvUnlock(dv);90 } catch91 if (unlock)92 DrvUnlock(dv);93 Free(buf);94 Free(buf2);95 return cur_dir_clus2;96}97 