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

Commit 00eac29d authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Use String8/16 c_str [input]

Bug: 295394788
Test: make checkbuild
Change-Id: Iffbcff6f58e30c0bd40e699ba6e1f917addc5ade
parent 180f95b4
Loading
Loading
Loading
Loading
+58 −65
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ status_t KeyCharacterMap::load(Tokenizer* tokenizer, Format format) {
#if DEBUG_PARSER_PERFORMANCE
    nsecs_t elapsedTime = systemTime(SYSTEM_TIME_MONOTONIC) - startTime;
    ALOGD("Parsed key character map file '%s' %d lines in %0.3fms.",
          tokenizer->getFilename().string(), tokenizer->getLineNumber(), elapsedTime / 1000000.0);
          tokenizer->getFilename().c_str(), tokenizer->getLineNumber(), elapsedTime / 1000000.0);
#endif
    if (status != OK) {
        ALOGE("Loading KeyCharacterMap failed with status %s", statusToString(status).c_str());
@@ -297,7 +297,7 @@ bool KeyCharacterMap::getEvents(int32_t deviceId, const char16_t* chars, size_t
        if (!findKey(ch, &keyCode, &metaState)) {
#if DEBUG_MAPPING
            ALOGD("getEvents: deviceId=%d, chars=[%s] ~ Failed to find mapping for character %d.",
                    deviceId, toString(chars, numChars).string(), ch);
                  deviceId, toString(chars, numChars).c_str(), ch);
#endif
            return false;
        }
@@ -309,8 +309,8 @@ bool KeyCharacterMap::getEvents(int32_t deviceId, const char16_t* chars, size_t
        addMetaKeys(outEvents, deviceId, metaState, false, now, &currentMetaState);
    }
#if DEBUG_MAPPING
    ALOGD("getEvents: deviceId=%d, chars=[%s] ~ Generated %d events.",
            deviceId, toString(chars, numChars).string(), int32_t(outEvents.size()));
    ALOGD("getEvents: deviceId=%d, chars=[%s] ~ Generated %d events.", deviceId,
          toString(chars, numChars).c_str(), int32_t(outEvents.size()));
    for (size_t i = 0; i < outEvents.size(); i++) {
        ALOGD("  Key: keyCode=%d, metaState=0x%08x, %s.",
                outEvents[i].getKeyCode(), outEvents[i].getMetaState(),
@@ -756,8 +756,8 @@ KeyCharacterMap::Parser::Parser(KeyCharacterMap* map, Tokenizer* tokenizer, Form
status_t KeyCharacterMap::Parser::parse() {
    while (!mTokenizer->isEof()) {
#if DEBUG_PARSER
        ALOGD("Parsing %s: '%s'.", mTokenizer->getLocation().string(),
                mTokenizer->peekRemainderOfLine().string());
        ALOGD("Parsing %s: '%s'.", mTokenizer->getLocation().c_str(),
              mTokenizer->peekRemainderOfLine().c_str());
#endif

        mTokenizer->skipDelimiters(WHITESPACE);
@@ -779,8 +779,8 @@ status_t KeyCharacterMap::Parser::parse() {
                    status_t status = parseKey();
                    if (status) return status;
                } else {
                    ALOGE("%s: Expected keyword, got '%s'.", mTokenizer->getLocation().string(),
                            keywordToken.string());
                    ALOGE("%s: Expected keyword, got '%s'.", mTokenizer->getLocation().c_str(),
                          keywordToken.c_str());
                    return BAD_VALUE;
                }
                break;
@@ -796,8 +796,7 @@ status_t KeyCharacterMap::Parser::parse() {
            mTokenizer->skipDelimiters(WHITESPACE);
            if (!mTokenizer->isEol() && mTokenizer->peekChar() != '#') {
            ALOGE("%s: Expected end of line or trailing comment, got '%s'.",
                        mTokenizer->getLocation().string(),
                        mTokenizer->peekRemainderOfLine().string());
                  mTokenizer->getLocation().c_str(), mTokenizer->peekRemainderOfLine().c_str());
            return BAD_VALUE;
            }
        }
@@ -807,27 +806,27 @@ status_t KeyCharacterMap::Parser::parse() {

    if (mState != STATE_TOP) {
        ALOGE("%s: Unterminated key description at end of file.",
                mTokenizer->getLocation().string());
              mTokenizer->getLocation().c_str());
        return BAD_VALUE;
    }

    if (mMap->mType == KeyboardType::UNKNOWN) {
        ALOGE("%s: Keyboard layout missing required keyboard 'type' declaration.",
                mTokenizer->getLocation().string());
              mTokenizer->getLocation().c_str());
        return BAD_VALUE;
    }

    if (mFormat == Format::BASE) {
        if (mMap->mType == KeyboardType::OVERLAY) {
            ALOGE("%s: Base keyboard layout must specify a keyboard 'type' other than 'OVERLAY'.",
                    mTokenizer->getLocation().string());
                  mTokenizer->getLocation().c_str());
            return BAD_VALUE;
        }
    } else if (mFormat == Format::OVERLAY) {
        if (mMap->mType != KeyboardType::OVERLAY) {
            ALOGE("%s: Overlay keyboard layout missing required keyboard "
                  "'type OVERLAY' declaration.",
                    mTokenizer->getLocation().string());
                  mTokenizer->getLocation().c_str());
            return BAD_VALUE;
        }
    }
@@ -837,8 +836,7 @@ status_t KeyCharacterMap::Parser::parse() {

status_t KeyCharacterMap::Parser::parseType() {
    if (mMap->mType != KeyboardType::UNKNOWN) {
        ALOGE("%s: Duplicate keyboard 'type' declaration.",
                mTokenizer->getLocation().string());
        ALOGE("%s: Duplicate keyboard 'type' declaration.", mTokenizer->getLocation().c_str());
        return BAD_VALUE;
    }

@@ -860,8 +858,8 @@ status_t KeyCharacterMap::Parser::parseType() {
    } else if (typeToken == "OVERLAY") {
        type = KeyboardType::OVERLAY;
    } else {
        ALOGE("%s: Expected keyboard type label, got '%s'.", mTokenizer->getLocation().string(),
                typeToken.string());
        ALOGE("%s: Expected keyboard type label, got '%s'.", mTokenizer->getLocation().c_str(),
              typeToken.c_str());
        return BAD_VALUE;
    }

@@ -878,8 +876,8 @@ status_t KeyCharacterMap::Parser::parseMap() {
        mTokenizer->skipDelimiters(WHITESPACE);
        return parseMapKey();
    }
    ALOGE("%s: Expected keyword after 'map', got '%s'.", mTokenizer->getLocation().string(),
            keywordToken.string());
    ALOGE("%s: Expected keyword after 'map', got '%s'.", mTokenizer->getLocation().c_str(),
          keywordToken.c_str());
    return BAD_VALUE;
}

@@ -893,26 +891,26 @@ status_t KeyCharacterMap::Parser::parseMapKey() {
    }

    char* end;
    int32_t code = int32_t(strtol(codeToken.string(), &end, 0));
    int32_t code = int32_t(strtol(codeToken.c_str(), &end, 0));
    if (*end) {
        ALOGE("%s: Expected key %s number, got '%s'.", mTokenizer->getLocation().string(),
                mapUsage ? "usage" : "scan code", codeToken.string());
        ALOGE("%s: Expected key %s number, got '%s'.", mTokenizer->getLocation().c_str(),
              mapUsage ? "usage" : "scan code", codeToken.c_str());
        return BAD_VALUE;
    }
    std::map<int32_t, int32_t>& map = mapUsage ? mMap->mKeysByUsageCode : mMap->mKeysByScanCode;
    const auto it = map.find(code);
    if (it != map.end()) {
        ALOGE("%s: Duplicate entry for key %s '%s'.", mTokenizer->getLocation().string(),
                mapUsage ? "usage" : "scan code", codeToken.string());
        ALOGE("%s: Duplicate entry for key %s '%s'.", mTokenizer->getLocation().c_str(),
                mapUsage ? "usage" : "scan code", codeToken.c_str());
        return BAD_VALUE;
    }

    mTokenizer->skipDelimiters(WHITESPACE);
    String8 keyCodeToken = mTokenizer->nextToken(WHITESPACE);
    std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(keyCodeToken.string());
    std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(keyCodeToken.c_str());
    if (!keyCode) {
        ALOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().string(),
                keyCodeToken.string());
        ALOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().c_str(),
              keyCodeToken.c_str());
        return BAD_VALUE;
    }

@@ -926,23 +924,23 @@ status_t KeyCharacterMap::Parser::parseMapKey() {

status_t KeyCharacterMap::Parser::parseKey() {
    String8 keyCodeToken = mTokenizer->nextToken(WHITESPACE);
    std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(keyCodeToken.string());
    std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(keyCodeToken.c_str());
    if (!keyCode) {
        ALOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().string(),
                keyCodeToken.string());
        ALOGE("%s: Expected key code label, got '%s'.", mTokenizer->getLocation().c_str(),
              keyCodeToken.c_str());
        return BAD_VALUE;
    }
    if (mMap->mKeys.find(*keyCode) != mMap->mKeys.end()) {
        ALOGE("%s: Duplicate entry for key code '%s'.", mTokenizer->getLocation().string(),
                keyCodeToken.string());
        ALOGE("%s: Duplicate entry for key code '%s'.", mTokenizer->getLocation().c_str(),
                keyCodeToken.c_str());
        return BAD_VALUE;
    }

    mTokenizer->skipDelimiters(WHITESPACE);
    String8 openBraceToken = mTokenizer->nextToken(WHITESPACE);
    if (openBraceToken != "{") {
        ALOGE("%s: Expected '{' after key code label, got '%s'.",
                mTokenizer->getLocation().string(), openBraceToken.string());
        ALOGE("%s: Expected '{' after key code label, got '%s'.", mTokenizer->getLocation().c_str(),
              openBraceToken.c_str());
        return BAD_VALUE;
    }

@@ -971,10 +969,10 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
            properties.emplace_back(PROPERTY_NUMBER);
        } else {
            int32_t metaState;
            status_t status = parseModifier(token.string(), &metaState);
            status_t status = parseModifier(token.c_str(), &metaState);
            if (status) {
                ALOGE("%s: Expected a property name or modifier, got '%s'.",
                        mTokenizer->getLocation().string(), token.string());
                      mTokenizer->getLocation().c_str(), token.c_str());
                return status;
            }
            properties.emplace_back(PROPERTY_META, metaState);
@@ -992,8 +990,7 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
            }
        }

        ALOGE("%s: Expected ',' or ':' after property name.",
                mTokenizer->getLocation().string());
        ALOGE("%s: Expected ',' or ':' after property name.", mTokenizer->getLocation().c_str());
        return BAD_VALUE;
    }

