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

Commit 9872bf4a authored by Shachar Shemesh's avatar Shachar Shemesh
Browse files

Normalize output from aapt d

Make the output from aapt dump --values resources and aapt dump xmltree normalized, so that it is unambigously displayed
regardless of the content of the strings.

Change-Id: Ia3bff36c4ee1e9a44f474534e154830948beabdf
parent 69ebb984
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -1983,6 +1983,7 @@ public:


#ifndef HAVE_ANDROID_OS
#ifndef HAVE_ANDROID_OS
    void print(bool inclValues) const;
    void print(bool inclValues) const;
    static String8 normalizeForOutput(const char* input);
#endif
#endif


private:
private:
+34 −2
Original line number Original line Diff line number Diff line
@@ -4038,6 +4038,38 @@ void print_complex(uint32_t complex, bool isFraction)
    }
    }
}
}


// Normalize a string for output
String8 ResTable::normalizeForOutput( const char *input )
{
    String8 ret;
    char buff[2];
    buff[1] = '\0';

    while (*input != '\0') {
        switch (*input) {
            // All interesting characters are in the ASCII zone, so we are making our own lives
            // easier by scanning the string one byte at a time.
        case '\\':
            ret += "\\\\";
            break;
        case '\n':
            ret += "\\n";
            break;
        case '"':
            ret += "\\\"";
            break;
        default:
            buff[0] = *input;
            ret += buff;
            break;
        }

        input++;
    }

    return ret;
}

void ResTable::print_value(const Package* pkg, const Res_value& value) const
void ResTable::print_value(const Package* pkg, const Res_value& value) const
{
{
    if (value.dataType == Res_value::TYPE_NULL) {
    if (value.dataType == Res_value::TYPE_NULL) {
@@ -4051,13 +4083,13 @@ void ResTable::print_value(const Package* pkg, const Res_value& value) const
        const char* str8 = pkg->header->values.string8At(
        const char* str8 = pkg->header->values.string8At(
                value.data, &len);
                value.data, &len);
        if (str8 != NULL) {
        if (str8 != NULL) {
            printf("(string8) \"%s\"\n", str8);
            printf("(string8) \"%s\"\n", normalizeForOutput(str8).string());
        } else {
        } else {
            const char16_t* str16 = pkg->header->values.stringAt(
            const char16_t* str16 = pkg->header->values.stringAt(
                    value.data, &len);
                    value.data, &len);
            if (str16 != NULL) {
            if (str16 != NULL) {
                printf("(string16) \"%s\"\n",
                printf("(string16) \"%s\"\n",
                    String8(str16, len).string());
                    normalizeForOutput(String8(str16, len).string()).string());
            } else {
            } else {
                printf("(string) null\n");
                printf("(string) null\n");
            }
            }
+4 −2
Original line number Original line Diff line number Diff line
@@ -451,13 +451,15 @@ void printXMLBlock(ResXMLTree* block)
                    printf("=?0x%x", (int)value.data);
                    printf("=?0x%x", (int)value.data);
                } else if (value.dataType == Res_value::TYPE_STRING) {
                } else if (value.dataType == Res_value::TYPE_STRING) {
                    printf("=\"%s\"",
                    printf("=\"%s\"",
                           String8(block->getAttributeStringValue(i, &len)).string());
                            ResTable::normalizeForOutput(String8(block->getAttributeStringValue(i,
                                        &len)).string()).string());
                } else {
                } else {
                    printf("=(type 0x%x)0x%x", (int)value.dataType, (int)value.data);
                    printf("=(type 0x%x)0x%x", (int)value.dataType, (int)value.data);
                }
                }
                const char16_t* val = block->getAttributeStringValue(i, &len);
                const char16_t* val = block->getAttributeStringValue(i, &len);
                if (val != NULL) {
                if (val != NULL) {
                    printf(" (Raw: \"%s\")", String8(val).string());
                    printf(" (Raw: \"%s\")", ResTable::normalizeForOutput(String8(val).string()).
                            string());
                }
                }
                printf("\n");
                printf("\n");
            }
            }