summaryrefslogtreecommitdiff
path: root/src/vm/assemblynative.cpp
diff options
context:
space:
mode:
authorKoundinya Veluri <kouvel@microsoft.com>2015-09-03 22:06:56 -0700
committerKoundinya Veluri <kouvel@microsoft.com>2015-09-09 13:12:36 -0700
commit2f042a1212137e558fca716dbb92197f7a770e55 (patch)
tree1c081af67ef569a8b328e65e73098ee4f4475228 /src/vm/assemblynative.cpp
parent508454cc76e1bd35c07521ebfc73617c00c5bcb3 (diff)
downloadcoreclr-2f042a1212137e558fca716dbb92197f7a770e55.tar.gz
coreclr-2f042a1212137e558fca716dbb92197f7a770e55.tar.bz2
coreclr-2f042a1212137e558fca716dbb92197f7a770e55.zip
Add AssemblyExtensions.TryGetRawMetadata to the System.Reflection.Metadata namespace.
This patch contains has the necessary changes in coreclr and mscorlib. Tests will be added separately, once the new API is published and can be consumed. Part of dotnet/corefx#2768
Diffstat (limited to 'src/vm/assemblynative.cpp')
-rw-r--r--src/vm/assemblynative.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/vm/assemblynative.cpp b/src/vm/assemblynative.cpp
index 40df0068c5..5b4e0c5347 100644
--- a/src/vm/assemblynative.cpp
+++ b/src/vm/assemblynative.cpp
@@ -2614,3 +2614,29 @@ INT_PTR QCALLTYPE AssemblyNative::GetLoadContextForAssembly(QCall::AssemblyHandl
return ptrManagedAssemblyLoadContext;
}
#endif // defined(FEATURE_HOST_ASSEMBLY_RESOLVER)
+
+// static
+BOOL QCALLTYPE AssemblyNative::InternalTryGetRawMetadata(
+ QCall::AssemblyHandle assembly,
+ UINT8 **blobRef,
+ INT32 *lengthRef)
+{
+ QCALL_CONTRACT;
+
+ PTR_CVOID metadata = nullptr;
+
+ BEGIN_QCALL;
+
+ _ASSERTE(assembly != nullptr);
+ _ASSERTE(blobRef != nullptr);
+ _ASSERTE(lengthRef != nullptr);
+
+ static_assert_no_msg(sizeof(*lengthRef) == sizeof(COUNT_T));
+ metadata = assembly->GetFile()->GetLoadedMetadata(reinterpret_cast<COUNT_T *>(lengthRef));
+ *blobRef = reinterpret_cast<UINT8 *>(const_cast<PTR_VOID>(metadata));
+ _ASSERTE(*lengthRef >= 0);
+
+ END_QCALL;
+
+ return metadata != nullptr;
+}