| 6754 | } |
| 6755 | |
| 6756 | bool COFF::GetEmitSource(const StringImpl& filePath, String& outText) |
| 6757 | { |
| 6758 | if (!filePath.StartsWith("$Emit")) |
| 6759 | return false; |
| 6760 | |
| 6761 | if (mEmitSourceFile == NULL) |
| 6762 | { |
| 6763 | mEmitSourceFile = new ZipFile(); |
| 6764 | |
| 6765 | String zipPath = mPDBPath; |
| 6766 | int dotPos = zipPath.LastIndexOf('.'); |
| 6767 | zipPath.RemoveToEnd(dotPos); |
| 6768 | zipPath.Append("__emit.zip"); |
| 6769 | if (!mEmitSourceFile->Open(zipPath)) |
| 6770 | { |
| 6771 | if (mCvEmitStream == -1) |
| 6772 | return ""; |
| 6773 | |
| 6774 | int outSize; |
| 6775 | uint8* data = CvReadStream(mCvEmitStream, &outSize); |
| 6776 | |
| 6777 | FileStream fileStream; |
| 6778 | fileStream.Open(zipPath, "wb"); |
| 6779 | fileStream.Write(data, outSize); |
| 6780 | fileStream.Close(); |
| 6781 | |
| 6782 | delete data; |
| 6783 | |
| 6784 | mEmitSourceFile->Open(zipPath); |
| 6785 | } |
| 6786 | } |
| 6787 | |
| 6788 | if (mEmitSourceFile->IsOpen()) |
| 6789 | { |
| 6790 | String usePath = filePath; |
| 6791 | if (usePath.StartsWith("$Emit")) |
| 6792 | { |
| 6793 | int dollarPos = usePath.IndexOf('$', 1); |
| 6794 | usePath.Remove(0, dollarPos + 1); |
| 6795 | } |
| 6796 | usePath = EncodeFileName(usePath); |
| 6797 | usePath.Append(".bf"); |
| 6798 | |
| 6799 | Array<uint8> data; |
| 6800 | if (mEmitSourceFile->Get(usePath, data)) |
| 6801 | { |
| 6802 | outText.Insert(outText.mLength, (char*)data.mVals, data.mSize); |
| 6803 | return true; |
| 6804 | } |
| 6805 | } |
| 6806 | |
| 6807 | return false; |
| 6808 | } |
| 6809 | |
| 6810 | bool COFF::HasPendingDebugInfo() |
| 6811 | { |
no test coverage detected