Limit string copies to the target's length
This commits covers a single class of string-copy issues, all of which involve writing an unchecked quantity of bytes into a string of a fixed length (ie: char[]).
This commit is contained in:
parent
e0ab23ad67
commit
e603337c17
14 changed files with 103 additions and 98 deletions
|
@ -256,7 +256,7 @@ public:
|
|||
virtual bool FileExists(const char* name)=0;
|
||||
virtual bool FileStat(const char* name, FileStat_Block * const stat_block)=0;
|
||||
virtual Bit8u GetMediaByte(void)=0;
|
||||
virtual void SetDir(const char* path) { strcpy(curdir,path); };
|
||||
virtual void SetDir(const char *path) { safe_strcpy(curdir, path); };
|
||||
virtual void EmptyCache(void) { dirCache.EmptyCache(); };
|
||||
virtual bool isRemote(void)=0;
|
||||
virtual bool isRemovable(void)=0;
|
||||
|
|
|
@ -219,7 +219,7 @@ bool DOS_ChangeDir(char const * const dir) {
|
|||
}
|
||||
|
||||
if (Drives[drive]->TestDir(fulldir)) {
|
||||
strcpy(Drives[drive]->curdir,fulldir);
|
||||
safe_strcpy(Drives[drive]->curdir, fulldir);
|
||||
return true;
|
||||
} else {
|
||||
DOS_SetError(DOSERR_PATH_NOT_FOUND);
|
||||
|
@ -327,12 +327,12 @@ bool DOS_FindFirst(char * search,Bit16u attr,bool fcb_findfirst) {
|
|||
char * find_last;
|
||||
find_last=strrchr(fullsearch,'\\');
|
||||
if (!find_last) { /*No dir */
|
||||
strcpy(pattern,fullsearch);
|
||||
safe_strcpy(pattern, fullsearch);
|
||||
dir[0]=0;
|
||||
} else {
|
||||
*find_last=0;
|
||||
strcpy(pattern,find_last+1);
|
||||
strcpy(dir,fullsearch);
|
||||
safe_strcpy(pattern, find_last + 1);
|
||||
safe_strcpy(dir, fullsearch);
|
||||
}
|
||||
|
||||
dta.SetupSearch(drive,(Bit8u)attr,pattern);
|
||||
|
@ -464,7 +464,7 @@ static bool PathExists(char const * const name) {
|
|||
const char* leading = strrchr(name,'\\');
|
||||
if(!leading) return true;
|
||||
char temp[CROSS_LEN];
|
||||
strcpy(temp,name);
|
||||
safe_strcpy(temp, name);
|
||||
char * lead = strrchr(temp,'\\');
|
||||
if (lead == temp) return true;
|
||||
*lead = 0;
|
||||
|
@ -915,9 +915,11 @@ checkext:
|
|||
}
|
||||
savefcb:
|
||||
if (!hasdrive & !(parser & PARSE_DFLT_DRIVE)) fcb_name.part.drive[0] = 0;
|
||||
if (!hasname & !(parser & PARSE_BLNK_FNAME)) strcpy(fcb_name.part.name," ");
|
||||
if (!hasext & !(parser & PARSE_BLNK_FEXT)) strcpy(fcb_name.part.ext," ");
|
||||
fcb.SetName(fcb_name.part.drive[0],fcb_name.part.name,fcb_name.part.ext);
|
||||
if (!hasname & !(parser & PARSE_BLNK_FNAME))
|
||||
safe_strcpy(fcb_name.part.name, " ");
|
||||
if (!hasext & !(parser & PARSE_BLNK_FEXT))
|
||||
safe_strcpy(fcb_name.part.ext, " ");
|
||||
fcb.SetName(fcb_name.part.drive[0], fcb_name.part.name, fcb_name.part.ext);
|
||||
fcb.ClearBlockRecsize(); //Undocumented bonus work.
|
||||
*change=(Bit8u)(string-string_begin);
|
||||
return ret;
|
||||
|
|
|
@ -259,7 +259,8 @@ static Bit32u read_kcl_data(Bit8u * kcl_data, Bit32u kcl_data_size, const char*
|
|||
Bitu keyboard_layout::read_keyboard_file(const char* keyboard_file_name, Bit32s specific_layout, Bit32s requested_codepage) {
|
||||
this->reset();
|
||||
|
||||
if (specific_layout==-1) strcpy(current_keyboard_file_name, keyboard_file_name);
|
||||
if (specific_layout == -1)
|
||||
safe_strcpy(current_keyboard_file_name, keyboard_file_name);
|
||||
if (!strcmp(keyboard_file_name,"none")) return KEYB_NOERROR;
|
||||
|
||||
static Bit8u read_buf[65535];
|
||||
|
@ -701,7 +702,7 @@ Bit16u keyboard_layout::extract_codepage(const char* keyboard_file_name) {
|
|||
|
||||
Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, Bit32s codepage_id) {
|
||||
char cp_filename[512];
|
||||
strcpy(cp_filename, codepage_file_name);
|
||||
safe_strcpy(cp_filename, codepage_file_name);
|
||||
if (!strcmp(cp_filename,"none")) return KEYB_NOERROR;
|
||||
|
||||
if (codepage_id==dos.loaded_codepage) return KEYB_NOERROR;
|
||||
|
@ -967,7 +968,7 @@ Bitu keyboard_layout::switch_keyboard_layout(const char* new_layout, keyboard_la
|
|||
if (strncasecmp(new_layout,"US",2)) {
|
||||
// switch to a foreign layout
|
||||
char tbuf[256];
|
||||
strcpy(tbuf, new_layout);
|
||||
safe_strcpy(tbuf, new_layout);
|
||||
size_t newlen=strlen(tbuf);
|
||||
|
||||
bool language_code_found=false;
|
||||
|
|
|
@ -377,7 +377,8 @@ public:
|
|||
}
|
||||
//Copy current directory if not marked as deleted.
|
||||
if (newdrive->TestDir(ldp->curdir)) {
|
||||
strcpy(newdrive->curdir, ldp->curdir);
|
||||
safe_strcpy(newdrive->curdir,
|
||||
ldp->curdir);
|
||||
}
|
||||
|
||||
delete Drives[drive - 'A'];
|
||||
|
@ -580,11 +581,11 @@ private:
|
|||
Section* dos_sec = control->GetSection("dos");
|
||||
dos_sec->ExecuteDestroy(false);
|
||||
char test[20];
|
||||
strcpy(test,"umb=false");
|
||||
safe_strcpy(test, "umb=false");
|
||||
dos_sec->HandleInputline(test);
|
||||
strcpy(test,"xms=false");
|
||||
safe_strcpy(test, "xms=false");
|
||||
dos_sec->HandleInputline(test);
|
||||
strcpy(test,"ems=false");
|
||||
safe_strcpy(test, "ems=false");
|
||||
dos_sec->HandleInputline(test);
|
||||
dos_sec->ExecuteInit(false);
|
||||
}
|
||||
|
@ -1514,10 +1515,10 @@ void KEYB::Run(void) {
|
|||
char cp_file_name[256];
|
||||
if (cmd->FindCommand(3,cp_string)) {
|
||||
/* third parameter is codepage file */
|
||||
strcpy(cp_file_name, cp_string.c_str());
|
||||
safe_strcpy(cp_file_name, cp_string.c_str());
|
||||
} else {
|
||||
/* no codepage file specified, use automatic selection */
|
||||
strcpy(cp_file_name, "auto");
|
||||
safe_strcpy(cp_file_name, "auto");
|
||||
}
|
||||
|
||||
keyb_error=DOS_LoadKeyboardLayout(temp_line.c_str(), tried_cp, cp_file_name);
|
||||
|
|
|
@ -152,7 +152,7 @@ isoDrive::isoDrive(char driveLetter, const char *fileName, Bit8u mediaid, int &e
|
|||
|
||||
if (!error) {
|
||||
if (loadImage()) {
|
||||
strcpy(info, "isoDrive ");
|
||||
safe_strcpy(info, "isoDrive ");
|
||||
strcat(info, fileName);
|
||||
this->driveLetter = driveLetter;
|
||||
this->mediaid = mediaid;
|
||||
|
@ -161,12 +161,12 @@ isoDrive::isoDrive(char driveLetter, const char *fileName, Bit8u mediaid, int &e
|
|||
Set_Label(buffer,discLabel,true);
|
||||
|
||||
} else if (CDROM_Interface_Image::images[subUnit]->HasDataTrack() == false) { //Audio only cdrom
|
||||
strcpy(info, "isoDrive ");
|
||||
safe_strcpy(info, "isoDrive ");
|
||||
strcat(info, fileName);
|
||||
this->driveLetter = driveLetter;
|
||||
this->mediaid = mediaid;
|
||||
char buffer[32] = { 0 };
|
||||
strcpy(buffer, "Audio_CD");
|
||||
safe_strcpy(buffer, "Audio_CD");
|
||||
Set_Label(buffer,discLabel,true);
|
||||
} else error = 6; //Corrupt image
|
||||
}
|
||||
|
@ -296,7 +296,7 @@ bool isoDrive::FindNext(DOS_DTA &dta) {
|
|||
char findName[DOS_NAMELENGTH_ASCII];
|
||||
findName[0] = 0;
|
||||
if(strlen((char*)de.ident) < DOS_NAMELENGTH_ASCII) {
|
||||
strcpy(findName, (char*)de.ident);
|
||||
safe_strcpy(findName, (char *)de.ident);
|
||||
upcase(findName);
|
||||
}
|
||||
Bit32u findSize = DATA_LENGTH(de);
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
bool localDrive::FileCreate(DOS_File * * file,char * name,Bit16u /*attributes*/) {
|
||||
//TODO Maybe care for attributes but not likely
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,basedir);
|
||||
safe_strcpy(newname, basedir);
|
||||
strcat(newname,name);
|
||||
CROSS_FILENAME(newname);
|
||||
char* temp_name = dirCache.GetExpandName(newname); //Can only be used in till a new drive_cache action is preformed */
|
||||
|
@ -82,7 +82,7 @@ bool localDrive::FileOpen(DOS_File** file, char * name, Bit32u flags) {
|
|||
return false;
|
||||
}
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,basedir);
|
||||
safe_strcpy(newname, basedir);
|
||||
strcat(newname,name);
|
||||
CROSS_FILENAME(newname);
|
||||
dirCache.ExpandName(newname);
|
||||
|
@ -172,7 +172,7 @@ bool localDrive::FileOpen(DOS_File** file, char * name, Bit32u flags) {
|
|||
FILE * localDrive::GetSystemFilePtr(char const * const name, char const * const type) {
|
||||
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,basedir);
|
||||
safe_strcpy(newname, basedir);
|
||||
strcat(newname,name);
|
||||
CROSS_FILENAME(newname);
|
||||
dirCache.ExpandName(newname);
|
||||
|
@ -191,7 +191,7 @@ bool localDrive::GetSystemFilename(char *sysName, char const * const dosName) {
|
|||
|
||||
bool localDrive::FileUnlink(char * name) {
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,basedir);
|
||||
safe_strcpy(newname, basedir);
|
||||
strcat(newname,name);
|
||||
CROSS_FILENAME(newname);
|
||||
char *fullname = dirCache.GetExpandName(newname);
|
||||
|
@ -232,7 +232,7 @@ bool localDrive::FileUnlink(char * name) {
|
|||
|
||||
bool localDrive::FindFirst(char * _dir,DOS_DTA & dta,bool fcb_findfirst) {
|
||||
char tempDir[CROSS_LEN];
|
||||
strcpy(tempDir,basedir);
|
||||
safe_strcpy(tempDir, basedir);
|
||||
strcat(tempDir,_dir);
|
||||
CROSS_FILENAME(tempDir);
|
||||
|
||||
|
@ -248,7 +248,7 @@ bool localDrive::FindFirst(char * _dir,DOS_DTA & dta,bool fcb_findfirst) {
|
|||
DOS_SetError(DOSERR_PATH_NOT_FOUND);
|
||||
return false;
|
||||
}
|
||||
strcpy(srchInfo[id].srch_dir,tempDir);
|
||||
safe_strcpy(srchInfo[id].srch_dir, tempDir);
|
||||
dta.SetDirID(id);
|
||||
|
||||
Bit8u sAttr;
|
||||
|
@ -303,13 +303,13 @@ again:
|
|||
}
|
||||
if (!WildFileCmp(dir_ent,srch_pattern)) goto again;
|
||||
|
||||
strcpy(full_name,srchInfo[id].srch_dir);
|
||||
safe_strcpy(full_name, srchInfo[id].srch_dir);
|
||||
strcat(full_name,dir_ent);
|
||||
|
||||
//GetExpandName might indirectly destroy dir_ent (by caching in a new directory
|
||||
//and due to its design dir_ent might be lost.)
|
||||
//Copying dir_ent first
|
||||
strcpy(dir_entcopy,dir_ent);
|
||||
safe_strcpy(dir_entcopy, dir_ent);
|
||||
if (stat(dirCache.GetExpandName(full_name),&stat_block)!=0) {
|
||||
goto again;//No symlinks and such
|
||||
}
|
||||
|
@ -322,7 +322,7 @@ again:
|
|||
char find_name[DOS_NAMELENGTH_ASCII];Bit16u find_date,find_time;Bit32u find_size;
|
||||
|
||||
if (strlen(dir_entcopy)<DOS_NAMELENGTH_ASCII) {
|
||||
strcpy(find_name,dir_entcopy);
|
||||
safe_strcpy(find_name, dir_entcopy);
|
||||
upcase(find_name);
|
||||
}
|
||||
|
||||
|
@ -341,7 +341,7 @@ again:
|
|||
|
||||
bool localDrive::GetFileAttr(char * name,Bit16u * attr) {
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,basedir);
|
||||
safe_strcpy(newname, basedir);
|
||||
strcat(newname,name);
|
||||
CROSS_FILENAME(newname);
|
||||
dirCache.ExpandName(newname);
|
||||
|
@ -358,7 +358,7 @@ bool localDrive::GetFileAttr(char * name,Bit16u * attr) {
|
|||
|
||||
bool localDrive::MakeDir(char * dir) {
|
||||
char newdir[CROSS_LEN];
|
||||
strcpy(newdir,basedir);
|
||||
safe_strcpy(newdir, basedir);
|
||||
strcat(newdir,dir);
|
||||
CROSS_FILENAME(newdir);
|
||||
#if defined (WIN32) /* MS Visual C++ */
|
||||
|
@ -373,7 +373,7 @@ bool localDrive::MakeDir(char * dir) {
|
|||
|
||||
bool localDrive::RemoveDir(char * dir) {
|
||||
char newdir[CROSS_LEN];
|
||||
strcpy(newdir,basedir);
|
||||
safe_strcpy(newdir, basedir);
|
||||
strcat(newdir,dir);
|
||||
CROSS_FILENAME(newdir);
|
||||
int temp=rmdir(dirCache.GetExpandName(newdir));
|
||||
|
@ -383,7 +383,7 @@ bool localDrive::RemoveDir(char * dir) {
|
|||
|
||||
bool localDrive::TestDir(char * dir) {
|
||||
char newdir[CROSS_LEN];
|
||||
strcpy(newdir,basedir);
|
||||
safe_strcpy(newdir, basedir);
|
||||
strcat(newdir,dir);
|
||||
CROSS_FILENAME(newdir);
|
||||
dirCache.ExpandName(newdir);
|
||||
|
@ -401,13 +401,13 @@ bool localDrive::TestDir(char * dir) {
|
|||
|
||||
bool localDrive::Rename(char * oldname,char * newname) {
|
||||
char newold[CROSS_LEN];
|
||||
strcpy(newold,basedir);
|
||||
safe_strcpy(newold, basedir);
|
||||
strcat(newold,oldname);
|
||||
CROSS_FILENAME(newold);
|
||||
dirCache.ExpandName(newold);
|
||||
|
||||
char newnew[CROSS_LEN];
|
||||
strcpy(newnew,basedir);
|
||||
safe_strcpy(newnew, basedir);
|
||||
strcat(newnew,newname);
|
||||
CROSS_FILENAME(newnew);
|
||||
int temp=rename(newold,dirCache.GetExpandName(newnew));
|
||||
|
@ -426,7 +426,7 @@ bool localDrive::AllocationInfo(Bit16u * _bytes_sector,Bit8u * _sectors_cluster,
|
|||
|
||||
bool localDrive::FileExists(const char* name) {
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,basedir);
|
||||
safe_strcpy(newname, basedir);
|
||||
strcat(newname,name);
|
||||
CROSS_FILENAME(newname);
|
||||
dirCache.ExpandName(newname);
|
||||
|
@ -438,7 +438,7 @@ bool localDrive::FileExists(const char* name) {
|
|||
|
||||
bool localDrive::FileStat(const char* name, FileStat_Block * const stat_block) {
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,basedir);
|
||||
safe_strcpy(newname, basedir);
|
||||
strcat(newname,name);
|
||||
CROSS_FILENAME(newname);
|
||||
dirCache.ExpandName(newname);
|
||||
|
@ -487,7 +487,7 @@ localDrive::localDrive(const char * startdir,
|
|||
_free_clusters,
|
||||
_mediaid}
|
||||
{
|
||||
strcpy(basedir, startdir);
|
||||
safe_strcpy(basedir, startdir);
|
||||
sprintf(info,"local directory %s",startdir);
|
||||
dirCache.SetBaseDir(basedir);
|
||||
}
|
||||
|
@ -627,7 +627,7 @@ cdromDrive::cdromDrive(const char _driveLetter,
|
|||
{
|
||||
// Init mscdex
|
||||
error = MSCDEX_AddDrive(driveLetter,startdir,subUnit);
|
||||
strcpy(info, "CDRom ");
|
||||
safe_strcpy(info, "CDRom ");
|
||||
strcat(info, startdir);
|
||||
// Get Volume Label
|
||||
char name[32];
|
||||
|
|
|
@ -87,14 +87,14 @@ bool Overlay_Drive::RemoveDir(char * dir) {
|
|||
if (is_dir_only_in_overlay(dir)) {
|
||||
//The simple case
|
||||
char odir[CROSS_LEN];
|
||||
strcpy(odir,overlaydir);
|
||||
safe_strcpy(odir, overlaydir);
|
||||
strcat(odir,dir);
|
||||
CROSS_FILENAME(odir);
|
||||
int temp = rmdir(odir);
|
||||
if (temp == 0) {
|
||||
remove_DOSdir_from_cache(dir);
|
||||
char newdir[CROSS_LEN];
|
||||
strcpy(newdir,basedir);
|
||||
safe_strcpy(newdir, basedir);
|
||||
strcat(newdir,dir);
|
||||
CROSS_FILENAME(newdir);
|
||||
dirCache.DeleteEntry(newdir,true);
|
||||
|
@ -154,7 +154,7 @@ bool Overlay_Drive::MakeDir(char * dir) {
|
|||
return true;
|
||||
}
|
||||
char newdir[CROSS_LEN];
|
||||
strcpy(newdir,overlaydir);
|
||||
safe_strcpy(newdir, overlaydir);
|
||||
strcat(newdir,dir);
|
||||
CROSS_FILENAME(newdir);
|
||||
#if defined (WIN32) /* MS Visual C++ */
|
||||
|
@ -164,7 +164,7 @@ bool Overlay_Drive::MakeDir(char * dir) {
|
|||
#endif
|
||||
if (temp==0) {
|
||||
char fakename[CROSS_LEN];
|
||||
strcpy(fakename,basedir);
|
||||
safe_strcpy(fakename, basedir);
|
||||
strcat(fakename,dir);
|
||||
CROSS_FILENAME(fakename);
|
||||
dirCache.AddEntryDirOverlay(fakename,true);
|
||||
|
@ -180,7 +180,7 @@ bool Overlay_Drive::TestDir(char * dir) {
|
|||
|
||||
//Directories are stored without a trailing backslash
|
||||
char tempdir[CROSS_LEN];
|
||||
strcpy(tempdir,dir);
|
||||
safe_strcpy(tempdir, dir);
|
||||
size_t templen = strlen(dir);
|
||||
if (templen && tempdir[templen-1] == '\\') tempdir[templen-1] = 0;
|
||||
|
||||
|
@ -234,7 +234,8 @@ FILE* Overlay_Drive::create_file_in_overlay(char* dos_filename, char const* mode
|
|||
|
||||
if (logoverlay) LOG_MSG("create_file_in_overlay called %s %s",dos_filename,mode);
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,overlaydir); //TODO GOG make part of class and join in
|
||||
safe_strcpy(newname, overlaydir); // TODO GOG make part of class and
|
||||
// join in
|
||||
strcat(newname,dos_filename); //HERE we need to convert it to Linux TODO
|
||||
CROSS_FILENAME(newname);
|
||||
|
||||
|
@ -324,7 +325,7 @@ Overlay_Drive::Overlay_Drive(const char * startdir,const char* overlay, Bit16u _
|
|||
error = 1;
|
||||
return;
|
||||
}
|
||||
strcpy(overlaydir,overlay);
|
||||
safe_strcpy(overlaydir, overlay);
|
||||
char dirname[CROSS_LEN] = { 0 };
|
||||
//Determine if overlaydir is part of the startdir.
|
||||
convert_overlay_to_DOSname_in_base(dirname);
|
||||
|
@ -350,7 +351,7 @@ void Overlay_Drive::convert_overlay_to_DOSname_in_base(char* dirname )
|
|||
#endif
|
||||
//Beginning is the same.
|
||||
char t[CROSS_LEN];
|
||||
strcpy(t,overlaydir+strlen(basedir));
|
||||
safe_strcpy(t, overlaydir + strlen(basedir));
|
||||
|
||||
char* p = t;
|
||||
char* b = t;
|
||||
|
@ -358,11 +359,11 @@ void Overlay_Drive::convert_overlay_to_DOSname_in_base(char* dirname )
|
|||
while ( (p =strchr(p,CROSS_FILESPLIT)) ) {
|
||||
char directoryname[CROSS_LEN]={0};
|
||||
char dosboxdirname[CROSS_LEN]={0};
|
||||
strcpy(directoryname,dirname);
|
||||
safe_strcpy(directoryname, dirname);
|
||||
strncat(directoryname,b,p-b);
|
||||
|
||||
char d[CROSS_LEN];
|
||||
strcpy(d,basedir);
|
||||
safe_strcpy(d, basedir);
|
||||
strcat(d,directoryname);
|
||||
CROSS_FILENAME(d);
|
||||
//Try to find the corresponding directoryname in DOSBox.
|
||||
|
@ -419,7 +420,7 @@ bool Overlay_Drive::FileOpen(DOS_File * * file,char * name,Bit32u flags) {
|
|||
//if name exists, use that one instead!
|
||||
//overlay file.
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname,overlaydir);
|
||||
safe_strcpy(newname, overlaydir);
|
||||
strcat(newname,name);
|
||||
CROSS_FILENAME(newname);
|
||||
|
||||
|
@ -473,7 +474,7 @@ bool Overlay_Drive::FileCreate(DOS_File * * file,char * name,Bit16u /*attributes
|
|||
*file = of;
|
||||
//create fake name for the drive cache
|
||||
char fakename[CROSS_LEN];
|
||||
strcpy(fakename,basedir);
|
||||
safe_strcpy(fakename, basedir);
|
||||
strcat(fakename,name);
|
||||
CROSS_FILENAME(fakename);
|
||||
dirCache.AddEntry(fakename,true); //add it.
|
||||
|
@ -507,7 +508,7 @@ bool Overlay_Drive::Sync_leading_dirs(const char* dos_filename){
|
|||
if (logoverlay) LOG_MSG("syncdir: %s",dirname);
|
||||
//Test if directory exist in base.
|
||||
char dirnamebase[CROSS_LEN] ={0};
|
||||
strcpy(dirnamebase,basedir);
|
||||
safe_strcpy(dirnamebase, basedir);
|
||||
strcat(dirnamebase,dirname);
|
||||
CROSS_FILENAME(dirnamebase);
|
||||
struct stat basetest;
|
||||
|
@ -518,7 +519,7 @@ bool Overlay_Drive::Sync_leading_dirs(const char* dos_filename){
|
|||
|
||||
struct stat overlaytest;
|
||||
char dirnameoverlay[CROSS_LEN] ={0};
|
||||
strcpy(dirnameoverlay,overlaydir);
|
||||
safe_strcpy(dirnameoverlay, overlaydir);
|
||||
strcat(dirnameoverlay,dirname);
|
||||
CROSS_FILENAME(dirnameoverlay);
|
||||
if (stat(dirnameoverlay,&overlaytest) == 0 ) {
|
||||
|
@ -608,16 +609,16 @@ void Overlay_Drive::update_cache(bool read_directory_contents) {
|
|||
|
||||
#if OVERLAY_DIR
|
||||
char tdir[CROSS_LEN];
|
||||
strcpy(tdir,(*i).c_str());
|
||||
safe_strcpy(tdir, (*i).c_str());
|
||||
CROSS_DOSFILENAME(tdir);
|
||||
bool dir_exists_in_base = localDrive::TestDir(tdir);
|
||||
#endif
|
||||
|
||||
char dir[CROSS_LEN];
|
||||
strcpy(dir,overlaydir);
|
||||
safe_strcpy(dir, overlaydir);
|
||||
strcat(dir,(*i).c_str());
|
||||
char dirpush[CROSS_LEN];
|
||||
strcpy(dirpush,(*i).c_str());
|
||||
safe_strcpy(dirpush, (*i).c_str());
|
||||
static char end[2] = {CROSS_FILESPLIT,0};
|
||||
strcat(dirpush,end); //Linux ?
|
||||
dir_information* dirp = open_directory(dir);
|
||||
|
@ -653,7 +654,7 @@ void Overlay_Drive::update_cache(bool read_directory_contents) {
|
|||
if (read_directory_contents) {
|
||||
for( i = filenames.begin(); i != filenames.end(); ++i) {
|
||||
char dosname[CROSS_LEN];
|
||||
strcpy(dosname,(*i).c_str());
|
||||
safe_strcpy(dosname, (*i).c_str());
|
||||
upcase(dosname); //Should not be really needed, as uppercase in the overlay is a requirement...
|
||||
CROSS_DOSFILENAME(dosname);
|
||||
if (logoverlay) LOG_MSG("update cache add dosname %s",dosname);
|
||||
|
@ -664,7 +665,7 @@ void Overlay_Drive::update_cache(bool read_directory_contents) {
|
|||
#if OVERLAY_DIR
|
||||
for (i = DOSdirs_cache.begin(); i !=DOSdirs_cache.end(); ++i) {
|
||||
char fakename[CROSS_LEN];
|
||||
strcpy(fakename,basedir);
|
||||
safe_strcpy(fakename, basedir);
|
||||
strcat(fakename,(*i).c_str());
|
||||
CROSS_FILENAME(fakename);
|
||||
dirCache.AddEntryDirOverlay(fakename,true);
|
||||
|
@ -673,7 +674,7 @@ void Overlay_Drive::update_cache(bool read_directory_contents) {
|
|||
|
||||
for (i = DOSnames_cache.begin(); i != DOSnames_cache.end(); ++i) {
|
||||
char fakename[CROSS_LEN];
|
||||
strcpy(fakename,basedir);
|
||||
safe_strcpy(fakename, basedir);
|
||||
strcat(fakename,(*i).c_str());
|
||||
CROSS_FILENAME(fakename);
|
||||
dirCache.AddEntry(fakename,true);
|
||||
|
@ -742,20 +743,20 @@ again:
|
|||
}
|
||||
if(!WildFileCmp(dir_ent,srch_pattern)) goto again;
|
||||
|
||||
strcpy(full_name,srchInfo[id].srch_dir);
|
||||
safe_strcpy(full_name, srchInfo[id].srch_dir);
|
||||
strcat(full_name,dir_ent);
|
||||
|
||||
//GetExpandName might indirectly destroy dir_ent (by caching in a new directory
|
||||
//and due to its design dir_ent might be lost.)
|
||||
//Copying dir_ent first
|
||||
strcpy(dir_entcopy,dir_ent);
|
||||
|
||||
safe_strcpy(dir_entcopy, dir_ent);
|
||||
|
||||
//First try overlay:
|
||||
char ovname[CROSS_LEN];
|
||||
char relativename[CROSS_LEN];
|
||||
strcpy(relativename,srchInfo[id].srch_dir);
|
||||
safe_strcpy(relativename, srchInfo[id].srch_dir);
|
||||
//strip off basedir: //TODO cleanup
|
||||
strcpy(ovname,overlaydir);
|
||||
safe_strcpy(ovname, overlaydir);
|
||||
char* prel = full_name + strlen(basedir);
|
||||
|
||||
|
||||
|
@ -777,7 +778,7 @@ again:
|
|||
if (logoverlay) LOG_MSG("using overlay data for %s : %s",full_name, ovname);
|
||||
} else {
|
||||
char preldos[CROSS_LEN];
|
||||
strcpy(preldos,prel);
|
||||
safe_strcpy(preldos, prel);
|
||||
CROSS_DOSFILENAME(preldos);
|
||||
if (is_deleted_file(preldos)) { //dir.. maybe lower or keep it as is TODO
|
||||
if (logoverlay) LOG_MSG("skipping deleted file %s %s %s",preldos,full_name,ovname);
|
||||
|
@ -798,7 +799,7 @@ again:
|
|||
char find_name[DOS_NAMELENGTH_ASCII];Bit16u find_date,find_time;Bit32u find_size;
|
||||
|
||||
if(strlen(dir_entcopy)<DOS_NAMELENGTH_ASCII){
|
||||
strcpy(find_name,dir_entcopy);
|
||||
safe_strcpy(find_name, dir_entcopy);
|
||||
upcase(find_name);
|
||||
}
|
||||
|
||||
|
@ -822,13 +823,13 @@ bool Overlay_Drive::FileUnlink(char * name) {
|
|||
Bit32u a = GetTicks();
|
||||
if (logoverlay) LOG_MSG("calling unlink on %s",name);
|
||||
char basename[CROSS_LEN];
|
||||
strcpy(basename,basedir);
|
||||
safe_strcpy(basename, basedir);
|
||||
strcat(basename,name);
|
||||
CROSS_FILENAME(basename);
|
||||
|
||||
|
||||
char overlayname[CROSS_LEN];
|
||||
strcpy(overlayname,overlaydir);
|
||||
safe_strcpy(overlayname, overlaydir);
|
||||
strcat(overlayname,name);
|
||||
CROSS_FILENAME(overlayname);
|
||||
// char *fullname = dirCache.GetExpandName(newname);
|
||||
|
@ -898,7 +899,7 @@ bool Overlay_Drive::FileUnlink(char * name) {
|
|||
|
||||
bool Overlay_Drive::GetFileAttr(char * name,Bit16u * attr) {
|
||||
char overlayname[CROSS_LEN];
|
||||
strcpy(overlayname,overlaydir);
|
||||
safe_strcpy(overlayname, overlaydir);
|
||||
strcat(overlayname,name);
|
||||
CROSS_FILENAME(overlayname);
|
||||
|
||||
|
@ -930,7 +931,7 @@ void Overlay_Drive::add_deleted_file(const char* name,bool create_on_disk) {
|
|||
void Overlay_Drive::add_special_file_to_disk(const char* dosname, const char* operation) {
|
||||
std::string name = create_filename_of_special_operation(dosname, operation);
|
||||
char overlayname[CROSS_LEN];
|
||||
strcpy(overlayname,overlaydir);
|
||||
safe_strcpy(overlayname, overlaydir);
|
||||
strcat(overlayname,name.c_str());
|
||||
CROSS_FILENAME(overlayname);
|
||||
FILE* f = fopen_wrap(overlayname,"wb+");
|
||||
|
@ -947,7 +948,7 @@ void Overlay_Drive::add_special_file_to_disk(const char* dosname, const char* op
|
|||
void Overlay_Drive::remove_special_file_from_disk(const char* dosname, const char* operation) {
|
||||
std::string name = create_filename_of_special_operation(dosname,operation);
|
||||
char overlayname[CROSS_LEN];
|
||||
strcpy(overlayname,overlaydir);
|
||||
safe_strcpy(overlayname, overlaydir);
|
||||
strcat(overlayname,name.c_str());
|
||||
CROSS_FILENAME(overlayname);
|
||||
if(unlink(overlayname) != 0) E_Exit("Failed removal of %s",overlayname);
|
||||
|
@ -1056,7 +1057,7 @@ bool Overlay_Drive::check_if_leading_is_deleted(const char* name){
|
|||
|
||||
bool Overlay_Drive::FileExists(const char* name) {
|
||||
char overlayname[CROSS_LEN];
|
||||
strcpy(overlayname,overlaydir);
|
||||
safe_strcpy(overlayname, overlaydir);
|
||||
strcat(overlayname,name);
|
||||
CROSS_FILENAME(overlayname);
|
||||
struct stat temp_stat;
|
||||
|
@ -1090,12 +1091,12 @@ bool Overlay_Drive::Rename(char * oldname,char * newname) {
|
|||
Bit32u a = GetTicks();
|
||||
//First generate overlay names.
|
||||
char overlaynameold[CROSS_LEN];
|
||||
strcpy(overlaynameold,overlaydir);
|
||||
safe_strcpy(overlaynameold, overlaydir);
|
||||
strcat(overlaynameold,oldname);
|
||||
CROSS_FILENAME(overlaynameold);
|
||||
|
||||
char overlaynamenew[CROSS_LEN];
|
||||
strcpy(overlaynamenew,overlaydir);
|
||||
safe_strcpy(overlaynamenew, overlaydir);
|
||||
strcat(overlaynamenew,newname);
|
||||
CROSS_FILENAME(overlaynamenew);
|
||||
|
||||
|
@ -1113,7 +1114,7 @@ bool Overlay_Drive::Rename(char * oldname,char * newname) {
|
|||
Bit32u aa = GetTicks();
|
||||
//File exists in the basedrive. Make a copy and mark old one as deleted.
|
||||
char newold[CROSS_LEN];
|
||||
strcpy(newold,basedir);
|
||||
safe_strcpy(newold, basedir);
|
||||
strcat(newold,oldname);
|
||||
CROSS_FILENAME(newold);
|
||||
dirCache.ExpandName(newold);
|
||||
|
@ -1161,7 +1162,7 @@ bool Overlay_Drive::FindFirst(char * _dir,DOS_DTA & dta,bool fcb_findfirst) {
|
|||
|
||||
bool Overlay_Drive::FileStat(const char* name, FileStat_Block * const stat_block) {
|
||||
char overlayname[CROSS_LEN];
|
||||
strcpy(overlayname,overlaydir);
|
||||
safe_strcpy(overlayname, overlaydir);
|
||||
strcat(overlayname,name);
|
||||
CROSS_FILENAME(overlayname);
|
||||
struct stat temp_stat;
|
||||
|
|
|
@ -100,7 +100,7 @@ FILE * OpenCaptureFile(const char * type,const char * ext) {
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
strcpy(file_start,RunningProgram);
|
||||
safe_strcpy(file_start, RunningProgram);
|
||||
lowcase(file_start);
|
||||
strcat(file_start,"_");
|
||||
bool is_directory;
|
||||
|
|
|
@ -979,7 +979,7 @@ public:
|
|||
WriteOut("IPX Server address not specified.\n");
|
||||
return;
|
||||
}
|
||||
strcpy(strHost, temp_line.c_str());
|
||||
safe_strcpy(strHost, temp_line.c_str());
|
||||
|
||||
if(!cmd->FindCommand(3, temp_line)) {
|
||||
udpPort = 213;
|
||||
|
|
|
@ -312,7 +312,7 @@ bool read_directory_next(dir_information* dirp, char* entry_name, bool& is_direc
|
|||
static char buffer[2 * CROSS_LEN + 1] = { 0 };
|
||||
static char split[2] = { CROSS_FILESPLIT , 0 };
|
||||
buffer[0] = 0;
|
||||
strcpy(buffer,dirp->base_path);
|
||||
safe_strcpy(buffer, dirp->base_path);
|
||||
size_t buflen = strlen(buffer);
|
||||
if (buflen && buffer[buflen - 1] != CROSS_FILESPLIT ) strcat(buffer, split);
|
||||
strcat(buffer,entry_name);
|
||||
|
|
|
@ -95,8 +95,8 @@ static void LoadMessageFile(const char * fname) {
|
|||
/* New string name */
|
||||
if (linein[0]==':') {
|
||||
string[0]=0;
|
||||
strcpy(name,linein+1);
|
||||
/* End of string marker */
|
||||
safe_strcpy(name, linein + 1);
|
||||
/* End of string marker */
|
||||
} else if (linein[0]=='.') {
|
||||
/* Replace/Add the string to the internal languagefile */
|
||||
/* Remove last newline (marker is \n.\n) */
|
||||
|
|
|
@ -329,7 +329,7 @@ void DOS_Shell::Run(void) {
|
|||
char input_line[CMD_MAXLINE] = {0};
|
||||
std::string line;
|
||||
if (cmd->FindStringRemainBegin("/C",line)) {
|
||||
strcpy(input_line,line.c_str());
|
||||
safe_strcpy(input_line, line.c_str());
|
||||
char* sep = strpbrk(input_line,"\r\n"); //GTA installer
|
||||
if (sep) *sep = 0;
|
||||
DOS_Shell temp;
|
||||
|
@ -351,7 +351,7 @@ void DOS_Shell::Run(void) {
|
|||
if (machine == MCH_HERC) WriteOut(MSG_Get("SHELL_STARTUP_HERC"));
|
||||
WriteOut(MSG_Get("SHELL_STARTUP_END"));
|
||||
|
||||
strcpy(input_line,line.c_str());
|
||||
safe_strcpy(input_line, line.c_str());
|
||||
line.erase();
|
||||
ParseLine(input_line);
|
||||
} else {
|
||||
|
@ -775,7 +775,7 @@ void SHELL_Init() {
|
|||
CommandTail tail;
|
||||
tail.count=(Bit8u)strlen(init_line);
|
||||
memset(&tail.buffer,0,127);
|
||||
strcpy(tail.buffer,init_line);
|
||||
safe_strcpy(tail.buffer, init_line);
|
||||
MEM_BlockWrite(PhysMake(psp_seg,128),&tail,128);
|
||||
|
||||
/* Setup internal DOS Variables */
|
||||
|
|
|
@ -268,7 +268,7 @@ void DOS_Shell::CMD_RENAME(char * args){
|
|||
|
||||
//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);
|
||||
safe_strcpy(target, dir_source);
|
||||
strncat(target,args,CROSS_LEN);
|
||||
|
||||
DOS_Rename(arg1,target);
|
||||
|
@ -874,12 +874,12 @@ void DOS_Shell::CMD_COPY(char * args) {
|
|||
dta.GetResult(name,size,date,time,attr);
|
||||
|
||||
if ((attr & DOS_ATTR_DIRECTORY) == 0) {
|
||||
strcpy(nameSource,pathSource);
|
||||
safe_strcpy(nameSource, pathSource);
|
||||
strcat(nameSource,name);
|
||||
// Open Source
|
||||
if (DOS_OpenFile(nameSource,0,&sourceHandle)) {
|
||||
// Create Target or open it if in concat mode
|
||||
strcpy(nameTarget,pathTarget);
|
||||
safe_strcpy(nameTarget, pathTarget);
|
||||
if (nameTarget[strlen(nameTarget) - 1] == '\\') strcat(nameTarget,name);
|
||||
|
||||
//Special variable to ensure that copy * a_file, where a_file is not a directory concats.
|
||||
|
@ -1248,7 +1248,7 @@ void DOS_Shell::CMD_SUBST (char * args) {
|
|||
char mountstring[DOS_PATHLENGTH+CROSS_LEN+20];
|
||||
char temp_str[2] = { 0,0 };
|
||||
try {
|
||||
strcpy(mountstring,"MOUNT ");
|
||||
safe_strcpy(mountstring, "MOUNT ");
|
||||
StripSpaces(args);
|
||||
std::string arg;
|
||||
CommandLine command(0,args);
|
||||
|
@ -1275,7 +1275,7 @@ void DOS_Shell::CMD_SUBST (char * args) {
|
|||
|
||||
if ( ( ldp=dynamic_cast<localDrive*>(Drives[drive])) == 0 ) throw 0;
|
||||
char newname[CROSS_LEN];
|
||||
strcpy(newname, ldp->getBasedir());
|
||||
safe_strcpy(newname, ldp->getBasedir());
|
||||
strcat(newname,fulldir);
|
||||
CROSS_FILENAME(newname);
|
||||
ldp->dirCache.ExpandName(newname);
|
||||
|
|
|
@ -273,8 +273,8 @@ void DOS_Shell::InputCommand(char * line) {
|
|||
strncat(mask, "*",DOS_PATHLENGTH - 1);
|
||||
else strncat(mask, "*.*",DOS_PATHLENGTH - 1);
|
||||
} else {
|
||||
strcpy(mask, "*.*");
|
||||
}
|
||||
safe_strcpy(mask, "*.*");
|
||||
}
|
||||
|
||||
RealPt save_dta=dos.dta();
|
||||
dos.dta(dos.tables.tempdta);
|
||||
|
@ -413,7 +413,7 @@ bool DOS_Shell::Execute(char * name,char * args) {
|
|||
/* Check for a full name */
|
||||
p_fullname = Which(name);
|
||||
if (!p_fullname) return false;
|
||||
strcpy(fullname,p_fullname);
|
||||
safe_strcpy(fullname, p_fullname);
|
||||
const char* extension = strrchr(fullname,'.');
|
||||
|
||||
/*always disallow files without extension from being executed. */
|
||||
|
@ -424,22 +424,22 @@ bool DOS_Shell::Execute(char * name,char * args) {
|
|||
if(strlen(fullname) >( DOS_PATHLENGTH - 1) ) return false;
|
||||
char temp_name[DOS_PATHLENGTH+4],* temp_fullname;
|
||||
//try to add .com, .exe and .bat extensions to filename
|
||||
|
||||
strcpy(temp_name,fullname);
|
||||
|
||||
safe_strcpy(temp_name, fullname);
|
||||
strcat(temp_name,".COM");
|
||||
temp_fullname=Which(temp_name);
|
||||
if (temp_fullname) { extension=".com";strcpy(fullname,temp_fullname); }
|
||||
|
||||
else
|
||||
{
|
||||
strcpy(temp_name,fullname);
|
||||
safe_strcpy(temp_name, fullname);
|
||||
strcat(temp_name,".EXE");
|
||||
temp_fullname=Which(temp_name);
|
||||
if (temp_fullname) { extension=".exe";strcpy(fullname,temp_fullname);}
|
||||
|
||||
else
|
||||
{
|
||||
strcpy(temp_name,fullname);
|
||||
safe_strcpy(temp_name, fullname);
|
||||
strcat(temp_name,".BAT");
|
||||
temp_fullname=Which(temp_name);
|
||||
if (temp_fullname) { extension=".bat";strcpy(fullname,temp_fullname);}
|
||||
|
|
Loading…
Add table
Reference in a new issue