@@ -1011,18 +1008,17 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
            char16_t character;
            status_t status = parseCharacterLiteral(&character);
            if (status || !character) {
                ALOGE("%s: Invalid character literal for key.",
                        mTokenizer->getLocation().string());
                ALOGE("%s: Invalid character literal for key.", mTokenizer->getLocation().c_str());
                return BAD_VALUE;
            }
            if (haveCharacter) {
                ALOGE("%s: Cannot combine multiple character literals or 'none'.",
                        mTokenizer->getLocation().string());
                      mTokenizer->getLocation().c_str());
                return BAD_VALUE;
            }
            if (haveReplacement) {
                ALOGE("%s: Cannot combine character literal with replace action.",
                        mTokenizer->getLocation().string());
                      mTokenizer->getLocation().c_str());
                return BAD_VALUE;
            }
            behavior.character = character;
@@ -1032,28 +1028,27 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
            if (token == "none") {
                if (haveCharacter) {
                    ALOGE("%s: Cannot combine multiple character literals or 'none'.",
                            mTokenizer->getLocation().string());
                          mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                }
                if (haveReplacement) {
                    ALOGE("%s: Cannot combine 'none' with replace action.",
                            mTokenizer->getLocation().string());
                          mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                }
                haveCharacter = true;
            } else if (token == "fallback") {
                mTokenizer->skipDelimiters(WHITESPACE);
                token = mTokenizer->nextToken(WHITESPACE);
                std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(token.string());
                std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(token.c_str());
                if (!keyCode) {
                    ALOGE("%s: Invalid key code label for fallback behavior, got '%s'.",
                            mTokenizer->getLocation().string(),
                            token.string());
                          mTokenizer->getLocation().c_str(), token.c_str());
                    return BAD_VALUE;
                }
                if (haveFallback || haveReplacement) {
                    ALOGE("%s: Cannot combine multiple fallback/replacement key codes.",
                            mTokenizer->getLocation().string());
                          mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                }
                behavior.fallbackKeyCode = *keyCode;
