Loading include/androidfw/ResourceTypes.h +23 −12 Original line number Diff line number Diff line Loading @@ -36,6 +36,17 @@ namespace android { /** * In C++11, char16_t is defined as *at least* 16 bits. We do a lot of * casting on raw data and expect char16_t to be exactly 16 bits. */ #if __cplusplus >= 201103L struct __assertChar16Size { static_assert(sizeof(char16_t) == sizeof(uint16_t), "char16_t is not 16 bits"); static_assert(alignof(char16_t) == alignof(uint16_t), "char16_t is not 16-bit aligned"); }; #endif /** ******************************************************************** * PNG Extensions * Loading Loading @@ -702,25 +713,25 @@ public: // These are available for all nodes: int32_t getCommentID() const; const uint16_t* getComment(size_t* outLen) const; const char16_t* getComment(size_t* outLen) const; uint32_t getLineNumber() const; // This is available for TEXT: int32_t getTextID() const; const uint16_t* getText(size_t* outLen) const; const char16_t* getText(size_t* outLen) const; ssize_t getTextValue(Res_value* outValue) const; // These are available for START_NAMESPACE and END_NAMESPACE: int32_t getNamespacePrefixID() const; const uint16_t* getNamespacePrefix(size_t* outLen) const; const char16_t* getNamespacePrefix(size_t* outLen) const; int32_t getNamespaceUriID() const; const uint16_t* getNamespaceUri(size_t* outLen) const; const char16_t* getNamespaceUri(size_t* outLen) const; // These are available for START_TAG and END_TAG: int32_t getElementNamespaceID() const; const uint16_t* getElementNamespace(size_t* outLen) const; const char16_t* getElementNamespace(size_t* outLen) const; int32_t getElementNameID() const; const uint16_t* getElementName(size_t* outLen) const; const char16_t* getElementName(size_t* outLen) const; // Remaining methods are for retrieving information about attributes // associated with a START_TAG: Loading @@ -729,10 +740,10 @@ public: // Returns -1 if no namespace, -2 if idx out of range. int32_t getAttributeNamespaceID(size_t idx) const; const uint16_t* getAttributeNamespace(size_t idx, size_t* outLen) const; const char16_t* getAttributeNamespace(size_t idx, size_t* outLen) const; int32_t getAttributeNameID(size_t idx) const; const uint16_t* getAttributeName(size_t idx, size_t* outLen) const; const char16_t* getAttributeName(size_t idx, size_t* outLen) const; uint32_t getAttributeNameResID(size_t idx) const; // These will work only if the underlying string pool is UTF-8. Loading @@ -740,7 +751,7 @@ public: const char* getAttributeName8(size_t idx, size_t* outLen) const; int32_t getAttributeValueStringID(size_t idx) const; const uint16_t* getAttributeStringValue(size_t idx, size_t* outLen) const; const char16_t* getAttributeStringValue(size_t idx, size_t* outLen) const; int32_t getAttributeDataType(size_t idx) const; int32_t getAttributeData(size_t idx) const; Loading Loading @@ -845,7 +856,7 @@ struct ResTable_package uint32_t id; // Actual name of this package, \0-terminated. char16_t name[128]; uint16_t name[128]; // Offset to a ResStringPool_header defining the resource // type symbol table. If zero, this package is inheriting from Loading Loading @@ -1450,7 +1461,7 @@ struct ResTable_lib_entry uint32_t packageId; // The package name of the shared library. \0 terminated. char16_t packageName[128]; uint16_t packageName[128]; }; /** Loading Loading @@ -1681,7 +1692,7 @@ public: size_t defPackageLen = 0, uint32_t* outTypeSpecFlags = NULL) const; static bool expandResourceRef(const uint16_t* refStr, size_t refLen, static bool expandResourceRef(const char16_t* refStr, size_t refLen, String16* outPackage, String16* outType, String16* outName, Loading libs/androidfw/Android.mk +10 −24 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ LOCAL_PATH:= $(call my-dir) # libandroidfw is partially built for the host (used by obbtool and others) # libandroidfw is partially built for the host (used by obbtool, aapt, and others) # These files are common to host and target builds. commonSources := \ Loading @@ -35,26 +35,17 @@ deviceSources := \ BackupHelpers.cpp \ CursorWindow.cpp hostSources := \ $(commonSources) hostSources := $(commonSources) # For the host # ===================================================== include $(CLEAR_VARS) LOCAL_SRC_FILES:= $(hostSources) LOCAL_MODULE:= libandroidfw LOCAL_MODULE_TAGS := optional LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS LOCAL_C_INCLUDES := \ external/zlib LOCAL_STATIC_LIBRARIES := liblog libziparchive-host libutils LOCAL_SRC_FILES:= $(hostSources) LOCAL_C_INCLUDES := external/zlib include $(BUILD_HOST_STATIC_LIBRARY) Loading @@ -64,8 +55,13 @@ include $(BUILD_HOST_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libandroidfw LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES:= $(deviceSources) LOCAL_C_INCLUDES := \ external/zlib \ system/core/include LOCAL_STATIC_LIBRARIES := libziparchive LOCAL_SHARED_LIBRARIES := \ libbinder \ liblog \ Loading @@ -73,16 +69,6 @@ LOCAL_SHARED_LIBRARIES := \ libutils \ libz LOCAL_STATIC_LIBRARIES := libziparchive LOCAL_C_INCLUDES := \ external/zlib \ system/core/include LOCAL_MODULE:= libandroidfw LOCAL_MODULE_TAGS := optional include $(BUILD_SHARED_LIBRARY) Loading libs/androidfw/ResourceTypes.cpp +32 −27 Original line number Diff line number Diff line Loading @@ -87,11 +87,11 @@ inline static T max(T a, T b) { // range checked; guaranteed to NUL-terminate within the stated number of available slots // NOTE: if this truncates the dst string due to running out of space, no attempt is // made to avoid splitting surrogate pairs. static void strcpy16_dtoh(uint16_t* dst, const uint16_t* src, size_t avail) static void strcpy16_dtoh(char16_t* dst, const uint16_t* src, size_t avail) { uint16_t* last = dst + avail - 1; char16_t* last = dst + avail - 1; while (*src && (dst < last)) { char16_t s = dtohs(*src); char16_t s = dtohs(static_cast<char16_t>(*src)); *dst++ = s; src++; } Loading Loading @@ -501,7 +501,7 @@ status_t ResStringPool::setTo(const void* data, size_t size, bool copyData) if (mHeader->flags&ResStringPool_header::UTF8_FLAG) { charSize = sizeof(uint8_t); } else { charSize = sizeof(char16_t); charSize = sizeof(uint16_t); } // There should be at least space for the smallest string Loading Loading @@ -547,8 +547,8 @@ status_t ResStringPool::setTo(const void* data, size_t size, bool copyData) e[i] = dtohl(mEntries[i]); } if (!(mHeader->flags&ResStringPool_header::UTF8_FLAG)) { const char16_t* strings = (const char16_t*)mStrings; char16_t* s = const_cast<char16_t*>(strings); const uint16_t* strings = (const uint16_t*)mStrings; uint16_t* s = const_cast<uint16_t*>(strings); for (i=0; i<mStringPoolSize; i++) { s[i] = dtohs(strings[i]); } Loading @@ -558,7 +558,7 @@ status_t ResStringPool::setTo(const void* data, size_t size, bool copyData) if ((mHeader->flags&ResStringPool_header::UTF8_FLAG && ((uint8_t*)mStrings)[mStringPoolSize-1] != 0) || (!mHeader->flags&ResStringPool_header::UTF8_FLAG && ((char16_t*)mStrings)[mStringPoolSize-1] != 0)) { ((uint16_t*)mStrings)[mStringPoolSize-1] != 0)) { ALOGW("Bad string block: last string is not 0-terminated\n"); return (mError=BAD_TYPE); } Loading Loading @@ -656,7 +656,7 @@ void ResStringPool::uninit() * add it together with the next character. */ static inline size_t decodeLength(const char16_t** str) decodeLength(const uint16_t** str) { size_t len = **str; if ((len & 0x8000) != 0) { Loading Loading @@ -689,19 +689,19 @@ decodeLength(const uint8_t** str) return len; } const uint16_t* ResStringPool::stringAt(size_t idx, size_t* u16len) const const char16_t* ResStringPool::stringAt(size_t idx, size_t* u16len) const { if (mError == NO_ERROR && idx < mHeader->stringCount) { const bool isUTF8 = (mHeader->flags&ResStringPool_header::UTF8_FLAG) != 0; const uint32_t off = mEntries[idx]/(isUTF8?sizeof(char):sizeof(char16_t)); const uint32_t off = mEntries[idx]/(isUTF8?sizeof(uint8_t):sizeof(uint16_t)); if (off < (mStringPoolSize-1)) { if (!isUTF8) { const char16_t* strings = (char16_t*)mStrings; const char16_t* str = strings+off; const uint16_t* strings = (uint16_t*)mStrings; const uint16_t* str = strings+off; *u16len = decodeLength(&str); if ((uint32_t)(str+*u16len-strings) < mStringPoolSize) { return str; return reinterpret_cast<const char16_t*>(str); } else { ALOGW("Bad string block: string #%d extends to %d, past end at %d\n", (int)idx, (int)(str+*u16len-strings), (int)mStringPoolSize); Loading Loading @@ -1013,7 +1013,7 @@ int32_t ResXMLParser::getCommentID() const return mCurNode != NULL ? dtohl(mCurNode->comment.index) : -1; } const uint16_t* ResXMLParser::getComment(size_t* outLen) const const char16_t* ResXMLParser::getComment(size_t* outLen) const { int32_t id = getCommentID(); return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; Loading @@ -1032,7 +1032,7 @@ int32_t ResXMLParser::getTextID() const return -1; } const uint16_t* ResXMLParser::getText(size_t* outLen) const const char16_t* ResXMLParser::getText(size_t* outLen) const { int32_t id = getTextID(); return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; Loading @@ -1055,7 +1055,7 @@ int32_t ResXMLParser::getNamespacePrefixID() const return -1; } const uint16_t* ResXMLParser::getNamespacePrefix(size_t* outLen) const const char16_t* ResXMLParser::getNamespacePrefix(size_t* outLen) const { int32_t id = getNamespacePrefixID(); //printf("prefix=%d event=%p\n", id, mEventCode); Loading @@ -1070,7 +1070,7 @@ int32_t ResXMLParser::getNamespaceUriID() const return -1; } const uint16_t* ResXMLParser::getNamespaceUri(size_t* outLen) const const char16_t* ResXMLParser::getNamespaceUri(size_t* outLen) const { int32_t id = getNamespaceUriID(); //printf("uri=%d event=%p\n", id, mEventCode); Loading @@ -1088,7 +1088,7 @@ int32_t ResXMLParser::getElementNamespaceID() const return -1; } const uint16_t* ResXMLParser::getElementNamespace(size_t* outLen) const const char16_t* ResXMLParser::getElementNamespace(size_t* outLen) const { int32_t id = getElementNamespaceID(); return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; Loading @@ -1105,7 +1105,7 @@ int32_t ResXMLParser::getElementNameID() const return -1; } const uint16_t* ResXMLParser::getElementName(size_t* outLen) const const char16_t* ResXMLParser::getElementName(size_t* outLen) const { int32_t id = getElementNameID(); return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; Loading Loading @@ -1134,7 +1134,7 @@ int32_t ResXMLParser::getAttributeNamespaceID(size_t idx) const return -2; } const uint16_t* ResXMLParser::getAttributeNamespace(size_t idx, size_t* outLen) const const char16_t* ResXMLParser::getAttributeNamespace(size_t idx, size_t* outLen) const { int32_t id = getAttributeNamespaceID(idx); //printf("attribute namespace=%d idx=%d event=%p\n", id, idx, mEventCode); Loading Loading @@ -1165,7 +1165,7 @@ int32_t ResXMLParser::getAttributeNameID(size_t idx) const return -1; } const uint16_t* ResXMLParser::getAttributeName(size_t idx, size_t* outLen) const const char16_t* ResXMLParser::getAttributeName(size_t idx, size_t* outLen) const { int32_t id = getAttributeNameID(idx); //printf("attribute name=%d idx=%d event=%p\n", id, idx, mEventCode); Loading Loading @@ -1205,7 +1205,7 @@ int32_t ResXMLParser::getAttributeValueStringID(size_t idx) const return -1; } const uint16_t* ResXMLParser::getAttributeStringValue(size_t idx, size_t* outLen) const const char16_t* ResXMLParser::getAttributeStringValue(size_t idx, size_t* outLen) const { int32_t id = getAttributeValueStringID(idx); //XML_NOISY(printf("getAttributeValue 0x%x=0x%x\n", idx, id)); Loading Loading @@ -4239,7 +4239,7 @@ nope: return 0; } bool ResTable::expandResourceRef(const uint16_t* refStr, size_t refLen, bool ResTable::expandResourceRef(const char16_t* refStr, size_t refLen, String16* outPackage, String16* outType, String16* outName, Loading Loading @@ -5665,8 +5665,8 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg, if (idx == 0) { idx = mPackageGroups.size() + 1; char16_t tmpName[sizeof(pkg->name)/sizeof(char16_t)]; strcpy16_dtoh(tmpName, pkg->name, sizeof(pkg->name)/sizeof(char16_t)); char16_t tmpName[sizeof(pkg->name)/sizeof(pkg->name[0])]; strcpy16_dtoh(tmpName, pkg->name, sizeof(pkg->name)/sizeof(pkg->name[0])); group = new PackageGroup(this, String16(tmpName), id); if (group == NULL) { delete package; Loading Loading @@ -6036,7 +6036,10 @@ status_t ResTable::createIdmap(const ResTable& overlay, *outSize += 2 * sizeof(uint16_t); // overlay packages are assumed to contain only one package group const String16 overlayPackage(overlay.mPackageGroups[0]->packages[0]->package->name); const ResTable_package* overlayPackageStruct = overlay.mPackageGroups[0]->packages[0]->package; char16_t tmpName[sizeof(overlayPackageStruct->name)/sizeof(overlayPackageStruct->name[0])]; strcpy16_dtoh(tmpName, overlayPackageStruct->name, sizeof(overlayPackageStruct->name)/sizeof(overlayPackageStruct->name[0])); const String16 overlayPackage(tmpName); for (size_t typeIndex = 0; typeIndex < pg->types.size(); ++typeIndex) { const TypeList& typeList = pg->types[typeIndex]; Loading Loading @@ -6345,8 +6348,10 @@ void ResTable::print(bool inclValues) const // Use a package's real ID, since the ID may have been assigned // if this package is a shared library. packageId = pkg->package->id; char16_t tmpName[sizeof(pkg->package->name)/sizeof(pkg->package->name[0])]; strcpy16_dtoh(tmpName, pkg->package->name, sizeof(pkg->package->name)/sizeof(pkg->package->name[0])); printf(" Package %d id=0x%02x name=%s\n", (int)pkgIndex, pkg->package->id, String8(String16(pkg->package->name)).string()); pkg->package->id, String8(tmpName).string()); } for (size_t typeIndex=0; typeIndex < pg->types.size(); typeIndex++) { Loading libs/androidfw/misc.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ #include <androidfw/misc.h> #include <sys/stat.h> #include <string.h> #include <cstring> #include <errno.h> #include <stdio.h> #include <cstdio> using namespace android; Loading libs/androidfw/tests/Android.mk +0 −3 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ testFiles := \ include $(CLEAR_VARS) LOCAL_MODULE := libandroidfw_tests LOCAL_SRC_FILES := $(testFiles) LOCAL_STATIC_LIBRARIES := \ libandroidfw \ Loading @@ -55,11 +54,9 @@ ifneq ($(SDK_ONLY),true) include $(CLEAR_VARS) LOCAL_MODULE := libandroidfw_tests LOCAL_SRC_FILES := $(testFiles) \ BackupData_test.cpp \ ObbFile_test.cpp LOCAL_SHARED_LIBRARIES := \ libandroidfw \ libcutils \ Loading Loading
include/androidfw/ResourceTypes.h +23 −12 Original line number Diff line number Diff line Loading @@ -36,6 +36,17 @@ namespace android { /** * In C++11, char16_t is defined as *at least* 16 bits. We do a lot of * casting on raw data and expect char16_t to be exactly 16 bits. */ #if __cplusplus >= 201103L struct __assertChar16Size { static_assert(sizeof(char16_t) == sizeof(uint16_t), "char16_t is not 16 bits"); static_assert(alignof(char16_t) == alignof(uint16_t), "char16_t is not 16-bit aligned"); }; #endif /** ******************************************************************** * PNG Extensions * Loading Loading @@ -702,25 +713,25 @@ public: // These are available for all nodes: int32_t getCommentID() const; const uint16_t* getComment(size_t* outLen) const; const char16_t* getComment(size_t* outLen) const; uint32_t getLineNumber() const; // This is available for TEXT: int32_t getTextID() const; const uint16_t* getText(size_t* outLen) const; const char16_t* getText(size_t* outLen) const; ssize_t getTextValue(Res_value* outValue) const; // These are available for START_NAMESPACE and END_NAMESPACE: int32_t getNamespacePrefixID() const; const uint16_t* getNamespacePrefix(size_t* outLen) const; const char16_t* getNamespacePrefix(size_t* outLen) const; int32_t getNamespaceUriID() const; const uint16_t* getNamespaceUri(size_t* outLen) const; const char16_t* getNamespaceUri(size_t* outLen) const; // These are available for START_TAG and END_TAG: int32_t getElementNamespaceID() const; const uint16_t* getElementNamespace(size_t* outLen) const; const char16_t* getElementNamespace(size_t* outLen) const; int32_t getElementNameID() const; const uint16_t* getElementName(size_t* outLen) const; const char16_t* getElementName(size_t* outLen) const; // Remaining methods are for retrieving information about attributes // associated with a START_TAG: Loading @@ -729,10 +740,10 @@ public: // Returns -1 if no namespace, -2 if idx out of range. int32_t getAttributeNamespaceID(size_t idx) const; const uint16_t* getAttributeNamespace(size_t idx, size_t* outLen) const; const char16_t* getAttributeNamespace(size_t idx, size_t* outLen) const; int32_t getAttributeNameID(size_t idx) const; const uint16_t* getAttributeName(size_t idx, size_t* outLen) const; const char16_t* getAttributeName(size_t idx, size_t* outLen) const; uint32_t getAttributeNameResID(size_t idx) const; // These will work only if the underlying string pool is UTF-8. Loading @@ -740,7 +751,7 @@ public: const char* getAttributeName8(size_t idx, size_t* outLen) const; int32_t getAttributeValueStringID(size_t idx) const; const uint16_t* getAttributeStringValue(size_t idx, size_t* outLen) const; const char16_t* getAttributeStringValue(size_t idx, size_t* outLen) const; int32_t getAttributeDataType(size_t idx) const; int32_t getAttributeData(size_t idx) const; Loading Loading @@ -845,7 +856,7 @@ struct ResTable_package uint32_t id; // Actual name of this package, \0-terminated. char16_t name[128]; uint16_t name[128]; // Offset to a ResStringPool_header defining the resource // type symbol table. If zero, this package is inheriting from Loading Loading @@ -1450,7 +1461,7 @@ struct ResTable_lib_entry uint32_t packageId; // The package name of the shared library. \0 terminated. char16_t packageName[128]; uint16_t packageName[128]; }; /** Loading Loading @@ -1681,7 +1692,7 @@ public: size_t defPackageLen = 0, uint32_t* outTypeSpecFlags = NULL) const; static bool expandResourceRef(const uint16_t* refStr, size_t refLen, static bool expandResourceRef(const char16_t* refStr, size_t refLen, String16* outPackage, String16* outType, String16* outName, Loading
libs/androidfw/Android.mk +10 −24 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ LOCAL_PATH:= $(call my-dir) # libandroidfw is partially built for the host (used by obbtool and others) # libandroidfw is partially built for the host (used by obbtool, aapt, and others) # These files are common to host and target builds. commonSources := \ Loading @@ -35,26 +35,17 @@ deviceSources := \ BackupHelpers.cpp \ CursorWindow.cpp hostSources := \ $(commonSources) hostSources := $(commonSources) # For the host # ===================================================== include $(CLEAR_VARS) LOCAL_SRC_FILES:= $(hostSources) LOCAL_MODULE:= libandroidfw LOCAL_MODULE_TAGS := optional LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS LOCAL_C_INCLUDES := \ external/zlib LOCAL_STATIC_LIBRARIES := liblog libziparchive-host libutils LOCAL_SRC_FILES:= $(hostSources) LOCAL_C_INCLUDES := external/zlib include $(BUILD_HOST_STATIC_LIBRARY) Loading @@ -64,8 +55,13 @@ include $(BUILD_HOST_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libandroidfw LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES:= $(deviceSources) LOCAL_C_INCLUDES := \ external/zlib \ system/core/include LOCAL_STATIC_LIBRARIES := libziparchive LOCAL_SHARED_LIBRARIES := \ libbinder \ liblog \ Loading @@ -73,16 +69,6 @@ LOCAL_SHARED_LIBRARIES := \ libutils \ libz LOCAL_STATIC_LIBRARIES := libziparchive LOCAL_C_INCLUDES := \ external/zlib \ system/core/include LOCAL_MODULE:= libandroidfw LOCAL_MODULE_TAGS := optional include $(BUILD_SHARED_LIBRARY) Loading
libs/androidfw/ResourceTypes.cpp +32 −27 Original line number Diff line number Diff line Loading @@ -87,11 +87,11 @@ inline static T max(T a, T b) { // range checked; guaranteed to NUL-terminate within the stated number of available slots // NOTE: if this truncates the dst string due to running out of space, no attempt is // made to avoid splitting surrogate pairs. static void strcpy16_dtoh(uint16_t* dst, const uint16_t* src, size_t avail) static void strcpy16_dtoh(char16_t* dst, const uint16_t* src, size_t avail) { uint16_t* last = dst + avail - 1; char16_t* last = dst + avail - 1; while (*src && (dst < last)) { char16_t s = dtohs(*src); char16_t s = dtohs(static_cast<char16_t>(*src)); *dst++ = s; src++; } Loading Loading @@ -501,7 +501,7 @@ status_t ResStringPool::setTo(const void* data, size_t size, bool copyData) if (mHeader->flags&ResStringPool_header::UTF8_FLAG) { charSize = sizeof(uint8_t); } else { charSize = sizeof(char16_t); charSize = sizeof(uint16_t); } // There should be at least space for the smallest string Loading Loading @@ -547,8 +547,8 @@ status_t ResStringPool::setTo(const void* data, size_t size, bool copyData) e[i] = dtohl(mEntries[i]); } if (!(mHeader->flags&ResStringPool_header::UTF8_FLAG)) { const char16_t* strings = (const char16_t*)mStrings; char16_t* s = const_cast<char16_t*>(strings); const uint16_t* strings = (const uint16_t*)mStrings; uint16_t* s = const_cast<uint16_t*>(strings); for (i=0; i<mStringPoolSize; i++) { s[i] = dtohs(strings[i]); } Loading @@ -558,7 +558,7 @@ status_t ResStringPool::setTo(const void* data, size_t size, bool copyData) if ((mHeader->flags&ResStringPool_header::UTF8_FLAG && ((uint8_t*)mStrings)[mStringPoolSize-1] != 0) || (!mHeader->flags&ResStringPool_header::UTF8_FLAG && ((char16_t*)mStrings)[mStringPoolSize-1] != 0)) { ((uint16_t*)mStrings)[mStringPoolSize-1] != 0)) { ALOGW("Bad string block: last string is not 0-terminated\n"); return (mError=BAD_TYPE); } Loading Loading @@ -656,7 +656,7 @@ void ResStringPool::uninit() * add it together with the next character. */ static inline size_t decodeLength(const char16_t** str) decodeLength(const uint16_t** str) { size_t len = **str; if ((len & 0x8000) != 0) { Loading Loading @@ -689,19 +689,19 @@ decodeLength(const uint8_t** str) return len; } const uint16_t* ResStringPool::stringAt(size_t idx, size_t* u16len) const const char16_t* ResStringPool::stringAt(size_t idx, size_t* u16len) const { if (mError == NO_ERROR && idx < mHeader->stringCount) { const bool isUTF8 = (mHeader->flags&ResStringPool_header::UTF8_FLAG) != 0; const uint32_t off = mEntries[idx]/(isUTF8?sizeof(char):sizeof(char16_t)); const uint32_t off = mEntries[idx]/(isUTF8?sizeof(uint8_t):sizeof(uint16_t)); if (off < (mStringPoolSize-1)) { if (!isUTF8) { const char16_t* strings = (char16_t*)mStrings; const char16_t* str = strings+off; const uint16_t* strings = (uint16_t*)mStrings; const uint16_t* str = strings+off; *u16len = decodeLength(&str); if ((uint32_t)(str+*u16len-strings) < mStringPoolSize) { return str; return reinterpret_cast<const char16_t*>(str); } else { ALOGW("Bad string block: string #%d extends to %d, past end at %d\n", (int)idx, (int)(str+*u16len-strings), (int)mStringPoolSize); Loading Loading @@ -1013,7 +1013,7 @@ int32_t ResXMLParser::getCommentID() const return mCurNode != NULL ? dtohl(mCurNode->comment.index) : -1; } const uint16_t* ResXMLParser::getComment(size_t* outLen) const const char16_t* ResXMLParser::getComment(size_t* outLen) const { int32_t id = getCommentID(); return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; Loading @@ -1032,7 +1032,7 @@ int32_t ResXMLParser::getTextID() const return -1; } const uint16_t* ResXMLParser::getText(size_t* outLen) const const char16_t* ResXMLParser::getText(size_t* outLen) const { int32_t id = getTextID(); return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; Loading @@ -1055,7 +1055,7 @@ int32_t ResXMLParser::getNamespacePrefixID() const return -1; } const uint16_t* ResXMLParser::getNamespacePrefix(size_t* outLen) const const char16_t* ResXMLParser::getNamespacePrefix(size_t* outLen) const { int32_t id = getNamespacePrefixID(); //printf("prefix=%d event=%p\n", id, mEventCode); Loading @@ -1070,7 +1070,7 @@ int32_t ResXMLParser::getNamespaceUriID() const return -1; } const uint16_t* ResXMLParser::getNamespaceUri(size_t* outLen) const const char16_t* ResXMLParser::getNamespaceUri(size_t* outLen) const { int32_t id = getNamespaceUriID(); //printf("uri=%d event=%p\n", id, mEventCode); Loading @@ -1088,7 +1088,7 @@ int32_t ResXMLParser::getElementNamespaceID() const return -1; } const uint16_t* ResXMLParser::getElementNamespace(size_t* outLen) const const char16_t* ResXMLParser::getElementNamespace(size_t* outLen) const { int32_t id = getElementNamespaceID(); return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; Loading @@ -1105,7 +1105,7 @@ int32_t ResXMLParser::getElementNameID() const return -1; } const uint16_t* ResXMLParser::getElementName(size_t* outLen) const const char16_t* ResXMLParser::getElementName(size_t* outLen) const { int32_t id = getElementNameID(); return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; Loading Loading @@ -1134,7 +1134,7 @@ int32_t ResXMLParser::getAttributeNamespaceID(size_t idx) const return -2; } const uint16_t* ResXMLParser::getAttributeNamespace(size_t idx, size_t* outLen) const const char16_t* ResXMLParser::getAttributeNamespace(size_t idx, size_t* outLen) const { int32_t id = getAttributeNamespaceID(idx); //printf("attribute namespace=%d idx=%d event=%p\n", id, idx, mEventCode); Loading Loading @@ -1165,7 +1165,7 @@ int32_t ResXMLParser::getAttributeNameID(size_t idx) const return -1; } const uint16_t* ResXMLParser::getAttributeName(size_t idx, size_t* outLen) const const char16_t* ResXMLParser::getAttributeName(size_t idx, size_t* outLen) const { int32_t id = getAttributeNameID(idx); //printf("attribute name=%d idx=%d event=%p\n", id, idx, mEventCode); Loading Loading @@ -1205,7 +1205,7 @@ int32_t ResXMLParser::getAttributeValueStringID(size_t idx) const return -1; } const uint16_t* ResXMLParser::getAttributeStringValue(size_t idx, size_t* outLen) const const char16_t* ResXMLParser::getAttributeStringValue(size_t idx, size_t* outLen) const { int32_t id = getAttributeValueStringID(idx); //XML_NOISY(printf("getAttributeValue 0x%x=0x%x\n", idx, id)); Loading Loading @@ -4239,7 +4239,7 @@ nope: return 0; } bool ResTable::expandResourceRef(const uint16_t* refStr, size_t refLen, bool ResTable::expandResourceRef(const char16_t* refStr, size_t refLen, String16* outPackage, String16* outType, String16* outName, Loading Loading @@ -5665,8 +5665,8 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg, if (idx == 0) { idx = mPackageGroups.size() + 1; char16_t tmpName[sizeof(pkg->name)/sizeof(char16_t)]; strcpy16_dtoh(tmpName, pkg->name, sizeof(pkg->name)/sizeof(char16_t)); char16_t tmpName[sizeof(pkg->name)/sizeof(pkg->name[0])]; strcpy16_dtoh(tmpName, pkg->name, sizeof(pkg->name)/sizeof(pkg->name[0])); group = new PackageGroup(this, String16(tmpName), id); if (group == NULL) { delete package; Loading Loading @@ -6036,7 +6036,10 @@ status_t ResTable::createIdmap(const ResTable& overlay, *outSize += 2 * sizeof(uint16_t); // overlay packages are assumed to contain only one package group const String16 overlayPackage(overlay.mPackageGroups[0]->packages[0]->package->name); const ResTable_package* overlayPackageStruct = overlay.mPackageGroups[0]->packages[0]->package; char16_t tmpName[sizeof(overlayPackageStruct->name)/sizeof(overlayPackageStruct->name[0])]; strcpy16_dtoh(tmpName, overlayPackageStruct->name, sizeof(overlayPackageStruct->name)/sizeof(overlayPackageStruct->name[0])); const String16 overlayPackage(tmpName); for (size_t typeIndex = 0; typeIndex < pg->types.size(); ++typeIndex) { const TypeList& typeList = pg->types[typeIndex]; Loading Loading @@ -6345,8 +6348,10 @@ void ResTable::print(bool inclValues) const // Use a package's real ID, since the ID may have been assigned // if this package is a shared library. packageId = pkg->package->id; char16_t tmpName[sizeof(pkg->package->name)/sizeof(pkg->package->name[0])]; strcpy16_dtoh(tmpName, pkg->package->name, sizeof(pkg->package->name)/sizeof(pkg->package->name[0])); printf(" Package %d id=0x%02x name=%s\n", (int)pkgIndex, pkg->package->id, String8(String16(pkg->package->name)).string()); pkg->package->id, String8(tmpName).string()); } for (size_t typeIndex=0; typeIndex < pg->types.size(); typeIndex++) { Loading
libs/androidfw/misc.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ #include <androidfw/misc.h> #include <sys/stat.h> #include <string.h> #include <cstring> #include <errno.h> #include <stdio.h> #include <cstdio> using namespace android; Loading
libs/androidfw/tests/Android.mk +0 −3 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ testFiles := \ include $(CLEAR_VARS) LOCAL_MODULE := libandroidfw_tests LOCAL_SRC_FILES := $(testFiles) LOCAL_STATIC_LIBRARIES := \ libandroidfw \ Loading @@ -55,11 +54,9 @@ ifneq ($(SDK_ONLY),true) include $(CLEAR_VARS) LOCAL_MODULE := libandroidfw_tests LOCAL_SRC_FILES := $(testFiles) \ BackupData_test.cpp \ ObbFile_test.cpp LOCAL_SHARED_LIBRARIES := \ libandroidfw \ libcutils \ Loading