summaryrefslogtreecommitdiff
path: root/pr/src/md/mac/macdll.c
diff options
context:
space:
mode:
Diffstat (limited to 'pr/src/md/mac/macdll.c')
-rw-r--r--pr/src/md/mac/macdll.c106
1 files changed, 60 insertions, 46 deletions
diff --git a/pr/src/md/mac/macdll.c b/pr/src/md/mac/macdll.c
index 2cfe79db..23b32759 100644
--- a/pr/src/md/mac/macdll.c
+++ b/pr/src/md/mac/macdll.c
@@ -218,7 +218,7 @@ GetSharedLibraryFilterProc(const CInfoPBRec* const inCpb, Boolean* inWantQuit, v
// see if this symbol is in this fragment
if (LibInPefContainer(&fragSpec, pFilterData->inName, &codeOffset, &codeLength))
- tempErr = GetDiskFragment(&fragSpec, codeOffset, codeLength, pFilterData->inName, kLoadCFrag, &pFilterData->outID, &pFilterData->outAddress, errName);
+ tempErr = GetDiskFragment(&fragSpec, codeOffset, codeLength, fragSpec.name, kLoadCFrag, &pFilterData->outID, &pFilterData->outAddress, errName);
else
return;
@@ -503,19 +503,30 @@ done:
OSErr NSLoadNamedFragment(const FSSpec *fileSpec, const char* fragmentName, CFragConnectionID *outConnectionID)
{
- UInt32 fragOffset, fragLength;
- Ptr main;
- Str255 fragName = "\p";
- Str255 errName;
- OSErr err;
-
- err = GetNamedFragmentOffsets(fileSpec, fragmentName, &fragOffset, &fragLength);
- if (err != noErr) return err;
-
- err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
- kLoadCFrag, outConnectionID, &main, errName);
-
- return err;
+ UInt32 fragOffset, fragLength;
+ short fragNameLength;
+ Ptr main;
+ Str255 fragName;
+ Str255 errName;
+ OSErr err;
+
+ err = GetNamedFragmentOffsets(fileSpec, fragmentName, &fragOffset, &fragLength);
+ if (err != noErr) return err;
+
+ // convert fragment name to pascal string
+ fragNameLength = strlen(fragmentName);
+ if (fragNameLength > 255)
+ fragNameLength = 255;
+ BlockMoveData(fragmentName, &fragName[1], fragNameLength);
+ fragName[0] = fragNameLength;
+
+ // Note that we pass the fragment name as the 4th param to GetDiskFragment.
+ // This value affects the ability of debuggers, and the Talkback system,
+ // to match code fragments with symbol files
+ err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
+ kLoadCFrag, outConnectionID, &main, errName);
+
+ return err;
}
@@ -532,39 +543,42 @@ OSErr NSLoadNamedFragment(const FSSpec *fileSpec, const char* fragmentName, CFra
-----------------------------------------------------------------*/
OSErr NSLoadIndexedFragment(const FSSpec *fileSpec, PRUint32 fragmentIndex,
- char** outFragName, CFragConnectionID *outConnectionID)
+ char** outFragName, CFragConnectionID *outConnectionID)
{
- UInt32 fragOffset, fragLength;
- char *fragNameBlock = NULL;
- Ptr main;
- Str255 fragName = "\p";
- Str255 errName;
- OSErr err;
-
- *outFragName = NULL;
-
- err = GetIndexedFragmentOffsets(fileSpec, fragmentIndex, &fragOffset, &fragLength, &fragNameBlock);
- if (err != noErr) return err;
-
- if (fragNameBlock)
- {
- UInt32 nameLen = strlen(fragNameBlock);
- if (nameLen > 63)
- nameLen = 63;
- BlockMoveData(fragNameBlock, &fragName[1], nameLen);
- fragName[0] = nameLen;
- }
-
- err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
- kLoadCFrag, outConnectionID, &main, errName);
- if (err != noErr)
- {
- free(fragNameBlock);
- return err;
- }
-
- *outFragName = fragNameBlock;
- return noErr;
+ UInt32 fragOffset, fragLength;
+ char *fragNameBlock = NULL;
+ Ptr main;
+ Str255 fragName = "\p";
+ Str255 errName;
+ OSErr err;
+
+ *outFragName = NULL;
+
+ err = GetIndexedFragmentOffsets(fileSpec, fragmentIndex, &fragOffset, &fragLength, &fragNameBlock);
+ if (err != noErr) return err;
+
+ if (fragNameBlock)
+ {
+ UInt32 nameLen = strlen(fragNameBlock);
+ if (nameLen > 63)
+ nameLen = 63;
+ BlockMoveData(fragNameBlock, &fragName[1], nameLen);
+ fragName[0] = nameLen;
+ }
+
+ // Note that we pass the fragment name as the 4th param to GetDiskFragment.
+ // This value affects the ability of debuggers, and the Talkback system,
+ // to match code fragments with symbol files
+ err = GetDiskFragment(fileSpec, fragOffset, fragLength, fragName,
+ kLoadCFrag, outConnectionID, &main, errName);
+ if (err != noErr)
+ {
+ free(fragNameBlock);
+ return err;
+ }
+
+ *outFragName = fragNameBlock;
+ return noErr;
}