@@ -1061,29 +1056,27 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
            } else if (token == "replace") {
                mTokenizer->skipDelimiters(WHITESPACE);
                token = mTokenizer->nextToken(WHITESPACE);
                std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(token.string());
                std::optional<int> keyCode = InputEventLookup::getKeyCodeByLabel(token.c_str());
                if (!keyCode) {
                    ALOGE("%s: Invalid key code label for replace, got '%s'.",
                            mTokenizer->getLocation().string(),
                            token.string());
                          mTokenizer->getLocation().c_str(), token.c_str());
                    return BAD_VALUE;
                }
                if (haveCharacter) {
                    ALOGE("%s: Cannot combine character literal with replace action.",
                            mTokenizer->getLocation().string());
                          mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                }
                if (haveFallback || haveReplacement) {
                    ALOGE("%s: Cannot combine multiple fallback/replacement key codes.",
                            mTokenizer->getLocation().string());
                          mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                }
                behavior.replacementKeyCode = *keyCode;
                haveReplacement = true;

            } else {
                ALOGE("%s: Expected a key behavior after ':'.",
                        mTokenizer->getLocation().string());
                ALOGE("%s: Expected a key behavior after ':'.", mTokenizer->getLocation().c_str());
                return BAD_VALUE;
            }
        }
