Mercurial > hg > openjdk > jdk9 > jdk
changeset 14284:f7da6c6b818b
8147634: Need a JImage API that given a JImageLocationRef returns class name
Reviewed-by: hseigel
author | jlaskey |
---|---|
date | Mon, 25 Apr 2016 09:57:55 -0300 |
parents | fe9e630bb80d |
children | 34d28218fa21 |
files | make/lib/CoreLibraries.gmk make/mapfiles/libjimage/mapfile-vers src/java.base/share/native/libjimage/jimage.cpp src/java.base/share/native/libjimage/jimage.hpp |
diffstat | 4 files changed, 43 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/make/lib/CoreLibraries.gmk Mon Apr 25 09:57:55 2016 -0300 +++ b/make/lib/CoreLibraries.gmk Mon Apr 25 09:57:55 2016 -0300 @@ -267,7 +267,7 @@ LDFLAGS_windows := -export:JIMAGE_Open -export:JIMAGE_Close \ -export:JIMAGE_PackageToModule \ -export:JIMAGE_FindResource -export:JIMAGE_GetResource \ - -export:JIMAGE_ResourceIterator, \ + -export:JIMAGE_ResourceIterator -export:JIMAGE_ResourcePath, \ LIBS_unix := -ljvm -ldl $(LIBCXX), \ LIBS_solaris := -lc, \ LIBS_macosx := -lc++, \
--- a/make/mapfiles/libjimage/mapfile-vers Mon Apr 25 09:57:55 2016 -0300 +++ b/make/mapfiles/libjimage/mapfile-vers Mon Apr 25 09:57:55 2016 -0300 @@ -34,6 +34,7 @@ JIMAGE_FindResource; JIMAGE_GetResource; JIMAGE_ResourceIterator; + JIMAGE_ResourcePath; local: *; };
--- a/src/java.base/share/native/libjimage/jimage.cpp Mon Apr 25 09:57:55 2016 -0300 +++ b/src/java.base/share/native/libjimage/jimage.cpp Mon Apr 25 09:57:55 2016 -0300 @@ -207,7 +207,30 @@ if (!(*visitor)(image, module, "9", parent, base, extension, arg)) { break; } - } } +/* + * JIMAGE_ResourcePath- Given an open image file, a location reference, a buffer + * and a maximum buffer size, copy the path of the resource into the buffer. + * Returns false if not a valid location reference. + * + * Ex. + * JImageLocationRef location = ... + * char path[JIMAGE_MAX_PATH]; + * (*JImageResourcePath)(image, location, path, JIMAGE_MAX_PATH); + */ +extern "C" bool JIMAGE_ResourcePath(JImageFile* image, JImageLocationRef locationRef, + char* path, size_t max) { + ImageFileReader* imageFile = (ImageFileReader*) image; + + u4 offset = (u4) locationRef; + if (offset >= imageFile->locations_size()) { + return false; + } + + ImageLocation location(imageFile->get_location_offset_data(offset)); + imageFile->location_path(location, path, max); + + return true; +}
--- a/src/java.base/share/native/libjimage/jimage.hpp Mon Apr 25 09:57:55 2016 -0300 +++ b/src/java.base/share/native/libjimage/jimage.hpp Mon Apr 25 09:57:55 2016 -0300 @@ -186,3 +186,20 @@ typedef void (*JImageResourceIterator_t)(JImageFile* jimage, JImageResourceVisitor_t visitor, void* arg); + +/* + * JIMAGE_ResourcePath- Given an open image file, a location reference, a buffer + * and a maximum buffer size, copy the path of the resource into the buffer. + * Returns false if not a valid location reference. + * + * Ex. + * JImageLocationRef location = ... + * char path[JIMAGE_MAX_PATH]; + * (*JImageResourcePath)(image, location, path, JIMAGE_MAX_PATH); + */ +extern "C" bool JIMAGE_ResourcePath(JImageFile* image, JImageLocationRef locationRef, + char* path, size_t max); + +typedef bool (*JImage_ResourcePath_t)(JImageFile* jimage, JImageLocationRef location, + char* buffer, jlong size); +