Added raw filename to A2File and children. Handled in RDOS and DOS types, especially.

This commit is contained in:
mlong 2021-02-26 18:36:20 -06:00
parent 95c0ec7348
commit fd4ac77bcf
4 changed files with 16 additions and 0 deletions

View File

@ -835,6 +835,9 @@ DIError DiskFSDOS33::ProcessCatalogSector(int catTrack, int catSect,
break; break;
} }
memcpy(pFile->fRawName, &pEntry[0x03], A2FileDOS::kMaxFileName);
pFile->fRawName[A2FileDOS::kMaxFileName] = '\0';
memcpy(pFile->fFileName, &pEntry[0x03], A2FileDOS::kMaxFileName); memcpy(pFile->fFileName, &pEntry[0x03], A2FileDOS::kMaxFileName);
pFile->fFileName[A2FileDOS::kMaxFileName] = '\0'; pFile->fFileName[A2FileDOS::kMaxFileName] = '\0';
pFile->FixFilename(); pFile->FixFilename();

View File

@ -1474,6 +1474,9 @@ public:
* means that embedded nulls in HFS filenames (which are discouraged but * means that embedded nulls in HFS filenames (which are discouraged but
* allowed) will be lost. * allowed) will be lost.
* *
* The original unmodified filename is availale through GetRawFileName,
* though HFS still suffers from embedded nulls.
*
* We do guarantee that the contents of subdirectories are grouped * We do guarantee that the contents of subdirectories are grouped
* together. This makes it much easier to construct a hierarchy out of * together. This makes it much easier to construct a hierarchy out of
* the linear list. This becomes important when dynamically adding * the linear list. This becomes important when dynamically adding
@ -1481,6 +1484,9 @@ public:
*/ */
virtual const char* GetFileName(void) const = 0; // name of this file virtual const char* GetFileName(void) const = 0; // name of this file
virtual const char* GetPathName(void) const = 0; // full path virtual const char* GetPathName(void) const = 0; // full path
virtual const char* GetRawFileName(void) const { // get unmodified file name
return GetFileName();
}
virtual char GetFssep(void) const = 0; // '\0' if none virtual char GetFssep(void) const = 0; // '\0' if none
virtual uint32_t GetFileType(void) const = 0; virtual uint32_t GetFileType(void) const = 0;
virtual uint32_t GetAuxType(void) const = 0; virtual uint32_t GetAuxType(void) const = 0;

View File

@ -1444,6 +1444,7 @@ public:
*/ */
virtual const char* GetFileName(void) const override { return fFileName; } virtual const char* GetFileName(void) const override { return fFileName; }
virtual const char* GetPathName(void) const override { return fFileName; } virtual const char* GetPathName(void) const override { return fFileName; }
virtual const char* GetRawFileName(void) const override { return fRawFileName; }
virtual char GetFssep(void) const override { return '\0'; } virtual char GetFssep(void) const override { return '\0'; }
virtual uint32_t GetFileType(void) const override; virtual uint32_t GetFileType(void) const override;
virtual uint32_t GetAuxType(void) const override { return fAuxType; } virtual uint32_t GetAuxType(void) const override { return fAuxType; }
@ -1482,6 +1483,7 @@ private:
short fTSListSector; short fTSListSector;
uint16_t fLengthInSectors; uint16_t fLengthInSectors;
bool fLocked; bool fLocked;
char fRawFileName[kMaxFileName + 1]; // "raw" version
char fFileName[kMaxFileName+1]; // "fixed" version char fFileName[kMaxFileName+1]; // "fixed" version
FileType fFileType; FileType fFileType;
@ -2493,6 +2495,7 @@ public:
*/ */
virtual const char* GetFileName(void) const override { return fFileName; } virtual const char* GetFileName(void) const override { return fFileName; }
virtual const char* GetPathName(void) const override { return fFileName; } virtual const char* GetPathName(void) const override { return fFileName; }
virtual const char* GetRawFileName(void) const override { return fRawName; }
virtual char GetFssep(void) const override { return '\0'; } virtual char GetFssep(void) const override { return '\0'; }
virtual uint32_t GetFileType(void) const override; virtual uint32_t GetFileType(void) const override;
virtual uint32_t GetAuxType(void) const override { return fLoadAddr; } virtual uint32_t GetAuxType(void) const override { return fLoadAddr; }
@ -2518,6 +2521,7 @@ public:
/* fields pulled out of directory block */ /* fields pulled out of directory block */
char fFileName[kMaxFileName+1]; char fFileName[kMaxFileName+1];
char fRawName[kMaxFileName + 1];
FileType fFileType; FileType fFileType;
uint16_t fNumSectors; uint16_t fNumSectors;
uint16_t fLoadAddr; uint16_t fLoadAddr;

View File

@ -344,6 +344,9 @@ DIError DiskFSRDOS::ReadCatalog(void)
pFile = new A2FileRDOS(this); pFile = new A2FileRDOS(this);
memcpy(pFile->fRawName, dirPtr, A2FileRDOS::kMaxFileName);
pFile->fRawName[A2FileRDOS::kMaxFileName] = '\0';
memcpy(pFile->fFileName, dirPtr, A2FileRDOS::kMaxFileName); memcpy(pFile->fFileName, dirPtr, A2FileRDOS::kMaxFileName);
pFile->fFileName[A2FileRDOS::kMaxFileName] = '\0'; pFile->fFileName[A2FileRDOS::kMaxFileName] = '\0';
pFile->FixFilename(); pFile->FixFilename();