Add class ResStringPool
This commit is contained in:
parent
bf9b270775
commit
8a2cdbe47e
|
|
@ -20,7 +20,7 @@ void (*ResXMLParser_restart)(void *);
|
|||
|
||||
int32_t (*ResXMLParser_getAttributeNameID)(void *, int);
|
||||
|
||||
char16_t *(*ResStringPool_stringAt)(void *, int32_t, size_t *);
|
||||
char16_t *(*ResStringPool_stringAt)(const void *, int32_t, size_t *);
|
||||
|
||||
bool prepareSymbols() {
|
||||
void *fwHandle = dlopen(kLibFwPath, RTLD_LAZY | RTLD_GLOBAL);
|
||||
|
|
@ -51,7 +51,7 @@ bool prepareSymbols() {
|
|||
LOGE("can't get ResXMLParser_getAttributeNameID: %s", dlerror());
|
||||
return false;
|
||||
}
|
||||
ResStringPool_stringAt = reinterpret_cast<char16_t *(*)(void *, int32_t, size_t *)>(dlsym(
|
||||
ResStringPool_stringAt = reinterpret_cast<char16_t *(*)(const void *, int32_t, size_t *)>(dlsym(
|
||||
fwHandle,
|
||||
#if defined(__LP64__)
|
||||
"_ZNK7android13ResStringPool8stringAtEmPm"
|
||||
|
|
@ -122,7 +122,7 @@ void XResources_rewriteXmlReferencesNative(JNIEnv *env, jclass,
|
|||
// only replace attribute name IDs for app packages
|
||||
if (attrNameID >= 0 && (size_t)attrNameID < mTree.mNumResIds && dtohl(mResIds[attrNameID]) >= 0x7f000000) {
|
||||
size_t attNameLen;
|
||||
const char16_t* attrName = ResStringPool_stringAt(mTree.mStrings, attrNameID, &attNameLen);
|
||||
const char16_t* attrName = ResStringPool_stringAt(&(mTree.mStrings), attrNameID, &attNameLen);
|
||||
jint attrResID = env->CallStaticIntMethod(classXResources, methodXResourcesTranslateAttrId,
|
||||
env->NewString((const jchar*)attrName, attNameLen), origRes);
|
||||
if (env->ExceptionCheck())
|
||||
|
|
|
|||
|
|
@ -78,6 +78,23 @@ public:
|
|||
const void* mCurExt;
|
||||
};
|
||||
|
||||
class ResStringPool
|
||||
{
|
||||
public:
|
||||
int32_t mError;
|
||||
void* mOwnedData;
|
||||
const void* mHeader;
|
||||
size_t mSize;
|
||||
mutable pthread_mutex_t mDecodeLock;
|
||||
const uint32_t* mEntries;
|
||||
const uint32_t* mEntryStyles;
|
||||
const void* mStrings;
|
||||
char16_t mutable** mCache;
|
||||
uint32_t mStringPoolSize; // number of uint16_t
|
||||
const uint32_t* mStyles;
|
||||
uint32_t mStylePoolSize; // number of uint32_t
|
||||
};
|
||||
|
||||
|
||||
class ResXMLTree : public ResXMLParser
|
||||
{
|
||||
|
|
@ -90,7 +107,7 @@ public:
|
|||
const void* mHeader;
|
||||
size_t mSize;
|
||||
const uint8_t* mDataEnd;
|
||||
void* mStrings;
|
||||
ResStringPool mStrings;
|
||||
const uint32_t* mResIds;
|
||||
size_t mNumResIds;
|
||||
const ResXMLTree_node* mRootNode;
|
||||
|
|
|
|||
Loading…
Reference in New Issue