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