Better handling of storage paths.
Give more details about why we failed to create storage paths, and
search for underlying volumes using canonical paths.
Bug: 22135060
Change-Id: I75d3584403ece310438b05f5b9fe72d94c9096c6
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 6639486..75dd35c 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -1925,13 +1925,14 @@
// enough permissions; ask vold to create on our behalf.
final IMountService mount = IMountService.Stub.asInterface(
ServiceManager.getService("mount"));
- int res = -1;
try {
- res = mount.mkdirs(getPackageName(), dir.getAbsolutePath());
- } catch (Exception ignored) {
- }
- if (res != 0) {
- Log.w(TAG, "Failed to ensure directory: " + dir);
+ final int res = mount.mkdirs(getPackageName(), dir.getAbsolutePath());
+ if (res != 0) {
+ Log.w(TAG, "Failed to ensure " + dir + ": " + res);
+ dir = null;
+ }
+ } catch (Exception e) {
+ Log.w(TAG, "Failed to ensure " + dir + ": " + e);
dir = null;
}
}
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index 320aa2c..2b75f31 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -817,17 +817,19 @@
/** {@hide} */
private static @Nullable StorageVolume getStorageVolume(StorageVolume[] volumes, File file) {
- File canonicalFile = null;
try {
- canonicalFile = file.getCanonicalFile();
+ file = file.getCanonicalFile();
} catch (IOException ignored) {
- canonicalFile = null;
+ return null;
}
for (StorageVolume volume : volumes) {
- if (volume.getPathFile().equals(file)) {
- return volume;
+ File volumeFile = volume.getPathFile();
+ try {
+ volumeFile = volumeFile.getCanonicalFile();
+ } catch (IOException ignored) {
+ continue;
}
- if (FileUtils.contains(volume.getPathFile(), canonicalFile)) {
+ if (FileUtils.contains(volumeFile, file)) {
return volume;
}
}