summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Elliott Hughes <enh@google.com> 2021-07-13 17:15:19 -0700
committer Tomasz Wasilczyk <twasilczyk@google.com> 2023-08-23 20:01:31 +0000
commit338698ee0d3ad187251c9c1222d28c6380a42c9c (patch)
treef738c044a44fdab940c054f46ee15e4840ce2643
parenta2d740da81964480f384a4925fe7ddcf3782a498 (diff)
Move convertToResPath from libutils to aapt.
Test: m libaapt Bug: 295394788 Change-Id: I3225f2cd28ff0e1c3e396d0b336e51b9a8caa1f9
-rw-r--r--tools/aapt/Android.bp1
-rw-r--r--tools/aapt/Package.cpp3
-rw-r--r--tools/aapt/Resource.cpp3
-rw-r--r--tools/aapt/ResourceTable.cpp5
-rw-r--r--tools/aapt/Utils.cpp38
-rw-r--r--tools/aapt/Utils.h28
6 files changed, 74 insertions, 4 deletions
diff --git a/tools/aapt/Android.bp b/tools/aapt/Android.bp
index cc10db9e1523..cecd95a5e616 100644
--- a/tools/aapt/Android.bp
+++ b/tools/aapt/Android.bp
@@ -97,6 +97,7 @@ cc_library_host_static {
"ResourceTable.cpp",
"SourcePos.cpp",
"StringPool.cpp",
+ "Utils.cpp",
"WorkQueue.cpp",
"XMLNode.cpp",
"ZipEntry.cpp",
diff --git a/tools/aapt/Package.cpp b/tools/aapt/Package.cpp
index 965655b59a94..a7ff5fabf495 100644
--- a/tools/aapt/Package.cpp
+++ b/tools/aapt/Package.cpp
@@ -8,6 +8,7 @@
#include "OutputSet.h"
#include "ResourceTable.h"
#include "ResourceFilter.h"
+#include "Utils.h"
#include <androidfw/misc.h>
@@ -226,7 +227,7 @@ ssize_t processAssets(Bundle* bundle, ZipFile* zip, const sp<const OutputSet>& o
fprintf(stderr, "warning: null file being processed.\n");
} else {
String8 storagePath(entry.getPath());
- storagePath.convertToResPath();
+ convertToResPath(storagePath);
if (!processFile(bundle, zip, storagePath, entry.getFile())) {
return UNKNOWN_ERROR;
}
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index 4ca3a68d02a6..9c944e0de075 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -15,6 +15,7 @@
#include "ResourceTable.h"
#include "StringPool.h"
#include "Symbol.h"
+#include "Utils.h"
#include "WorkQueue.h"
#include "XMLNode.h"
@@ -321,7 +322,7 @@ static status_t makeFileResources(Bundle* bundle, const sp<AaptAssets>& assets,
str++;
}
String8 resPath = it.getPath();
- resPath.convertToResPath();
+ convertToResPath(resPath);
status_t result = table->addEntry(SourcePos(it.getPath(), 0),
String16(assets->getPackage()),
type16,
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 3abb89acd23b..b6a17eb3e684 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -11,6 +11,7 @@
#include "ResourceFilter.h"
#include "ResourceIdCache.h"
#include "SdkConstants.h"
+#include "Utils.h"
#include <algorithm>
#include <androidfw/ResourceTypes.h>
@@ -4803,7 +4804,7 @@ bool ResourceTable::versionForCompat(const Bundle* bundle, const String16& resou
String8 resPath = String8::format("res/%s/%s.xml",
newFile->getGroupEntry().toDirName(target->getResourceType()).c_str(),
String8(resourceName).c_str());
- resPath.convertToResPath();
+ convertToResPath(resPath);
// Add a resource table entry.
addEntry(SourcePos(),
@@ -4927,7 +4928,7 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
String8 resPath = String8::format("res/%s/%s.xml",
newFile->getGroupEntry().toDirName(target->getResourceType()).c_str(),
String8(resourceName).c_str());
- resPath.convertToResPath();
+ convertToResPath(resPath);
// Add a resource table entry.
if (bundle->getVerbose()) {
diff --git a/tools/aapt/Utils.cpp b/tools/aapt/Utils.cpp
new file mode 100644
index 000000000000..36b018e7dd2c
--- /dev/null
+++ b/tools/aapt/Utils.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2005 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Utils.h"
+
+#include <utils/Compat.h>
+
+// Separator used by resource paths. This is not platform dependent contrary
+// to OS_PATH_SEPARATOR.
+#define RES_PATH_SEPARATOR '/'
+
+using android::String8;
+
+void convertToResPath([[maybe_unused]] String8& s) {
+#if OS_PATH_SEPARATOR != RES_PATH_SEPARATOR
+ size_t len = s.length();
+ if (len > 0) {
+ char* buf = s.lockBuffer(len);
+ for (char* end = buf + len; buf < end; ++buf) {
+ if (*buf == OS_PATH_SEPARATOR) *buf = RES_PATH_SEPARATOR;
+ }
+ s.unlockBuffer(len);
+ }
+#endif
+}
diff --git a/tools/aapt/Utils.h b/tools/aapt/Utils.h
new file mode 100644
index 000000000000..8eb594138478
--- /dev/null
+++ b/tools/aapt/Utils.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2005 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+// This file contains cruft that used to be in libutils' String8, that's only
+// used for aapt.
+
+#include <utils/String8.h>
+
+// Converts all separators in this string to /, the default path
+// separator.
+// If the default OS separator is backslash, this converts all
+// backslashes to slashes, in-place. Otherwise it does nothing.
+void convertToResPath(android::String8&);