summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2010-07-27 15:18:38 -0700
committerKenny Root <kroot@google.com>2010-07-28 14:45:14 -0700
commitc78a8079740bfcad2e4439ccd74da52f6dc7fae2 (patch)
tree32980045a8a1e809f407a9c7c9ba51d283bfd004 /services
parent7feab3470156c7864fe159115d575c16f0974493 (diff)
downloadframeworks_base-c78a8079740bfcad2e4439ccd74da52f6dc7fae2.zip
frameworks_base-c78a8079740bfcad2e4439ccd74da52f6dc7fae2.tar.gz
frameworks_base-c78a8079740bfcad2e4439ccd74da52f6dc7fae2.tar.bz2
Fix getTempContainerId()
getTempContainerId() would always return "smdl2tmp1" unless you had MAX_CONTAINERS number of SD card SDKs, because of an array sort that put all the zeros at the beginning. Switch from trying to find a hole in the series of numbers to just getting a number that's one larger than the previous. This reduces the algorithmic complexity and the memory requirements. Bug: 2832580 Change-Id: I32dc75ef5a6645f594ea47b032d7402e8860ebcd
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/PackageManagerService.java68
1 files changed, 25 insertions, 43 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 9d8c072..17ad9e3 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -187,7 +187,9 @@ class PackageManagerService extends IPackageManager.Stub {
static final ComponentName DEFAULT_CONTAINER_COMPONENT = new ComponentName(
"com.android.defcontainer",
"com.android.defcontainer.DefaultContainerService");
-
+
+ static final String mTempContainerPrefix = "smdl2tmp";
+
final HandlerThread mHandlerThread = new HandlerThread("PackageManager",
Process.THREAD_PRIORITY_BACKGROUND);
final PackageHandler mHandler;
@@ -9549,48 +9551,28 @@ class PackageManagerService extends IPackageManager.Stub {
}
}
- static String getTempContainerId() {
- String prefix = "smdl2tmp";
- int tmpIdx = 1;
- String list[] = PackageHelper.getSecureContainerList();
- if (list != null) {
- int idx = 0;
- int idList[] = new int[MAX_CONTAINERS];
- boolean neverFound = true;
- for (String name : list) {
- // Ignore null entries
- if (name == null) {
- continue;
- }
- int sidx = name.indexOf(prefix);
- if (sidx == -1) {
- // Not a temp file. just ignore
- continue;
- }
- String subStr = name.substring(sidx + prefix.length());
- idList[idx] = -1;
- if (subStr != null) {
- try {
- int cid = Integer.parseInt(subStr);
- idList[idx++] = cid;
- neverFound = false;
- } catch (NumberFormatException e) {
- }
- }
- }
- if (!neverFound) {
- // Sort idList
- Arrays.sort(idList);
- for (int j = 1; j <= idList.length; j++) {
- if (idList[j-1] != j) {
- tmpIdx = j;
- break;
- }
- }
- }
- }
- return prefix + tmpIdx;
- }
+ /* package */ static String getTempContainerId() {
+ int tmpIdx = 1;
+ String list[] = PackageHelper.getSecureContainerList();
+ if (list != null) {
+ for (final String name : list) {
+ // Ignore null and non-temporary container entries
+ if (name == null || !name.startsWith(mTempContainerPrefix)) {
+ continue;
+ }
+
+ String subStr = name.substring(mTempContainerPrefix.length());
+ try {
+ int cid = Integer.parseInt(subStr);
+ if (cid >= tmpIdx) {
+ tmpIdx = cid + 1;
+ }
+ } catch (NumberFormatException e) {
+ }
+ }
+ }
+ return mTempContainerPrefix + tmpIdx;
+ }
/*
* Update media status on PackageManager.