VError VMacResFile::_GetResource(const VString& inType, const VString& inName, Handle* outHandle) const { OSErr macError = noErr; Str255 spName; *outHandle = NULL; if (!testAssert(fRefNum != -1)) return VE_STREAM_NOT_OPENED; ResType type = inType.GetOsType(); if (type == 0) return VE_INVALID_PARAMETER; inName.MAC_ToMacPString(spName, 255); sWORD curres = ::CurResFile(); if (curres != fRefNum) ::UseResFile(fRefNum); *outHandle = fUseResourceChain ? ::GetNamedResource(type, spName) : ::Get1NamedResource(type, spName); macError = ::ResError(); if (curres != fRefNum) ::UseResFile(curres); VError error = VErrorBase::NativeErrorToVError((VNativeError)macError); return error; }
VError VMacResFile::SetResourceName(const VString& inType, sLONG inID, const VString& inName) { // test if the res file is not read-only if (!testAssert(!fReadOnly)) return VE_ACCESS_DENIED; Handle data = NULL; VError error = _GetResource(inType, inID, &data); if (error == VE_OK) { Str255 spName; inName.MAC_ToMacPString(spName, 255); ::SetResInfo(data, (short) inID, spName); OSErr macError = ::ResError(); assert(macError == noErr); error = VErrorBase::NativeErrorToVError((VNativeError)macError); } return error; }