Made it gcc2.95 friendly. Fix drivelabels on iso's. Fix Various stability issues with images
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2016
This commit is contained in:
parent
4327579a14
commit
62ad4ff475
4 changed files with 39 additions and 9 deletions
|
@ -5,8 +5,11 @@
|
|||
#define MAX_ASPI_CDROM 5
|
||||
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include "dosbox.h"
|
||||
#include "mem.h"
|
||||
#include "mixer.h"
|
||||
|
|
|
@ -16,14 +16,14 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: cdrom_image.cpp,v 1.3 2004-08-23 09:35:15 harekiet Exp $ */
|
||||
/* $Id: cdrom_image.cpp,v 1.4 2004-10-05 19:55:03 qbix79 Exp $ */
|
||||
|
||||
#include <cctype>
|
||||
#include <cmath>
|
||||
#include <cstdio>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <limits>
|
||||
#include <limits.h>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <sys/stat.h>
|
||||
|
@ -572,7 +572,7 @@ bool CDROM_Interface_Image::GetRealFileName(string &filename, string &pathname)
|
|||
if (stat(filename.c_str(), &test) == 0) return true;
|
||||
|
||||
// check if file with path relative to cue file exists
|
||||
#if not defined(WIN32)
|
||||
#ifndef WIN32
|
||||
string tmpstr(pathname + "/" + filename);
|
||||
if (stat(tmpstr.c_str(), &test) == 0) {
|
||||
filename = tmpstr;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: drive_iso.cpp,v 1.1 2004-08-13 19:43:02 qbix79 Exp $ */
|
||||
/* $Id: drive_iso.cpp,v 1.2 2004-10-05 19:55:03 qbix79 Exp $ */
|
||||
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
|
@ -152,7 +152,29 @@ isoDrive::isoDrive(char driveLetter, const char *fileName, Bit8u mediaid, int &e
|
|||
searchCache.clear();
|
||||
dirIter = searchCache.end();
|
||||
this->mediaid = mediaid;
|
||||
if (!MSCDEX_GetVolumeName(subUnit, discLabel)) strcpy(discLabel, "");
|
||||
char buffer[32] = { 0 };
|
||||
if (!MSCDEX_GetVolumeName(subUnit, buffer)) strcpy(buffer, "");
|
||||
|
||||
//Code Copied from drive_cache. (convert mscdex label to a dos 8.3 file)
|
||||
Bitu togo = 8;
|
||||
Bitu bufPos = 0;
|
||||
Bitu labelPos = 0;
|
||||
bool point = false;
|
||||
while (togo>0) {
|
||||
if (buffer[bufPos]==0) break;
|
||||
if (!point && (buffer[bufPos]=='.')) { togo=4; point=true; }
|
||||
discLabel[labelPos] = toupper(buffer[bufPos]);
|
||||
labelPos++; bufPos++;
|
||||
togo--;
|
||||
if ((togo==0) && !point) {
|
||||
if (buffer[bufPos]=='.') bufPos++;
|
||||
discLabel[labelPos]='.'; labelPos++; point=true; togo=3;
|
||||
}
|
||||
};
|
||||
discLabel[labelPos]=0;
|
||||
//Remove trailing dot.
|
||||
if((labelPos > 0) && (discLabel[labelPos - 1] == '.'))
|
||||
discLabel[labelPos - 1] = 0;
|
||||
} else error = 6;
|
||||
}
|
||||
}
|
||||
|
@ -229,7 +251,7 @@ bool isoDrive::FindFirst(char *dir, DOS_DTA &dta, bool fcb_findfirst)
|
|||
readSector(block, sector);
|
||||
|
||||
Bit32u pos = 0;
|
||||
while (pos < ISO_FRAMESIZE && block[pos] != 0) {
|
||||
while (block[pos] != 0 && (pos + block[pos]) < ISO_FRAMESIZE) {
|
||||
isoDirEntry tmp;
|
||||
int length = readDirEntry(&tmp, &block[pos]);
|
||||
if (length < 0) return false;
|
||||
|
@ -353,6 +375,7 @@ inline bool isoDrive :: readSector(Bit8u *buffer, Bit32u sector)
|
|||
int isoDrive :: readDirEntry(isoDirEntry *de, Bit8u *data)
|
||||
{
|
||||
// copy data into isoDirEntry struct, data[0] = length of DirEntry
|
||||
if (data[0] > sizeof(isoDirEntry)) return -1;
|
||||
memcpy(de, data, data[0]);
|
||||
|
||||
// xa not supported
|
||||
|
@ -361,6 +384,7 @@ int isoDrive :: readDirEntry(isoDirEntry *de, Bit8u *data)
|
|||
if (de->fileUnitSize != 0 || de->interleaveGapSize != 0) return -1;
|
||||
|
||||
// modify file identifier for use with dosbox
|
||||
if ((de->length < 33 + de->fileIdentLength)) return -1;
|
||||
if (IS_DIR(de->fileFlags)) {
|
||||
if (de->fileIdentLength == 1 && de->ident[0] == 0) strcpy((char*)de->ident, ".");
|
||||
else if (de->fileIdentLength == 1 && de->ident[0] == 1) strcpy((char*)de->ident, "..");
|
||||
|
@ -375,6 +399,7 @@ int isoDrive :: readDirEntry(isoDirEntry *de, Bit8u *data)
|
|||
strreplace((char*)de->ident, ';', 0);
|
||||
// if file has no extension remove the trailing dot
|
||||
int tmp = strlen((char*)de->ident);
|
||||
//if (tmp > 38) return -1; //de->ident can hold 100
|
||||
if (tmp > 0 && de->ident[tmp - 1] == '.') de->ident[tmp - 1] = 0;
|
||||
}
|
||||
return de->length;
|
||||
|
@ -398,7 +423,7 @@ bool isoDrive :: lookupSingle(isoDirEntry *de, const char *name, Bit32u start, B
|
|||
if (!readSector(sector, i)) return false;
|
||||
|
||||
int pos = 0;
|
||||
while (sector[pos] != 0 && pos < ISO_FRAMESIZE) {
|
||||
while (sector[pos] != 0 && (pos + sector[pos]) < ISO_FRAMESIZE) {
|
||||
int deLength = readDirEntry(de, §or[pos]);
|
||||
if (deLength < 1) return false;
|
||||
pos += deLength;
|
||||
|
@ -423,6 +448,8 @@ bool isoDrive :: lookup(isoDirEntry *de, const char *path)
|
|||
while (isoPath[pos] != 0) {
|
||||
if (isoPath[pos] == '/') {
|
||||
char name[38];
|
||||
if (pos - beginPos >= 38) return false;
|
||||
if (beginPos >= ISO_MAXPATHNAME) return false;
|
||||
strncpy(name, &isoPath[beginPos], pos - beginPos);
|
||||
name[pos - beginPos] = 0;
|
||||
beginPos = pos + 1;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: drives.h,v 1.23 2004-08-13 19:43:02 qbix79 Exp $ */
|
||||
/* $Id: drives.h,v 1.24 2004-10-05 19:55:03 qbix79 Exp $ */
|
||||
|
||||
#ifndef _DRIVES_H__
|
||||
#define _DRIVES_H__
|
||||
|
@ -254,7 +254,7 @@ struct isoDirEntry {
|
|||
Bit16u VolumeSeqNumberL;
|
||||
Bit16u VolumeSeqNumberM;
|
||||
Bit8u fileIdentLength;
|
||||
Bit8u ident[38]; // can be smaller
|
||||
Bit8u ident[100];
|
||||
} GCC_ATTRIBUTE(packed);
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
|
Loading…
Add table
Reference in a new issue