@@ -1096,7 +1089,7 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
        switch (property.property) {
        case PROPERTY_LABEL:
                if (key.label) {
                    ALOGE("%s: Duplicate label for key.", mTokenizer->getLocation().string());
                    ALOGE("%s: Duplicate label for key.", mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                }
                key.label = behavior.character;
@@ -1106,7 +1099,7 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
            break;
        case PROPERTY_NUMBER:
            if (key.number) {
                    ALOGE("%s: Duplicate number for key.", mTokenizer->getLocation().string());
                    ALOGE("%s: Duplicate number for key.", mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
            }
            key.number = behavior.character;
@@ -1118,7 +1111,7 @@ status_t KeyCharacterMap::Parser::parseKeyProperty() {
            for (const Behavior& b : key.behaviors) {
                    if (b.metaState == property.metaState) {
                    ALOGE("%s: Duplicate key behavior for modifier.",
                            mTokenizer->getLocation().string());
                          mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                    }
            }
@@ -1185,8 +1178,8 @@ status_t KeyCharacterMap::Parser::parseModifier(const std::string& token, int32_
                return BAD_VALUE;
            }
            if (combinedMeta & metaState) {
                ALOGE("%s: Duplicate modifier combination '%s'.",
                        mTokenizer->getLocation().string(), token.c_str());
                ALOGE("%s: Duplicate modifier combination '%s'.", mTokenizer->getLocation().c_str(),
                      token.c_str());
                return BAD_VALUE;
            }

@@ -1259,7 +1252,7 @@ status_t KeyCharacterMap::Parser::parseCharacterLiteral(char16_t* outCharacter)
    }

Error:
    ALOGE("%s: Malformed character literal.", mTokenizer->getLocation().string());
    ALOGE("%s: Malformed character literal.", mTokenizer->getLocation().c_str());
    return BAD_VALUE;
}

+59 −60

File changed.

Preview size limit exceeded, changes collapsed.

+8 −8
Original line number Diff line number Diff line
@@ -163,8 +163,8 @@ PropertyMap::Parser::~Parser() {}
status_t PropertyMap::Parser::parse() {
    while (!mTokenizer->isEof()) {
#if DEBUG_PARSER
        ALOGD("Parsing %s: '%s'.", mTokenizer->getLocation().string(),
              mTokenizer->peekRemainderOfLine().string());
        ALOGD("Parsing %s: '%s'.", mTokenizer->getLocation().c_str(),
              mTokenizer->peekRemainderOfLine().c_str());
#endif

        mTokenizer->skipDelimiters(WHITESPACE);
@@ -172,7 +172,7 @@ status_t PropertyMap::Parser::parse() {
        if (!mTokenizer->isEol() && mTokenizer->peekChar() != '#') {
            String8 keyToken = mTokenizer->nextToken(WHITESPACE_OR_PROPERTY_DELIMITER);
            if (keyToken.isEmpty()) {
                ALOGE("%s: Expected non-empty property key.", mTokenizer->getLocation().string());
                ALOGE("%s: Expected non-empty property key.", mTokenizer->getLocation().c_str());
                return BAD_VALUE;
            }

@@ -180,7 +180,7 @@ status_t PropertyMap::Parser::parse() {

            if (mTokenizer->nextChar() != '=') {
                ALOGE("%s: Expected '=' between property key and value.",
                      mTokenizer->getLocation().string());
                      mTokenizer->getLocation().c_str());
                return BAD_VALUE;
            }

@@ -189,20 +189,20 @@ status_t PropertyMap::Parser::parse() {
            String8 valueToken = mTokenizer->nextToken(WHITESPACE);
            if (valueToken.find("\\", 0) >= 0 || valueToken.find("\"", 0) >= 0) {
                ALOGE("%s: Found reserved character '\\' or '\"' in property value.",
                      mTokenizer->getLocation().string());
                      mTokenizer->getLocation().c_str());
                return BAD_VALUE;
            }

            mTokenizer->skipDelimiters(WHITESPACE);
            if (!mTokenizer->isEol()) {
                ALOGE("%s: Expected end of line, got '%s'.", mTokenizer->getLocation().string(),
                      mTokenizer->peekRemainderOfLine().string());
                ALOGE("%s: Expected end of line, got '%s'.", mTokenizer->getLocation().c_str(),
                      mTokenizer->peekRemainderOfLine().c_str());
                return BAD_VALUE;
            }

            if (mMap->hasProperty(keyToken.string())) {
                ALOGE("%s: Duplicate property value for key '%s'.",
                      mTokenizer->getLocation().string(), keyToken.string());
                      mTokenizer->getLocation().c_str(), keyToken.c_str());
                return BAD_VALUE;
            }

+8 −9
Original line number Diff line number Diff line
@@ -79,8 +79,8 @@ VirtualKeyMap::Parser::~Parser() {
status_t VirtualKeyMap::Parser::parse() {
    while (!mTokenizer->isEof()) {
#if DEBUG_PARSER
        ALOGD("Parsing %s: '%s'.", mTokenizer->getLocation().string(),
                mTokenizer->peekRemainderOfLine().string());
        ALOGD("Parsing %s: '%s'.", mTokenizer->getLocation().c_str(),
              mTokenizer->peekRemainderOfLine().c_str());
#endif

        mTokenizer->skipDelimiters(WHITESPACE);
@@ -91,7 +91,7 @@ status_t VirtualKeyMap::Parser::parse() {
                String8 token = mTokenizer->nextToken(WHITESPACE_OR_FIELD_DELIMITER);
                if (token != "0x01") {
                    ALOGE("%s: Unknown virtual key type, expected 0x01.",
                          mTokenizer->getLocation().string());
                          mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                }

@@ -103,7 +103,7 @@ status_t VirtualKeyMap::Parser::parse() {
                        && parseNextIntField(&defn.height);
                if (!success) {
                    ALOGE("%s: Expected 5 colon-delimited integers in virtual key definition.",
                          mTokenizer->getLocation().string());
                          mTokenizer->getLocation().c_str());
                    return BAD_VALUE;
                }

@@ -116,9 +116,8 @@ status_t VirtualKeyMap::Parser::parse() {
            } while (consumeFieldDelimiterAndSkipWhitespace());

            if (!mTokenizer->isEol()) {
                ALOGE("%s: Expected end of line, got '%s'.",
                        mTokenizer->getLocation().string(),
                        mTokenizer->peekRemainderOfLine().string());
                ALOGE("%s: Expected end of line, got '%s'.", mTokenizer->getLocation().c_str(),
                      mTokenizer->peekRemainderOfLine().c_str());
                return BAD_VALUE;
            }
        }
@@ -146,9 +145,9 @@ bool VirtualKeyMap::Parser::parseNextIntField(int32_t* outValue) {

    String8 token = mTokenizer->nextToken(WHITESPACE_OR_FIELD_DELIMITER);
    char* end;
    *outValue = strtol(token.string(), &end, 0);
    *outValue = strtol(token.c_str(), &end, 0);
    if (token.isEmpty() || *end != '\0') {
        ALOGE("Expected an integer, got '%s'.", token.string());
        ALOGE("Expected an integer, got '%s'.", token.c_str());
        return false;
    }
    return true;
+3 −3
Original line number Diff line number Diff line
@@ -256,14 +256,14 @@ input_property_t* InputDriver::inputGetDeviceProperty(input_property_map_t* map,

const char* InputDriver::inputGetPropertyKey(input_property_t* property) {
    if (property != nullptr) {
        return property->key.string();
        return property->key.c_str();
    }
    return nullptr;
}

const char* InputDriver::inputGetPropertyValue(input_property_t* property) {
    if (property != nullptr) {
        return property->value.string();
        return property->value.c_str();
    }
    return nullptr;
}
@@ -281,7 +281,7 @@ void InputDriver::inputFreeDevicePropertyMap(input_property_map_t* map) {
}

void InputDriver::dump(String8& result) {
    result.appendFormat(INDENT2 "HAL Input Driver (%s)\n", mName.string());
    result.appendFormat(INDENT2 "HAL Input Driver (%s)\n", mName.c_str());
}

} // namespace android
Loading