static PyObject *ResObj_ChangedResource(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; #ifndef ChangedResource PyMac_PRECHECK(ChangedResource); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; ChangedResource(_self->ob_itself); { OSErr _err = ResError(); if (_err != noErr) return PyMac_Error(_err); } Py_INCREF(Py_None); _res = Py_None; return _res; }
OSErr CreateToolNameRes(StringPtr toolName) { short ref; FSSpec prefs; OSErr error; Handle theStrings; // build the 'STR ' resource error = FindPrefs(&prefs); if (error == noErr) { ref = FSpOpenResFile(&prefs, fsRdWrPerm); if (ref != -1) { theStrings = Get1Resource('STR ',kToolNameRes); if (theStrings != nil) { RemoveResource(theStrings); error = ResError(); } error = PtrToHand(toolName, &theStrings, toolName[0] + 1); AddResource(theStrings, 'STR ', kToolNameRes, "\ptoolName"); error = ResError(); ChangedResource(theStrings); error = ResError(); WriteResource(theStrings); error = ResError(); //ReleaseResource(theStrings); // Release the resource from memory. //error = ResError(); UpdateResFile(ref); // No screwing around; write that resource! error = ResError(); FlushVol(nil, prefs.vRefNum); CloseResFile(ref); } else {
OSErr PAS_decodeResource(PASEntry *entry, FSSpec *outFile, short inRefNum) { OSErr err = noErr; short outRefNum; PASResFork info; SInt32 infoSize; short oldResFile; PASResource pasRes; SInt32 pasResSize; long bufSize; Handle buffer; long counter=0; infoSize = sizeof(PASResFork); err = SetFPos(inRefNum, fsFromStart, (*entry).entryOffset ); if (err != noErr) return err; err = FSRead( inRefNum, &infoSize, &info); if (err != noErr) return err; if(infoSize != sizeof(PASResFork)) { err = -1; goto error; } oldResFile=CurResFile(); outRefNum = FSpOpenResFile(outFile, fsRdWrPerm); if (outRefNum < noErr) return outRefNum; UseResFile(outRefNum); while (1) { pasResSize = sizeof(PASResource); err = FSRead( inRefNum, &pasResSize, &pasRes); if (err != noErr) { if(err == eofErr) err = noErr; break; } bufSize = pasRes.length; buffer = NewHandle(bufSize); HLock(buffer); if(buffer == NULL) { /* if we did not get our memory, try updateresfile */ HUnlock(buffer); UpdateResFile(outRefNum); counter=0; buffer = NewHandle(bufSize); HLock(buffer); if(buffer == NULL) { err = memFullErr; break; } } err = FSRead( inRefNum, &bufSize, &(**buffer)); if (err != noErr && err != eofErr) break; AddResource(buffer, pasRes.attrType, pasRes.attrID, pasRes.attrName); WriteResource(buffer); SetResAttrs(buffer, pasRes.attr); ChangedResource(buffer); WriteResource(buffer); ReleaseResource(buffer); if (counter++ > 100) { UpdateResFile(outRefNum); counter=0; } } error: UseResFile(oldResFile); CloseResFile(outRefNum); return err; }