Loading cmds/sm/src/com/android/commands/sm/Sm.java +13 −2 Original line number Diff line number Diff line Loading @@ -81,6 +81,8 @@ public final class Sm { runUnmount(); } else if ("format".equals(op)) { runFormat(); } else if ("benchmark".equals(op)) { runBenchmark(); } else if ("forget".equals(op)) { runForget(); } else { Loading @@ -89,11 +91,14 @@ public final class Sm { } public void runListDisks() throws RemoteException { final boolean onlyAdoptable = "adoptable".equals(nextArg()); final DiskInfo[] disks = mSm.getDisks(); for (DiskInfo disk : disks) { if (!onlyAdoptable || disk.isAdoptable()) { System.out.println(disk.getId()); } } } public void runListVolumes() throws RemoteException { final String filter = nextArg(); Loading Loading @@ -161,6 +166,11 @@ public final class Sm { mSm.format(volId); } public void runBenchmark() throws RemoteException { final String volId = nextArg(); mSm.benchmark(volId); } public void runForget() throws RemoteException{ final String fsUuid = nextArg(); if ("all".equals(fsUuid)) { Loading @@ -180,7 +190,7 @@ public final class Sm { } private static int showUsage() { System.err.println("usage: sm list-disks"); System.err.println("usage: sm list-disks [adoptable]"); System.err.println(" sm list-volumes [public|private|emulated|all]"); System.err.println(" sm has-adoptable"); System.err.println(" sm get-primary-storage-uuid"); Loading @@ -190,6 +200,7 @@ public final class Sm { System.err.println(" sm mount VOLUME"); System.err.println(" sm unmount VOLUME"); System.err.println(" sm format VOLUME"); System.err.println(" sm benchmark VOLUME"); System.err.println(""); System.err.println(" sm forget [UUID|all]"); System.err.println(""); Loading core/java/android/os/FileUtils.java +12 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.os; import android.annotation.NonNull; import android.provider.DocumentsContract.Document; import android.system.ErrnoException; import android.system.Os; Loading Loading @@ -69,6 +70,8 @@ public class FileUtils { /** Regular expression for safe filenames: no spaces or metacharacters */ private static final Pattern SAFE_FILENAME_PATTERN = Pattern.compile("[\\w%+,./=_-]+"); private static final File[] EMPTY = new File[0]; /** * Set owner and mode of of given {@link File}. * Loading Loading @@ -634,4 +637,13 @@ public class FileUtils { return new File(parent, name + "." + ext); } } public static @NonNull File[] listFilesOrEmpty(File dir) { File[] res = dir.listFiles(); if (res != null) { return res; } else { return EMPTY; } } } services/core/java/com/android/server/pm/PackageManagerService.java +10 −13 Original line number Diff line number Diff line Loading @@ -15605,12 +15605,8 @@ public class PackageManagerService extends IPackageManager.Stub { * recycled. */ private void reconcileUsers(String volumeUuid) { final File[] files = Environment.getDataUserDirectory(volumeUuid).listFiles(); if (ArrayUtils.isEmpty(files)) { Slog.d(TAG, "No users found on " + volumeUuid); return; } final File[] files = FileUtils .listFilesOrEmpty(Environment.getDataUserDirectory(volumeUuid)); for (File file : files) { if (!file.isDirectory()) continue; Loading Loading @@ -15666,12 +15662,8 @@ public class PackageManagerService extends IPackageManager.Stub { * another volume. */ private void reconcileApps(String volumeUuid) { final File[] files = Environment.getDataAppDirectory(volumeUuid).listFiles(); if (ArrayUtils.isEmpty(files)) { Slog.d(TAG, "No apps found on " + volumeUuid); return; } final File[] files = FileUtils .listFilesOrEmpty(Environment.getDataAppDirectory(volumeUuid)); for (File file : files) { final boolean isPackage = (isApkFile(file) || file.isDirectory()) && !PackageInstallerService.isStageName(file.getName()); Loading Loading @@ -15802,7 +15794,12 @@ public class PackageManagerService extends IPackageManager.Stub { } // Now that we're guarded by frozen state, kill app during move final long token = Binder.clearCallingIdentity(); try { killApplication(packageName, appId, "move pkg"); } finally { Binder.restoreCallingIdentity(token); } final Bundle extras = new Bundle(); extras.putString(Intent.EXTRA_PACKAGE_NAME, packageName); Loading
cmds/sm/src/com/android/commands/sm/Sm.java +13 −2 Original line number Diff line number Diff line Loading @@ -81,6 +81,8 @@ public final class Sm { runUnmount(); } else if ("format".equals(op)) { runFormat(); } else if ("benchmark".equals(op)) { runBenchmark(); } else if ("forget".equals(op)) { runForget(); } else { Loading @@ -89,11 +91,14 @@ public final class Sm { } public void runListDisks() throws RemoteException { final boolean onlyAdoptable = "adoptable".equals(nextArg()); final DiskInfo[] disks = mSm.getDisks(); for (DiskInfo disk : disks) { if (!onlyAdoptable || disk.isAdoptable()) { System.out.println(disk.getId()); } } } public void runListVolumes() throws RemoteException { final String filter = nextArg(); Loading Loading @@ -161,6 +166,11 @@ public final class Sm { mSm.format(volId); } public void runBenchmark() throws RemoteException { final String volId = nextArg(); mSm.benchmark(volId); } public void runForget() throws RemoteException{ final String fsUuid = nextArg(); if ("all".equals(fsUuid)) { Loading @@ -180,7 +190,7 @@ public final class Sm { } private static int showUsage() { System.err.println("usage: sm list-disks"); System.err.println("usage: sm list-disks [adoptable]"); System.err.println(" sm list-volumes [public|private|emulated|all]"); System.err.println(" sm has-adoptable"); System.err.println(" sm get-primary-storage-uuid"); Loading @@ -190,6 +200,7 @@ public final class Sm { System.err.println(" sm mount VOLUME"); System.err.println(" sm unmount VOLUME"); System.err.println(" sm format VOLUME"); System.err.println(" sm benchmark VOLUME"); System.err.println(""); System.err.println(" sm forget [UUID|all]"); System.err.println(""); Loading
core/java/android/os/FileUtils.java +12 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.os; import android.annotation.NonNull; import android.provider.DocumentsContract.Document; import android.system.ErrnoException; import android.system.Os; Loading Loading @@ -69,6 +70,8 @@ public class FileUtils { /** Regular expression for safe filenames: no spaces or metacharacters */ private static final Pattern SAFE_FILENAME_PATTERN = Pattern.compile("[\\w%+,./=_-]+"); private static final File[] EMPTY = new File[0]; /** * Set owner and mode of of given {@link File}. * Loading Loading @@ -634,4 +637,13 @@ public class FileUtils { return new File(parent, name + "." + ext); } } public static @NonNull File[] listFilesOrEmpty(File dir) { File[] res = dir.listFiles(); if (res != null) { return res; } else { return EMPTY; } } }
services/core/java/com/android/server/pm/PackageManagerService.java +10 −13 Original line number Diff line number Diff line Loading @@ -15605,12 +15605,8 @@ public class PackageManagerService extends IPackageManager.Stub { * recycled. */ private void reconcileUsers(String volumeUuid) { final File[] files = Environment.getDataUserDirectory(volumeUuid).listFiles(); if (ArrayUtils.isEmpty(files)) { Slog.d(TAG, "No users found on " + volumeUuid); return; } final File[] files = FileUtils .listFilesOrEmpty(Environment.getDataUserDirectory(volumeUuid)); for (File file : files) { if (!file.isDirectory()) continue; Loading Loading @@ -15666,12 +15662,8 @@ public class PackageManagerService extends IPackageManager.Stub { * another volume. */ private void reconcileApps(String volumeUuid) { final File[] files = Environment.getDataAppDirectory(volumeUuid).listFiles(); if (ArrayUtils.isEmpty(files)) { Slog.d(TAG, "No apps found on " + volumeUuid); return; } final File[] files = FileUtils .listFilesOrEmpty(Environment.getDataAppDirectory(volumeUuid)); for (File file : files) { final boolean isPackage = (isApkFile(file) || file.isDirectory()) && !PackageInstallerService.isStageName(file.getName()); Loading Loading @@ -15802,7 +15794,12 @@ public class PackageManagerService extends IPackageManager.Stub { } // Now that we're guarded by frozen state, kill app during move final long token = Binder.clearCallingIdentity(); try { killApplication(packageName, appId, "move pkg"); } finally { Binder.restoreCallingIdentity(token); } final Bundle extras = new Bundle(); extras.putString(Intent.EXTRA_PACKAGE_NAME, packageName);