Util.cpp revision da431a22da38f9c4085b5d71ed9a9c6122c6a5a6
160293197379e522c870c4a28462804207bab505dAdam Lesinski/* 2da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski * Copyright (C) 2016 The Android Open Source Project 360293197379e522c870c4a28462804207bab505dAdam Lesinski * 460293197379e522c870c4a28462804207bab505dAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 560293197379e522c870c4a28462804207bab505dAdam Lesinski * you may not use this file except in compliance with the License. 660293197379e522c870c4a28462804207bab505dAdam Lesinski * You may obtain a copy of the License at 760293197379e522c870c4a28462804207bab505dAdam Lesinski * 860293197379e522c870c4a28462804207bab505dAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 960293197379e522c870c4a28462804207bab505dAdam Lesinski * 1060293197379e522c870c4a28462804207bab505dAdam Lesinski * Unless required by applicable law or agreed to in writing, software 1160293197379e522c870c4a28462804207bab505dAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1260293197379e522c870c4a28462804207bab505dAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1360293197379e522c870c4a28462804207bab505dAdam Lesinski * See the License for the specific language governing permissions and 1460293197379e522c870c4a28462804207bab505dAdam Lesinski * limitations under the License. 1560293197379e522c870c4a28462804207bab505dAdam Lesinski */ 1660293197379e522c870c4a28462804207bab505dAdam Lesinski 17da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#include "androidfw/Util.h" 18ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski 19da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#include <string> 204c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski 21da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#include "utils/ByteOrder.h" 22da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#include "utils/Unicode.h" 23ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski 24da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#ifdef _WIN32 25da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#ifdef ERROR 26da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#undef ERROR 27da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#endif 28da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski#endif 29ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski 30da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinskinamespace android { 31da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinskinamespace util { 32ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski 33da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinskivoid ReadUtf16StringFromDevice(const uint16_t* src, size_t len, std::string* out) { 34da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski char buf[5]; 35da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski while (*src && len != 0) { 36da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski char16_t c = static_cast<char16_t>(dtohs(*src)); 37da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski utf16_to_utf8(&c, 1, buf, sizeof(buf)); 38da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski out->append(buf, strlen(buf)); 39da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski ++src; 40da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski --len; 41da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski } 42da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski} 43ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski 44da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski} // namespace util 45da431a22da38f9c4085b5d71ed9a9c6122c6a5a6Adam Lesinski} // namespace android 46