Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78be0498 authored by Adam Lesinski's avatar Adam Lesinski Committed by Android Git Automerger
Browse files

am 668f0a35: Merge "Fix issues that will be present in C++11" into lmp-mr1-dev

* commit '668f0a35':
  Fix issues that will be present in C++11
parents 61059fe8 668f0a35
Loading
Loading
Loading
Loading
+23 −12
Original line number Diff line number Diff line
@@ -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
 *
@@ -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:
@@ -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.
@@ -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;
@@ -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
@@ -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];
};

/**
@@ -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,
+10 −24
Original line number Diff line number Diff line
@@ -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 := \
@@ -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)

@@ -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 \
@@ -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)


+32 −27
Original line number Diff line number Diff line
@@ -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++;
    }
@@ -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
@@ -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]);
                }
@@ -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);
        }
@@ -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) {
@@ -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);
@@ -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;
@@ -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;
@@ -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);
@@ -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);
@@ -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;
@@ -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;
@@ -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);
@@ -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);
@@ -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));
@@ -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,
@@ -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;
@@ -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];
@@ -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++) {
+2 −2
Original line number Diff line number Diff line
@@ -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;

+0 −3
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ testFiles := \
include $(CLEAR_VARS)

LOCAL_MODULE := libandroidfw_tests

LOCAL_SRC_FILES := $(testFiles)
LOCAL_STATIC_LIBRARIES := \
    libandroidfw \
@@ -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