bool DOS_FCBRenameFile(Bit16u seg, Bit16u offset) { DOS_FCB fcbold(seg,offset); DOS_FCB fcbnew(seg,offset+16); if(!fcbold.Valid()) return false; char oldname[DOS_FCBNAME]; char newname[DOS_FCBNAME]; fcbold.GetName(oldname); fcbnew.GetName(newname); /* Check, if sourcefile is still open. This was possible in DOS, but modern oses don't like this */ Bit8u drive; char fullname[DOS_PATHLENGTH]; if (!DOS_MakeName(oldname,fullname,&drive)) return false; DOS_PSP psp(dos.psp()); for (Bit8u i=0; i<DOS_FILES; i++) { if (Files[i] && Files[i]->IsOpen() && Files[i]->IsName(fullname)) { Bit16u handle = psp.FindEntryByHandle(i); //(more than once maybe) if (handle == 0xFF) { DOS_CloseFile(i,true); } else { DOS_CloseFile(handle); } } } /* Rename the file */ return DOS_Rename(oldname,newname); }
bool DOS_FCBRenameFile(Bit16u seg, Bit16u offset){ DOS_FCB fcbold(seg,offset); DOS_FCB fcbnew(seg,offset+16); char oldname[DOS_FCBNAME]; char newname[DOS_FCBNAME]; fcbold.GetName(oldname);fcbnew.GetName(newname); return DOS_Rename(oldname,newname); }
void DOS_Shell::CMD_RENAME(char * args){ HELP("RENAME"); StripSpaces(args); if (!*args) {SyntaxError();return;} if ((strchr(args,'*')!=NULL) || (strchr(args,'?')!=NULL) ) { WriteOut(MSG_Get("SHELL_CMD_NO_WILD"));return;} char * arg1=StripArg(args); StripSpaces(args); if (!*args) {SyntaxError();return;} char* slash = strrchr(arg1,'\\'); if (slash) { /* If directory specified (crystal caves installer) * rename from c:\X : rename c:\abc.exe abc.shr. * File must appear in C:\ * Ren X:\A\B C => ren X:\A\B X:\A\C */ char dir_source[DOS_PATHLENGTH + 4] = {0}; //not sure if drive portion is included in pathlength //Copy first and then modify, makes GCC happy safe_strncpy(dir_source,arg1,DOS_PATHLENGTH + 4); char* dummy = strrchr(dir_source,'\\'); if (!dummy) { //Possible due to length WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); return; } dummy++; *dummy = 0; //Maybe check args for directory, as I think that isn't allowed //dir_source and target are introduced for when we support multiple files being renamed. char target[DOS_PATHLENGTH+CROSS_LEN + 5] = {0}; strcpy(target,dir_source); strncat(target,args,CROSS_LEN); DOS_Rename(arg1,target); } else { DOS_Rename(arg1,args); } }
bool DOS_FCBRenameFile(Bit16u seg, Bit16u offset) { DOS_FCB fcbold(seg, offset); DOS_FCB fcbnew(seg, offset+16); if (!fcbold.Valid()) return false; char oldname[DOS_FCBNAME]; char newname[DOS_FCBNAME]; fcbold.GetName(oldname); FCBNameToStr(oldname); fcbnew.GetName(newname); FCBNameToStr(newname); return DOS_Rename(oldname, newname); // Rename the file }