17d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey/* 27d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * Copyright (C) 2015 The Android Open Source Project 37d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * 47d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 57d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * you may not use this file except in compliance with the License. 67d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * You may obtain a copy of the License at 77d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * 87d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 97d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * 107d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * Unless required by applicable law or agreed to in writing, software 117d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 127d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * See the License for the specific language governing permissions and 147d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey * limitations under the License. 157d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey */ 167d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 177d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkeypackage com.android.commands.sm; 187d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 197d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkeyimport android.os.RemoteException; 207d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkeyimport android.os.ServiceManager; 210d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkeyimport android.os.SystemProperties; 227d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkeyimport android.os.storage.DiskInfo; 237d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkeyimport android.os.storage.IMountService; 240d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkeyimport android.os.storage.StorageManager; 257d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkeyimport android.os.storage.VolumeInfo; 267d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkeyimport android.util.Log; 277d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 287d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkeypublic final class Sm { 297d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey private static final String TAG = "Sm"; 307d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 317d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey IMountService mSm; 327d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 337d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey private String[] mArgs; 347d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey private int mNextArg; 357d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey private String mCurArgData; 367d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 377d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public static void main(String[] args) { 387d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey boolean success = false; 397d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey try { 407d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey new Sm().run(args); 417d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey success = true; 427d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } catch (Exception e) { 437d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if (e instanceof IllegalArgumentException) { 447d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey showUsage(); 4582bfca4609244f2b8169bd779765791d6638b448Brian Carlstrom System.exit(1); 467d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 477d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey Log.e(TAG, "Error", e); 487d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println("Error: " + e); 497d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 507d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.exit(success ? 0 : 1); 517d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 527d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 537d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void run(String[] args) throws Exception { 547d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if (args.length < 1) { 557d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey throw new IllegalArgumentException(); 567d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 577d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 587d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm = IMountService.Stub.asInterface(ServiceManager.getService("mount")); 597d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if (mSm == null) { 607d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey throw new RemoteException("Failed to find running mount service"); 617d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 627d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 637d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mArgs = args; 647d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey String op = args[0]; 657d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mNextArg = 1; 667d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 677d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if ("list-disks".equals(op)) { 687d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey runListDisks(); 697d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("list-volumes".equals(op)) { 707d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey runListVolumes(); 710d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkey } else if ("has-adoptable".equals(op)) { 720d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkey runHasAdoptable(); 737d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("get-primary-storage-uuid".equals(op)) { 747d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey runGetPrimaryStorageUuid(); 754c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey } else if ("set-force-adoptable".equals(op)) { 764c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey runSetForceAdoptable(); 7733dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey } else if ("set-sdcardfs".equals(op)) { 7833dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey runSetSdcardfs(); 797d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("partition".equals(op)) { 807d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey runPartition(); 817d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("mount".equals(op)) { 827d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey runMount(); 837d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("unmount".equals(op)) { 847d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey runUnmount(); 857d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("format".equals(op)) { 867d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey runFormat(); 8785ced632680642fce680d141ddd10299ff849233Jeff Sharkey } else if ("benchmark".equals(op)) { 8885ced632680642fce680d141ddd10299ff849233Jeff Sharkey runBenchmark(); 897d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("forget".equals(op)) { 907d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey runForget(); 91f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey } else if ("set-emulate-fbe".equals(op)) { 92f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey runSetEmulateFbe(); 93b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey } else if ("get-fbe-mode".equals(op)) { 94b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey runGetFbeMode(); 957d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else { 967d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey throw new IllegalArgumentException(); 977d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 987d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 997d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 1007d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void runListDisks() throws RemoteException { 10185ced632680642fce680d141ddd10299ff849233Jeff Sharkey final boolean onlyAdoptable = "adoptable".equals(nextArg()); 1027d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final DiskInfo[] disks = mSm.getDisks(); 1037d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey for (DiskInfo disk : disks) { 10485ced632680642fce680d141ddd10299ff849233Jeff Sharkey if (!onlyAdoptable || disk.isAdoptable()) { 10585ced632680642fce680d141ddd10299ff849233Jeff Sharkey System.out.println(disk.getId()); 10685ced632680642fce680d141ddd10299ff849233Jeff Sharkey } 1077d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1087d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1097d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 1107d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void runListVolumes() throws RemoteException { 1117d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final String filter = nextArg(); 1127d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final int filterType; 1137d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if ("public".equals(filter)) { 1147d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey filterType = VolumeInfo.TYPE_PUBLIC; 1157d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("private".equals(filter)) { 1167d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey filterType = VolumeInfo.TYPE_PRIVATE; 1177d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("emulated".equals(filter)) { 1187d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey filterType = VolumeInfo.TYPE_EMULATED; 1197d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else { 1207d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey filterType = -1; 1217d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1227d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 1237d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final VolumeInfo[] vols = mSm.getVolumes(0); 1247d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey for (VolumeInfo vol : vols) { 1257d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if (filterType == -1 || filterType == vol.getType()) { 1267d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final String envState = VolumeInfo.getEnvironmentForState(vol.getState()); 1277d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.out.println(vol.getId() + " " + envState + " " + vol.getFsUuid()); 1287d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1297d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1307d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1317d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 1320d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkey public void runHasAdoptable() { 1334c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey System.out.println(SystemProperties.getBoolean(StorageManager.PROP_HAS_ADOPTABLE, false)); 1340d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkey } 1350d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkey 1360d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkey public void runGetPrimaryStorageUuid() throws RemoteException { 1377d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.out.println(mSm.getPrimaryStorageUuid()); 1387d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1397d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 1404c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey public void runSetForceAdoptable() throws RemoteException { 1414c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey final boolean forceAdoptable = Boolean.parseBoolean(nextArg()); 1424c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey mSm.setDebugFlags(forceAdoptable ? StorageManager.DEBUG_FORCE_ADOPTABLE : 0, 1434c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey StorageManager.DEBUG_FORCE_ADOPTABLE); 1444c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey } 14533dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey 14633dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey public void runSetSdcardfs() throws RemoteException { 14733dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey final int mask = StorageManager.DEBUG_SDCARDFS_FORCE_ON 14833dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey | StorageManager.DEBUG_SDCARDFS_FORCE_OFF; 14933dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey switch (nextArg()) { 15033dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey case "on": 15133dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey mSm.setDebugFlags(StorageManager.DEBUG_SDCARDFS_FORCE_ON, mask); 15233dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey break; 15333dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey case "off": 15433dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey mSm.setDebugFlags(StorageManager.DEBUG_SDCARDFS_FORCE_OFF, mask); 15533dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey break; 15633dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey case "default": 15733dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey mSm.setDebugFlags(0, mask); 15833dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey break; 15933dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey } 16033dd156ed0ed839c5e77beb116f6f1a9566416e3Jeff Sharkey } 1614c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey 162f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey public void runSetEmulateFbe() throws RemoteException { 163f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey final boolean emulateFbe = Boolean.parseBoolean(nextArg()); 164f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey mSm.setDebugFlags(emulateFbe ? StorageManager.DEBUG_EMULATE_FBE : 0, 165f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey StorageManager.DEBUG_EMULATE_FBE); 166f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey } 167f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey 168b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey public void runGetFbeMode() { 169b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey if (StorageManager.isFileEncryptedNativeOnly()) { 170b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey System.out.println("native"); 171b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey } else if (StorageManager.isFileEncryptedEmulatedOnly()) { 172b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey System.out.println("emulated"); 173b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey } else { 174b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey System.out.println("none"); 175b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey } 176b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey } 177b5e89c6debca90be92bf5bc2e0e79d109de6d08fJeff Sharkey 1787d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void runPartition() throws RemoteException { 1797d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final String diskId = nextArg(); 1807d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final String type = nextArg(); 1817d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if ("public".equals(type)) { 1827d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm.partitionPublic(diskId); 1837d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("private".equals(type)) { 1847d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm.partitionPrivate(diskId); 1857d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else if ("mixed".equals(type)) { 1867d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final int ratio = Integer.parseInt(nextArg()); 1877d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm.partitionMixed(diskId, ratio); 1887d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else { 1897d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey throw new IllegalArgumentException("Unsupported partition type " + type); 1907d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1917d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1927d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 1937d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void runMount() throws RemoteException { 1947d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final String volId = nextArg(); 1957d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm.mount(volId); 1967d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 1977d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 1987d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void runUnmount() throws RemoteException { 1997d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final String volId = nextArg(); 2007d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm.unmount(volId); 2017d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 2027d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 2037d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void runFormat() throws RemoteException { 2047d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final String volId = nextArg(); 2057d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm.format(volId); 2067d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 2077d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 20885ced632680642fce680d141ddd10299ff849233Jeff Sharkey public void runBenchmark() throws RemoteException { 20985ced632680642fce680d141ddd10299ff849233Jeff Sharkey final String volId = nextArg(); 21085ced632680642fce680d141ddd10299ff849233Jeff Sharkey mSm.benchmark(volId); 21185ced632680642fce680d141ddd10299ff849233Jeff Sharkey } 21285ced632680642fce680d141ddd10299ff849233Jeff Sharkey 2137d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey public void runForget() throws RemoteException{ 2147d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey final String fsUuid = nextArg(); 2157d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if ("all".equals(fsUuid)) { 2167d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm.forgetAllVolumes(); 2177d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } else { 2187d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mSm.forgetVolume(fsUuid); 2197d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 2207d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 2217d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 2227d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey private String nextArg() { 2237d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey if (mNextArg >= mArgs.length) { 2247d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey return null; 2257d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 2267d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey String arg = mArgs[mNextArg]; 2277d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey mNextArg++; 2287d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey return arg; 2297d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 2307d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey 2317d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey private static int showUsage() { 23285ced632680642fce680d141ddd10299ff849233Jeff Sharkey System.err.println("usage: sm list-disks [adoptable]"); 2337d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(" sm list-volumes [public|private|emulated|all]"); 2340d838a0fad500a3c446df501d8aa7656c2c3a7a2Jeff Sharkey System.err.println(" sm has-adoptable"); 2357d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(" sm get-primary-storage-uuid"); 2364c099d0c49c8366efd3c26854465b3ceef49b627Jeff Sharkey System.err.println(" sm set-force-adoptable [true|false]"); 2377d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(""); 2387d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(" sm partition DISK [public|private|mixed] [ratio]"); 2397d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(" sm mount VOLUME"); 2407d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(" sm unmount VOLUME"); 2417d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(" sm format VOLUME"); 24285ced632680642fce680d141ddd10299ff849233Jeff Sharkey System.err.println(" sm benchmark VOLUME"); 2437d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(""); 2447d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(" sm forget [UUID|all]"); 2457d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey System.err.println(""); 246f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey System.err.println(" sm set-emulate-fbe [true|false]"); 247f9fc6d6cc05595241bc7ced6d4cab97b45f9b901Jeff Sharkey System.err.println(""); 2487d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey return 1; 2497d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey } 2507d2af54a98358e9dea96f879ebd1ea915263522bJeff Sharkey} 251