sparse files, namespacing, $B0 ftype

git-svn-id: https://profuse.googlecode.com/svn/trunk@28 aa027e90-d47c-11dd-86d7-074df07e0730
This commit is contained in:
ksherlock 2009-01-25 17:29:17 +00:00
parent 23d9d31132
commit aa8d1b0699
10 changed files with 359 additions and 433 deletions

View File

@ -41,6 +41,7 @@ Disk::Disk()
_blocks = 0;
_offset = 0;
_size = 0;
_flags = 0;
}
Disk::~Disk()
@ -50,7 +51,7 @@ Disk::~Disk()
}
Disk *Disk::OpenFile(const char *file, bool dos_order)
Disk *Disk::OpenFile(const char *file, unsigned flags)
{
int fd;
struct stat st;
@ -106,6 +107,7 @@ Disk *Disk::OpenFile(const char *file, bool dos_order)
offset = 84;
blocks = dc.data_size >> 9;
ok = true;
flags |= P8_DC42;
break;
}
@ -119,6 +121,7 @@ Disk *Disk::OpenFile(const char *file, bool dos_order)
blocks = udi.data_blocks;
offset = udi.data_offset;
ok = true;
flags |= P8_2MG;
break;
}
@ -141,7 +144,7 @@ Disk *Disk::OpenFile(const char *file, bool dos_order)
d->_data = (uint8_t *)map;
d->_blocks = blocks;
d->_offset = offset;
d->_dosorder = dos_order;
d->_flags = flags;
}
}
@ -168,7 +171,8 @@ int Disk::Normalize(FileEntry &f, unsigned fork, ExtendedEntry *ee)
ok = Read(f.key_pointer, buffer);
if (ok < 0) return ok;
ExtendedEntry e(buffer);
ExtendedEntry e;
e.Load(buffer);
if (fork == 0)
{
@ -197,7 +201,7 @@ int Disk::Read(unsigned block, void *buffer)
if (block > _blocks) return -P8_INVALID_BLOCK;
if (_dosorder)
if (_flags & P8_DOS_ORDER)
{
static unsigned do_map[] = {0x00, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x0f };
@ -233,7 +237,7 @@ void *Disk::ReadFile(const FileEntry &f, unsigned fork, uint32_t *size, int *err
SET_ERROR(0);
SET_SIZE(0);
if (fork != DATA_FORK && fork != RESOURCE_FORK)
if (fork != P8_DATA_FORK && fork != P8_RESOURCE_FORK)
{
SET_ERROR(-P8_INVALID_FORK);
return NULL;
@ -252,7 +256,7 @@ void *Disk::ReadFile(const FileEntry &f, unsigned fork, uint32_t *size, int *err
case SEEDLING_FILE:
case SAPLING_FILE:
case TREE_FILE:
if (fork != DATA_FORK)
if (fork != P8_DATA_FORK)
{
SET_ERROR(1);
return NULL;
@ -271,9 +275,10 @@ void *Disk::ReadFile(const FileEntry &f, unsigned fork, uint32_t *size, int *err
return NULL;
}
ExtendedEntry entry(buffer);
ExtendedEntry entry;
entry.Load(buffer);
if (fork == DATA_FORK)
if (fork == P8_DATA_FORK)
{
storage_type = entry.dataFork.storage_type;
eof = entry.dataFork.eof;
@ -362,9 +367,7 @@ int Disk::ReadFile(const FileEntry &f, void *buffer)
int Disk::ReadIndex(unsigned block, void *buffer, unsigned level, off_t offset, unsigned blocks)
{
// does not yet handle sparse files (completely).
{
if (level == 0)
{
// data level
@ -401,12 +404,22 @@ int Disk::ReadIndex(unsigned block, void *buffer, unsigned level, off_t offset,
return -P8_INTERNAL_ERROR;
}
int ok;
uint8_t key[BLOCK_SIZE];
ok = Read(block, key);
if (ok < 0 ) return ok;
if (block) // not sparse.
{
ok = Read(block, key);
if (ok < 0 ) return ok;
}
else
{
// sparse -- zero it out so code below works w/o special cases.
bzero(key, BLOCK_SIZE);
}
for (unsigned i = first; blocks; i++)
{
@ -446,7 +459,8 @@ int Disk::ReadVolume(VolumeEntry *volume, std::vector<FileEntry> *files)
prev = load16(&buffer[0x00]);
next = load16(&buffer[0x02]);
VolumeEntry v(buffer + 0x04);
VolumeEntry v;
v.Load(buffer + 0x04);
if (v.storage_type != VOLUME_HEADER) return -P8_INVALID_STORAGE_TYPE;
@ -467,7 +481,8 @@ int Disk::ReadVolume(VolumeEntry *volume, std::vector<FileEntry> *files)
if ( (buffer[0x04 + v.entry_length * index] >> 4) != DELETED_FILE)
{
unsigned offset = v.entry_length * index + 0x4;
FileEntry f(buffer + offset);
FileEntry f;
f.Load(buffer + offset);
f.address = (block << 9) + offset;
files->push_back(f);
@ -521,7 +536,8 @@ int Disk::ReadDirectory(unsigned block, SubdirEntry *dir, std::vector<FileEntry>
prev = load16(&buffer[0x00]);
next = load16(&buffer[0x02]);
SubdirEntry v(buffer + 0x04);
SubdirEntry v;
v.Load(buffer + 0x04);
if (v.storage_type != SUBDIR_HEADER) return -P8_INVALID_STORAGE_TYPE;
@ -543,7 +559,8 @@ int Disk::ReadDirectory(unsigned block, SubdirEntry *dir, std::vector<FileEntry>
if ( (buffer[0x04 + v.entry_length * index] >> 4) != DELETED_FILE)
{
unsigned offset = v.entry_length * index + 0x4;
FileEntry f(buffer + offset);
FileEntry f;
f.Load(buffer + offset);
f.address = (block << 9) + offset;
files->push_back(f);

16
Disk.h
View File

@ -27,11 +27,19 @@ enum {
};
enum {
DATA_FORK = 0,
RESOURCE_FORK = 1
P8_DATA_FORK = 0,
P8_RESOURCE_FORK = 1
};
/* flags */
enum {
P8_DOS_ORDER = 1,
P8_2MG = 2,
P8_DC42 = 4
};
class Disk {
@ -39,7 +47,7 @@ public:
~Disk();
//static Disk *Open2MG(const char *file);
static Disk *OpenFile(const char *file, bool dos_order);
static Disk *OpenFile(const char *file, unsigned flags);
int Normalize(FileEntry &f, unsigned fork, ExtendedEntry *ee = NULL);
@ -62,7 +70,7 @@ private:
unsigned _blocks;
size_t _size;
bool _dosorder;
unsigned _flags;
};
#endif

View File

@ -25,7 +25,7 @@
* o Year values from 40 to 99 represent 1940 through 1999
* o Year values from 0 to 39 represent 2000 through 2039
*/
inline time_t timeToUnix(unsigned yymmdd, unsigned hhmm)
static time_t timeToUnix(unsigned yymmdd, unsigned hhmm)
{
if (yymmdd == 0) return 0;
@ -46,21 +46,7 @@ inline time_t timeToUnix(unsigned yymmdd, unsigned hhmm)
FileEntry::FileEntry()
{
bzero(this, sizeof(FileEntry));
}
FileEntry::FileEntry(const FileEntry& f)
{
*this = f;
}
FileEntry::FileEntry(const FileEntry *f)
{
if (f) *this = *f;
else bzero(this, sizeof(FileEntry));
}
FileEntry::FileEntry(const void *data)
bool FileEntry::Load(const void *data)
{
const uint8_t *cp = (const uint8_t *)data;
@ -107,15 +93,14 @@ FileEntry::FileEntry(const void *data)
last_mod = timeToUnix(load16(&cp[0x21]), load16(&cp[0x23]));
header_pointer = load16(&cp[0x25]);
return true;
}
ExtendedEntry::ExtendedEntry()
{
bzero(this, sizeof(ExtendedEntry));
}
ExtendedEntry::ExtendedEntry(const void *data)
bool ExtendedEntry::Load(const void *data)
{
const uint8_t *cp = (const uint8_t *)data;
@ -159,17 +144,12 @@ ExtendedEntry::ExtendedEntry(const void *data)
}
}
//
return true;
}
VolumeEntry::VolumeEntry()
{
bzero(this, sizeof(VolumeEntry));
}
VolumeEntry::VolumeEntry(const void *data)
bool VolumeEntry::Load(const void *data)
{
const uint8_t *cp = (const uint8_t *)data;
@ -216,17 +196,14 @@ VolumeEntry::VolumeEntry(const void *data)
bit_map_pointer = load16(&cp[0x23]);
total_blocks = load16(&cp[0x25]);
return true;
}
SubdirEntry::SubdirEntry()
{
bzero(this, sizeof(SubdirEntry));
}
SubdirEntry::SubdirEntry(const void *data)
bool SubdirEntry::Load(const void *data)
{
const uint8_t *cp = (const uint8_t *)data;
@ -275,4 +252,6 @@ SubdirEntry::SubdirEntry(const void *data)
parent_entry = cp[0x25];
parent_entry_length = cp[0x26];
return true;
}

24
File.h
View File

@ -42,11 +42,7 @@ enum {
class FileEntry {
public:
FileEntry();
FileEntry(const FileEntry& f);
FileEntry(const FileEntry *f);
FileEntry(const void *data);
bool Load(const void *data);
unsigned storage_type;
unsigned name_length;
@ -66,13 +62,6 @@ public:
uint32_t address;
};
#if 0
class BlockList {
public:
unsigned prev_block;
unsigned next_block;
};
#endif
struct MiniEntry {
@ -86,8 +75,8 @@ struct MiniEntry {
class ExtendedEntry {
public:
ExtendedEntry();
ExtendedEntry(const void *data);
bool Load(const void *data);
MiniEntry dataFork;
MiniEntry resourceFork;
@ -99,8 +88,8 @@ public:
class VolumeEntry {
public:
VolumeEntry();
VolumeEntry(const void *data);
bool Load(const void *data);
unsigned storage_type;
unsigned name_length;
@ -123,8 +112,7 @@ public:
class SubdirEntry {
public:
SubdirEntry();
SubdirEntry(const void *data);
bool Load(const void *data);
unsigned storage_type;
unsigned name_length;

View File

@ -282,7 +282,8 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>17</integer>
<integer>7</integer>
<integer>1</integer>
<integer>0</integer>
</array>
</array>
@ -308,7 +309,7 @@
<real>224</real>
</array>
<key>RubberWindowFrame</key>
<string>189 537 1212 568 0 0 1920 1178 </string>
<string>75 119 1212 568 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -324,7 +325,7 @@
<key>PBXProjectModuleGUID</key>
<string>1CE0B20306471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
<string>DiskCopy42.cpp</string>
<string>File.h</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -332,27 +333,29 @@
<key>PBXProjectModuleGUID</key>
<string>1CE0B20406471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
<string>DiskCopy42.cpp</string>
<string>File.h</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>B6C786F40F2A612600053681</string>
<string>B64E30810F2C0D2F000543FE</string>
<key>history</key>
<array>
<string>B6614B050EFF5F280073C4E7</string>
<string>B679E4B60F02EFA200FB3F0C</string>
<string>B6B767C80F0FFA3900D819C9</string>
<string>B642F1530F133632001F7696</string>
<string>B642F1540F133632001F7696</string>
<string>B642F16A0F1341D4001F7696</string>
<string>B61B78A20F16EA8700C3E140</string>
<string>B6C786E50F2A5FF300053681</string>
<string>B6C786E60F2A5FF300053681</string>
<string>B6C786E70F2A5FF300053681</string>
<string>B6C786EE0F2A612600053681</string>
<string>B6C786EF0F2A612600053681</string>
<string>B6C786F00F2A612600053681</string>
<string>B6B7A85F0F140BBB001024D2</string>
<string>B6C786F70F2A64CC00053681</string>
<string>B6C786F80F2A64CC00053681</string>
<string>B6C786F90F2A64CC00053681</string>
<string>B6C786FA0F2A64CC00053681</string>
<string>B6F4740F0F2ACB4700CB75DA</string>
<string>B6E345420F2BB60B00B7FC78</string>
<string>B6E345610F2BC07F00B7FC78</string>
<string>B64E307D0F2C0D2F000543FE</string>
<string>B64E307E0F2C0D2F000543FE</string>
<string>B6614B050EFF5F280073C4E7</string>
</array>
<key>prevStack</key>
<array>
@ -366,12 +369,14 @@
<string>B6B17F950F1136550060F7AA</string>
<string>B6B17FA80F1140160060F7AA</string>
<string>B6B7A8600F140BBB001024D2</string>
<string>B6C786E80F2A5FF300053681</string>
<string>B6C786E90F2A5FF300053681</string>
<string>B6C786EA0F2A5FF300053681</string>
<string>B6C786F10F2A612600053681</string>
<string>B6C786F20F2A612600053681</string>
<string>B6C786F30F2A612600053681</string>
<string>B6C786FD0F2A64CC00053681</string>
<string>B6F474110F2ACB4700CB75DA</string>
<string>B64E307F0F2C0D2F000543FE</string>
<string>B64E30800F2C0D2F000543FE</string>
</array>
</dict>
<key>SplitCount</key>
@ -385,7 +390,7 @@
<key>Frame</key>
<string>{{0, 0}, {944, 349}}</string>
<key>RubberWindowFrame</key>
<string>189 537 1212 568 0 0 1920 1178 </string>
<string>75 119 1212 568 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
@ -405,7 +410,7 @@
<key>Frame</key>
<string>{{0, 354}, {944, 173}}</string>
<key>RubberWindowFrame</key>
<string>189 537 1212 568 0 0 1920 1178 </string>
<string>75 119 1212 568 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -429,9 +434,9 @@
</array>
<key>TableOfContents</key>
<array>
<string>B6C786AB0F2A598F00053681</string>
<string>B64E30820F2C0D2F000543FE</string>
<string>1CE0B1FE06471DED0097A5F4</string>
<string>B6C786AC0F2A598F00053681</string>
<string>B64E30830F2C0D2F000543FE</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
@ -565,12 +570,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>B60E918C0EFD7E1E000E4348</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>/Users/kelvin/Projects/profuse/profuse.xcodeproj</string>
<string>B64E30840F2C0D2F000543FE</string>
</array>
<key>WindowString</key>
<string>189 537 1212 568 0 0 1920 1178 </string>
<string>75 119 1212 568 0 0 1920 1178 </string>
<key>WindowToolsV3</key>
<array>
<dict>
@ -593,7 +597,7 @@
<key>PBXProjectModuleGUID</key>
<string>1CD0528F0623707200166675</string>
<key>PBXProjectModuleLabel</key>
<string>profuse_xattr.cpp</string>
<string>profuse_file.cpp</string>
<key>StatusBarVisibility</key>
<true/>
</dict>
@ -602,7 +606,7 @@
<key>Frame</key>
<string>{{0, 0}, {857, 500}}</string>
<key>RubberWindowFrame</key>
<string>352 195 857 922 0 0 1920 1178 </string>
<string>621 136 857 922 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
@ -628,7 +632,7 @@
<key>Frame</key>
<string>{{0, 505}, {857, 376}}</string>
<key>RubberWindowFrame</key>
<string>352 195 857 922 0 0 1920 1178 </string>
<string>621 136 857 922 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -651,14 +655,14 @@
<key>TableOfContents</key>
<array>
<string>B60E918C0EFD7E1E000E4348</string>
<string>B6C786CB0F2A5E8000053681</string>
<string>B64E30630F2C08EF000543FE</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.buildV3</string>
<key>WindowString</key>
<string>352 195 857 922 0 0 1920 1178 </string>
<string>621 136 857 922 0 0 1920 1178 </string>
<key>WindowToolGUID</key>
<string>B60E918C0EFD7E1E000E4348</string>
<key>WindowToolIsVisible</key>
@ -771,13 +775,13 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
<string>B6C786AD0F2A598F00053681</string>
<string>B64E30640F2C08EF000543FE</string>
<string>1C162984064C10D400B95A72</string>
<string>B6C786AE0F2A598F00053681</string>
<string>B6C786AF0F2A598F00053681</string>
<string>B6C786B00F2A598F00053681</string>
<string>B6C786B10F2A598F00053681</string>
<string>B6C786B20F2A598F00053681</string>
<string>B64E30650F2C08EF000543FE</string>
<string>B64E30660F2C08EF000543FE</string>
<string>B64E30670F2C08EF000543FE</string>
<string>B64E30680F2C08EF000543FE</string>
<string>B64E30690F2C08EF000543FE</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
@ -1003,7 +1007,7 @@
<key>PBXProjectModuleGUID</key>
<string>1C78EAB2065D492600B07095</string>
<key>PBXProjectModuleLabel</key>
<string>main.cpp</string>
<string>File.cpp</string>
<key>StatusBarVisibility</key>
<true/>
</dict>
@ -1080,7 +1084,7 @@
<key>TableOfContents</key>
<array>
<string>B60E929F0EFDA500000E4348</string>
<string>B61B78A60F16EA8700C3E140</string>
<string>B6E345600F2BC07D00B7FC78</string>
<string>1C78EAB2065D492600B07095</string>
<string>1CD052920623707200166675</string>
</array>
@ -1091,7 +1095,7 @@
<key>WindowToolGUID</key>
<string>B60E929F0EFDA500000E4348</string>
<key>WindowToolIsVisible</key>
<true/>
<false/>
</dict>
<dict>
<key>Identifier</key>

View File

@ -10,7 +10,7 @@
);
breakpoints = (
B60E91C10EFD8049000E4348 /* xmain.cpp:129 */,
B60E92720EFDA086000E4348 /* File.cpp:88 */,
B60E92720EFDA086000E4348 /* File.cpp:74 */,
B6D81E5B0EFDE859000219B7 /* xmain.cpp:163 */,
B6AE1CFF0F0335FC00D36ADB /* main.cpp:20 */,
);
@ -115,8 +115,8 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 254433671;
PBXWorkspaceStateSaveDate = 254433671;
PBXPerProjectTemplateStateSaveDate = 254545182;
PBXWorkspaceStateSaveDate = 254545182;
};
perUserProjectItems = {
B60E917F0EFD7E1E000E4348 = B60E917F0EFD7E1E000E4348 /* PBXTextBookmark */;
@ -124,47 +124,40 @@
B60E91810EFD7E1E000E4348 = B60E91810EFD7E1E000E4348 /* PBXTextBookmark */;
B60E922B0EFD94CA000E4348 = B60E922B0EFD94CA000E4348 /* PBXTextBookmark */;
B60E929C0EFDA500000E4348 = B60E929C0EFDA500000E4348 /* PBXTextBookmark */;
B61B78A20F16EA8700C3E140 = B61B78A20F16EA8700C3E140 /* PBXTextBookmark */;
B61B78A40F16EA8700C3E140 = B61B78A40F16EA8700C3E140 /* PBXTextBookmark */;
B6340C7B0F22C271008931E1 = B6340C7B0F22C271008931E1 /* PBXTextBookmark */;
B642F1530F133632001F7696 = B642F1530F133632001F7696 /* PBXTextBookmark */;
B642F1540F133632001F7696 = B642F1540F133632001F7696 /* PBXTextBookmark */;
B642F16A0F1341D4001F7696 = B642F16A0F1341D4001F7696 /* PBXTextBookmark */;
B64E306A0F2C08F3000543FE = B64E306A0F2C08F3000543FE /* PBXTextBookmark */;
B64E306B0F2C08F3000543FE = B64E306B0F2C08F3000543FE /* PBXTextBookmark */;
B64E306C0F2C08F3000543FE = B64E306C0F2C08F3000543FE /* PBXTextBookmark */;
B64E306F0F2C0900000543FE = B64E306F0F2C0900000543FE /* PBXTextBookmark */;
B64E307D0F2C0D2F000543FE /* PBXTextBookmark */ = B64E307D0F2C0D2F000543FE /* PBXTextBookmark */;
B64E307E0F2C0D2F000543FE /* PBXTextBookmark */ = B64E307E0F2C0D2F000543FE /* PBXTextBookmark */;
B64E307F0F2C0D2F000543FE /* PBXTextBookmark */ = B64E307F0F2C0D2F000543FE /* PBXTextBookmark */;
B64E30800F2C0D2F000543FE /* PBXTextBookmark */ = B64E30800F2C0D2F000543FE /* PBXTextBookmark */;
B64E30810F2C0D2F000543FE /* PBXTextBookmark */ = B64E30810F2C0D2F000543FE /* PBXTextBookmark */;
B6614B050EFF5F280073C4E7 = B6614B050EFF5F280073C4E7 /* PBXTextBookmark */;
B679E4B60F02EFA200FB3F0C = B679E4B60F02EFA200FB3F0C /* PBXTextBookmark */;
B679E4BB0F02EFA200FB3F0C = B679E4BB0F02EFA200FB3F0C /* PBXTextBookmark */;
B6B17F940F1136550060F7AA = B6B17F940F1136550060F7AA /* PBXTextBookmark */;
B6B17F950F1136550060F7AA = B6B17F950F1136550060F7AA /* PBXTextBookmark */;
B6B17FA80F1140160060F7AA = B6B17FA80F1140160060F7AA /* PBXTextBookmark */;
B6B767C80F0FFA3900D819C9 = B6B767C80F0FFA3900D819C9 /* PBXTextBookmark */;
B6B767CB0F0FFA3900D819C9 = B6B767CB0F0FFA3900D819C9 /* PBXTextBookmark */;
B6B7A85F0F140BBB001024D2 = B6B7A85F0F140BBB001024D2 /* PBXTextBookmark */;
B6B7A8600F140BBB001024D2 = B6B7A8600F140BBB001024D2 /* PBXTextBookmark */;
B6C786AA0F2A598F00053681 /* PBXTextBookmark */ = B6C786AA0F2A598F00053681 /* PBXTextBookmark */;
B6C786C90F2A5E8000053681 /* PBXTextBookmark */ = B6C786C90F2A5E8000053681 /* PBXTextBookmark */;
B6C786CA0F2A5E8000053681 /* PBXTextBookmark */ = B6C786CA0F2A5E8000053681 /* PBXTextBookmark */;
B6C786DD0F2A5FED00053681 /* PBXTextBookmark */ = B6C786DD0F2A5FED00053681 /* PBXTextBookmark */;
B6C786DE0F2A5FED00053681 /* PBXTextBookmark */ = B6C786DE0F2A5FED00053681 /* PBXTextBookmark */;
B6C786DF0F2A5FED00053681 /* PBXTextBookmark */ = B6C786DF0F2A5FED00053681 /* PBXTextBookmark */;
B6C786E00F2A5FED00053681 /* PBXTextBookmark */ = B6C786E00F2A5FED00053681 /* PBXTextBookmark */;
B6C786E10F2A5FED00053681 /* PBXTextBookmark */ = B6C786E10F2A5FED00053681 /* PBXTextBookmark */;
B6C786E20F2A5FED00053681 /* PBXTextBookmark */ = B6C786E20F2A5FED00053681 /* PBXTextBookmark */;
B6C786E30F2A5FED00053681 /* PBXTextBookmark */ = B6C786E30F2A5FED00053681 /* PBXTextBookmark */;
B6C786E40F2A5FED00053681 /* PBXTextBookmark */ = B6C786E40F2A5FED00053681 /* PBXTextBookmark */;
B6C786E50F2A5FF300053681 /* PBXTextBookmark */ = B6C786E50F2A5FF300053681 /* PBXTextBookmark */;
B6C786E60F2A5FF300053681 /* PBXTextBookmark */ = B6C786E60F2A5FF300053681 /* PBXTextBookmark */;
B6C786E70F2A5FF300053681 /* PBXTextBookmark */ = B6C786E70F2A5FF300053681 /* PBXTextBookmark */;
B6C786E80F2A5FF300053681 /* PBXTextBookmark */ = B6C786E80F2A5FF300053681 /* PBXTextBookmark */;
B6C786E90F2A5FF300053681 /* PBXTextBookmark */ = B6C786E90F2A5FF300053681 /* PBXTextBookmark */;
B6C786EA0F2A5FF300053681 /* PBXTextBookmark */ = B6C786EA0F2A5FF300053681 /* PBXTextBookmark */;
B6C786EB0F2A5FF300053681 /* PBXTextBookmark */ = B6C786EB0F2A5FF300053681 /* PBXTextBookmark */;
B6C786EE0F2A612600053681 /* PBXTextBookmark */ = B6C786EE0F2A612600053681 /* PBXTextBookmark */;
B6C786EF0F2A612600053681 /* PBXTextBookmark */ = B6C786EF0F2A612600053681 /* PBXTextBookmark */;
B6C786F00F2A612600053681 /* PBXTextBookmark */ = B6C786F00F2A612600053681 /* PBXTextBookmark */;
B6C786F10F2A612600053681 /* PBXTextBookmark */ = B6C786F10F2A612600053681 /* PBXTextBookmark */;
B6C786F20F2A612600053681 /* PBXTextBookmark */ = B6C786F20F2A612600053681 /* PBXTextBookmark */;
B6C786F30F2A612600053681 /* PBXTextBookmark */ = B6C786F30F2A612600053681 /* PBXTextBookmark */;
B6C786F40F2A612600053681 /* PBXTextBookmark */ = B6C786F40F2A612600053681 /* PBXTextBookmark */;
B6C786E50F2A5FF300053681 = B6C786E50F2A5FF300053681 /* PBXTextBookmark */;
B6C786E90F2A5FF300053681 = B6C786E90F2A5FF300053681 /* PBXTextBookmark */;
B6C786EA0F2A5FF300053681 = B6C786EA0F2A5FF300053681 /* PBXTextBookmark */;
B6C786EE0F2A612600053681 = B6C786EE0F2A612600053681 /* PBXTextBookmark */;
B6C786EF0F2A612600053681 = B6C786EF0F2A612600053681 /* PBXTextBookmark */;
B6C786F20F2A612600053681 = B6C786F20F2A612600053681 /* PBXTextBookmark */;
B6C786F30F2A612600053681 = B6C786F30F2A612600053681 /* PBXTextBookmark */;
B6C786F70F2A64CC00053681 = B6C786F70F2A64CC00053681 /* PBXTextBookmark */;
B6C786F80F2A64CC00053681 = B6C786F80F2A64CC00053681 /* PBXTextBookmark */;
B6C786F90F2A64CC00053681 = B6C786F90F2A64CC00053681 /* PBXTextBookmark */;
B6C786FA0F2A64CC00053681 = B6C786FA0F2A64CC00053681 /* PBXTextBookmark */;
B6C786FD0F2A64CC00053681 = B6C786FD0F2A64CC00053681 /* PBXTextBookmark */;
B6E345420F2BB60B00B7FC78 = B6E345420F2BB60B00B7FC78 /* PBXTextBookmark */;
B6E345610F2BC07F00B7FC78 = B6E345610F2BC07F00B7FC78 /* PBXTextBookmark */;
B6F4740F0F2ACB4700CB75DA = B6F4740F0F2ACB4700CB75DA /* PBXTextBookmark */;
B6F474110F2ACB4700CB75DA = B6F474110F2ACB4700CB75DA /* PBXTextBookmark */;
};
sourceControlManager = B60E91500EFB3628000E4348 /* Source Control */;
userBuildSettings = {
@ -217,17 +210,17 @@
};
B60E914D0EFB3627000E4348 /* File.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {496, 2030}}";
sepNavSelRange = "{25, 0}";
sepNavVisRange = "{1119, 1284}";
sepNavIntBoundsRect = "{{0, 0}, {883, 1792}}";
sepNavSelRange = "{414, 0}";
sepNavVisRange = "{1197, 440}";
sepNavWindowFrame = "{{95, -86}, {555, 1173}}";
};
};
B60E914E0EFB3628000E4348 /* File.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {883, 3822}}";
sepNavSelRange = "{3668, 0}";
sepNavVisRange = "{1287, 532}";
sepNavIntBoundsRect = "{{0, 0}, {883, 3682}}";
sepNavSelRange = "{3323, 0}";
sepNavVisRange = "{1285, 523}";
sepNavWindowFrame = "{{667, -9}, {555, 1173}}";
};
};
@ -245,17 +238,17 @@
};
B60E91530EFB51FE000E4348 /* Disk.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {633, 1043}}";
sepNavSelRange = "{25, 0}";
sepNavVisRange = "{0, 1184}";
sepNavIntBoundsRect = "{{0, 0}, {1250, 1092}}";
sepNavSelRange = "{1300, 0}";
sepNavVisRange = "{178, 1128}";
sepNavWindowFrame = "{{77, 7}, {692, 1171}}";
};
};
B60E91540EFB51FE000E4348 /* Disk.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {633, 7826}}";
sepNavSelRange = "{9022, 68}";
sepNavVisRange = "{8353, 1853}";
sepNavIntBoundsRect = "{{0, 0}, {883, 8652}}";
sepNavSelRange = "{5288, 0}";
sepNavVisRange = "{5127, 457}";
sepNavWindowFrame = "{{943, -6}, {692, 1171}}";
};
};
@ -324,7 +317,7 @@
vrLen = 327;
vrLoc = 0;
};
B60E92720EFDA086000E4348 /* File.cpp:88 */ = {
B60E92720EFDA086000E4348 /* File.cpp:74 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -336,7 +329,7 @@
functionName = "FileEntry::FileEntry(const void *data)";
hitCount = 0;
ignoreCount = 0;
lineNumber = 88;
lineNumber = 74;
location = "ProDOS-Fuse";
modificationTime = 251949619.113693;
state = 2;
@ -346,67 +339,27 @@
fRef = B60E914E0EFB3628000E4348 /* File.cpp */;
name = "File.cpp: 106";
rLen = 0;
rLoc = 3668;
rLoc = 3323;
rType = 0;
vrLen = 345;
vrLoc = 1359;
};
B61B78A20F16EA8700C3E140 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */;
name = "Disk.cpp: 328";
rLen = 0;
rLoc = 7422;
rType = 0;
vrLen = 351;
vrLoc = 31;
};
B61B78A40F16EA8700C3E140 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B679E4A70F02E79300FB3F0C /* main.cpp */;
name = "main.cpp: 33";
rLen = 0;
rLoc = 323;
rType = 0;
vrLen = 330;
vrLoc = 441;
};
B6340C7B0F22C271008931E1 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B679E4A70F02E79300FB3F0C /* main.cpp */;
name = "main.cpp: 33";
rLen = 0;
rLoc = 323;
rType = 0;
vrLen = 330;
vrLoc = 441;
};
B642F1290F132FA3001F7696 /* UniversalDiskImage.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1353, 796}}";
sepNavIntBoundsRect = "{{0, 0}, {1250, 831}}";
sepNavSelRange = "{217, 34}";
sepNavVisRange = "{0, 707}";
sepNavVisRange = "{0, 708}";
sepNavWindowFrame = "{{15, 249}, {1412, 924}}";
};
};
B642F12A0F132FA3001F7696 /* UniversalDiskImage.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {883, 728}}";
sepNavIntBoundsRect = "{{0, 0}, {1250, 831}}";
sepNavSelRange = "{820, 0}";
sepNavVisRange = "{500, 463}";
sepNavVisRange = "{0, 966}";
sepNavWindowFrame = "{{668, 219}, {1412, 924}}";
};
};
B642F1530F133632001F7696 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E914E0EFB3628000E4348 /* File.cpp */;
name = "File.cpp: 176";
rLen = 0;
rLoc = 3668;
rType = 0;
vrLen = 532;
vrLoc = 1287;
};
B642F1540F133632001F7696 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17FA00F1138830060F7AA /* DiskCopy42.h */;
@ -427,6 +380,94 @@
vrLen = 313;
vrLoc = 0;
};
B64E306A0F2C08F3000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E914E0EFB3628000E4348 /* File.cpp */;
name = "File.cpp: 176";
rLen = 0;
rLoc = 3323;
rType = 0;
vrLen = 532;
vrLoc = 1287;
};
B64E306B0F2C08F3000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
comments = "error: 'DATA_FORK' was not declared in this scope";
fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */;
rLen = 1;
rLoc = 239;
rType = 1;
};
B64E306C0F2C08F3000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E914E0EFB3628000E4348 /* File.cpp */;
name = "File.cpp: 176";
rLen = 0;
rLoc = 3323;
rType = 0;
vrLen = 532;
vrLoc = 1287;
};
B64E306F0F2C0900000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */;
name = "Disk.cpp: 240";
rLen = 0;
rLoc = 5288;
rType = 0;
vrLen = 457;
vrLoc = 5127;
};
B64E307D0F2C0D2F000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */;
name = "Disk.cpp: 240";
rLen = 0;
rLoc = 5288;
rType = 0;
vrLen = 457;
vrLoc = 5127;
};
B64E307E0F2C0D2F000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E914E0EFB3628000E4348 /* File.cpp */;
name = "File.cpp: 156";
rLen = 0;
rLoc = 3323;
rType = 0;
vrLen = 523;
vrLoc = 1285;
};
B64E307F0F2C0D2F000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */;
name = "Disk.cpp: 240";
rLen = 0;
rLoc = 5288;
rType = 0;
vrLen = 457;
vrLoc = 5127;
};
B64E30800F2C0D2F000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E914E0EFB3628000E4348 /* File.cpp */;
name = "File.cpp: 156";
rLen = 0;
rLoc = 3323;
rType = 0;
vrLen = 523;
vrLoc = 1285;
};
B64E30810F2C0D2F000543FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E914D0EFB3627000E4348 /* File.h */;
name = "File.h: 30";
rLen = 0;
rLoc = 414;
rType = 0;
vrLen = 440;
vrLoc = 1197;
};
B6614B050EFF5F280073C4E7 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E914D0EFB3627000E4348 /* File.h */;
@ -439,22 +480,12 @@
};
B679E4A70F02E79300FB3F0C /* main.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1250, 3864}}";
sepNavSelRange = "{284, 0}";
sepNavVisRange = "{0, 950}";
sepNavIntBoundsRect = "{{0, 0}, {759, 3948}}";
sepNavSelRange = "{1950, 0}";
sepNavVisRange = "{3049, 226}";
sepNavWindowFrame = "{{342, 156}, {1412, 924}}";
};
};
B679E4B60F02EFA200FB3F0C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E91530EFB51FE000E4348 /* Disk.h */;
name = "Disk.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 342;
vrLoc = 0;
};
B679E4BB0F02EFA200FB3F0C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B679E4A70F02E79300FB3F0C /* main.cpp */;
@ -488,21 +519,6 @@
name = fuse_common.h;
path = /usr/local/include/fuse/fuse_common.h;
sourceTree = "<absolute>";
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {883, 4032}}";
sepNavSelRange = "{6850, 63}";
sepNavVisRange = "{5837, 708}";
};
};
B6B17F940F1136550060F7AA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */;
name = "fuse_common.h: 36";
rLen = 0;
rLoc = 921;
rType = 0;
vrLen = 579;
vrLoc = 535;
};
B6B17F950F1136550060F7AA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
@ -560,16 +576,6 @@
vrLen = 722;
vrLoc = 2400;
};
B6B7A85F0F140BBB001024D2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17FA10F1138830060F7AA /* DiskCopy42.cpp */;
name = "DiskCopy42.cpp: 11";
rLen = 0;
rLoc = 150;
rType = 0;
vrLen = 333;
vrLoc = 0;
};
B6B7A8600F140BBB001024D2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17FA10F1138830060F7AA /* DiskCopy42.cpp */;
@ -580,147 +586,41 @@
vrLen = 333;
vrLoc = 0;
};
B6C786AA0F2A598F00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B679E4A70F02E79300FB3F0C /* main.cpp */;
name = "main.cpp: 33";
rLen = 0;
rLoc = 323;
rType = 0;
vrLen = 330;
vrLoc = 441;
};
B6C786B30F2A59AF00053681 /* profuse.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1250, 831}}";
sepNavSelRange = "{185, 0}";
sepNavVisRange = "{0, 1380}";
sepNavIntBoundsRect = "{{0, 0}, {796, 728}}";
sepNavSelRange = "{1382, 0}";
sepNavVisRange = "{243, 1139}";
};
};
B6C786B40F2A59FE00053681 /* profuse_xattr.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {796, 5194}}";
sepNavSelRange = "{2396, 68}";
sepNavVisRange = "{0, 546}";
sepNavIntBoundsRect = "{{0, 0}, {1250, 5138}}";
sepNavSelRange = "{3730, 0}";
sepNavVisRange = "{3045, 1256}";
};
};
B6C786BB0F2A5C0800053681 /* profuse_dirent.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1250, 1806}}";
sepNavSelRange = "{193, 0}";
sepNavVisRange = "{0, 1150}";
sepNavIntBoundsRect = "{{0, 0}, {796, 1792}}";
sepNavSelRange = "{974, 0}";
sepNavVisRange = "{1797, 951}";
};
};
B6C786BF0F2A5CC000053681 /* profuse_stat.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1250, 3010}}";
sepNavSelRange = "{181, 0}";
sepNavVisRange = "{0, 1136}";
sepNavIntBoundsRect = "{{0, 0}, {1250, 3038}}";
sepNavSelRange = "{3676, 0}";
sepNavVisRange = "{3020, 1612}";
};
};
B6C786C30F2A5DCE00053681 /* profuse_file.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {883, 1974}}";
sepNavSelRange = "{132, 0}";
sepNavVisRange = "{0, 365}";
sepNavIntBoundsRect = "{{0, 0}, {796, 1988}}";
sepNavSelRange = "{502, 0}";
sepNavVisRange = "{1178, 692}";
};
};
B6C786C90F2A5E8000053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
comments = "error: #error On FreeBSD API version 25 or greater must be used";
fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */;
rLen = 1;
rLoc = 265;
rType = 1;
};
B6C786CA0F2A5E8000053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */;
name = "fuse_common.h: 266";
rLen = 63;
rLoc = 6850;
rType = 0;
vrLen = 1208;
vrLoc = 6380;
};
B6C786DD0F2A5FED00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */;
name = "fuse_common.h: 266";
rLen = 63;
rLoc = 6850;
rType = 0;
vrLen = 1208;
vrLoc = 6380;
};
B6C786DE0F2A5FED00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786B40F2A59FE00053681 /* profuse_xattr.cpp */;
name = "profuse_xattr.cpp: 120";
rLen = 68;
rLoc = 2396;
rType = 0;
vrLen = 546;
vrLoc = 0;
};
B6C786DF0F2A5FED00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786BB0F2A5C0800053681 /* profuse_dirent.cpp */;
name = "profuse_dirent.cpp: 12";
rLen = 0;
rLoc = 135;
rType = 0;
vrLen = 610;
vrLoc = 38;
};
B6C786E00F2A5FED00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
comments = "error: 'EISDIR' was not declared in this scope";
fRef = B6C786C30F2A5DCE00053681 /* profuse_file.cpp */;
rLen = 1;
rLoc = 24;
rType = 1;
};
B6C786E10F2A5FED00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */;
name = "fuse_common.h: 266";
rLen = 63;
rLoc = 6850;
rType = 0;
vrLen = 1208;
vrLoc = 6380;
};
B6C786E20F2A5FED00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786B40F2A59FE00053681 /* profuse_xattr.cpp */;
name = "profuse_xattr.cpp: 120";
rLen = 68;
rLoc = 2396;
rType = 0;
vrLen = 546;
vrLoc = 0;
};
B6C786E30F2A5FED00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786BB0F2A5C0800053681 /* profuse_dirent.cpp */;
name = "profuse_dirent.cpp: 12";
rLen = 0;
rLoc = 135;
rType = 0;
vrLen = 610;
vrLoc = 38;
};
B6C786E40F2A5FED00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786C30F2A5DCE00053681 /* profuse_file.cpp */;
name = "profuse_file.cpp: 11";
rLen = 0;
rLoc = 132;
rType = 0;
vrLen = 607;
vrLoc = 0;
};
B6C786E50F2A5FF300053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B679E4A70F02E79300FB3F0C /* main.cpp */;
@ -731,36 +631,6 @@
vrLen = 330;
vrLoc = 441;
};
B6C786E60F2A5FF300053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786B30F2A59AF00053681 /* profuse.h */;
name = "profuse.h: 15";
rLen = 0;
rLoc = 592;
rType = 0;
vrLen = 176;
vrLoc = 0;
};
B6C786E70F2A5FF300053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786B40F2A59FE00053681 /* profuse_xattr.cpp */;
name = "profuse_xattr.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 360;
vrLoc = 0;
};
B6C786E80F2A5FF300053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B679E4A70F02E79300FB3F0C /* main.cpp */;
name = "main.cpp: 33";
rLen = 0;
rLoc = 323;
rType = 0;
vrLen = 330;
vrLoc = 441;
};
B6C786E90F2A5FF300053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786B30F2A59AF00053681 /* profuse.h */;
@ -781,16 +651,6 @@
vrLen = 360;
vrLoc = 0;
};
B6C786EB0F2A5FF300053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */;
name = "fuse_common.h: 266";
rLen = 63;
rLoc = 6850;
rType = 0;
vrLen = 789;
vrLoc = 6545;
};
B6C786EE0F2A612600053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */;
@ -811,26 +671,6 @@
vrLen = 463;
vrLoc = 500;
};
B6C786F00F2A612600053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786C30F2A5DCE00053681 /* profuse_file.cpp */;
name = "profuse_file.cpp: 11";
rLen = 0;
rLoc = 132;
rType = 0;
vrLen = 365;
vrLoc = 0;
};
B6C786F10F2A612600053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */;
name = "fuse_common.h: 266";
rLen = 63;
rLoc = 6850;
rType = 0;
vrLen = 708;
vrLoc = 5837;
};
B6C786F20F2A612600053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B642F12A0F132FA3001F7696 /* UniversalDiskImage.cpp */;
@ -851,7 +691,7 @@
vrLen = 365;
vrLoc = 0;
};
B6C786F40F2A612600053681 /* PBXTextBookmark */ = {
B6C786F70F2A64CC00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6B17FA10F1138830060F7AA /* DiskCopy42.cpp */;
name = "DiskCopy42.cpp: 11";
@ -861,6 +701,46 @@
vrLen = 333;
vrLoc = 0;
};
B6C786F80F2A64CC00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786B40F2A59FE00053681 /* profuse_xattr.cpp */;
name = "profuse_xattr.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 371;
vrLoc = 3;
};
B6C786F90F2A64CC00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786BF0F2A5CC000053681 /* profuse_stat.cpp */;
name = "profuse_stat.cpp: 15";
rLen = 0;
rLoc = 181;
rType = 0;
vrLen = 303;
vrLoc = 0;
};
B6C786FA0F2A64CC00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786C30F2A5DCE00053681 /* profuse_file.cpp */;
name = "profuse_file.cpp: 11";
rLen = 0;
rLoc = 132;
rType = 0;
vrLen = 365;
vrLoc = 0;
};
B6C786FD0F2A64CC00053681 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786BF0F2A5CC000053681 /* profuse_stat.cpp */;
name = "profuse_stat.cpp: 15";
rLen = 0;
rLoc = 181;
rType = 0;
vrLen = 303;
vrLoc = 0;
};
B6D81E5B0EFDE859000219B7 /* xmain.cpp:163 */ = {
isa = PBXFileBreakpoint;
actions = (
@ -886,4 +766,44 @@
sepNavWindowFrame = "{{15, 249}, {1412, 924}}";
};
};
B6E345420F2BB60B00B7FC78 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B60E91530EFB51FE000E4348 /* Disk.h */;
name = "Disk.h: 65";
rLen = 21;
rLoc = 1281;
rType = 0;
vrLen = 597;
vrLoc = 627;
};
B6E345610F2BC07F00B7FC78 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786B30F2A59AF00053681 /* profuse.h */;
name = "profuse.h: 48";
rLen = 0;
rLoc = 1372;
rType = 0;
vrLen = 973;
vrLoc = 409;
};
B6F4740F0F2ACB4700CB75DA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786BB0F2A5C0800053681 /* profuse_dirent.cpp */;
name = "profuse_dirent.cpp: 16";
rLen = 0;
rLoc = 193;
rType = 0;
vrLen = 368;
vrLoc = 0;
};
B6F474110F2ACB4700CB75DA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C786BB0F2A5C0800053681 /* profuse_dirent.cpp */;
name = "profuse_dirent.cpp: 16";
rLen = 0;
rLoc = 193;
rType = 0;
vrLen = 368;
vrLoc = 0;
};
}

View File

@ -41,7 +41,8 @@ void prodos_opendir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
if (ino == 1)
{
VolumeEntry v(buffer + 0x04);
VolumeEntry v;
v.Load(buffer + 0x04);
ok = disk->ReadVolume(&v, &files);
@ -50,7 +51,8 @@ void prodos_opendir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
else
{
FileEntry e(buffer + (ino & 0x1ff));
FileEntry e;
e.Load(buffer + (ino & 0x1ff));
ERROR(e.storage_type != DIRECTORY_FILE, ENOTDIR)

View File

@ -27,7 +27,8 @@ void prodos_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
ok = disk->Read(ino >> 9, buffer);
ERROR(ok < 0, EIO)
e = new FileEntry(buffer + (ino & 0x1ff));
e = new FileEntry();
e->Load(buffer + (ino & 0x1ff));
if (e->storage_type == EXTENDED_FILE)
{

View File

@ -51,7 +51,8 @@ int prodos_stat(FileEntry& e, struct stat *st)
ok = disk->Read(e.key_pointer, buffer);
if (ok < 0) return -1;
SubdirEntry se(buffer + 0x04);
SubdirEntry se;
se.Load(buffer + 0x04);
if (se.storage_type != SUBDIR_HEADER) return -1;
@ -123,7 +124,8 @@ void prodos_getattr(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
// ino 1 is the volume header.
if (ino == 1)
{
VolumeEntry v(buffer + 0x04);
VolumeEntry v;
v.Load(buffer + 0x04);
ok = prodos_stat(v, &st);
ERROR(ok < 0, EIO);
@ -136,7 +138,8 @@ void prodos_getattr(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
{
FileEntry e(buffer + (ino & 0x1ff));
FileEntry e;
e.Load(buffer + (ino & 0x1ff));
ok = prodos_stat(e, &st);
ERROR(ok < 0, EIO);
@ -180,7 +183,8 @@ void prodos_lookup(fuse_req_t req, fuse_ino_t parent, const char *name)
}
else
{
FileEntry e(buffer + (parent & 0x1ff));
FileEntry e;
e.Load(buffer + (parent & 0x1ff));
ERROR(e.storage_type != DIRECTORY_FILE, ENOENT);
ok = disk->ReadDirectory(e.key_pointer, NULL, &files);

View File

@ -180,6 +180,7 @@ static void xattr_finfo(FileEntry& e, fuse_req_t req, size_t size, off_t off)
static bool isTextFile(unsigned ftype, unsigned auxtype)
{
if (ftype == 0x04) return true; // ascii text
if (ftype == 0x80) return true; // source code.
if (ftype == 0x50 && auxtype == 0x5445) return true; // teach text
return false;
@ -214,7 +215,8 @@ return; \
ERROR(ok < 0, EIO)
FileEntry e(buffer + (ino & 0x1ff));
FileEntry e;
e.Load(buffer + (ino & 0x1ff));
attr += "prodos.FileType";
@ -306,7 +308,8 @@ void prodos_getxattr(fuse_req_t req, fuse_ino_t ino, const char *name, size_t si
ERROR(ok < 0, EIO)
FileEntry e(buffer + (ino & 0x1ff));
FileEntry e;
e.Load(buffer + (ino & 0x1ff));
switch(e.storage_type)
{