Changeset 16052 in vbox for trunk/src/VBox/Frontends/VBoxManage
- Timestamp:
- Jan 19, 2009 6:24:29 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 41748
- Location:
- trunk/src/VBox/Frontends/VBoxManage
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
r15602 r16052 1652 1652 * Wrapper for handling internal commands 1653 1653 */ 1654 int handleInternalCommands(int argc, char *argv[], 1655 ComPtr <IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 1654 int handleInternalCommands(HandlerArg *a) 1656 1655 { 1657 1656 g_fInternalMode = true; 1658 1657 1659 1658 /* at least a command is required */ 1660 if (a rgc < 1)1659 if (a->argc < 1) 1661 1660 return errorSyntax(USAGE_ALL, "Command missing"); 1662 1661 … … 1664 1663 * The 'string switch' on command name. 1665 1664 */ 1666 const char *pszCmd = a rgv[0];1665 const char *pszCmd = a->argv[0]; 1667 1666 if (!strcmp(pszCmd, "loadsyms")) 1668 return CmdLoadSyms(a rgc - 1, &argv[1], aVirtualBox, aSession);1667 return CmdLoadSyms(a->argc - 1, &a->argv[1], a->virtualBox, a->session); 1669 1668 //if (!strcmp(pszCmd, "unloadsyms")) 1670 // return CmdUnloadSyms(argc - 1 , &a rgv[1]);1669 // return CmdUnloadSyms(argc - 1 , &a->argv[1]); 1671 1670 if (!strcmp(pszCmd, "sethduuid") || !strcmp(pszCmd, "setvdiuuid")) 1672 return handleSetHDUUID(a rgc - 1, &argv[1], aVirtualBox, aSession);1671 return handleSetHDUUID(a->argc - 1, &a->argv[1], a->virtualBox, a->session); 1673 1672 if (!strcmp(pszCmd, "listpartitions")) 1674 return CmdListPartitions(a rgc - 1, &argv[1], aVirtualBox, aSession);1673 return CmdListPartitions(a->argc - 1, &a->argv[1], a->virtualBox, a->session); 1675 1674 if (!strcmp(pszCmd, "createrawvmdk")) 1676 return CmdCreateRawVMDK(a rgc - 1, &argv[1], aVirtualBox, aSession);1675 return CmdCreateRawVMDK(a->argc - 1, &a->argv[1], a->virtualBox, a->session); 1677 1676 if (!strcmp(pszCmd, "renamevmdk")) 1678 return CmdRenameVMDK(a rgc - 1, &argv[1], aVirtualBox, aSession);1677 return CmdRenameVMDK(a->argc - 1, &a->argv[1], a->virtualBox, a->session); 1679 1678 if (!strcmp(pszCmd, "converttoraw")) 1680 return CmdConvertToRaw(a rgc - 1, &argv[1], aVirtualBox, aSession);1679 return CmdConvertToRaw(a->argc - 1, &a->argv[1], a->virtualBox, a->session); 1681 1680 if (!strcmp(pszCmd, "converthd")) 1682 return CmdConvertHardDisk(a rgc - 1, &argv[1], aVirtualBox, aSession);1681 return CmdConvertHardDisk(a->argc - 1, &a->argv[1], a->virtualBox, a->session); 1683 1682 1684 1683 if (!strcmp(pszCmd, "modinstall")) … … 1688 1687 1689 1688 /* default: */ 1690 return errorSyntax(USAGE_ALL, "Invalid command '%s'", Utf8Str(a rgv[0]).raw());1691 } 1692 1689 return errorSyntax(USAGE_ALL, "Invalid command '%s'", Utf8Str(a->argv[0]).raw()); 1690 } 1691 -
trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp
r15906 r16052 73 73 74 74 /** command handler type */ 75 typedef int (*PFNHANDLER)(int argc, char *argv[], ComPtr<IVirtualBox> aVirtualBox, ComPtr<ISession> aSession); 76 77 #ifdef USE_XPCOM_QUEUE 78 /** A pointer to the event queue, set by main() before calling any handlers. */ 79 nsCOMPtr<nsIEventQueue> g_pEventQ; 80 #endif 75 typedef int (*PFNHANDLER)(HandlerArg *a); 81 76 82 77 /** … … 757 752 } 758 753 759 static int handleRegisterVM(int argc, char *argv[], 760 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 754 static int handleRegisterVM(HandlerArg *a) 761 755 { 762 756 HRESULT rc; 763 757 764 if (a rgc != 1)758 if (a->argc != 1) 765 759 return errorSyntax(USAGE_REGISTERVM, "Incorrect number of parameters"); 766 760 767 761 ComPtr<IMachine> machine; 768 CHECK_ERROR( virtualBox, OpenMachine(Bstr(argv[0]), machine.asOutParam()));762 CHECK_ERROR(a->virtualBox, OpenMachine(Bstr(a->argv[0]), machine.asOutParam())); 769 763 if (SUCCEEDED(rc)) 770 764 { 771 765 ASSERT(machine); 772 CHECK_ERROR( virtualBox, RegisterMachine(machine));766 CHECK_ERROR(a->virtualBox, RegisterMachine(machine)); 773 767 } 774 768 return SUCCEEDED(rc) ? 0 : 1; 775 769 } 776 770 777 static int handleUnregisterVM(int argc, char *argv[], 778 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 771 static int handleUnregisterVM(HandlerArg *a) 779 772 { 780 773 HRESULT rc; 781 774 782 if ((a rgc != 1) && (argc != 2))775 if ((a->argc != 1) && (a->argc != 2)) 783 776 return errorSyntax(USAGE_UNREGISTERVM, "Incorrect number of parameters"); 784 777 785 778 ComPtr<IMachine> machine; 786 779 /* assume it's a UUID */ 787 rc = virtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());780 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 788 781 if (FAILED(rc) || !machine) 789 782 { 790 783 /* must be a name */ 791 CHECK_ERROR( virtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));784 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 792 785 } 793 786 if (machine) … … 796 789 machine->COMGETTER(Id)(uuid.asOutParam()); 797 790 machine = NULL; 798 CHECK_ERROR( virtualBox, UnregisterMachine(uuid, machine.asOutParam()));791 CHECK_ERROR(a->virtualBox, UnregisterMachine(uuid, machine.asOutParam())); 799 792 if (SUCCEEDED(rc) && machine) 800 793 { 801 794 /* are we supposed to delete the config file? */ 802 if ((a rgc == 2) && (strcmp(argv[1], "-delete") == 0))795 if ((a->argc == 2) && (strcmp(a->argv[1], "-delete") == 0)) 803 796 { 804 797 CHECK_ERROR(machine, DeleteSettings()); … … 809 802 } 810 803 811 static int handleCreateVM(int argc, char *argv[], 812 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 804 static int handleCreateVM(HandlerArg *a) 813 805 { 814 806 HRESULT rc; … … 821 813 822 814 RTUuidClear(&id); 823 for (int i = 0; i < a rgc; i++)824 { 825 if (strcmp(a rgv[i], "-basefolder") == 0)826 { 827 if (a rgc <= i + 1)828 return errorArgument("Missing argument to '%s'", a rgv[i]);829 i++; 830 baseFolder = a rgv[i];831 } 832 else if (strcmp(a rgv[i], "-settingsfile") == 0)833 { 834 if (a rgc <= i + 1)835 return errorArgument("Missing argument to '%s'", a rgv[i]);836 i++; 837 settingsFile = a rgv[i];838 } 839 else if (strcmp(a rgv[i], "-name") == 0)840 { 841 if (a rgc <= i + 1)842 return errorArgument("Missing argument to '%s'", a rgv[i]);843 i++; 844 name = a rgv[i];845 } 846 else if (strcmp(a rgv[i], "-ostype") == 0)847 { 848 if (a rgc <= i + 1)849 return errorArgument("Missing argument to '%s'", a rgv[i]);850 i++; 851 osTypeId = a rgv[i];852 } 853 else if (strcmp(a rgv[i], "-uuid") == 0)854 { 855 if (a rgc <= i + 1)856 return errorArgument("Missing argument to '%s'", a rgv[i]);857 i++; 858 if (RT_FAILURE(RTUuidFromStr(&id, a rgv[i])))859 return errorArgument("Invalid UUID format %s\n", a rgv[i]);860 } 861 else if (strcmp(a rgv[i], "-register") == 0)815 for (int i = 0; i < a->argc; i++) 816 { 817 if (strcmp(a->argv[i], "-basefolder") == 0) 818 { 819 if (a->argc <= i + 1) 820 return errorArgument("Missing argument to '%s'", a->argv[i]); 821 i++; 822 baseFolder = a->argv[i]; 823 } 824 else if (strcmp(a->argv[i], "-settingsfile") == 0) 825 { 826 if (a->argc <= i + 1) 827 return errorArgument("Missing argument to '%s'", a->argv[i]); 828 i++; 829 settingsFile = a->argv[i]; 830 } 831 else if (strcmp(a->argv[i], "-name") == 0) 832 { 833 if (a->argc <= i + 1) 834 return errorArgument("Missing argument to '%s'", a->argv[i]); 835 i++; 836 name = a->argv[i]; 837 } 838 else if (strcmp(a->argv[i], "-ostype") == 0) 839 { 840 if (a->argc <= i + 1) 841 return errorArgument("Missing argument to '%s'", a->argv[i]); 842 i++; 843 osTypeId = a->argv[i]; 844 } 845 else if (strcmp(a->argv[i], "-uuid") == 0) 846 { 847 if (a->argc <= i + 1) 848 return errorArgument("Missing argument to '%s'", a->argv[i]); 849 i++; 850 if (RT_FAILURE(RTUuidFromStr(&id, a->argv[i]))) 851 return errorArgument("Invalid UUID format %s\n", a->argv[i]); 852 } 853 else if (strcmp(a->argv[i], "-register") == 0) 862 854 { 863 855 fRegister = true; 864 856 } 865 857 else 866 return errorSyntax(USAGE_CREATEVM, "Invalid parameter '%s'", Utf8Str(a rgv[i]).raw());858 return errorSyntax(USAGE_CREATEVM, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw()); 867 859 } 868 860 if (!name) … … 877 869 878 870 if (!settingsFile) 879 CHECK_ERROR_BREAK( virtualBox,871 CHECK_ERROR_BREAK(a->virtualBox, 880 872 CreateMachine(name, osTypeId, baseFolder, Guid(id), machine.asOutParam())); 881 873 else 882 CHECK_ERROR_BREAK( virtualBox,874 CHECK_ERROR_BREAK(a->virtualBox, 883 875 CreateLegacyMachine(name, osTypeId, settingsFile, Guid(id), machine.asOutParam())); 884 876 … … 886 878 if (fRegister) 887 879 { 888 CHECK_ERROR_BREAK( virtualBox, RegisterMachine(machine));880 CHECK_ERROR_BREAK(a->virtualBox, RegisterMachine(machine)); 889 881 } 890 882 Guid uuid; … … 928 920 #endif 929 921 930 static int handleModifyVM(int argc, char *argv[], 931 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 922 static int handleModifyVM(HandlerArg *a) 932 923 { 933 924 HRESULT rc; … … 980 971 /* VM ID + at least one parameter. Parameter arguments are checked 981 972 * individually. */ 982 if (a rgc < 2)973 if (a->argc < 2) 983 974 return errorSyntax(USAGE_MODIFYVM, "Not enough parameters"); 984 975 … … 987 978 { 988 979 ComPtr <ISystemProperties> info; 989 CHECK_ERROR_RET ( virtualBox, COMGETTER(SystemProperties) (info.asOutParam()), 1);980 CHECK_ERROR_RET (a->virtualBox, COMGETTER(SystemProperties) (info.asOutParam()), 1); 990 981 CHECK_ERROR_RET (info, COMGETTER(NetworkAdapterCount) (&NetworkAdapterCount), 1); 991 982 } … … 993 984 { 994 985 ComPtr <ISystemProperties> info; 995 CHECK_ERROR_RET ( virtualBox, COMGETTER(SystemProperties) (info.asOutParam()), 1);986 CHECK_ERROR_RET (a->virtualBox, COMGETTER(SystemProperties) (info.asOutParam()), 1); 996 987 CHECK_ERROR_RET (info, COMGETTER(SerialPortCount) (&SerialPortCount), 1); 997 988 } … … 1012 1003 std::vector <char *> uarts_path (SerialPortCount, 0); 1013 1004 1014 for (int i = 1; i < a rgc; i++)1015 { 1016 if (strcmp(a rgv[i], "-name") == 0)1017 { 1018 if (a rgc <= i + 1)1019 return errorArgument("Missing argument to '%s'", a rgv[i]);1020 i++; 1021 name = a rgv[i];1022 } 1023 else if (strcmp(a rgv[i], "-ostype") == 0)1024 { 1025 if (a rgc <= i + 1)1026 return errorArgument("Missing argument to '%s'", a rgv[i]);1027 i++; 1028 ostype = a rgv[i];1029 } 1030 else if (strcmp(a rgv[i], "-memory") == 0)1031 { 1032 if (a rgc <= i + 1)1033 return errorArgument("Missing argument to '%s'", a rgv[i]);1034 i++; 1035 memorySize = RTStrToUInt32(a rgv[i]);1036 } 1037 else if (strcmp(a rgv[i], "-vram") == 0)1038 { 1039 if (a rgc <= i + 1)1040 return errorArgument("Missing argument to '%s'", a rgv[i]);1041 i++; 1042 vramSize = RTStrToUInt32(a rgv[i]);1043 } 1044 else if (strcmp(a rgv[i], "-acpi") == 0)1045 { 1046 if (a rgc <= i + 1)1047 return errorArgument("Missing argument to '%s'", a rgv[i]);1048 i++; 1049 acpi = a rgv[i];1050 } 1051 else if (strcmp(a rgv[i], "-ioapic") == 0)1052 { 1053 if (a rgc <= i + 1)1054 return errorArgument("Missing argument to '%s'", a rgv[i]);1055 i++; 1056 ioapic = a rgv[i];1057 } 1058 else if (strcmp(a rgv[i], "-hwvirtex") == 0)1059 { 1060 if (a rgc <= i + 1)1061 return errorArgument("Missing argument to '%s'", a rgv[i]);1062 i++; 1063 hwvirtex = a rgv[i];1064 } 1065 else if (strcmp(a rgv[i], "-nestedpaging") == 0)1066 { 1067 if (a rgc <= i + 1)1068 return errorArgument("Missing argument to '%s'", a rgv[i]);1069 i++; 1070 nestedpaging = a rgv[i];1071 } 1072 else if (strcmp(a rgv[i], "-vtxvpid") == 0)1073 { 1074 if (a rgc <= i + 1)1075 return errorArgument("Missing argument to '%s'", a rgv[i]);1076 i++; 1077 vtxvpid = a rgv[i];1078 } 1079 else if (strcmp(a rgv[i], "-pae") == 0)1080 { 1081 if (a rgc <= i + 1)1082 return errorArgument("Missing argument to '%s'", a rgv[i]);1083 i++; 1084 pae = a rgv[i];1085 } 1086 else if (strcmp(a rgv[i], "-monitorcount") == 0)1087 { 1088 if (a rgc <= i + 1)1089 return errorArgument("Missing argument to '%s'", a rgv[i]);1090 i++; 1091 monitorcount = RTStrToUInt32(a rgv[i]);1092 } 1093 else if (strcmp(a rgv[i], "-accelerate3d") == 0)1094 { 1095 if (a rgc <= i + 1)1096 return errorArgument("Missing argument to '%s'", a rgv[i]);1097 i++; 1098 accelerate3d = a rgv[i];1099 } 1100 else if (strcmp(a rgv[i], "-bioslogofadein") == 0)1101 { 1102 if (a rgc <= i + 1)1103 return errorArgument("Missing argument to '%s'", a rgv[i]);1104 i++; 1105 bioslogofadein = a rgv[i];1106 } 1107 else if (strcmp(a rgv[i], "-bioslogofadeout") == 0)1108 { 1109 if (a rgc <= i + 1)1110 return errorArgument("Missing argument to '%s'", a rgv[i]);1111 i++; 1112 bioslogofadeout = a rgv[i];1113 } 1114 else if (strcmp(a rgv[i], "-bioslogodisplaytime") == 0)1115 { 1116 if (a rgc <= i + 1)1117 return errorArgument("Missing argument to '%s'", a rgv[i]);1118 i++; 1119 bioslogodisplaytime = RTStrToUInt32(a rgv[i]);1120 } 1121 else if (strcmp(a rgv[i], "-bioslogoimagepath") == 0)1122 { 1123 if (a rgc <= i + 1)1124 return errorArgument("Missing argument to '%s'", a rgv[i]);1125 i++; 1126 bioslogoimagepath = a rgv[i];1127 } 1128 else if (strcmp(a rgv[i], "-biosbootmenu") == 0)1129 { 1130 if (a rgc <= i + 1)1131 return errorArgument("Missing argument to '%s'", a rgv[i]);1132 i++; 1133 biosbootmenumode = a rgv[i];1134 } 1135 else if (strcmp(a rgv[i], "-biossystemtimeoffset") == 0)1136 { 1137 if (a rgc <= i + 1)1138 return errorArgument("Missing argument to '%s'", a rgv[i]);1139 i++; 1140 biossystemtimeoffset = a rgv[i];1141 } 1142 else if (strcmp(a rgv[i], "-biospxedebug") == 0)1143 { 1144 if (a rgc <= i + 1)1145 return errorArgument("Missing argument to '%s'", a rgv[i]);1146 i++; 1147 biospxedebug = a rgv[i];1148 } 1149 else if (strncmp(a rgv[i], "-boot", 5) == 0)1005 for (int i = 1; i < a->argc; i++) 1006 { 1007 if (strcmp(a->argv[i], "-name") == 0) 1008 { 1009 if (a->argc <= i + 1) 1010 return errorArgument("Missing argument to '%s'", a->argv[i]); 1011 i++; 1012 name = a->argv[i]; 1013 } 1014 else if (strcmp(a->argv[i], "-ostype") == 0) 1015 { 1016 if (a->argc <= i + 1) 1017 return errorArgument("Missing argument to '%s'", a->argv[i]); 1018 i++; 1019 ostype = a->argv[i]; 1020 } 1021 else if (strcmp(a->argv[i], "-memory") == 0) 1022 { 1023 if (a->argc <= i + 1) 1024 return errorArgument("Missing argument to '%s'", a->argv[i]); 1025 i++; 1026 memorySize = RTStrToUInt32(a->argv[i]); 1027 } 1028 else if (strcmp(a->argv[i], "-vram") == 0) 1029 { 1030 if (a->argc <= i + 1) 1031 return errorArgument("Missing argument to '%s'", a->argv[i]); 1032 i++; 1033 vramSize = RTStrToUInt32(a->argv[i]); 1034 } 1035 else if (strcmp(a->argv[i], "-acpi") == 0) 1036 { 1037 if (a->argc <= i + 1) 1038 return errorArgument("Missing argument to '%s'", a->argv[i]); 1039 i++; 1040 acpi = a->argv[i]; 1041 } 1042 else if (strcmp(a->argv[i], "-ioapic") == 0) 1043 { 1044 if (a->argc <= i + 1) 1045 return errorArgument("Missing argument to '%s'", a->argv[i]); 1046 i++; 1047 ioapic = a->argv[i]; 1048 } 1049 else if (strcmp(a->argv[i], "-hwvirtex") == 0) 1050 { 1051 if (a->argc <= i + 1) 1052 return errorArgument("Missing argument to '%s'", a->argv[i]); 1053 i++; 1054 hwvirtex = a->argv[i]; 1055 } 1056 else if (strcmp(a->argv[i], "-nestedpaging") == 0) 1057 { 1058 if (a->argc <= i + 1) 1059 return errorArgument("Missing argument to '%s'", a->argv[i]); 1060 i++; 1061 nestedpaging = a->argv[i]; 1062 } 1063 else if (strcmp(a->argv[i], "-vtxvpid") == 0) 1064 { 1065 if (a->argc <= i + 1) 1066 return errorArgument("Missing argument to '%s'", a->argv[i]); 1067 i++; 1068 vtxvpid = a->argv[i]; 1069 } 1070 else if (strcmp(a->argv[i], "-pae") == 0) 1071 { 1072 if (a->argc <= i + 1) 1073 return errorArgument("Missing argument to '%s'", a->argv[i]); 1074 i++; 1075 pae = a->argv[i]; 1076 } 1077 else if (strcmp(a->argv[i], "-monitorcount") == 0) 1078 { 1079 if (a->argc <= i + 1) 1080 return errorArgument("Missing argument to '%s'", a->argv[i]); 1081 i++; 1082 monitorcount = RTStrToUInt32(a->argv[i]); 1083 } 1084 else if (strcmp(a->argv[i], "-accelerate3d") == 0) 1085 { 1086 if (a->argc <= i + 1) 1087 return errorArgument("Missing argument to '%s'", a->argv[i]); 1088 i++; 1089 accelerate3d = a->argv[i]; 1090 } 1091 else if (strcmp(a->argv[i], "-bioslogofadein") == 0) 1092 { 1093 if (a->argc <= i + 1) 1094 return errorArgument("Missing argument to '%s'", a->argv[i]); 1095 i++; 1096 bioslogofadein = a->argv[i]; 1097 } 1098 else if (strcmp(a->argv[i], "-bioslogofadeout") == 0) 1099 { 1100 if (a->argc <= i + 1) 1101 return errorArgument("Missing argument to '%s'", a->argv[i]); 1102 i++; 1103 bioslogofadeout = a->argv[i]; 1104 } 1105 else if (strcmp(a->argv[i], "-bioslogodisplaytime") == 0) 1106 { 1107 if (a->argc <= i + 1) 1108 return errorArgument("Missing argument to '%s'", a->argv[i]); 1109 i++; 1110 bioslogodisplaytime = RTStrToUInt32(a->argv[i]); 1111 } 1112 else if (strcmp(a->argv[i], "-bioslogoimagepath") == 0) 1113 { 1114 if (a->argc <= i + 1) 1115 return errorArgument("Missing argument to '%s'", a->argv[i]); 1116 i++; 1117 bioslogoimagepath = a->argv[i]; 1118 } 1119 else if (strcmp(a->argv[i], "-biosbootmenu") == 0) 1120 { 1121 if (a->argc <= i + 1) 1122 return errorArgument("Missing argument to '%s'", a->argv[i]); 1123 i++; 1124 biosbootmenumode = a->argv[i]; 1125 } 1126 else if (strcmp(a->argv[i], "-biossystemtimeoffset") == 0) 1127 { 1128 if (a->argc <= i + 1) 1129 return errorArgument("Missing argument to '%s'", a->argv[i]); 1130 i++; 1131 biossystemtimeoffset = a->argv[i]; 1132 } 1133 else if (strcmp(a->argv[i], "-biospxedebug") == 0) 1134 { 1135 if (a->argc <= i + 1) 1136 return errorArgument("Missing argument to '%s'", a->argv[i]); 1137 i++; 1138 biospxedebug = a->argv[i]; 1139 } 1140 else if (strncmp(a->argv[i], "-boot", 5) == 0) 1150 1141 { 1151 1142 uint32_t n = 0; 1152 if (!a rgv[i][5])1153 return errorSyntax(USAGE_MODIFYVM, "Missing boot slot number in '%s'", a rgv[i]);1154 if (VINF_SUCCESS != RTStrToUInt32Full(&a rgv[i][5], 10, &n))1155 return errorSyntax(USAGE_MODIFYVM, "Invalid boot slot number in '%s'", a rgv[i]);1156 if (a rgc <= i + 1)1157 return errorArgument("Missing argument to '%s'", a rgv[i]);1158 i++; 1159 if (strcmp(a rgv[i], "none") == 0)1143 if (!a->argv[i][5]) 1144 return errorSyntax(USAGE_MODIFYVM, "Missing boot slot number in '%s'", a->argv[i]); 1145 if (VINF_SUCCESS != RTStrToUInt32Full(&a->argv[i][5], 10, &n)) 1146 return errorSyntax(USAGE_MODIFYVM, "Invalid boot slot number in '%s'", a->argv[i]); 1147 if (a->argc <= i + 1) 1148 return errorArgument("Missing argument to '%s'", a->argv[i]); 1149 i++; 1150 if (strcmp(a->argv[i], "none") == 0) 1160 1151 { 1161 1152 bootDevice[n - 1] = DeviceType_Null; 1162 1153 } 1163 else if (strcmp(a rgv[i], "floppy") == 0)1154 else if (strcmp(a->argv[i], "floppy") == 0) 1164 1155 { 1165 1156 bootDevice[n - 1] = DeviceType_Floppy; 1166 1157 } 1167 else if (strcmp(a rgv[i], "dvd") == 0)1158 else if (strcmp(a->argv[i], "dvd") == 0) 1168 1159 { 1169 1160 bootDevice[n - 1] = DeviceType_DVD; 1170 1161 } 1171 else if (strcmp(a rgv[i], "disk") == 0)1162 else if (strcmp(a->argv[i], "disk") == 0) 1172 1163 { 1173 1164 bootDevice[n - 1] = DeviceType_HardDisk; 1174 1165 } 1175 else if (strcmp(a rgv[i], "net") == 0)1166 else if (strcmp(a->argv[i], "net") == 0) 1176 1167 { 1177 1168 bootDevice[n - 1] = DeviceType_Network; 1178 1169 } 1179 1170 else 1180 return errorArgument("Invalid boot device '%s'", a rgv[i]);1171 return errorArgument("Invalid boot device '%s'", a->argv[i]); 1181 1172 1182 1173 bootDeviceChanged[n - 1] = true; 1183 1174 } 1184 else if (strcmp(a rgv[i], "-hda") == 0)1185 { 1186 if (a rgc <= i + 1)1187 return errorArgument("Missing argument to '%s'", a rgv[i]);1188 i++; 1189 hdds[0] = a rgv[i];1190 } 1191 else if (strcmp(a rgv[i], "-hdb") == 0)1192 { 1193 if (a rgc <= i + 1)1194 return errorArgument("Missing argument to '%s'", a rgv[i]);1195 i++; 1196 hdds[1] = a rgv[i];1197 } 1198 else if (strcmp(a rgv[i], "-hdd") == 0)1199 { 1200 if (a rgc <= i + 1)1201 return errorArgument("Missing argument to '%s'", a rgv[i]);1202 i++; 1203 hdds[2] = a rgv[i];1204 } 1205 else if (strcmp(a rgv[i], "-dvd") == 0)1206 { 1207 if (a rgc <= i + 1)1208 return errorArgument("Missing argument to '%s'", a rgv[i]);1209 i++; 1210 dvd = a rgv[i];1211 } 1212 else if (strcmp(a rgv[i], "-dvdpassthrough") == 0)1213 { 1214 if (a rgc <= i + 1)1215 return errorArgument("Missing argument to '%s'", a rgv[i]);1216 i++; 1217 dvdpassthrough = a rgv[i];1218 } 1219 else if (strcmp(a rgv[i], "-idecontroller") == 0)1220 { 1221 if (a rgc <= i + 1)1222 return errorArgument("Missing argument to '%s'", a rgv[i]);1223 i++; 1224 idecontroller = a rgv[i];1225 } 1226 else if (strcmp(a rgv[i], "-floppy") == 0)1227 { 1228 if (a rgc <= i + 1)1229 return errorArgument("Missing argument to '%s'", a rgv[i]);1230 i++; 1231 floppy = a rgv[i];1232 } 1233 else if (strcmp(a rgv[i], "-audio") == 0)1234 { 1235 if (a rgc <= i + 1)1236 return errorArgument("Missing argument to '%s'", a rgv[i]);1237 i++; 1238 audio = a rgv[i];1239 } 1240 else if (strcmp(a rgv[i], "-audiocontroller") == 0)1241 { 1242 if (a rgc <= i + 1)1243 return errorArgument("Missing argument to '%s'", a rgv[i]);1244 i++; 1245 audiocontroller = a rgv[i];1246 } 1247 else if (strcmp(a rgv[i], "-clipboard") == 0)1248 { 1249 if (a rgc <= i + 1)1250 return errorArgument("Missing argument to '%s'", a rgv[i]);1251 i++; 1252 clipboard = a rgv[i];1253 } 1254 else if (strncmp(a rgv[i], "-cableconnected", 15) == 0)1255 { 1256 unsigned n = parseNum(&a rgv[i][15], NetworkAdapterCount, "NIC");1175 else if (strcmp(a->argv[i], "-hda") == 0) 1176 { 1177 if (a->argc <= i + 1) 1178 return errorArgument("Missing argument to '%s'", a->argv[i]); 1179 i++; 1180 hdds[0] = a->argv[i]; 1181 } 1182 else if (strcmp(a->argv[i], "-hdb") == 0) 1183 { 1184 if (a->argc <= i + 1) 1185 return errorArgument("Missing argument to '%s'", a->argv[i]); 1186 i++; 1187 hdds[1] = a->argv[i]; 1188 } 1189 else if (strcmp(a->argv[i], "-hdd") == 0) 1190 { 1191 if (a->argc <= i + 1) 1192 return errorArgument("Missing argument to '%s'", a->argv[i]); 1193 i++; 1194 hdds[2] = a->argv[i]; 1195 } 1196 else if (strcmp(a->argv[i], "-dvd") == 0) 1197 { 1198 if (a->argc <= i + 1) 1199 return errorArgument("Missing argument to '%s'", a->argv[i]); 1200 i++; 1201 dvd = a->argv[i]; 1202 } 1203 else if (strcmp(a->argv[i], "-dvdpassthrough") == 0) 1204 { 1205 if (a->argc <= i + 1) 1206 return errorArgument("Missing argument to '%s'", a->argv[i]); 1207 i++; 1208 dvdpassthrough = a->argv[i]; 1209 } 1210 else if (strcmp(a->argv[i], "-idecontroller") == 0) 1211 { 1212 if (a->argc <= i + 1) 1213 return errorArgument("Missing argument to '%s'", a->argv[i]); 1214 i++; 1215 idecontroller = a->argv[i]; 1216 } 1217 else if (strcmp(a->argv[i], "-floppy") == 0) 1218 { 1219 if (a->argc <= i + 1) 1220 return errorArgument("Missing argument to '%s'", a->argv[i]); 1221 i++; 1222 floppy = a->argv[i]; 1223 } 1224 else if (strcmp(a->argv[i], "-audio") == 0) 1225 { 1226 if (a->argc <= i + 1) 1227 return errorArgument("Missing argument to '%s'", a->argv[i]); 1228 i++; 1229 audio = a->argv[i]; 1230 } 1231 else if (strcmp(a->argv[i], "-audiocontroller") == 0) 1232 { 1233 if (a->argc <= i + 1) 1234 return errorArgument("Missing argument to '%s'", a->argv[i]); 1235 i++; 1236 audiocontroller = a->argv[i]; 1237 } 1238 else if (strcmp(a->argv[i], "-clipboard") == 0) 1239 { 1240 if (a->argc <= i + 1) 1241 return errorArgument("Missing argument to '%s'", a->argv[i]); 1242 i++; 1243 clipboard = a->argv[i]; 1244 } 1245 else if (strncmp(a->argv[i], "-cableconnected", 15) == 0) 1246 { 1247 unsigned n = parseNum(&a->argv[i][15], NetworkAdapterCount, "NIC"); 1257 1248 if (!n) 1258 1249 return 1; 1259 1250 1260 if (a rgc <= i + 1)1261 return errorArgument("Missing argument to '%s'", a rgv[i]);1262 1263 cableconnected[n - 1] = a rgv[i + 1];1251 if (a->argc <= i + 1) 1252 return errorArgument("Missing argument to '%s'", a->argv[i]); 1253 1254 cableconnected[n - 1] = a->argv[i + 1]; 1264 1255 i++; 1265 1256 } 1266 1257 /* watch for the right order of these -nic* comparisons! */ 1267 else if (strncmp(a rgv[i], "-nictracefile", 13) == 0)1268 { 1269 unsigned n = parseNum(&a rgv[i][13], NetworkAdapterCount, "NIC");1258 else if (strncmp(a->argv[i], "-nictracefile", 13) == 0) 1259 { 1260 unsigned n = parseNum(&a->argv[i][13], NetworkAdapterCount, "NIC"); 1270 1261 if (!n) 1271 1262 return 1; 1272 if (a rgc <= i + 1)1273 { 1274 return errorArgument("Missing argument to '%s'", a rgv[i]);1275 } 1276 nictracefile[n - 1] = a rgv[i + 1];1277 i++; 1278 } 1279 else if (strncmp(a rgv[i], "-nictrace", 9) == 0)1280 { 1281 unsigned n = parseNum(&a rgv[i][9], NetworkAdapterCount, "NIC");1263 if (a->argc <= i + 1) 1264 { 1265 return errorArgument("Missing argument to '%s'", a->argv[i]); 1266 } 1267 nictracefile[n - 1] = a->argv[i + 1]; 1268 i++; 1269 } 1270 else if (strncmp(a->argv[i], "-nictrace", 9) == 0) 1271 { 1272 unsigned n = parseNum(&a->argv[i][9], NetworkAdapterCount, "NIC"); 1282 1273 if (!n) 1283 1274 return 1; 1284 if (a rgc <= i + 1)1285 return errorArgument("Missing argument to '%s'", a rgv[i]);1286 nictrace[n - 1] = a rgv[i + 1];1287 i++; 1288 } 1289 else if (strncmp(a rgv[i], "-nictype", 8) == 0)1290 { 1291 unsigned n = parseNum(&a rgv[i][8], NetworkAdapterCount, "NIC");1275 if (a->argc <= i + 1) 1276 return errorArgument("Missing argument to '%s'", a->argv[i]); 1277 nictrace[n - 1] = a->argv[i + 1]; 1278 i++; 1279 } 1280 else if (strncmp(a->argv[i], "-nictype", 8) == 0) 1281 { 1282 unsigned n = parseNum(&a->argv[i][8], NetworkAdapterCount, "NIC"); 1292 1283 if (!n) 1293 1284 return 1; 1294 if (a rgc <= i + 1)1295 return errorArgument("Missing argument to '%s'", a rgv[i]);1296 nictype[n - 1] = a rgv[i + 1];1297 i++; 1298 } 1299 else if (strncmp(a rgv[i], "-nicspeed", 9) == 0)1300 { 1301 unsigned n = parseNum(&a rgv[i][9], NetworkAdapterCount, "NIC");1285 if (a->argc <= i + 1) 1286 return errorArgument("Missing argument to '%s'", a->argv[i]); 1287 nictype[n - 1] = a->argv[i + 1]; 1288 i++; 1289 } 1290 else if (strncmp(a->argv[i], "-nicspeed", 9) == 0) 1291 { 1292 unsigned n = parseNum(&a->argv[i][9], NetworkAdapterCount, "NIC"); 1302 1293 if (!n) 1303 1294 return 1; 1304 if (a rgc <= i + 1)1305 return errorArgument("Missing argument to '%s'", a rgv[i]);1306 nicspeed[n - 1] = a rgv[i + 1];1307 i++; 1308 } 1309 else if (strncmp(a rgv[i], "-nic", 4) == 0)1310 { 1311 unsigned n = parseNum(&a rgv[i][4], NetworkAdapterCount, "NIC");1295 if (a->argc <= i + 1) 1296 return errorArgument("Missing argument to '%s'", a->argv[i]); 1297 nicspeed[n - 1] = a->argv[i + 1]; 1298 i++; 1299 } 1300 else if (strncmp(a->argv[i], "-nic", 4) == 0) 1301 { 1302 unsigned n = parseNum(&a->argv[i][4], NetworkAdapterCount, "NIC"); 1312 1303 if (!n) 1313 1304 return 1; 1314 if (a rgc <= i + 1)1315 return errorArgument("Missing argument to '%s'", a rgv[i]);1316 nics[n - 1] = a rgv[i + 1];1317 i++; 1318 } 1319 else if (strncmp(a rgv[i], "-hostifdev", 10) == 0)1320 { 1321 unsigned n = parseNum(&a rgv[i][10], NetworkAdapterCount, "NIC");1305 if (a->argc <= i + 1) 1306 return errorArgument("Missing argument to '%s'", a->argv[i]); 1307 nics[n - 1] = a->argv[i + 1]; 1308 i++; 1309 } 1310 else if (strncmp(a->argv[i], "-hostifdev", 10) == 0) 1311 { 1312 unsigned n = parseNum(&a->argv[i][10], NetworkAdapterCount, "NIC"); 1322 1313 if (!n) 1323 1314 return 1; 1324 if (a rgc <= i + 1)1325 return errorArgument("Missing argument to '%s'", a rgv[i]);1326 hostifdev[n - 1] = a rgv[i + 1];1327 i++; 1328 } 1329 else if (strncmp(a rgv[i], "-intnet", 7) == 0)1330 { 1331 unsigned n = parseNum(&a rgv[i][7], NetworkAdapterCount, "NIC");1315 if (a->argc <= i + 1) 1316 return errorArgument("Missing argument to '%s'", a->argv[i]); 1317 hostifdev[n - 1] = a->argv[i + 1]; 1318 i++; 1319 } 1320 else if (strncmp(a->argv[i], "-intnet", 7) == 0) 1321 { 1322 unsigned n = parseNum(&a->argv[i][7], NetworkAdapterCount, "NIC"); 1332 1323 if (!n) 1333 1324 return 1; 1334 if (a rgc <= i + 1)1335 return errorArgument("Missing argument to '%s'", a rgv[i]);1336 intnet[n - 1] = a rgv[i + 1];1337 i++; 1338 } 1339 else if (strncmp(a rgv[i], "-natnet", 7) == 0)1340 { 1341 unsigned n = parseNum(&a rgv[i][7], NetworkAdapterCount, "NIC");1325 if (a->argc <= i + 1) 1326 return errorArgument("Missing argument to '%s'", a->argv[i]); 1327 intnet[n - 1] = a->argv[i + 1]; 1328 i++; 1329 } 1330 else if (strncmp(a->argv[i], "-natnet", 7) == 0) 1331 { 1332 unsigned n = parseNum(&a->argv[i][7], NetworkAdapterCount, "NIC"); 1342 1333 if (!n) 1343 1334 return 1; 1344 if (a rgc <= i + 1)1345 return errorArgument("Missing argument to '%s'", a rgv[i]);1346 1347 if (!strcmp(a rgv[i + 1], "default"))1335 if (a->argc <= i + 1) 1336 return errorArgument("Missing argument to '%s'", a->argv[i]); 1337 1338 if (!strcmp(a->argv[i + 1], "default")) 1348 1339 natnet[n - 1] = ""; 1349 1340 else … … 1351 1342 RTIPV4ADDR Network; 1352 1343 RTIPV4ADDR Netmask; 1353 int rc = RTCidrStrToIPv4(a rgv[i + 1], &Network, &Netmask);1344 int rc = RTCidrStrToIPv4(a->argv[i + 1], &Network, &Netmask); 1354 1345 if (RT_FAILURE(rc)) 1355 return errorArgument("Invalid IPv4 network '%s' specified -- CIDR notation expected.\n", a rgv[i + 1]);1346 return errorArgument("Invalid IPv4 network '%s' specified -- CIDR notation expected.\n", a->argv[i + 1]); 1356 1347 if (Netmask & 0x1f) 1357 1348 return errorArgument("Prefix length of the NAT network must be less than 28.\n"); 1358 natnet[n - 1] = a rgv[i + 1];1359 } 1360 i++; 1361 } 1362 else if (strncmp(a rgv[i], "-macaddress", 11) == 0)1363 { 1364 unsigned n = parseNum(&a rgv[i][11], NetworkAdapterCount, "NIC");1349 natnet[n - 1] = a->argv[i + 1]; 1350 } 1351 i++; 1352 } 1353 else if (strncmp(a->argv[i], "-macaddress", 11) == 0) 1354 { 1355 unsigned n = parseNum(&a->argv[i][11], NetworkAdapterCount, "NIC"); 1365 1356 if (!n) 1366 1357 return 1; 1367 if (a rgc <= i + 1)1368 return errorArgument("Missing argument to '%s'", a rgv[i]);1369 macs[n - 1] = a rgv[i + 1];1358 if (a->argc <= i + 1) 1359 return errorArgument("Missing argument to '%s'", a->argv[i]); 1360 macs[n - 1] = a->argv[i + 1]; 1370 1361 i++; 1371 1362 } 1372 1363 #ifdef VBOX_WITH_VRDP 1373 else if (strcmp(a rgv[i], "-vrdp") == 0)1374 { 1375 if (a rgc <= i + 1)1376 return errorArgument("Missing argument to '%s'", a rgv[i]);1377 i++; 1378 vrdp = a rgv[i];1379 } 1380 else if (strcmp(a rgv[i], "-vrdpport") == 0)1381 { 1382 if (a rgc <= i + 1)1383 return errorArgument("Missing argument to '%s'", a rgv[i]);1384 i++; 1385 if (strcmp(a rgv[i], "default") == 0)1364 else if (strcmp(a->argv[i], "-vrdp") == 0) 1365 { 1366 if (a->argc <= i + 1) 1367 return errorArgument("Missing argument to '%s'", a->argv[i]); 1368 i++; 1369 vrdp = a->argv[i]; 1370 } 1371 else if (strcmp(a->argv[i], "-vrdpport") == 0) 1372 { 1373 if (a->argc <= i + 1) 1374 return errorArgument("Missing argument to '%s'", a->argv[i]); 1375 i++; 1376 if (strcmp(a->argv[i], "default") == 0) 1386 1377 vrdpport = 0; 1387 1378 else 1388 vrdpport = RTStrToUInt16(a rgv[i]);1389 } 1390 else if (strcmp(a rgv[i], "-vrdpaddress") == 0)1391 { 1392 if (a rgc <= i + 1)1393 return errorArgument("Missing argument to '%s'", a rgv[i]);1394 i++; 1395 vrdpaddress = a rgv[i];1396 } 1397 else if (strcmp(a rgv[i], "-vrdpauthtype") == 0)1398 { 1399 if (a rgc <= i + 1)1400 return errorArgument("Missing argument to '%s'", a rgv[i]);1401 i++; 1402 vrdpauthtype = a rgv[i];1403 } 1404 else if (strcmp(a rgv[i], "-vrdpmulticon") == 0)1405 { 1406 if (a rgc <= i + 1)1407 return errorArgument("Missing argument to '%s'", a rgv[i]);1408 i++; 1409 vrdpmulticon = a rgv[i];1410 } 1411 else if (strcmp(a rgv[i], "-vrdpreusecon") == 0)1412 { 1413 if (a rgc <= i + 1)1414 return errorArgument("Missing argument to '%s'", a rgv[i]);1415 i++; 1416 vrdpreusecon = a rgv[i];1379 vrdpport = RTStrToUInt16(a->argv[i]); 1380 } 1381 else if (strcmp(a->argv[i], "-vrdpaddress") == 0) 1382 { 1383 if (a->argc <= i + 1) 1384 return errorArgument("Missing argument to '%s'", a->argv[i]); 1385 i++; 1386 vrdpaddress = a->argv[i]; 1387 } 1388 else if (strcmp(a->argv[i], "-vrdpauthtype") == 0) 1389 { 1390 if (a->argc <= i + 1) 1391 return errorArgument("Missing argument to '%s'", a->argv[i]); 1392 i++; 1393 vrdpauthtype = a->argv[i]; 1394 } 1395 else if (strcmp(a->argv[i], "-vrdpmulticon") == 0) 1396 { 1397 if (a->argc <= i + 1) 1398 return errorArgument("Missing argument to '%s'", a->argv[i]); 1399 i++; 1400 vrdpmulticon = a->argv[i]; 1401 } 1402 else if (strcmp(a->argv[i], "-vrdpreusecon") == 0) 1403 { 1404 if (a->argc <= i + 1) 1405 return errorArgument("Missing argument to '%s'", a->argv[i]); 1406 i++; 1407 vrdpreusecon = a->argv[i]; 1417 1408 } 1418 1409 #endif /* VBOX_WITH_VRDP */ 1419 else if (strcmp(a rgv[i], "-usb") == 0)1420 { 1421 if (a rgc <= i + 1)1422 return errorArgument("Missing argument to '%s'", a rgv[i]);1423 i++; 1424 if (strcmp(a rgv[i], "on") == 0 || strcmp(argv[i], "enable") == 0)1410 else if (strcmp(a->argv[i], "-usb") == 0) 1411 { 1412 if (a->argc <= i + 1) 1413 return errorArgument("Missing argument to '%s'", a->argv[i]); 1414 i++; 1415 if (strcmp(a->argv[i], "on") == 0 || strcmp(a->argv[i], "enable") == 0) 1425 1416 fUsbEnabled = 1; 1426 else if (strcmp(a rgv[i], "off") == 0 || strcmp(argv[i], "disable") == 0)1417 else if (strcmp(a->argv[i], "off") == 0 || strcmp(a->argv[i], "disable") == 0) 1427 1418 fUsbEnabled = 0; 1428 1419 else 1429 return errorArgument("Invalid -usb argument '%s'", a rgv[i]);1430 } 1431 else if (strcmp(a rgv[i], "-usbehci") == 0)1432 { 1433 if (a rgc <= i + 1)1434 return errorArgument("Missing argument to '%s'", a rgv[i]);1435 i++; 1436 if (strcmp(a rgv[i], "on") == 0 || strcmp(argv[i], "enable") == 0)1420 return errorArgument("Invalid -usb argument '%s'", a->argv[i]); 1421 } 1422 else if (strcmp(a->argv[i], "-usbehci") == 0) 1423 { 1424 if (a->argc <= i + 1) 1425 return errorArgument("Missing argument to '%s'", a->argv[i]); 1426 i++; 1427 if (strcmp(a->argv[i], "on") == 0 || strcmp(a->argv[i], "enable") == 0) 1437 1428 fUsbEhciEnabled = 1; 1438 else if (strcmp(a rgv[i], "off") == 0 || strcmp(argv[i], "disable") == 0)1429 else if (strcmp(a->argv[i], "off") == 0 || strcmp(a->argv[i], "disable") == 0) 1439 1430 fUsbEhciEnabled = 0; 1440 1431 else 1441 return errorArgument("Invalid -usbehci argument '%s'", a rgv[i]);1442 } 1443 else if (strcmp(a rgv[i], "-snapshotfolder") == 0)1444 { 1445 if (a rgc <= i + 1)1446 return errorArgument("Missing argument to '%s'", a rgv[i]);1447 i++; 1448 snapshotFolder = a rgv[i];1449 } 1450 else if (strncmp(a rgv[i], "-uartmode", 9) == 0)1451 { 1452 unsigned n = parseNum(&a rgv[i][9], SerialPortCount, "UART");1432 return errorArgument("Invalid -usbehci argument '%s'", a->argv[i]); 1433 } 1434 else if (strcmp(a->argv[i], "-snapshotfolder") == 0) 1435 { 1436 if (a->argc <= i + 1) 1437 return errorArgument("Missing argument to '%s'", a->argv[i]); 1438 i++; 1439 snapshotFolder = a->argv[i]; 1440 } 1441 else if (strncmp(a->argv[i], "-uartmode", 9) == 0) 1442 { 1443 unsigned n = parseNum(&a->argv[i][9], SerialPortCount, "UART"); 1453 1444 if (!n) 1454 1445 return 1; 1455 1446 i++; 1456 if (strcmp(a rgv[i], "disconnected") == 0)1457 { 1458 uarts_mode[n - 1] = a rgv[i];1447 if (strcmp(a->argv[i], "disconnected") == 0) 1448 { 1449 uarts_mode[n - 1] = a->argv[i]; 1459 1450 } 1460 1451 else 1461 1452 { 1462 if (strcmp(a rgv[i], "server") == 0 || strcmp(argv[i], "client") == 0)1463 { 1464 uarts_mode[n - 1] = a rgv[i];1453 if (strcmp(a->argv[i], "server") == 0 || strcmp(a->argv[i], "client") == 0) 1454 { 1455 uarts_mode[n - 1] = a->argv[i]; 1465 1456 i++; 1466 1457 #ifdef RT_OS_WINDOWS 1467 if (strncmp(a rgv[i], "\\\\.\\pipe\\", 9))1458 if (strncmp(a->argv[i], "\\\\.\\pipe\\", 9)) 1468 1459 return errorArgument("Uart pipe must start with \\\\.\\pipe\\"); 1469 1460 #endif … … 1473 1464 uarts_mode[n - 1] = (char*)"device"; 1474 1465 } 1475 if (a rgc <= i)1466 if (a->argc <= i) 1476 1467 return errorArgument("Missing argument to -uartmode"); 1477 uarts_path[n - 1] = a rgv[i];1478 } 1479 } 1480 else if (strncmp(a rgv[i], "-uart", 5) == 0)1481 { 1482 unsigned n = parseNum(&a rgv[i][5], SerialPortCount, "UART");1468 uarts_path[n - 1] = a->argv[i]; 1469 } 1470 } 1471 else if (strncmp(a->argv[i], "-uart", 5) == 0) 1472 { 1473 unsigned n = parseNum(&a->argv[i][5], SerialPortCount, "UART"); 1483 1474 if (!n) 1484 1475 return 1; 1485 if (a rgc <= i + 1)1486 return errorArgument("Missing argument to '%s'", a rgv[i]);1487 i++; 1488 if (strcmp(a rgv[i], "off") == 0 || strcmp(argv[i], "disable") == 0)1476 if (a->argc <= i + 1) 1477 return errorArgument("Missing argument to '%s'", a->argv[i]); 1478 i++; 1479 if (strcmp(a->argv[i], "off") == 0 || strcmp(a->argv[i], "disable") == 0) 1489 1480 { 1490 1481 uarts_base[n - 1] = (ULONG)-1; … … 1492 1483 else 1493 1484 { 1494 if (a rgc <= i + 1)1495 return errorArgument("Missing argument to '%s'", a rgv[i-1]);1485 if (a->argc <= i + 1) 1486 return errorArgument("Missing argument to '%s'", a->argv[i-1]); 1496 1487 uint32_t uVal; 1497 1488 int vrc; 1498 vrc = RTStrToUInt32Ex(a rgv[i], NULL, 0, &uVal);1489 vrc = RTStrToUInt32Ex(a->argv[i], NULL, 0, &uVal); 1499 1490 if (vrc != VINF_SUCCESS || uVal == 0) 1500 return errorArgument("Error parsing UART I/O base '%s'", a rgv[i]);1491 return errorArgument("Error parsing UART I/O base '%s'", a->argv[i]); 1501 1492 uarts_base[n - 1] = uVal; 1502 1493 i++; 1503 vrc = RTStrToUInt32Ex(a rgv[i], NULL, 0, &uVal);1494 vrc = RTStrToUInt32Ex(a->argv[i], NULL, 0, &uVal); 1504 1495 if (vrc != VINF_SUCCESS) 1505 return errorArgument("Error parsing UART IRQ '%s'", a rgv[i]);1496 return errorArgument("Error parsing UART IRQ '%s'", a->argv[i]); 1506 1497 uarts_irq[n - 1] = uVal; 1507 1498 } 1508 1499 } 1509 1500 #ifdef VBOX_WITH_MEM_BALLOONING 1510 else if (strncmp(a rgv[i], "-guestmemoryballoon", 19) == 0)1511 { 1512 if (a rgc <= i + 1)1513 return errorArgument("Missing argument to '%s'", a rgv[i]);1501 else if (strncmp(a->argv[i], "-guestmemoryballoon", 19) == 0) 1502 { 1503 if (a->argc <= i + 1) 1504 return errorArgument("Missing argument to '%s'", a->argv[i]); 1514 1505 i++; 1515 1506 uint32_t uVal; 1516 1507 int vrc; 1517 vrc = RTStrToUInt32Ex(a rgv[i], NULL, 0, &uVal);1508 vrc = RTStrToUInt32Ex(a->argv[i], NULL, 0, &uVal); 1518 1509 if (vrc != VINF_SUCCESS) 1519 return errorArgument("Error parsing guest memory balloon size '%s'", a rgv[i]);1510 return errorArgument("Error parsing guest memory balloon size '%s'", a->argv[i]); 1520 1511 guestMemBalloonSize = uVal; 1521 1512 } 1522 1513 #endif 1523 else if (strncmp(a rgv[i], "-gueststatisticsinterval", 24) == 0)1524 { 1525 if (a rgc <= i + 1)1526 return errorArgument("Missing argument to '%s'", a rgv[i]);1514 else if (strncmp(a->argv[i], "-gueststatisticsinterval", 24) == 0) 1515 { 1516 if (a->argc <= i + 1) 1517 return errorArgument("Missing argument to '%s'", a->argv[i]); 1527 1518 i++; 1528 1519 uint32_t uVal; 1529 1520 int vrc; 1530 vrc = RTStrToUInt32Ex(a rgv[i], NULL, 0, &uVal);1521 vrc = RTStrToUInt32Ex(a->argv[i], NULL, 0, &uVal); 1531 1522 if (vrc != VINF_SUCCESS) 1532 return errorArgument("Error parsing guest statistics interval '%s'", a rgv[i]);1523 return errorArgument("Error parsing guest statistics interval '%s'", a->argv[i]); 1533 1524 guestStatInterval = uVal; 1534 1525 } 1535 else if (strcmp(a rgv[i], "-sata") == 0)1536 { 1537 if (a rgc <= i + 1)1538 return errorArgument("Missing argument to '%s'", a rgv[i]);1539 i++; 1540 if (strcmp(a rgv[i], "on") == 0 || strcmp(argv[i], "enable") == 0)1526 else if (strcmp(a->argv[i], "-sata") == 0) 1527 { 1528 if (a->argc <= i + 1) 1529 return errorArgument("Missing argument to '%s'", a->argv[i]); 1530 i++; 1531 if (strcmp(a->argv[i], "on") == 0 || strcmp(a->argv[i], "enable") == 0) 1541 1532 fSataEnabled = 1; 1542 else if (strcmp(a rgv[i], "off") == 0 || strcmp(argv[i], "disable") == 0)1533 else if (strcmp(a->argv[i], "off") == 0 || strcmp(a->argv[i], "disable") == 0) 1543 1534 fSataEnabled = 0; 1544 1535 else 1545 return errorArgument("Invalid -usb argument '%s'", a rgv[i]);1546 } 1547 else if (strcmp(a rgv[i], "-sataportcount") == 0)1536 return errorArgument("Invalid -usb argument '%s'", a->argv[i]); 1537 } 1538 else if (strcmp(a->argv[i], "-sataportcount") == 0) 1548 1539 { 1549 1540 unsigned n; 1550 1541 1551 if (a rgc <= i + 1)1552 return errorArgument("Missing arguments to '%s'", a rgv[i]);1553 i++; 1554 1555 n = parseNum(a rgv[i], 30, "SATA");1542 if (a->argc <= i + 1) 1543 return errorArgument("Missing arguments to '%s'", a->argv[i]); 1544 i++; 1545 1546 n = parseNum(a->argv[i], 30, "SATA"); 1556 1547 if (!n) 1557 1548 return 1; 1558 1549 sataPortCount = n; 1559 1550 } 1560 else if (strncmp(a rgv[i], "-sataport", 9) == 0)1561 { 1562 unsigned n = parseNum(&a rgv[i][9], 30, "SATA");1551 else if (strncmp(a->argv[i], "-sataport", 9) == 0) 1552 { 1553 unsigned n = parseNum(&a->argv[i][9], 30, "SATA"); 1563 1554 if (!n) 1564 1555 return 1; 1565 if (a rgc <= i + 1)1566 return errorArgument("Missing argument to '%s'", a rgv[i]);1567 i++; 1568 hdds[n-1+4] = a rgv[i];1569 } 1570 else if (strncmp(a rgv[i], "-sataideemulation", 17) == 0)1556 if (a->argc <= i + 1) 1557 return errorArgument("Missing argument to '%s'", a->argv[i]); 1558 i++; 1559 hdds[n-1+4] = a->argv[i]; 1560 } 1561 else if (strncmp(a->argv[i], "-sataideemulation", 17) == 0) 1571 1562 { 1572 1563 unsigned bootDevicePos = 0; 1573 1564 unsigned n; 1574 1565 1575 bootDevicePos = parseNum(&a rgv[i][17], 4, "SATA");1566 bootDevicePos = parseNum(&a->argv[i][17], 4, "SATA"); 1576 1567 if (!bootDevicePos) 1577 1568 return 1; 1578 1569 bootDevicePos--; 1579 1570 1580 if (a rgc <= i + 1)1581 return errorArgument("Missing arguments to '%s'", a rgv[i]);1582 i++; 1583 1584 n = parseNum(a rgv[i], 30, "SATA");1571 if (a->argc <= i + 1) 1572 return errorArgument("Missing arguments to '%s'", a->argv[i]); 1573 i++; 1574 1575 n = parseNum(a->argv[i], 30, "SATA"); 1585 1576 if (!n) 1586 1577 return 1; … … 1589 1580 } 1590 1581 else 1591 return errorSyntax(USAGE_MODIFYVM, "Invalid parameter '%s'", Utf8Str(a rgv[i]).raw());1582 return errorSyntax(USAGE_MODIFYVM, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw()); 1592 1583 } 1593 1584 1594 1585 /* try to find the given machine */ 1595 1586 ComPtr <IMachine> machine; 1596 Guid uuid (a rgv[0]);1587 Guid uuid (a->argv[0]); 1597 1588 if (!uuid.isEmpty()) 1598 1589 { 1599 CHECK_ERROR ( virtualBox, GetMachine (uuid, machine.asOutParam()));1590 CHECK_ERROR (a->virtualBox, GetMachine (uuid, machine.asOutParam())); 1600 1591 } 1601 1592 else 1602 1593 { 1603 CHECK_ERROR ( virtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));1594 CHECK_ERROR (a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 1604 1595 if (SUCCEEDED (rc)) 1605 1596 machine->COMGETTER(Id)(uuid.asOutParam()); … … 1609 1600 1610 1601 /* open a session for the VM */ 1611 CHECK_ERROR_RET ( virtualBox, OpenSession(session, uuid), 1);1602 CHECK_ERROR_RET (a->virtualBox, OpenSession(a->session, uuid), 1); 1612 1603 1613 1604 do 1614 1605 { 1615 1606 /* get the mutable session machine */ 1616 session->COMGETTER(Machine)(machine.asOutParam());1607 a->session->COMGETTER(Machine)(machine.asOutParam()); 1617 1608 1618 1609 ComPtr <IBIOSSettings> biosSettings; … … 1624 1615 { 1625 1616 ComPtr<IGuestOSType> guestOSType; 1626 CHECK_ERROR( virtualBox, GetGuestOSType(ostype, guestOSType.asOutParam()));1617 CHECK_ERROR(a->virtualBox, GetGuestOSType(ostype, guestOSType.asOutParam())); 1627 1618 if (SUCCEEDED(rc) && guestOSType) 1628 1619 { … … 1863 1854 Guid uuid(hdds[0]); 1864 1855 ComPtr<IHardDisk2> hardDisk; 1865 rc = virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam());1856 rc = a->virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam()); 1866 1857 /* not successful? Then it must be a filename */ 1867 1858 if (!hardDisk) 1868 1859 { 1869 CHECK_ERROR( virtualBox, FindHardDisk2(Bstr(hdds[0]), hardDisk.asOutParam()));1860 CHECK_ERROR(a->virtualBox, FindHardDisk2(Bstr(hdds[0]), hardDisk.asOutParam())); 1870 1861 if (FAILED(rc)) 1871 1862 { 1872 1863 /* open the new hard disk object */ 1873 CHECK_ERROR( virtualBox, OpenHardDisk2(Bstr(hdds[0]), hardDisk.asOutParam()));1864 CHECK_ERROR(a->virtualBox, OpenHardDisk2(Bstr(hdds[0]), hardDisk.asOutParam())); 1874 1865 } 1875 1866 } … … 1896 1887 Guid uuid(hdds[1]); 1897 1888 ComPtr<IHardDisk2> hardDisk; 1898 rc = virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam());1889 rc = a->virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam()); 1899 1890 /* not successful? Then it must be a filename */ 1900 1891 if (!hardDisk) 1901 1892 { 1902 CHECK_ERROR( virtualBox, FindHardDisk2(Bstr(hdds[1]), hardDisk.asOutParam()));1893 CHECK_ERROR(a->virtualBox, FindHardDisk2(Bstr(hdds[1]), hardDisk.asOutParam())); 1903 1894 if (FAILED(rc)) 1904 1895 { 1905 1896 /* open the new hard disk object */ 1906 CHECK_ERROR( virtualBox, OpenHardDisk2(Bstr(hdds[1]), hardDisk.asOutParam()));1897 CHECK_ERROR(a->virtualBox, OpenHardDisk2(Bstr(hdds[1]), hardDisk.asOutParam())); 1907 1898 } 1908 1899 } … … 1929 1920 Guid uuid(hdds[2]); 1930 1921 ComPtr<IHardDisk2> hardDisk; 1931 rc = virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam());1922 rc = a->virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam()); 1932 1923 /* not successful? Then it must be a filename */ 1933 1924 if (!hardDisk) 1934 1925 { 1935 CHECK_ERROR( virtualBox, FindHardDisk2(Bstr(hdds[2]), hardDisk.asOutParam()));1926 CHECK_ERROR(a->virtualBox, FindHardDisk2(Bstr(hdds[2]), hardDisk.asOutParam())); 1936 1927 if (FAILED(rc)) 1937 1928 { 1938 1929 /* open the new hard disk object */ 1939 CHECK_ERROR( virtualBox, OpenHardDisk2(Bstr(hdds[2]), hardDisk.asOutParam()));1930 CHECK_ERROR(a->virtualBox, OpenHardDisk2(Bstr(hdds[2]), hardDisk.asOutParam())); 1940 1931 } 1941 1932 } … … 1966 1957 { 1967 1958 ComPtr<IHost> host; 1968 CHECK_ERROR( virtualBox, COMGETTER(Host)(host.asOutParam()));1959 CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); 1969 1960 ComPtr<IHostDVDDriveCollection> hostDVDs; 1970 1961 CHECK_ERROR(host, COMGETTER(DVDDrives)(hostDVDs.asOutParam())); … … 1996 1987 Guid uuid(dvd); 1997 1988 ComPtr<IDVDImage2> dvdImage; 1998 rc = virtualBox->GetDVDImage(uuid, dvdImage.asOutParam());1989 rc = a->virtualBox->GetDVDImage(uuid, dvdImage.asOutParam()); 1999 1990 if (FAILED(rc) || !dvdImage) 2000 1991 { 2001 1992 /* must be a filename, check if it's in the collection */ 2002 rc = virtualBox->FindDVDImage(Bstr(dvd), dvdImage.asOutParam());1993 rc = a->virtualBox->FindDVDImage(Bstr(dvd), dvdImage.asOutParam()); 2003 1994 /* not registered, do that on the fly */ 2004 1995 if (!dvdImage) 2005 1996 { 2006 1997 Guid emptyUUID; 2007 CHECK_ERROR( virtualBox, OpenDVDImage(Bstr(dvd), emptyUUID, dvdImage.asOutParam()));1998 CHECK_ERROR(a->virtualBox, OpenDVDImage(Bstr(dvd), emptyUUID, dvdImage.asOutParam())); 2008 1999 } 2009 2000 } … … 2069 2060 { 2070 2061 ComPtr<IHost> host; 2071 CHECK_ERROR( virtualBox, COMGETTER(Host)(host.asOutParam()));2062 CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); 2072 2063 ComPtr<IHostFloppyDriveCollection> hostFloppies; 2073 2064 CHECK_ERROR(host, COMGETTER(FloppyDrives)(hostFloppies.asOutParam())); … … 2087 2078 Guid uuid(floppy); 2088 2079 ComPtr<IFloppyImage2> floppyImage; 2089 rc = virtualBox->GetFloppyImage(uuid, floppyImage.asOutParam());2080 rc = a->virtualBox->GetFloppyImage(uuid, floppyImage.asOutParam()); 2090 2081 if (FAILED(rc) || !floppyImage) 2091 2082 { 2092 2083 /* must be a filename, check if it's in the collection */ 2093 rc = virtualBox->FindFloppyImage(Bstr(floppy), floppyImage.asOutParam());2084 rc = a->virtualBox->FindFloppyImage(Bstr(floppy), floppyImage.asOutParam()); 2094 2085 /* not registered, do that on the fly */ 2095 2086 if (!floppyImage) 2096 2087 { 2097 2088 Guid emptyUUID; 2098 CHECK_ERROR( virtualBox, OpenFloppyImage(Bstr(floppy), emptyUUID, floppyImage.asOutParam()));2089 CHECK_ERROR(a->virtualBox, OpenFloppyImage(Bstr(floppy), emptyUUID, floppyImage.asOutParam())); 2099 2090 } 2100 2091 } … … 2623 2614 Guid uuid(hdds[i]); 2624 2615 ComPtr<IHardDisk2> hardDisk; 2625 rc = virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam());2616 rc = a->virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam()); 2626 2617 /* not successful? Then it must be a filename */ 2627 2618 if (!hardDisk) 2628 2619 { 2629 CHECK_ERROR( virtualBox, FindHardDisk2(Bstr(hdds[i]), hardDisk.asOutParam()));2620 CHECK_ERROR(a->virtualBox, FindHardDisk2(Bstr(hdds[i]), hardDisk.asOutParam())); 2630 2621 if (FAILED(rc)) 2631 2622 { 2632 2623 /* open the new hard disk object */ 2633 CHECK_ERROR( virtualBox, OpenHardDisk2(Bstr(hdds[i]), hardDisk.asOutParam()));2624 CHECK_ERROR(a->virtualBox, OpenHardDisk2(Bstr(hdds[i]), hardDisk.asOutParam())); 2634 2625 } 2635 2626 } … … 2676 2667 2677 2668 /* it's important to always close sessions */ 2678 session->Close();2669 a->session->Close(); 2679 2670 2680 2671 return SUCCEEDED(rc) ? 0 : 1; … … 2686 2677 #endif 2687 2678 2688 static int handleStartVM(int argc, char *argv[], 2689 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 2679 static int handleStartVM(HandlerArg *a) 2690 2680 { 2691 2681 HRESULT rc; 2692 2682 2693 if (a rgc < 1)2683 if (a->argc < 1) 2694 2684 return errorSyntax(USAGE_STARTVM, "Not enough parameters"); 2695 2685 2696 2686 ComPtr<IMachine> machine; 2697 2687 /* assume it's a UUID */ 2698 rc = virtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());2688 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 2699 2689 if (FAILED(rc) || !machine) 2700 2690 { 2701 2691 /* must be a name */ 2702 CHECK_ERROR( virtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));2692 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 2703 2693 } 2704 2694 if (machine) … … 2710 2700 Bstr sessionType = "gui"; 2711 2701 /* has a session type been specified? */ 2712 if ((a rgc > 2) && (strcmp(argv[1], "-type") == 0))2713 { 2714 if (strcmp(a rgv[2], "gui") == 0)2702 if ((a->argc > 2) && (strcmp(a->argv[1], "-type") == 0)) 2703 { 2704 if (strcmp(a->argv[2], "gui") == 0) 2715 2705 { 2716 2706 sessionType = "gui"; 2717 2707 } 2718 else if (strcmp(a rgv[2], "vrdp") == 0)2708 else if (strcmp(a->argv[2], "vrdp") == 0) 2719 2709 { 2720 2710 sessionType = "vrdp"; 2721 2711 } 2722 else if (strcmp(a rgv[2], "capture") == 0)2712 else if (strcmp(a->argv[2], "capture") == 0) 2723 2713 { 2724 2714 sessionType = "capture"; 2725 2715 } 2726 2716 else 2727 return errorArgument("Invalid session type argument '%s'", a rgv[2]);2717 return errorArgument("Invalid session type argument '%s'", a->argv[2]); 2728 2718 } 2729 2719 … … 2738 2728 #endif 2739 2729 ComPtr<IProgress> progress; 2740 CHECK_ERROR_RET( virtualBox, OpenRemoteSession(session, uuid, sessionType,2741 env, progress.asOutParam()), rc);2730 CHECK_ERROR_RET(a->virtualBox, OpenRemoteSession(a->session, uuid, sessionType, 2731 env, progress.asOutParam()), rc); 2742 2732 RTPrintf("Waiting for the remote session to open...\n"); 2743 2733 CHECK_ERROR_RET(progress, WaitForCompletion (-1), 1); … … 2763 2753 2764 2754 /* it's important to always close sessions */ 2765 session->Close();2755 a->session->Close(); 2766 2756 2767 2757 return SUCCEEDED(rc) ? 0 : 1; 2768 2758 } 2769 2759 2770 static int handleControlVM(int argc, char *argv[], 2771 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 2760 static int handleControlVM(HandlerArg *a) 2772 2761 { 2773 2762 HRESULT rc; 2774 2763 2775 if (a rgc < 2)2764 if (a->argc < 2) 2776 2765 return errorSyntax(USAGE_CONTROLVM, "Not enough parameters"); 2777 2766 2778 2767 /* try to find the given machine */ 2779 2768 ComPtr <IMachine> machine; 2780 Guid uuid (a rgv[0]);2769 Guid uuid (a->argv[0]); 2781 2770 if (!uuid.isEmpty()) 2782 2771 { 2783 CHECK_ERROR ( virtualBox, GetMachine (uuid, machine.asOutParam()));2772 CHECK_ERROR (a->virtualBox, GetMachine (uuid, machine.asOutParam())); 2784 2773 } 2785 2774 else 2786 2775 { 2787 CHECK_ERROR ( virtualBox, FindMachine (Bstr(argv[0]), machine.asOutParam()));2776 CHECK_ERROR (a->virtualBox, FindMachine (Bstr(a->argv[0]), machine.asOutParam())); 2788 2777 if (SUCCEEDED (rc)) 2789 2778 machine->COMGETTER(Id) (uuid.asOutParam()); … … 2793 2782 2794 2783 /* open a session for the VM */ 2795 CHECK_ERROR_RET ( virtualBox, OpenExistingSession (session, uuid), 1);2784 CHECK_ERROR_RET (a->virtualBox, OpenExistingSession (a->session, uuid), 1); 2796 2785 2797 2786 do … … 2799 2788 /* get the associated console */ 2800 2789 ComPtr<IConsole> console; 2801 CHECK_ERROR_BREAK ( session, COMGETTER(Console)(console.asOutParam()));2790 CHECK_ERROR_BREAK (a->session, COMGETTER(Console)(console.asOutParam())); 2802 2791 /* ... and session machine */ 2803 2792 ComPtr<IMachine> sessionMachine; 2804 CHECK_ERROR_BREAK ( session, COMGETTER(Machine)(sessionMachine.asOutParam()));2793 CHECK_ERROR_BREAK (a->session, COMGETTER(Machine)(sessionMachine.asOutParam())); 2805 2794 2806 2795 /* which command? */ 2807 if (strcmp(a rgv[1], "pause") == 0)2796 if (strcmp(a->argv[1], "pause") == 0) 2808 2797 { 2809 2798 CHECK_ERROR_BREAK (console, Pause()); 2810 2799 } 2811 else if (strcmp(a rgv[1], "resume") == 0)2800 else if (strcmp(a->argv[1], "resume") == 0) 2812 2801 { 2813 2802 CHECK_ERROR_BREAK (console, Resume()); 2814 2803 } 2815 else if (strcmp(a rgv[1], "reset") == 0)2804 else if (strcmp(a->argv[1], "reset") == 0) 2816 2805 { 2817 2806 CHECK_ERROR_BREAK (console, Reset()); 2818 2807 } 2819 else if (strcmp(a rgv[1], "poweroff") == 0)2808 else if (strcmp(a->argv[1], "poweroff") == 0) 2820 2809 { 2821 2810 CHECK_ERROR_BREAK (console, PowerDown()); 2822 2811 } 2823 else if (strcmp(a rgv[1], "savestate") == 0)2812 else if (strcmp(a->argv[1], "savestate") == 0) 2824 2813 { 2825 2814 ComPtr<IProgress> progress; … … 2842 2831 } 2843 2832 } 2844 else if (strcmp(a rgv[1], "acpipowerbutton") == 0)2833 else if (strcmp(a->argv[1], "acpipowerbutton") == 0) 2845 2834 { 2846 2835 CHECK_ERROR_BREAK (console, PowerButton()); 2847 2836 } 2848 else if (strcmp(a rgv[1], "acpisleepbutton") == 0)2837 else if (strcmp(a->argv[1], "acpisleepbutton") == 0) 2849 2838 { 2850 2839 CHECK_ERROR_BREAK (console, SleepButton()); 2851 2840 } 2852 else if (strcmp(a rgv[1], "injectnmi") == 0)2841 else if (strcmp(a->argv[1], "injectnmi") == 0) 2853 2842 { 2854 2843 /* get the machine debugger. */ … … 2857 2846 CHECK_ERROR_BREAK(debugger, InjectNMI()); 2858 2847 } 2859 else if (strcmp(a rgv[1], "keyboardputscancode") == 0)2848 else if (strcmp(a->argv[1], "keyboardputscancode") == 0) 2860 2849 { 2861 2850 ComPtr<IKeyboard> keyboard; 2862 2851 CHECK_ERROR_BREAK(console, COMGETTER(Keyboard)(keyboard.asOutParam())); 2863 2852 2864 if (a rgc <= 1 + 1)2865 { 2866 errorArgument("Missing argument to '%s'. Expected IBM PC AT set 2 keyboard scancode(s) as hex byte(s).", a rgv[1]);2853 if (a->argc <= 1 + 1) 2854 { 2855 errorArgument("Missing argument to '%s'. Expected IBM PC AT set 2 keyboard scancode(s) as hex byte(s).", a->argv[1]); 2867 2856 rc = E_FAIL; 2868 2857 break; … … 2875 2864 /* Process the command line. */ 2876 2865 int i; 2877 for (i = 1 + 1; i < a rgc && cScancodes < (int)RT_ELEMENTS(alScancodes); i++, cScancodes++)2878 { 2879 if ( RT_C_IS_XDIGIT (a rgv[i][0])2880 && RT_C_IS_XDIGIT (a rgv[i][1])2881 && a rgv[i][2] == 0)2866 for (i = 1 + 1; i < a->argc && cScancodes < (int)RT_ELEMENTS(alScancodes); i++, cScancodes++) 2867 { 2868 if ( RT_C_IS_XDIGIT (a->argv[i][0]) 2869 && RT_C_IS_XDIGIT (a->argv[i][1]) 2870 && a->argv[i][2] == 0) 2882 2871 { 2883 2872 uint8_t u8Scancode; 2884 int rc = RTStrToUInt8Ex(a rgv[i], NULL, 16, &u8Scancode);2873 int rc = RTStrToUInt8Ex(a->argv[i], NULL, 16, &u8Scancode); 2885 2874 if (RT_FAILURE (rc)) 2886 2875 { 2887 RTPrintf("Error: converting '%s' returned %Rrc!\n", a rgv[i], rc);2876 RTPrintf("Error: converting '%s' returned %Rrc!\n", a->argv[i], rc); 2888 2877 rc = E_FAIL; 2889 2878 break; … … 2894 2883 else 2895 2884 { 2896 RTPrintf("Error: '%s' is not a hex byte!\n", a rgv[i]);2885 RTPrintf("Error: '%s' is not a hex byte!\n", a->argv[i]); 2897 2886 rc = E_FAIL; 2898 2887 break; … … 2904 2893 2905 2894 if ( cScancodes == RT_ELEMENTS(alScancodes) 2906 && i < a rgc)2895 && i < a->argc) 2907 2896 { 2908 2897 RTPrintf("Error: too many scancodes, maximum %d allowed!\n", RT_ELEMENTS(alScancodes)); … … 2920 2909 } 2921 2910 } 2922 else if (strncmp(a rgv[1], "setlinkstate", 12) == 0)2911 else if (strncmp(a->argv[1], "setlinkstate", 12) == 0) 2923 2912 { 2924 2913 /* Get the number of network adapters */ 2925 2914 ULONG NetworkAdapterCount = 0; 2926 2915 ComPtr <ISystemProperties> info; 2927 CHECK_ERROR_BREAK ( virtualBox, COMGETTER(SystemProperties) (info.asOutParam()));2916 CHECK_ERROR_BREAK (a->virtualBox, COMGETTER(SystemProperties) (info.asOutParam())); 2928 2917 CHECK_ERROR_BREAK (info, COMGETTER(NetworkAdapterCount) (&NetworkAdapterCount)); 2929 2918 2930 unsigned n = parseNum(&a rgv[1][12], NetworkAdapterCount, "NIC");2919 unsigned n = parseNum(&a->argv[1][12], NetworkAdapterCount, "NIC"); 2931 2920 if (!n) 2932 2921 { … … 2934 2923 break; 2935 2924 } 2936 if (a rgc <= 1 + 1)2937 { 2938 errorArgument("Missing argument to '%s'", a rgv[1]);2925 if (a->argc <= 1 + 1) 2926 { 2927 errorArgument("Missing argument to '%s'", a->argv[1]); 2939 2928 rc = E_FAIL; 2940 2929 break; … … 2945 2934 if (adapter) 2946 2935 { 2947 if (strcmp(a rgv[2], "on") == 0)2936 if (strcmp(a->argv[2], "on") == 0) 2948 2937 { 2949 2938 CHECK_ERROR_BREAK (adapter, COMSETTER(CableConnected)(TRUE)); 2950 2939 } 2951 else if (strcmp(a rgv[2], "off") == 0)2940 else if (strcmp(a->argv[2], "off") == 0) 2952 2941 { 2953 2942 CHECK_ERROR_BREAK (adapter, COMSETTER(CableConnected)(FALSE)); … … 2955 2944 else 2956 2945 { 2957 errorArgument("Invalid link state '%s'", Utf8Str(a rgv[2]).raw());2946 errorArgument("Invalid link state '%s'", Utf8Str(a->argv[2]).raw()); 2958 2947 rc = E_FAIL; 2959 2948 break; … … 2962 2951 } 2963 2952 #ifdef VBOX_WITH_VRDP 2964 else if (strcmp(a rgv[1], "vrdp") == 0)2965 { 2966 if (a rgc <= 1 + 1)2967 { 2968 errorArgument("Missing argument to '%s'", a rgv[1]);2953 else if (strcmp(a->argv[1], "vrdp") == 0) 2954 { 2955 if (a->argc <= 1 + 1) 2956 { 2957 errorArgument("Missing argument to '%s'", a->argv[1]); 2969 2958 rc = E_FAIL; 2970 2959 break; … … 2976 2965 if (vrdpServer) 2977 2966 { 2978 if (strcmp(a rgv[2], "on") == 0)2967 if (strcmp(a->argv[2], "on") == 0) 2979 2968 { 2980 2969 CHECK_ERROR_BREAK (vrdpServer, COMSETTER(Enabled)(TRUE)); 2981 2970 } 2982 else if (strcmp(a rgv[2], "off") == 0)2971 else if (strcmp(a->argv[2], "off") == 0) 2983 2972 { 2984 2973 CHECK_ERROR_BREAK (vrdpServer, COMSETTER(Enabled)(FALSE)); … … 2986 2975 else 2987 2976 { 2988 errorArgument("Invalid vrdp server state '%s'", Utf8Str(a rgv[2]).raw());2977 errorArgument("Invalid vrdp server state '%s'", Utf8Str(a->argv[2]).raw()); 2989 2978 rc = E_FAIL; 2990 2979 break; … … 2993 2982 } 2994 2983 #endif /* VBOX_WITH_VRDP */ 2995 else if (strcmp (a rgv[1], "usbattach") == 0 ||2996 strcmp (a rgv[1], "usbdetach") == 0)2997 { 2998 if (a rgc < 3)2984 else if (strcmp (a->argv[1], "usbattach") == 0 || 2985 strcmp (a->argv[1], "usbdetach") == 0) 2986 { 2987 if (a->argc < 3) 2999 2988 { 3000 2989 errorSyntax(USAGE_CONTROLVM, "Not enough parameters"); … … 3003 2992 } 3004 2993 3005 bool attach = strcmp (a rgv[1], "usbattach") == 0;3006 3007 Guid usbId = a rgv [2];2994 bool attach = strcmp (a->argv[1], "usbattach") == 0; 2995 2996 Guid usbId = a->argv [2]; 3008 2997 if (usbId.isEmpty()) 3009 2998 { … … 3012 3001 { 3013 3002 ComPtr <IHost> host; 3014 CHECK_ERROR_BREAK ( virtualBox, COMGETTER(Host) (host.asOutParam()));3003 CHECK_ERROR_BREAK (a->virtualBox, COMGETTER(Host) (host.asOutParam())); 3015 3004 ComPtr <IHostUSBDeviceCollection> coll; 3016 3005 CHECK_ERROR_BREAK (host, COMGETTER(USBDevices) (coll.asOutParam())); 3017 3006 ComPtr <IHostUSBDevice> dev; 3018 CHECK_ERROR_BREAK (coll, FindByAddress (Bstr (a rgv [2]), dev.asOutParam()));3007 CHECK_ERROR_BREAK (coll, FindByAddress (Bstr (a->argv [2]), dev.asOutParam())); 3019 3008 CHECK_ERROR_BREAK (dev, COMGETTER(Id) (usbId.asOutParam())); 3020 3009 } … … 3024 3013 CHECK_ERROR_BREAK (console, COMGETTER(USBDevices)(coll.asOutParam())); 3025 3014 ComPtr <IUSBDevice> dev; 3026 CHECK_ERROR_BREAK (coll, FindByAddress (Bstr (a rgv [2]), dev.asOutParam()));3015 CHECK_ERROR_BREAK (coll, FindByAddress (Bstr (a->argv [2]), dev.asOutParam())); 3027 3016 CHECK_ERROR_BREAK (dev, COMGETTER(Id) (usbId.asOutParam())); 3028 3017 } … … 3037 3026 } 3038 3027 } 3039 else if (strcmp(a rgv[1], "setvideomodehint") == 0)3040 { 3041 if (a rgc != 5 &&argc != 6)3028 else if (strcmp(a->argv[1], "setvideomodehint") == 0) 3029 { 3030 if (a->argc != 5 && a->argc != 6) 3042 3031 { 3043 3032 errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters"); … … 3045 3034 break; 3046 3035 } 3047 uint32_t xres = RTStrToUInt32(a rgv[2]);3048 uint32_t yres = RTStrToUInt32(a rgv[3]);3049 uint32_t bpp = RTStrToUInt32(a rgv[4]);3036 uint32_t xres = RTStrToUInt32(a->argv[2]); 3037 uint32_t yres = RTStrToUInt32(a->argv[3]); 3038 uint32_t bpp = RTStrToUInt32(a->argv[4]); 3050 3039 uint32_t displayIdx = 0; 3051 if (a rgc == 6)3052 displayIdx = RTStrToUInt32(a rgv[5]);3040 if (a->argc == 6) 3041 displayIdx = RTStrToUInt32(a->argv[5]); 3053 3042 3054 3043 ComPtr<IDisplay> display; … … 3056 3045 CHECK_ERROR_BREAK(display, SetVideoModeHint(xres, yres, bpp, displayIdx)); 3057 3046 } 3058 else if (strcmp(a rgv[1], "setcredentials") == 0)3047 else if (strcmp(a->argv[1], "setcredentials") == 0) 3059 3048 { 3060 3049 bool fAllowLocalLogon = true; 3061 if (a rgc == 7)3062 { 3063 if (strcmp(a rgv[5], "-allowlocallogon") != 0)3064 { 3065 errorArgument("Invalid parameter '%s'", a rgv[5]);3050 if (a->argc == 7) 3051 { 3052 if (strcmp(a->argv[5], "-allowlocallogon") != 0) 3053 { 3054 errorArgument("Invalid parameter '%s'", a->argv[5]); 3066 3055 rc = E_FAIL; 3067 3056 break; 3068 3057 } 3069 if (strcmp(a rgv[6], "no") == 0)3058 if (strcmp(a->argv[6], "no") == 0) 3070 3059 fAllowLocalLogon = false; 3071 3060 } 3072 else if (a rgc != 5)3061 else if (a->argc != 5) 3073 3062 { 3074 3063 errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters"); … … 3079 3068 ComPtr<IGuest> guest; 3080 3069 CHECK_ERROR_BREAK(console, COMGETTER(Guest)(guest.asOutParam())); 3081 CHECK_ERROR_BREAK(guest, SetCredentials(Bstr(a rgv[2]), Bstr(argv[3]), Bstr(argv[4]), fAllowLocalLogon));3082 } 3083 else if (strcmp(a rgv[1], "dvdattach") == 0)3084 { 3085 if (a rgc != 3)3070 CHECK_ERROR_BREAK(guest, SetCredentials(Bstr(a->argv[2]), Bstr(a->argv[3]), Bstr(a->argv[4]), fAllowLocalLogon)); 3071 } 3072 else if (strcmp(a->argv[1], "dvdattach") == 0) 3073 { 3074 if (a->argc != 3) 3086 3075 { 3087 3076 errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters"); … … 3094 3083 3095 3084 /* unmount? */ 3096 if (strcmp(a rgv[2], "none") == 0)3085 if (strcmp(a->argv[2], "none") == 0) 3097 3086 { 3098 3087 CHECK_ERROR(dvdDrive, Unmount()); 3099 3088 } 3100 3089 /* host drive? */ 3101 else if (strncmp(a rgv[2], "host:", 5) == 0)3090 else if (strncmp(a->argv[2], "host:", 5) == 0) 3102 3091 { 3103 3092 ComPtr<IHost> host; 3104 CHECK_ERROR( virtualBox, COMGETTER(Host)(host.asOutParam()));3093 CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); 3105 3094 ComPtr<IHostDVDDriveCollection> hostDVDs; 3106 3095 CHECK_ERROR(host, COMGETTER(DVDDrives)(hostDVDs.asOutParam())); 3107 3096 ComPtr<IHostDVDDrive> hostDVDDrive; 3108 rc = hostDVDs->FindByName(Bstr(a rgv[2] + 5), hostDVDDrive.asOutParam());3097 rc = hostDVDs->FindByName(Bstr(a->argv[2] + 5), hostDVDDrive.asOutParam()); 3109 3098 if (!hostDVDDrive) 3110 3099 { … … 3118 3107 { 3119 3108 /* first assume it's a UUID */ 3120 Guid uuid(a rgv[2]);3109 Guid uuid(a->argv[2]); 3121 3110 ComPtr<IDVDImage2> dvdImage; 3122 rc = virtualBox->GetDVDImage(uuid, dvdImage.asOutParam());3111 rc = a->virtualBox->GetDVDImage(uuid, dvdImage.asOutParam()); 3123 3112 if (FAILED(rc) || !dvdImage) 3124 3113 { 3125 3114 /* must be a filename, check if it's in the collection */ 3126 rc = virtualBox->FindDVDImage(Bstr(argv[2]), dvdImage.asOutParam());3115 rc = a->virtualBox->FindDVDImage(Bstr(a->argv[2]), dvdImage.asOutParam()); 3127 3116 /* not registered, do that on the fly */ 3128 3117 if (!dvdImage) 3129 3118 { 3130 3119 Guid emptyUUID; 3131 CHECK_ERROR( virtualBox, OpenDVDImage(Bstr(argv[2]), emptyUUID, dvdImage.asOutParam()));3120 CHECK_ERROR(a->virtualBox, OpenDVDImage(Bstr(a->argv[2]), emptyUUID, dvdImage.asOutParam())); 3132 3121 } 3133 3122 } … … 3141 3130 } 3142 3131 } 3143 else if (strcmp(a rgv[1], "floppyattach") == 0)3144 { 3145 if (a rgc != 3)3132 else if (strcmp(a->argv[1], "floppyattach") == 0) 3133 { 3134 if (a->argc != 3) 3146 3135 { 3147 3136 errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters"); … … 3155 3144 3156 3145 /* unmount? */ 3157 if (strcmp(a rgv[2], "none") == 0)3146 if (strcmp(a->argv[2], "none") == 0) 3158 3147 { 3159 3148 CHECK_ERROR(floppyDrive, Unmount()); 3160 3149 } 3161 3150 /* host drive? */ 3162 else if (strncmp(a rgv[2], "host:", 5) == 0)3151 else if (strncmp(a->argv[2], "host:", 5) == 0) 3163 3152 { 3164 3153 ComPtr<IHost> host; 3165 CHECK_ERROR( virtualBox, COMGETTER(Host)(host.asOutParam()));3154 CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); 3166 3155 ComPtr<IHostFloppyDriveCollection> hostFloppies; 3167 3156 CHECK_ERROR(host, COMGETTER(FloppyDrives)(hostFloppies.asOutParam())); 3168 3157 ComPtr<IHostFloppyDrive> hostFloppyDrive; 3169 rc = hostFloppies->FindByName(Bstr(a rgv[2] + 5), hostFloppyDrive.asOutParam());3158 rc = hostFloppies->FindByName(Bstr(a->argv[2] + 5), hostFloppyDrive.asOutParam()); 3170 3159 if (!hostFloppyDrive) 3171 3160 { … … 3179 3168 { 3180 3169 /* first assume it's a UUID */ 3181 Guid uuid(a rgv[2]);3170 Guid uuid(a->argv[2]); 3182 3171 ComPtr<IFloppyImage2> floppyImage; 3183 rc = virtualBox->GetFloppyImage(uuid, floppyImage.asOutParam());3172 rc = a->virtualBox->GetFloppyImage(uuid, floppyImage.asOutParam()); 3184 3173 if (FAILED(rc) || !floppyImage) 3185 3174 { 3186 3175 /* must be a filename, check if it's in the collection */ 3187 rc = virtualBox->FindFloppyImage(Bstr(argv[2]), floppyImage.asOutParam());3176 rc = a->virtualBox->FindFloppyImage(Bstr(a->argv[2]), floppyImage.asOutParam()); 3188 3177 /* not registered, do that on the fly */ 3189 3178 if (!floppyImage) 3190 3179 { 3191 3180 Guid emptyUUID; 3192 CHECK_ERROR( virtualBox, OpenFloppyImage(Bstr(argv[2]), emptyUUID, floppyImage.asOutParam()));3181 CHECK_ERROR(a->virtualBox, OpenFloppyImage(Bstr(a->argv[2]), emptyUUID, floppyImage.asOutParam())); 3193 3182 } 3194 3183 } … … 3203 3192 } 3204 3193 #ifdef VBOX_WITH_MEM_BALLOONING 3205 else if (strncmp(a rgv[1], "-guestmemoryballoon", 19) == 0)3206 { 3207 if (a rgc != 3)3194 else if (strncmp(a->argv[1], "-guestmemoryballoon", 19) == 0) 3195 { 3196 if (a->argc != 3) 3208 3197 { 3209 3198 errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters"); … … 3213 3202 uint32_t uVal; 3214 3203 int vrc; 3215 vrc = RTStrToUInt32Ex(a rgv[2], NULL, 0, &uVal);3204 vrc = RTStrToUInt32Ex(a->argv[2], NULL, 0, &uVal); 3216 3205 if (vrc != VINF_SUCCESS) 3217 3206 { 3218 errorArgument("Error parsing guest memory balloon size '%s'", a rgv[2]);3207 errorArgument("Error parsing guest memory balloon size '%s'", a->argv[2]); 3219 3208 rc = E_FAIL; 3220 3209 break; … … 3229 3218 } 3230 3219 #endif 3231 else if (strncmp(a rgv[1], "-gueststatisticsinterval", 24) == 0)3232 { 3233 if (a rgc != 3)3220 else if (strncmp(a->argv[1], "-gueststatisticsinterval", 24) == 0) 3221 { 3222 if (a->argc != 3) 3234 3223 { 3235 3224 errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters"); … … 3239 3228 uint32_t uVal; 3240 3229 int vrc; 3241 vrc = RTStrToUInt32Ex(a rgv[2], NULL, 0, &uVal);3230 vrc = RTStrToUInt32Ex(a->argv[2], NULL, 0, &uVal); 3242 3231 if (vrc != VINF_SUCCESS) 3243 3232 { 3244 errorArgument("Error parsing guest statistics interval '%s'", a rgv[2]);3233 errorArgument("Error parsing guest statistics interval '%s'", a->argv[2]); 3245 3234 rc = E_FAIL; 3246 3235 break; … … 3256 3245 else 3257 3246 { 3258 errorSyntax(USAGE_CONTROLVM, "Invalid parameter '%s'", Utf8Str(a rgv[1]).raw());3247 errorSyntax(USAGE_CONTROLVM, "Invalid parameter '%s'", Utf8Str(a->argv[1]).raw()); 3259 3248 rc = E_FAIL; 3260 3249 } … … 3262 3251 while (0); 3263 3252 3264 session->Close();3253 a->session->Close(); 3265 3254 3266 3255 return SUCCEEDED (rc) ? 0 : 1; 3267 3256 } 3268 3257 3269 static int handleDiscardState(int argc, char *argv[], 3270 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 3258 static int handleDiscardState(HandlerArg *a) 3271 3259 { 3272 3260 HRESULT rc; 3273 3261 3274 if (a rgc != 1)3262 if (a->argc != 1) 3275 3263 return errorSyntax(USAGE_DISCARDSTATE, "Incorrect number of parameters"); 3276 3264 3277 3265 ComPtr<IMachine> machine; 3278 3266 /* assume it's a UUID */ 3279 rc = virtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());3267 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 3280 3268 if (FAILED(rc) || !machine) 3281 3269 { 3282 3270 /* must be a name */ 3283 CHECK_ERROR( virtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));3271 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 3284 3272 } 3285 3273 if (machine) … … 3290 3278 Guid guid; 3291 3279 machine->COMGETTER(Id)(guid.asOutParam()); 3292 CHECK_ERROR_BREAK( virtualBox, OpenSession(session, guid));3280 CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid)); 3293 3281 do 3294 3282 { 3295 3283 ComPtr<IConsole> console; 3296 CHECK_ERROR_BREAK( session, COMGETTER(Console)(console.asOutParam()));3284 CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam())); 3297 3285 CHECK_ERROR_BREAK(console, DiscardSavedState()); 3298 3286 } 3299 3287 while (0); 3300 CHECK_ERROR_BREAK( session, Close());3288 CHECK_ERROR_BREAK(a->session, Close()); 3301 3289 } 3302 3290 while (0); … … 3306 3294 } 3307 3295 3308 static int handleAdoptdState(int argc, char *argv[], 3309 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 3296 static int handleAdoptdState(HandlerArg *a) 3310 3297 { 3311 3298 HRESULT rc; 3312 3299 3313 if (a rgc != 2)3300 if (a->argc != 2) 3314 3301 return errorSyntax(USAGE_ADOPTSTATE, "Incorrect number of parameters"); 3315 3302 3316 3303 ComPtr<IMachine> machine; 3317 3304 /* assume it's a UUID */ 3318 rc = virtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());3305 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 3319 3306 if (FAILED(rc) || !machine) 3320 3307 { 3321 3308 /* must be a name */ 3322 CHECK_ERROR( virtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));3309 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 3323 3310 } 3324 3311 if (machine) … … 3329 3316 Guid guid; 3330 3317 machine->COMGETTER(Id)(guid.asOutParam()); 3331 CHECK_ERROR_BREAK( virtualBox, OpenSession(session, guid));3318 CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid)); 3332 3319 do 3333 3320 { 3334 3321 ComPtr<IConsole> console; 3335 CHECK_ERROR_BREAK( session, COMGETTER(Console)(console.asOutParam()));3336 CHECK_ERROR_BREAK(console, AdoptSavedState (Bstr (a rgv[1])));3322 CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam())); 3323 CHECK_ERROR_BREAK(console, AdoptSavedState (Bstr (a->argv[1]))); 3337 3324 } 3338 3325 while (0); 3339 CHECK_ERROR_BREAK( session, Close());3326 CHECK_ERROR_BREAK(a->session, Close()); 3340 3327 } 3341 3328 while (0); … … 3345 3332 } 3346 3333 3347 static int handleSnapshot(int argc, char *argv[], 3348 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 3334 static int handleSnapshot(HandlerArg *a) 3349 3335 { 3350 3336 HRESULT rc; 3351 3337 3352 3338 /* we need at least a VM and a command */ 3353 if (a rgc < 2)3339 if (a->argc < 2) 3354 3340 return errorSyntax(USAGE_SNAPSHOT, "Not enough parameters"); 3355 3341 … … 3357 3343 ComPtr<IMachine> machine; 3358 3344 /* assume it's a UUID */ 3359 rc = virtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());3345 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 3360 3346 if (FAILED(rc) || !machine) 3361 3347 { 3362 3348 /* must be a name */ 3363 CHECK_ERROR( virtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));3349 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 3364 3350 } 3365 3351 if (!machine) … … 3371 3357 { 3372 3358 /* we have to open a session for this task. First try an existing session */ 3373 rc = virtualBox->OpenExistingSession(session, guid);3359 rc = a->virtualBox->OpenExistingSession(a->session, guid); 3374 3360 if (FAILED(rc)) 3375 CHECK_ERROR_BREAK( virtualBox, OpenSession(session, guid));3361 CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid)); 3376 3362 ComPtr<IConsole> console; 3377 CHECK_ERROR_BREAK( session, COMGETTER(Console)(console.asOutParam()));3363 CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam())); 3378 3364 3379 3365 /* switch based on the command */ 3380 if (strcmp(a rgv[1], "take") == 0)3366 if (strcmp(a->argv[1], "take") == 0) 3381 3367 { 3382 3368 /* there must be a name */ 3383 if (a rgc < 3)3369 if (a->argc < 3) 3384 3370 { 3385 3371 errorSyntax(USAGE_SNAPSHOT, "Missing snapshot name"); … … 3387 3373 break; 3388 3374 } 3389 Bstr name(a rgv[2]);3390 if ((a rgc > 3) && ((argc != 5) || (strcmp(argv[3], "-desc") != 0)))3375 Bstr name(a->argv[2]); 3376 if ((a->argc > 3) && ((a->argc != 5) || (strcmp(a->argv[3], "-desc") != 0))) 3391 3377 { 3392 3378 errorSyntax(USAGE_SNAPSHOT, "Incorrect description format"); … … 3395 3381 } 3396 3382 Bstr desc; 3397 if (a rgc == 5)3398 desc = a rgv[4];3383 if (a->argc == 5) 3384 desc = a->argv[4]; 3399 3385 ComPtr<IProgress> progress; 3400 3386 CHECK_ERROR_BREAK(console, TakeSnapshot(name, desc, progress.asOutParam())); … … 3411 3397 } 3412 3398 } 3413 else if (strcmp(a rgv[1], "discard") == 0)3399 else if (strcmp(a->argv[1], "discard") == 0) 3414 3400 { 3415 3401 /* exactly one parameter: snapshot name */ 3416 if (a rgc != 3)3402 if (a->argc != 3) 3417 3403 { 3418 3404 errorSyntax(USAGE_SNAPSHOT, "Expecting snapshot name only"); … … 3424 3410 3425 3411 /* assume it's a UUID */ 3426 Guid guid(a rgv[2]);3412 Guid guid(a->argv[2]); 3427 3413 if (!guid.isEmpty()) 3428 3414 { … … 3432 3418 { 3433 3419 /* then it must be a name */ 3434 CHECK_ERROR_BREAK(machine, FindSnapshot(Bstr(a rgv[2]), snapshot.asOutParam()));3420 CHECK_ERROR_BREAK(machine, FindSnapshot(Bstr(a->argv[2]), snapshot.asOutParam())); 3435 3421 } 3436 3422 … … 3451 3437 } 3452 3438 } 3453 else if (strcmp(a rgv[1], "discardcurrent") == 0)3454 { 3455 if ( (a rgc != 3)3456 || ( (strcmp(a rgv[2], "-state") != 0)3457 && (strcmp(a rgv[2], "-all") != 0)))3458 { 3459 errorSyntax(USAGE_SNAPSHOT, "Invalid parameter '%s'", Utf8Str(a rgv[2]).raw());3439 else if (strcmp(a->argv[1], "discardcurrent") == 0) 3440 { 3441 if ( (a->argc != 3) 3442 || ( (strcmp(a->argv[2], "-state") != 0) 3443 && (strcmp(a->argv[2], "-all") != 0))) 3444 { 3445 errorSyntax(USAGE_SNAPSHOT, "Invalid parameter '%s'", Utf8Str(a->argv[2]).raw()); 3460 3446 rc = E_FAIL; 3461 3447 break; 3462 3448 } 3463 3449 bool fAll = false; 3464 if (strcmp(a rgv[2], "-all") == 0)3450 if (strcmp(a->argv[2], "-all") == 0) 3465 3451 fAll = true; 3466 3452 … … 3488 3474 3489 3475 } 3490 else if (strcmp(a rgv[1], "edit") == 0)3491 { 3492 if (a rgc < 3)3476 else if (strcmp(a->argv[1], "edit") == 0) 3477 { 3478 if (a->argc < 3) 3493 3479 { 3494 3480 errorSyntax(USAGE_SNAPSHOT, "Missing snapshot name"); … … 3499 3485 ComPtr<ISnapshot> snapshot; 3500 3486 3501 if (strcmp(a rgv[2], "-current") == 0)3487 if (strcmp(a->argv[2], "-current") == 0) 3502 3488 { 3503 3489 CHECK_ERROR_BREAK(machine, COMGETTER(CurrentSnapshot)(snapshot.asOutParam())); … … 3506 3492 { 3507 3493 /* assume it's a UUID */ 3508 Guid guid(a rgv[2]);3494 Guid guid(a->argv[2]); 3509 3495 if (!guid.isEmpty()) 3510 3496 { … … 3514 3500 { 3515 3501 /* then it must be a name */ 3516 CHECK_ERROR_BREAK(machine, FindSnapshot(Bstr(a rgv[2]), snapshot.asOutParam()));3502 CHECK_ERROR_BREAK(machine, FindSnapshot(Bstr(a->argv[2]), snapshot.asOutParam())); 3517 3503 } 3518 3504 } 3519 3505 3520 3506 /* parse options */ 3521 for (int i = 3; i < a rgc; i++)3522 { 3523 if (strcmp(a rgv[i], "-newname") == 0)3524 { 3525 if (a rgc <= i + 1)3507 for (int i = 3; i < a->argc; i++) 3508 { 3509 if (strcmp(a->argv[i], "-newname") == 0) 3510 { 3511 if (a->argc <= i + 1) 3526 3512 { 3527 errorArgument("Missing argument to '%s'", a rgv[i]);3513 errorArgument("Missing argument to '%s'", a->argv[i]); 3528 3514 rc = E_FAIL; 3529 3515 break; 3530 3516 } 3531 3517 i++; 3532 snapshot->COMSETTER(Name)(Bstr(a rgv[i]));3533 } 3534 else if (strcmp(a rgv[i], "-newdesc") == 0)3535 { 3536 if (a rgc <= i + 1)3518 snapshot->COMSETTER(Name)(Bstr(a->argv[i])); 3519 } 3520 else if (strcmp(a->argv[i], "-newdesc") == 0) 3521 { 3522 if (a->argc <= i + 1) 3537 3523 { 3538 errorArgument("Missing argument to '%s'", a rgv[i]);3524 errorArgument("Missing argument to '%s'", a->argv[i]); 3539 3525 rc = E_FAIL; 3540 3526 break; 3541 3527 } 3542 3528 i++; 3543 snapshot->COMSETTER(Description)(Bstr(a rgv[i]));3529 snapshot->COMSETTER(Description)(Bstr(a->argv[i])); 3544 3530 } 3545 3531 else 3546 3532 { 3547 errorSyntax(USAGE_SNAPSHOT, "Invalid parameter '%s'", Utf8Str(a rgv[i]).raw());3533 errorSyntax(USAGE_SNAPSHOT, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw()); 3548 3534 rc = E_FAIL; 3549 3535 break; … … 3552 3538 3553 3539 } 3554 else if (strcmp(a rgv[1], "showvminfo") == 0)3540 else if (strcmp(a->argv[1], "showvminfo") == 0) 3555 3541 { 3556 3542 /* exactly one parameter: snapshot name */ 3557 if (a rgc != 3)3543 if (a->argc != 3) 3558 3544 { 3559 3545 errorSyntax(USAGE_SNAPSHOT, "Expecting snapshot name only"); … … 3565 3551 3566 3552 /* assume it's a UUID */ 3567 Guid guid(a rgv[2]);3553 Guid guid(a->argv[2]); 3568 3554 if (!guid.isEmpty()) 3569 3555 { … … 3573 3559 { 3574 3560 /* then it must be a name */ 3575 CHECK_ERROR_BREAK(machine, FindSnapshot(Bstr(a rgv[2]), snapshot.asOutParam()));3561 CHECK_ERROR_BREAK(machine, FindSnapshot(Bstr(a->argv[2]), snapshot.asOutParam())); 3576 3562 } 3577 3563 … … 3579 3565 ComPtr<IMachine> machine; 3580 3566 snapshot->COMGETTER(Machine)(machine.asOutParam()); 3581 showVMInfo( virtualBox, machine, console);3567 showVMInfo(a->virtualBox, machine, console); 3582 3568 } 3583 3569 else 3584 3570 { 3585 errorSyntax(USAGE_SNAPSHOT, "Invalid parameter '%s'", Utf8Str(a rgv[1]).raw());3571 errorSyntax(USAGE_SNAPSHOT, "Invalid parameter '%s'", Utf8Str(a->argv[1]).raw()); 3586 3572 rc = E_FAIL; 3587 3573 } 3588 3574 } while (0); 3589 3575 3590 session->Close();3576 a->session->Close(); 3591 3577 3592 3578 return SUCCEEDED(rc) ? 0 : 1; 3593 3579 } 3594 3580 3595 static int handleGetExtraData(int argc, char *argv[], 3596 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 3581 static int handleGetExtraData(HandlerArg *a) 3597 3582 { 3598 3583 HRESULT rc = S_OK; 3599 3584 3600 if (a rgc != 2)3585 if (a->argc != 2) 3601 3586 return errorSyntax(USAGE_GETEXTRADATA, "Incorrect number of parameters"); 3602 3587 3603 3588 /* global data? */ 3604 if (strcmp(a rgv[0], "global") == 0)3589 if (strcmp(a->argv[0], "global") == 0) 3605 3590 { 3606 3591 /* enumeration? */ 3607 if (strcmp(a rgv[1], "enumerate") == 0)3592 if (strcmp(a->argv[1], "enumerate") == 0) 3608 3593 { 3609 3594 Bstr extraDataKey; … … 3613 3598 Bstr nextExtraDataKey; 3614 3599 Bstr nextExtraDataValue; 3615 HRESULT rcEnum = virtualBox->GetNextExtraDataKey(extraDataKey, nextExtraDataKey.asOutParam(),3616 nextExtraDataValue.asOutParam());3600 HRESULT rcEnum = a->virtualBox->GetNextExtraDataKey(extraDataKey, nextExtraDataKey.asOutParam(), 3601 nextExtraDataValue.asOutParam()); 3617 3602 extraDataKey = nextExtraDataKey; 3618 3603 … … 3624 3609 { 3625 3610 Bstr value; 3626 CHECK_ERROR( virtualBox, GetExtraData(Bstr(argv[1]), value.asOutParam()));3611 CHECK_ERROR(a->virtualBox, GetExtraData(Bstr(a->argv[1]), value.asOutParam())); 3627 3612 if (value) 3628 3613 RTPrintf("Value: %lS\n", value.raw()); … … 3635 3620 ComPtr<IMachine> machine; 3636 3621 /* assume it's a UUID */ 3637 rc = virtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());3622 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 3638 3623 if (FAILED(rc) || !machine) 3639 3624 { 3640 3625 /* must be a name */ 3641 CHECK_ERROR( virtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));3626 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 3642 3627 } 3643 3628 if (machine) 3644 3629 { 3645 3630 /* enumeration? */ 3646 if (strcmp(a rgv[1], "enumerate") == 0)3631 if (strcmp(a->argv[1], "enumerate") == 0) 3647 3632 { 3648 3633 Bstr extraDataKey; … … 3665 3650 { 3666 3651 Bstr value; 3667 CHECK_ERROR(machine, GetExtraData(Bstr(a rgv[1]), value.asOutParam()));3652 CHECK_ERROR(machine, GetExtraData(Bstr(a->argv[1]), value.asOutParam())); 3668 3653 if (value) 3669 3654 RTPrintf("Value: %lS\n", value.raw()); … … 3676 3661 } 3677 3662 3678 static int handleSetExtraData(int argc, char *argv[], 3679 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 3663 static int handleSetExtraData(HandlerArg *a) 3680 3664 { 3681 3665 HRESULT rc = S_OK; 3682 3666 3683 if (a rgc < 2)3667 if (a->argc < 2) 3684 3668 return errorSyntax(USAGE_SETEXTRADATA, "Not enough parameters"); 3685 3669 3686 3670 /* global data? */ 3687 if (strcmp(a rgv[0], "global") == 0)3688 { 3689 if (a rgc < 3)3690 CHECK_ERROR( virtualBox, SetExtraData(Bstr(argv[1]), NULL));3691 else if (a rgc == 3)3692 CHECK_ERROR( virtualBox, SetExtraData(Bstr(argv[1]), Bstr(argv[2])));3671 if (strcmp(a->argv[0], "global") == 0) 3672 { 3673 if (a->argc < 3) 3674 CHECK_ERROR(a->virtualBox, SetExtraData(Bstr(a->argv[1]), NULL)); 3675 else if (a->argc == 3) 3676 CHECK_ERROR(a->virtualBox, SetExtraData(Bstr(a->argv[1]), Bstr(a->argv[2]))); 3693 3677 else 3694 3678 return errorSyntax(USAGE_SETEXTRADATA, "Too many parameters"); … … 3698 3682 ComPtr<IMachine> machine; 3699 3683 /* assume it's a UUID */ 3700 rc = virtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());3684 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 3701 3685 if (FAILED(rc) || !machine) 3702 3686 { 3703 3687 /* must be a name */ 3704 CHECK_ERROR( virtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));3688 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 3705 3689 } 3706 3690 if (machine) 3707 3691 { 3708 if (a rgc < 3)3709 CHECK_ERROR(machine, SetExtraData(Bstr(a rgv[1]), NULL));3710 else if (a rgc == 3)3711 CHECK_ERROR(machine, SetExtraData(Bstr(a rgv[1]), Bstr(argv[2])));3692 if (a->argc < 3) 3693 CHECK_ERROR(machine, SetExtraData(Bstr(a->argv[1]), NULL)); 3694 else if (a->argc == 3) 3695 CHECK_ERROR(machine, SetExtraData(Bstr(a->argv[1]), Bstr(a->argv[2]))); 3712 3696 else 3713 3697 return errorSyntax(USAGE_SETEXTRADATA, "Too many parameters"); … … 3717 3701 } 3718 3702 3719 static int handleSetProperty(int argc, char *argv[], 3720 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 3703 static int handleSetProperty(HandlerArg *a) 3721 3704 { 3722 3705 HRESULT rc; 3723 3706 3724 3707 /* there must be two arguments: property name and value */ 3725 if (a rgc != 2)3708 if (a->argc != 2) 3726 3709 return errorSyntax(USAGE_SETPROPERTY, "Incorrect number of parameters"); 3727 3710 3728 3711 ComPtr<ISystemProperties> systemProperties; 3729 virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam());3730 3731 if (strcmp(a rgv[0], "hdfolder") == 0)3712 a->virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam()); 3713 3714 if (strcmp(a->argv[0], "hdfolder") == 0) 3732 3715 { 3733 3716 /* reset to default? */ 3734 if (strcmp(a rgv[1], "default") == 0)3717 if (strcmp(a->argv[1], "default") == 0) 3735 3718 CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(NULL)); 3736 3719 else 3737 CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(Bstr(a rgv[1])));3738 } 3739 else if (strcmp(a rgv[0], "machinefolder") == 0)3720 CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(Bstr(a->argv[1]))); 3721 } 3722 else if (strcmp(a->argv[0], "machinefolder") == 0) 3740 3723 { 3741 3724 /* reset to default? */ 3742 if (strcmp(a rgv[1], "default") == 0)3725 if (strcmp(a->argv[1], "default") == 0) 3743 3726 CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(NULL)); 3744 3727 else 3745 CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(Bstr(a rgv[1])));3746 } 3747 else if (strcmp(a rgv[0], "vrdpauthlibrary") == 0)3728 CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(Bstr(a->argv[1]))); 3729 } 3730 else if (strcmp(a->argv[0], "vrdpauthlibrary") == 0) 3748 3731 { 3749 3732 /* reset to default? */ 3750 if (strcmp(a rgv[1], "default") == 0)3733 if (strcmp(a->argv[1], "default") == 0) 3751 3734 CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(NULL)); 3752 3735 else 3753 CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(Bstr(a rgv[1])));3754 } 3755 else if (strcmp(a rgv[0], "websrvauthlibrary") == 0)3736 CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(Bstr(a->argv[1]))); 3737 } 3738 else if (strcmp(a->argv[0], "websrvauthlibrary") == 0) 3756 3739 { 3757 3740 /* reset to default? */ 3758 if (strcmp(a rgv[1], "default") == 0)3741 if (strcmp(a->argv[1], "default") == 0) 3759 3742 CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(NULL)); 3760 3743 else 3761 CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(Bstr(a rgv[1])));3762 } 3763 else if (strcmp(a rgv[0], "hwvirtexenabled") == 0)3764 { 3765 if (strcmp(a rgv[1], "yes") == 0)3744 CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(Bstr(a->argv[1]))); 3745 } 3746 else if (strcmp(a->argv[0], "hwvirtexenabled") == 0) 3747 { 3748 if (strcmp(a->argv[1], "yes") == 0) 3766 3749 CHECK_ERROR(systemProperties, COMSETTER(HWVirtExEnabled)(TRUE)); 3767 else if (strcmp(a rgv[1], "no") == 0)3750 else if (strcmp(a->argv[1], "no") == 0) 3768 3751 CHECK_ERROR(systemProperties, COMSETTER(HWVirtExEnabled)(FALSE)); 3769 3752 else 3770 return errorArgument("Invalid value '%s' for hardware virtualization extension flag", a rgv[1]);3771 } 3772 else if (strcmp(a rgv[0], "loghistorycount") == 0)3753 return errorArgument("Invalid value '%s' for hardware virtualization extension flag", a->argv[1]); 3754 } 3755 else if (strcmp(a->argv[0], "loghistorycount") == 0) 3773 3756 { 3774 3757 uint32_t uVal; 3775 3758 int vrc; 3776 vrc = RTStrToUInt32Ex(a rgv[1], NULL, 0, &uVal);3759 vrc = RTStrToUInt32Ex(a->argv[1], NULL, 0, &uVal); 3777 3760 if (vrc != VINF_SUCCESS) 3778 return errorArgument("Error parsing Log history count '%s'", a rgv[1]);3761 return errorArgument("Error parsing Log history count '%s'", a->argv[1]); 3779 3762 CHECK_ERROR(systemProperties, COMSETTER(LogHistoryCount)(uVal)); 3780 3763 } 3781 3764 else 3782 return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", a rgv[0]);3765 return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", a->argv[0]); 3783 3766 3784 3767 return SUCCEEDED(rc) ? 0 : 1; 3785 3768 } 3786 3769 3787 static int handleUSBFilter (int argc, char *argv[], 3788 ComPtr <IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 3770 static int handleUSBFilter (HandlerArg *a) 3789 3771 { 3790 3772 HRESULT rc = S_OK; … … 3792 3774 3793 3775 /* at least: 0: command, 1: index, 2: -target, 3: <target value> */ 3794 if (a rgc < 4)3776 if (a->argc < 4) 3795 3777 return errorSyntax(USAGE_USBFILTER, "Not enough parameters"); 3796 3778 3797 3779 /* which command? */ 3798 3780 cmd.mAction = USBFilterCmd::Invalid; 3799 if (strcmp (a rgv [0], "add") == 0) cmd.mAction = USBFilterCmd::Add;3800 else if (strcmp (a rgv [0], "modify") == 0) cmd.mAction = USBFilterCmd::Modify;3801 else if (strcmp (a rgv [0], "remove") == 0) cmd.mAction = USBFilterCmd::Remove;3781 if (strcmp (a->argv [0], "add") == 0) cmd.mAction = USBFilterCmd::Add; 3782 else if (strcmp (a->argv [0], "modify") == 0) cmd.mAction = USBFilterCmd::Modify; 3783 else if (strcmp (a->argv [0], "remove") == 0) cmd.mAction = USBFilterCmd::Remove; 3802 3784 3803 3785 if (cmd.mAction == USBFilterCmd::Invalid) 3804 return errorSyntax(USAGE_USBFILTER, "Invalid parameter '%s'", a rgv[0]);3786 return errorSyntax(USAGE_USBFILTER, "Invalid parameter '%s'", a->argv[0]); 3805 3787 3806 3788 /* which index? */ 3807 if (VINF_SUCCESS != RTStrToUInt32Full (a rgv[1], 10, &cmd.mIndex))3808 return errorSyntax(USAGE_USBFILTER, "Invalid index '%s'", a rgv[1]);3789 if (VINF_SUCCESS != RTStrToUInt32Full (a->argv[1], 10, &cmd.mIndex)) 3790 return errorSyntax(USAGE_USBFILTER, "Invalid index '%s'", a->argv[1]); 3809 3791 3810 3792 switch (cmd.mAction) … … 3814 3796 { 3815 3797 /* at least: 0: command, 1: index, 2: -target, 3: <target value>, 4: -name, 5: <name value> */ 3816 if (a rgc < 6)3798 if (a->argc < 6) 3817 3799 { 3818 3800 if (cmd.mAction == USBFilterCmd::Add) … … 3828 3810 cmd.mFilter.mActive = true; 3829 3811 3830 for (int i = 2; i < a rgc; i++)3831 { 3832 if (strcmp(a rgv [i], "-target") == 0)3833 { 3834 if (a rgc <= i + 1 || !*argv[i+1])3835 return errorArgument("Missing argument to '%s'", a rgv[i]);3812 for (int i = 2; i < a->argc; i++) 3813 { 3814 if (strcmp(a->argv [i], "-target") == 0) 3815 { 3816 if (a->argc <= i + 1 || !*a->argv[i+1]) 3817 return errorArgument("Missing argument to '%s'", a->argv[i]); 3836 3818 i++; 3837 if (strcmp (a rgv [i], "global") == 0)3819 if (strcmp (a->argv [i], "global") == 0) 3838 3820 cmd.mGlobal = true; 3839 3821 else 3840 3822 { 3841 3823 /* assume it's a UUID of a machine */ 3842 rc = a VirtualBox->GetMachine(Guid(argv[i]), cmd.mMachine.asOutParam());3824 rc = a->virtualBox->GetMachine(Guid(a->argv[i]), cmd.mMachine.asOutParam()); 3843 3825 if (FAILED(rc) || !cmd.mMachine) 3844 3826 { 3845 3827 /* must be a name */ 3846 CHECK_ERROR_RET(a VirtualBox, FindMachine(Bstr(argv[i]), cmd.mMachine.asOutParam()), 1);3828 CHECK_ERROR_RET(a->virtualBox, FindMachine(Bstr(a->argv[i]), cmd.mMachine.asOutParam()), 1); 3847 3829 } 3848 3830 } 3849 3831 } 3850 else if (strcmp(a rgv [i], "-name") == 0)3851 { 3852 if (a rgc <= i + 1 || !*argv[i+1])3853 return errorArgument("Missing argument to '%s'", a rgv[i]);3832 else if (strcmp(a->argv [i], "-name") == 0) 3833 { 3834 if (a->argc <= i + 1 || !*a->argv[i+1]) 3835 return errorArgument("Missing argument to '%s'", a->argv[i]); 3854 3836 i++; 3855 cmd.mFilter.mName = a rgv [i];3856 } 3857 else if (strcmp(a rgv [i], "-active") == 0)3858 { 3859 if (a rgc <= i + 1)3860 return errorArgument("Missing argument to '%s'", a rgv[i]);3837 cmd.mFilter.mName = a->argv [i]; 3838 } 3839 else if (strcmp(a->argv [i], "-active") == 0) 3840 { 3841 if (a->argc <= i + 1) 3842 return errorArgument("Missing argument to '%s'", a->argv[i]); 3861 3843 i++; 3862 if (strcmp (a rgv [i], "yes") == 0)3844 if (strcmp (a->argv [i], "yes") == 0) 3863 3845 cmd.mFilter.mActive = true; 3864 else if (strcmp (a rgv [i], "no") == 0)3846 else if (strcmp (a->argv [i], "no") == 0) 3865 3847 cmd.mFilter.mActive = false; 3866 3848 else 3867 return errorArgument("Invalid -active argument '%s'", a rgv[i]);3868 } 3869 else if (strcmp(a rgv [i], "-vendorid") == 0)3870 { 3871 if (a rgc <= i + 1)3872 return errorArgument("Missing argument to '%s'", a rgv[i]);3849 return errorArgument("Invalid -active argument '%s'", a->argv[i]); 3850 } 3851 else if (strcmp(a->argv [i], "-vendorid") == 0) 3852 { 3853 if (a->argc <= i + 1) 3854 return errorArgument("Missing argument to '%s'", a->argv[i]); 3873 3855 i++; 3874 cmd.mFilter.mVendorId = a rgv [i];3875 } 3876 else if (strcmp(a rgv [i], "-productid") == 0)3877 { 3878 if (a rgc <= i + 1)3879 return errorArgument("Missing argument to '%s'", a rgv[i]);3856 cmd.mFilter.mVendorId = a->argv [i]; 3857 } 3858 else if (strcmp(a->argv [i], "-productid") == 0) 3859 { 3860 if (a->argc <= i + 1) 3861 return errorArgument("Missing argument to '%s'", a->argv[i]); 3880 3862 i++; 3881 cmd.mFilter.mProductId = a rgv [i];3882 } 3883 else if (strcmp(a rgv [i], "-revision") == 0)3884 { 3885 if (a rgc <= i + 1)3886 return errorArgument("Missing argument to '%s'", a rgv[i]);3863 cmd.mFilter.mProductId = a->argv [i]; 3864 } 3865 else if (strcmp(a->argv [i], "-revision") == 0) 3866 { 3867 if (a->argc <= i + 1) 3868 return errorArgument("Missing argument to '%s'", a->argv[i]); 3887 3869 i++; 3888 cmd.mFilter.mRevision = a rgv [i];3889 } 3890 else if (strcmp(a rgv [i], "-manufacturer") == 0)3891 { 3892 if (a rgc <= i + 1)3893 return errorArgument("Missing argument to '%s'", a rgv[i]);3870 cmd.mFilter.mRevision = a->argv [i]; 3871 } 3872 else if (strcmp(a->argv [i], "-manufacturer") == 0) 3873 { 3874 if (a->argc <= i + 1) 3875 return errorArgument("Missing argument to '%s'", a->argv[i]); 3894 3876 i++; 3895 cmd.mFilter.mManufacturer = a rgv [i];3896 } 3897 else if (strcmp(a rgv [i], "-product") == 0)3898 { 3899 if (a rgc <= i + 1)3900 return errorArgument("Missing argument to '%s'", a rgv[i]);3877 cmd.mFilter.mManufacturer = a->argv [i]; 3878 } 3879 else if (strcmp(a->argv [i], "-product") == 0) 3880 { 3881 if (a->argc <= i + 1) 3882 return errorArgument("Missing argument to '%s'", a->argv[i]); 3901 3883 i++; 3902 cmd.mFilter.mProduct = a rgv [i];3903 } 3904 else if (strcmp(a rgv [i], "-remote") == 0)3905 { 3906 if (a rgc <= i + 1)3907 return errorArgument("Missing argument to '%s'", a rgv[i]);3884 cmd.mFilter.mProduct = a->argv [i]; 3885 } 3886 else if (strcmp(a->argv [i], "-remote") == 0) 3887 { 3888 if (a->argc <= i + 1) 3889 return errorArgument("Missing argument to '%s'", a->argv[i]); 3908 3890 i++; 3909 cmd.mFilter.mRemote = a rgv[i];3910 } 3911 else if (strcmp(a rgv [i], "-serialnumber") == 0)3912 { 3913 if (a rgc <= i + 1)3914 return errorArgument("Missing argument to '%s'", a rgv[i]);3891 cmd.mFilter.mRemote = a->argv[i]; 3892 } 3893 else if (strcmp(a->argv [i], "-serialnumber") == 0) 3894 { 3895 if (a->argc <= i + 1) 3896 return errorArgument("Missing argument to '%s'", a->argv[i]); 3915 3897 i++; 3916 cmd.mFilter.mSerialNumber = a rgv [i];3917 } 3918 else if (strcmp(a rgv [i], "-maskedinterfaces") == 0)3919 { 3920 if (a rgc <= i + 1)3921 return errorArgument("Missing argument to '%s'", a rgv[i]);3898 cmd.mFilter.mSerialNumber = a->argv [i]; 3899 } 3900 else if (strcmp(a->argv [i], "-maskedinterfaces") == 0) 3901 { 3902 if (a->argc <= i + 1) 3903 return errorArgument("Missing argument to '%s'", a->argv[i]); 3922 3904 i++; 3923 3905 uint32_t u32; 3924 rc = RTStrToUInt32Full(a rgv[i], 0, &u32);3906 rc = RTStrToUInt32Full(a->argv[i], 0, &u32); 3925 3907 if (RT_FAILURE(rc)) 3926 return errorArgument("Failed to convert the -maskedinterfaces value '%s' to a number, rc=%Rrc", a rgv[i], rc);3908 return errorArgument("Failed to convert the -maskedinterfaces value '%s' to a number, rc=%Rrc", a->argv[i], rc); 3927 3909 cmd.mFilter.mMaskedInterfaces = u32; 3928 3910 } 3929 else if (strcmp(a rgv [i], "-action") == 0)3930 { 3931 if (a rgc <= i + 1)3932 return errorArgument("Missing argument to '%s'", a rgv[i]);3911 else if (strcmp(a->argv [i], "-action") == 0) 3912 { 3913 if (a->argc <= i + 1) 3914 return errorArgument("Missing argument to '%s'", a->argv[i]); 3933 3915 i++; 3934 if (strcmp (a rgv [i], "ignore") == 0)3916 if (strcmp (a->argv [i], "ignore") == 0) 3935 3917 cmd.mFilter.mAction = USBDeviceFilterAction_Ignore; 3936 else if (strcmp (a rgv [i], "hold") == 0)3918 else if (strcmp (a->argv [i], "hold") == 0) 3937 3919 cmd.mFilter.mAction = USBDeviceFilterAction_Hold; 3938 3920 else 3939 return errorArgument("Invalid USB filter action '%s'", a rgv[i]);3921 return errorArgument("Invalid USB filter action '%s'", a->argv[i]); 3940 3922 } 3941 3923 else 3942 3924 return errorSyntax(cmd.mAction == USBFilterCmd::Add ? USAGE_USBFILTER_ADD : USAGE_USBFILTER_MODIFY, 3943 "Unknown option '%s'", a rgv[i]);3925 "Unknown option '%s'", a->argv[i]); 3944 3926 } 3945 3927 … … 3967 3949 { 3968 3950 /* at least: 0: command, 1: index, 2: -target, 3: <target value> */ 3969 if (a rgc < 4)3951 if (a->argc < 4) 3970 3952 return errorSyntax(USAGE_USBFILTER_REMOVE, "Not enough parameters"); 3971 3953 3972 for (int i = 2; i < a rgc; i++)3973 { 3974 if (strcmp(a rgv [i], "-target") == 0)3975 { 3976 if (a rgc <= i + 1 || !*argv[i+1])3977 return errorArgument("Missing argument to '%s'", a rgv[i]);3954 for (int i = 2; i < a->argc; i++) 3955 { 3956 if (strcmp(a->argv [i], "-target") == 0) 3957 { 3958 if (a->argc <= i + 1 || !*a->argv[i+1]) 3959 return errorArgument("Missing argument to '%s'", a->argv[i]); 3978 3960 i++; 3979 if (strcmp (a rgv [i], "global") == 0)3961 if (strcmp (a->argv [i], "global") == 0) 3980 3962 cmd.mGlobal = true; 3981 3963 else 3982 3964 { 3983 3965 /* assume it's a UUID of a machine */ 3984 rc = a VirtualBox->GetMachine(Guid(argv[i]), cmd.mMachine.asOutParam());3966 rc = a->virtualBox->GetMachine(Guid(a->argv[i]), cmd.mMachine.asOutParam()); 3985 3967 if (FAILED(rc) || !cmd.mMachine) 3986 3968 { 3987 3969 /* must be a name */ 3988 CHECK_ERROR_RET(a VirtualBox, FindMachine(Bstr(argv[i]), cmd.mMachine.asOutParam()), 1);3970 CHECK_ERROR_RET(a->virtualBox, FindMachine(Bstr(a->argv[i]), cmd.mMachine.asOutParam()), 1); 3989 3971 } 3990 3972 } … … 4007 3989 ComPtr <IUSBController> ctl; 4008 3990 if (cmd.mGlobal) 4009 CHECK_ERROR_RET (a VirtualBox, COMGETTER(Host) (host.asOutParam()), 1);3991 CHECK_ERROR_RET (a->virtualBox, COMGETTER(Host) (host.asOutParam()), 1); 4010 3992 else 4011 3993 { … … 4013 3995 cmd.mMachine->COMGETTER(Id)(uuid.asOutParam()); 4014 3996 /* open a session for the VM */ 4015 CHECK_ERROR_RET (a VirtualBox, OpenSession(aSession, uuid), 1);3997 CHECK_ERROR_RET (a->virtualBox, OpenSession(a->session, uuid), 1); 4016 3998 /* get the mutable session machine */ 4017 a Session->COMGETTER(Machine)(cmd.mMachine.asOutParam());3999 a->session->COMGETTER(Machine)(cmd.mMachine.asOutParam()); 4018 4000 /* and get the USB controller */ 4019 4001 CHECK_ERROR_RET (cmd.mMachine, COMGETTER(USBController) (ctl.asOutParam()), 1); … … 4155 4137 /* commit and close the session */ 4156 4138 CHECK_ERROR(cmd.mMachine, SaveSettings()); 4157 a Session->Close();4139 a->session->Close(); 4158 4140 } 4159 4141 … … 4161 4143 } 4162 4144 4163 static int handleSharedFolder (int argc, char *argv[], 4164 ComPtr <IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 4145 static int handleSharedFolder (HandlerArg *a) 4165 4146 { 4166 4147 HRESULT rc; 4167 4148 4168 4149 /* we need at least a command and target */ 4169 if (a rgc < 2)4150 if (a->argc < 2) 4170 4151 return errorSyntax(USAGE_SHAREDFOLDER, "Not enough parameters"); 4171 4152 4172 4153 ComPtr<IMachine> machine; 4173 4154 /* assume it's a UUID */ 4174 rc = a VirtualBox->GetMachine(Guid(argv[1]), machine.asOutParam());4155 rc = a->virtualBox->GetMachine(Guid(a->argv[1]), machine.asOutParam()); 4175 4156 if (FAILED(rc) || !machine) 4176 4157 { 4177 4158 /* must be a name */ 4178 CHECK_ERROR(a VirtualBox, FindMachine(Bstr(argv[1]), machine.asOutParam()));4159 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[1]), machine.asOutParam())); 4179 4160 } 4180 4161 if (!machine) … … 4183 4164 machine->COMGETTER(Id)(uuid.asOutParam()); 4184 4165 4185 if (strcmp(a rgv[0], "add") == 0)4166 if (strcmp(a->argv[0], "add") == 0) 4186 4167 { 4187 4168 /* we need at least four more parameters */ 4188 if (a rgc < 5)4169 if (a->argc < 5) 4189 4170 return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Not enough parameters"); 4190 4171 … … 4194 4175 bool fWritable = true; 4195 4176 4196 for (int i = 2; i < a rgc; i++)4197 { 4198 if (strcmp(a rgv[i], "-name") == 0)4199 { 4200 if (a rgc <= i + 1 || !*argv[i+1])4201 return errorArgument("Missing argument to '%s'", a rgv[i]);4177 for (int i = 2; i < a->argc; i++) 4178 { 4179 if (strcmp(a->argv[i], "-name") == 0) 4180 { 4181 if (a->argc <= i + 1 || !*a->argv[i+1]) 4182 return errorArgument("Missing argument to '%s'", a->argv[i]); 4202 4183 i++; 4203 name = a rgv[i];4204 } 4205 else if (strcmp(a rgv[i], "-hostpath") == 0)4206 { 4207 if (a rgc <= i + 1 || !*argv[i+1])4208 return errorArgument("Missing argument to '%s'", a rgv[i]);4184 name = a->argv[i]; 4185 } 4186 else if (strcmp(a->argv[i], "-hostpath") == 0) 4187 { 4188 if (a->argc <= i + 1 || !*a->argv[i+1]) 4189 return errorArgument("Missing argument to '%s'", a->argv[i]); 4209 4190 i++; 4210 hostpath = a rgv[i];4211 } 4212 else if (strcmp(a rgv[i], "-readonly") == 0)4191 hostpath = a->argv[i]; 4192 } 4193 else if (strcmp(a->argv[i], "-readonly") == 0) 4213 4194 { 4214 4195 fWritable = false; 4215 4196 } 4216 else if (strcmp(a rgv[i], "-transient") == 0)4197 else if (strcmp(a->argv[i], "-transient") == 0) 4217 4198 { 4218 4199 fTransient = true; 4219 4200 } 4220 4201 else 4221 return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Invalid parameter '%s'", Utf8Str(a rgv[i]).raw());4202 return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw()); 4222 4203 } 4223 4204 … … 4236 4217 4237 4218 /* open an existing session for the VM */ 4238 CHECK_ERROR_RET(a VirtualBox, OpenExistingSession (aSession, uuid), 1);4219 CHECK_ERROR_RET(a->virtualBox, OpenExistingSession (a->session, uuid), 1); 4239 4220 /* get the session machine */ 4240 CHECK_ERROR_RET(a Session, COMGETTER(Machine)(machine.asOutParam()), 1);4221 CHECK_ERROR_RET(a->session, COMGETTER(Machine)(machine.asOutParam()), 1); 4241 4222 /* get the session console */ 4242 CHECK_ERROR_RET(a Session, COMGETTER(Console)(console.asOutParam()), 1);4223 CHECK_ERROR_RET(a->session, COMGETTER(Console)(console.asOutParam()), 1); 4243 4224 4244 4225 CHECK_ERROR(console, CreateSharedFolder(Bstr(name), Bstr(hostpath), fWritable)); 4245 4226 4246 4227 if (console) 4247 a Session->Close();4228 a->session->Close(); 4248 4229 } 4249 4230 else 4250 4231 { 4251 4232 /* open a session for the VM */ 4252 CHECK_ERROR_RET (a VirtualBox, OpenSession(aSession, uuid), 1);4233 CHECK_ERROR_RET (a->virtualBox, OpenSession(a->session, uuid), 1); 4253 4234 4254 4235 /* get the mutable session machine */ 4255 a Session->COMGETTER(Machine)(machine.asOutParam());4236 a->session->COMGETTER(Machine)(machine.asOutParam()); 4256 4237 4257 4238 CHECK_ERROR(machine, CreateSharedFolder(Bstr(name), Bstr(hostpath), fWritable)); … … 4260 4241 CHECK_ERROR(machine, SaveSettings()); 4261 4242 4262 a Session->Close();4263 } 4264 } 4265 else if (strcmp(a rgv[0], "remove") == 0)4243 a->session->Close(); 4244 } 4245 } 4246 else if (strcmp(a->argv[0], "remove") == 0) 4266 4247 { 4267 4248 /* we need at least two more parameters */ 4268 if (a rgc < 3)4249 if (a->argc < 3) 4269 4250 return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Not enough parameters"); 4270 4251 … … 4272 4253 bool fTransient = false; 4273 4254 4274 for (int i = 2; i < a rgc; i++)4275 { 4276 if (strcmp(a rgv[i], "-name") == 0)4277 { 4278 if (a rgc <= i + 1 || !*argv[i+1])4279 return errorArgument("Missing argument to '%s'", a rgv[i]);4255 for (int i = 2; i < a->argc; i++) 4256 { 4257 if (strcmp(a->argv[i], "-name") == 0) 4258 { 4259 if (a->argc <= i + 1 || !*a->argv[i+1]) 4260 return errorArgument("Missing argument to '%s'", a->argv[i]); 4280 4261 i++; 4281 name = a rgv[i];4282 } 4283 else if (strcmp(a rgv[i], "-transient") == 0)4262 name = a->argv[i]; 4263 } 4264 else if (strcmp(a->argv[i], "-transient") == 0) 4284 4265 { 4285 4266 fTransient = true; 4286 4267 } 4287 4268 else 4288 return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Invalid parameter '%s'", Utf8Str(a rgv[i]).raw());4269 return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw()); 4289 4270 } 4290 4271 … … 4298 4279 4299 4280 /* open an existing session for the VM */ 4300 CHECK_ERROR_RET(a VirtualBox, OpenExistingSession (aSession, uuid), 1);4281 CHECK_ERROR_RET(a->virtualBox, OpenExistingSession (a->session, uuid), 1); 4301 4282 /* get the session machine */ 4302 CHECK_ERROR_RET(a Session, COMGETTER(Machine)(machine.asOutParam()), 1);4283 CHECK_ERROR_RET(a->session, COMGETTER(Machine)(machine.asOutParam()), 1); 4303 4284 /* get the session console */ 4304 CHECK_ERROR_RET(a Session, COMGETTER(Console)(console.asOutParam()), 1);4285 CHECK_ERROR_RET(a->session, COMGETTER(Console)(console.asOutParam()), 1); 4305 4286 4306 4287 CHECK_ERROR(console, RemoveSharedFolder(Bstr(name))); 4307 4288 4308 4289 if (console) 4309 a Session->Close();4290 a->session->Close(); 4310 4291 } 4311 4292 else 4312 4293 { 4313 4294 /* open a session for the VM */ 4314 CHECK_ERROR_RET (a VirtualBox, OpenSession(aSession, uuid), 1);4295 CHECK_ERROR_RET (a->virtualBox, OpenSession(a->session, uuid), 1); 4315 4296 4316 4297 /* get the mutable session machine */ 4317 a Session->COMGETTER(Machine)(machine.asOutParam());4298 a->session->COMGETTER(Machine)(machine.asOutParam()); 4318 4299 4319 4300 CHECK_ERROR(machine, RemoveSharedFolder(Bstr(name))); … … 4321 4302 /* commit and close the session */ 4322 4303 CHECK_ERROR(machine, SaveSettings()); 4323 a Session->Close();4304 a->session->Close(); 4324 4305 } 4325 4306 } 4326 4307 else 4327 return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", Utf8Str(a rgv[0]).raw());4308 return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", Utf8Str(a->argv[0]).raw()); 4328 4309 4329 4310 return 0; 4330 4311 } 4331 4312 4332 static int handleVMStatistics(int argc, char *argv[], 4333 ComPtr<IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 4313 static int handleVMStatistics(HandlerArg *a) 4334 4314 { 4335 4315 HRESULT rc; 4336 4316 4337 4317 /* at least one option: the UUID or name of the VM */ 4338 if (a rgc < 1)4318 if (a->argc < 1) 4339 4319 return errorSyntax(USAGE_VM_STATISTICS, "Incorrect number of parameters"); 4340 4320 4341 4321 /* try to find the given machine */ 4342 4322 ComPtr <IMachine> machine; 4343 Guid uuid (a rgv[0]);4323 Guid uuid (a->argv[0]); 4344 4324 if (!uuid.isEmpty()) 4345 CHECK_ERROR(a VirtualBox, GetMachine(uuid, machine.asOutParam()));4325 CHECK_ERROR(a->virtualBox, GetMachine(uuid, machine.asOutParam())); 4346 4326 else 4347 4327 { 4348 CHECK_ERROR(a VirtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));4328 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 4349 4329 if (SUCCEEDED (rc)) 4350 4330 machine->COMGETTER(Id)(uuid.asOutParam()); … … 4357 4337 bool fWithDescriptions = false; 4358 4338 const char *pszPattern = NULL; /* all */ 4359 for (int i = 1; i < a rgc; i++)4360 { 4361 if (!strcmp(a rgv[i], "-pattern"))4339 for (int i = 1; i < a->argc; i++) 4340 { 4341 if (!strcmp(a->argv[i], "-pattern")) 4362 4342 { 4363 4343 if (pszPattern) 4364 4344 return errorSyntax(USAGE_VM_STATISTICS, "Multiple -patterns options is not permitted"); 4365 if (i + 1 >= a rgc)4366 return errorArgument("Missing argument to '%s'", a rgv[i]);4367 pszPattern = a rgv[++i];4368 } 4369 else if (!strcmp(a rgv[i], "-descriptions"))4345 if (i + 1 >= a->argc) 4346 return errorArgument("Missing argument to '%s'", a->argv[i]); 4347 pszPattern = a->argv[++i]; 4348 } 4349 else if (!strcmp(a->argv[i], "-descriptions")) 4370 4350 fWithDescriptions = true; 4371 4351 /* add: -file <filename> and -formatted */ 4372 else if (!strcmp(a rgv[i], "-reset"))4352 else if (!strcmp(a->argv[i], "-reset")) 4373 4353 fReset = true; 4374 4354 else 4375 return errorSyntax(USAGE_VM_STATISTICS, "Unknown option '%s'", a rgv[i]);4355 return errorSyntax(USAGE_VM_STATISTICS, "Unknown option '%s'", a->argv[i]); 4376 4356 } 4377 4357 if (fReset && fWithDescriptions) … … 4380 4360 4381 4361 /* open an existing session for the VM. */ 4382 CHECK_ERROR(a VirtualBox, OpenExistingSession(aSession, uuid));4362 CHECK_ERROR(a->virtualBox, OpenExistingSession(a->session, uuid)); 4383 4363 if (SUCCEEDED(rc)) 4384 4364 { 4385 4365 /* get the session console. */ 4386 4366 ComPtr <IConsole> console; 4387 CHECK_ERROR(a Session, COMGETTER(Console)(console.asOutParam()));4367 CHECK_ERROR(a->session, COMGETTER(Console)(console.asOutParam())); 4388 4368 if (SUCCEEDED(rc)) 4389 4369 { … … 4409 4389 } 4410 4390 } 4411 a Session->Close();4391 a->session->Close(); 4412 4392 } 4413 4393 } … … 4716 4696 4717 4697 #ifdef USE_XPCOM_QUEUE 4718 NS_GetMainEventQ(getter_AddRefs(g_pEventQ)); 4698 nsCOMPtr<nsIEventQueue> eventQ; 4699 NS_GetMainEventQ(getter_AddRefs(eventQ)); 4719 4700 #endif 4720 4701 4721 4702 if (!checkForAutoConvertedSettings (virtualBox, session, fConvertSettings)) 4722 4703 break; 4704 4705 #ifdef USE_XPCOM_QUEUE 4706 HandlerArg handlerArg = { 0, NULL, eventQ, virtualBox, session }; 4707 #else 4708 HandlerArg handlerArg = { 0, NULL, virtualBox, session }; 4709 #endif 4723 4710 4724 4711 /* … … 4774 4761 if (strcmp(commandHandlers[commandIndex].command, argv[iCmd]) == 0) 4775 4762 { 4776 rc = commandHandlers[commandIndex].handler(argc - iCmdArg, &argv[iCmdArg], virtualBox, session); 4763 handlerArg.argc = argc - iCmdArg; 4764 handlerArg.argv = &argv[iCmdArg]; 4765 rc = commandHandlers[commandIndex].handler(&handlerArg); 4777 4766 break; 4778 4767 } … … 4791 4780 4792 4781 #ifdef USE_XPCOM_QUEUE 4793 g_pEventQ->ProcessPendingEvents();4782 eventQ->ProcessPendingEvents(); 4794 4783 #endif 4795 4784 -
trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h
r15602 r16052 90 90 typedef uint64_t USAGECATEGORY; 91 91 92 /** command handler argument */ 93 struct HandlerArg 94 { 95 int argc; 96 char **argv; 97 #ifdef USE_XPCOM_QUEUE 98 nsCOMPtr<nsIEventQueue> eventQ; 99 #endif 100 ComPtr<IVirtualBox> virtualBox; 101 ComPtr<ISession> session; 102 }; 103 92 104 /** flag whether we're in internal mode */ 93 105 extern bool g_fInternalMode; 94 95 #ifndef VBOX_ONLY_DOCS96 # ifdef USE_XPCOM_QUEUE97 /** A pointer to the event queue, set by main() before calling any handlers. */98 extern nsCOMPtr<nsIEventQueue> g_pEventQ;99 # endif100 #endif /* !VBOX_ONLY_DOCS */101 106 102 107 /** showVMInfo details */ … … 113 118 * Prototypes 114 119 */ 120 115 121 /* VBoxManage.cpp */ 116 122 int errorSyntax(USAGECATEGORY u64Cmd, const char *pszFormat, ...); … … 122 128 void showProgress(ComPtr<IProgress> progress); 123 129 124 int handleInternalCommands(int argc, char *argv[], 125 ComPtr <IVirtualBox> aVirtualBox, ComPtr<ISession> aSession); 130 int handleInternalCommands(HandlerArg *a); 126 131 #endif /* !VBOX_ONLY_DOCS */ 127 132 … … 129 134 extern void usageGuestProperty(void); 130 135 #ifndef VBOX_ONLY_DOCS 131 extern int handleGuestProperty(int argc, char *argv[], 132 ComPtr<IVirtualBox> aVirtualBox, ComPtr<ISession> aSession); 136 extern int handleGuestProperty(HandlerArg *a); 133 137 134 138 /* VBoxManageVMInfo.cpp */ 135 139 void showSnapshots(ComPtr<ISnapshot> rootSnapshot, VMINFO_DETAILS details, const com::Bstr &prefix = "", int level = 0); 136 int handleShowVMInfo(int argc, char *argv[], 137 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 140 int handleShowVMInfo(HandlerArg *a); 138 141 HRESULT showVMInfo(ComPtr <IVirtualBox> virtualBox, ComPtr<IMachine> machine, 139 142 ComPtr <IConsole> console = ComPtr <IConsole> (), … … 141 144 142 145 /* VBoxManageList.cpp */ 143 int handleList(int argc, char *argv[], 144 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 146 int handleList(HandlerArg *a); 145 147 146 148 /* VBoxManageMetrics.cpp */ 147 int handleMetrics(int argc, char *argv[], 148 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 149 int handleMetrics(HandlerArg *a); 149 150 150 151 /* VBoxManageDisk.cpp */ 151 int handleCreateHardDisk(int argc, char *argv[], 152 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 153 int handleModifyHardDisk(int argc, char *argv[], 154 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 155 int handleCloneHardDisk(int argc, char *argv[], 156 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 157 int handleConvertHardDisk(int argc, char **argv); 152 int handleCreateHardDisk(HandlerArg *a); 153 int handleModifyHardDisk(HandlerArg *a); 154 int handleCloneHardDisk(HandlerArg *a); 158 155 int handleConvertFromRaw(int argc, char *argv[]); 159 int handleAddiSCSIDisk(int argc, char *argv[], 160 ComPtr <IVirtualBox> aVirtualBox, ComPtr<ISession> aSession); 161 int handleShowHardDiskInfo(int argc, char *argv[], 162 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 163 int handleOpenMedium(int argc, char *argv[], 164 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 165 int handleCloseMedium(int argc, char *argv[], 166 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session); 156 int handleAddiSCSIDisk(HandlerArg *a); 157 int handleShowHardDiskInfo(HandlerArg *a); 158 int handleOpenMedium(HandlerArg *a); 159 int handleCloseMedium(HandlerArg *a); 167 160 168 161 /* VBoxManageUSB.cpp */ -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp
r15693 r16052 54 54 55 55 56 int handleCreateHardDisk(int argc, char *argv[], 57 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 56 int handleCreateHardDisk(HandlerArg *a) 58 57 { 59 58 HRESULT rc; … … 67 66 68 67 /* let's have a closer look at the arguments */ 69 for (int i = 0; i < a rgc; i++)70 { 71 if (strcmp(a rgv[i], "-filename") == 0)72 { 73 if (a rgc <= i + 1)74 return errorArgument("Missing argument to '%s'", a rgv[i]);75 i++; 76 filename = a rgv[i];77 } 78 else if (strcmp(a rgv[i], "-size") == 0)79 { 80 if (a rgc <= i + 1)81 return errorArgument("Missing argument to '%s'", a rgv[i]);82 i++; 83 sizeMB = RTStrToUInt64(a rgv[i]);84 } 85 else if (strcmp(a rgv[i], "-format") == 0)86 { 87 if (a rgc <= i + 1)88 return errorArgument("Missing argument to '%s'", a rgv[i]);89 i++; 90 format = a rgv[i];91 } 92 else if (strcmp(a rgv[i], "-static") == 0)68 for (int i = 0; i < a->argc; i++) 69 { 70 if (strcmp(a->argv[i], "-filename") == 0) 71 { 72 if (a->argc <= i + 1) 73 return errorArgument("Missing argument to '%s'", a->argv[i]); 74 i++; 75 filename = a->argv[i]; 76 } 77 else if (strcmp(a->argv[i], "-size") == 0) 78 { 79 if (a->argc <= i + 1) 80 return errorArgument("Missing argument to '%s'", a->argv[i]); 81 i++; 82 sizeMB = RTStrToUInt64(a->argv[i]); 83 } 84 else if (strcmp(a->argv[i], "-format") == 0) 85 { 86 if (a->argc <= i + 1) 87 return errorArgument("Missing argument to '%s'", a->argv[i]); 88 i++; 89 format = a->argv[i]; 90 } 91 else if (strcmp(a->argv[i], "-static") == 0) 93 92 { 94 93 fStatic = true; 95 94 } 96 else if (strcmp(a rgv[i], "-comment") == 0)97 { 98 if (a rgc <= i + 1)99 return errorArgument("Missing argument to '%s'", a rgv[i]);100 i++; 101 comment = a rgv[i];102 } 103 else if (strcmp(a rgv[i], "-register") == 0)95 else if (strcmp(a->argv[i], "-comment") == 0) 96 { 97 if (a->argc <= i + 1) 98 return errorArgument("Missing argument to '%s'", a->argv[i]); 99 i++; 100 comment = a->argv[i]; 101 } 102 else if (strcmp(a->argv[i], "-register") == 0) 104 103 { 105 104 fRegister = true; 106 105 } 107 else if (strcmp(a rgv[i], "-type") == 0)108 { 109 if (a rgc <= i + 1)110 return errorArgument("Missing argument to '%s'", a rgv[i]);111 i++; 112 type = a rgv[i];106 else if (strcmp(a->argv[i], "-type") == 0) 107 { 108 if (a->argc <= i + 1) 109 return errorArgument("Missing argument to '%s'", a->argv[i]); 110 i++; 111 type = a->argv[i]; 113 112 } 114 113 else 115 return errorSyntax(USAGE_CREATEHD, "Invalid parameter '%s'", Utf8Str(a rgv[i]).raw());114 return errorSyntax(USAGE_CREATEHD, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw()); 116 115 } 117 116 /* check the outcome */ … … 123 122 124 123 ComPtr<IHardDisk2> hardDisk; 125 CHECK_ERROR( virtualBox, CreateHardDisk2(format, filename, hardDisk.asOutParam()));124 CHECK_ERROR(a->virtualBox, CreateHardDisk2(format, filename, hardDisk.asOutParam())); 126 125 if (SUCCEEDED(rc) && hardDisk) 127 126 { … … 207 206 208 207 209 int handleModifyHardDisk(int argc, char *argv[], 210 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 208 int handleModifyHardDisk(HandlerArg *a) 211 209 { 212 210 HRESULT rc; 213 211 214 212 /* The uuid/filename and a command */ 215 if (a rgc < 2)213 if (a->argc < 2) 216 214 return errorSyntax(USAGE_MODIFYHD, "Incorrect number of parameters"); 217 215 … … 220 218 221 219 /* first guess is that it's a UUID */ 222 Guid uuid(a rgv[0]);223 rc = virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam());220 Guid uuid(a->argv[0]); 221 rc = a->virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam()); 224 222 /* no? then it must be a filename */ 225 223 if (!hardDisk) 226 224 { 227 filepath = a rgv[0];228 CHECK_ERROR( virtualBox, FindHardDisk2(filepath, hardDisk.asOutParam()));225 filepath = a->argv[0]; 226 CHECK_ERROR(a->virtualBox, FindHardDisk2(filepath, hardDisk.asOutParam())); 229 227 } 230 228 231 229 /* let's find out which command */ 232 if (strcmp(a rgv[1], "settype") == 0)230 if (strcmp(a->argv[1], "settype") == 0) 233 231 { 234 232 /* hard disk must be registered */ … … 237 235 char *type = NULL; 238 236 239 if (a rgc <= 2)237 if (a->argc <= 2) 240 238 return errorArgument("Missing argument to for settype"); 241 239 242 type = a rgv[2];240 type = a->argv[2]; 243 241 244 242 HardDiskType_T hddType; … … 269 267 return errorArgument("Hard disk image not registered"); 270 268 } 271 else if (strcmp(a rgv[1], "compact") == 0)269 else if (strcmp(a->argv[1], "compact") == 0) 272 270 { 273 271 #if 1 … … 278 276 if (!hardDisk) 279 277 { 280 virtualBox->OpenHardDisk2(Bstr(argv[0]), hardDisk.asOutParam());278 a->virtualBox->OpenHardDisk2(Bstr(a->argv[0]), hardDisk.asOutParam()); 281 279 if (!hardDisk) 282 280 return errorArgument("Hard disk image not found"); … … 306 304 } 307 305 else 308 return errorSyntax(USAGE_MODIFYHD, "Invalid parameter '%s'", Utf8Str(a rgv[1]).raw());306 return errorSyntax(USAGE_MODIFYHD, "Invalid parameter '%s'", Utf8Str(a->argv[1]).raw()); 309 307 310 308 return SUCCEEDED(rc) ? 0 : 1; 311 309 } 312 310 313 int handleCloneHardDisk(int argc, char *argv[], 314 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 311 int handleCloneHardDisk(HandlerArg *a) 315 312 { 316 313 Bstr src, dst; … … 321 318 322 319 /* Parse the arguments. */ 323 for (int i = 0; i < a rgc; i++)324 { 325 if (strcmp(a rgv[i], "-format") == 0)326 { 327 if (a rgc <= i + 1)328 { 329 return errorArgument("Missing argument to '%s'", a rgv[i]);330 } 331 i++; 332 format = a rgv[i];333 } 334 else if (strcmp(a rgv[i], "-remember") == 0 ||335 strcmp(a rgv[i], "-register") == 0 /* backward compatiblity */)320 for (int i = 0; i < a->argc; i++) 321 { 322 if (strcmp(a->argv[i], "-format") == 0) 323 { 324 if (a->argc <= i + 1) 325 { 326 return errorArgument("Missing argument to '%s'", a->argv[i]); 327 } 328 i++; 329 format = a->argv[i]; 330 } 331 else if (strcmp(a->argv[i], "-remember") == 0 || 332 strcmp(a->argv[i], "-register") == 0 /* backward compatiblity */) 336 333 { 337 334 remember = true; … … 339 336 else if (src.isEmpty()) 340 337 { 341 src = a rgv[i];338 src = a->argv[i]; 342 339 } 343 340 else if (dst.isEmpty()) 344 341 { 345 dst = a rgv[i];342 dst = a->argv[i]; 346 343 } 347 344 else 348 345 { 349 return errorSyntax(USAGE_CLONEHD, "Invalid parameter '%s'", Utf8Str(a rgv[i]).raw());346 return errorSyntax(USAGE_CLONEHD, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw()); 350 347 } 351 348 } … … 362 359 /* first guess is that it's a UUID */ 363 360 Guid uuid(Utf8Str(src).raw()); 364 rc = virtualBox->GetHardDisk2(uuid, srcDisk.asOutParam());361 rc = a->virtualBox->GetHardDisk2(uuid, srcDisk.asOutParam()); 365 362 /* no? then it must be a filename */ 366 363 if (FAILED (rc)) 367 364 { 368 rc = virtualBox->FindHardDisk2(src, srcDisk.asOutParam());365 rc = a->virtualBox->FindHardDisk2(src, srcDisk.asOutParam()); 369 366 /* no? well, then it's an unkwnown image */ 370 367 if (FAILED (rc)) 371 368 { 372 CHECK_ERROR( virtualBox, OpenHardDisk2(src, srcDisk.asOutParam()));369 CHECK_ERROR(a->virtualBox, OpenHardDisk2(src, srcDisk.asOutParam())); 373 370 if (SUCCEEDED (rc)) 374 371 { … … 389 386 } 390 387 391 CHECK_ERROR_BREAK( virtualBox, CreateHardDisk2(format, dst, dstDisk.asOutParam()));388 CHECK_ERROR_BREAK(a->virtualBox, CreateHardDisk2(format, dst, dstDisk.asOutParam())); 392 389 393 390 ComPtr<IProgress> progress; … … 591 588 } 592 589 593 int handleAddiSCSIDisk(int argc, char *argv[], 594 ComPtr <IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 590 int handleAddiSCSIDisk(HandlerArg *a) 595 591 { 596 592 HRESULT rc; … … 605 601 606 602 /* at least server and target */ 607 if (a rgc < 4)603 if (a->argc < 4) 608 604 return errorSyntax(USAGE_ADDISCSIDISK, "Not enough parameters"); 609 605 610 606 /* let's have a closer look at the arguments */ 611 for (int i = 0; i < a rgc; i++)612 { 613 if (strcmp(a rgv[i], "-server") == 0)614 { 615 if (a rgc <= i + 1)616 return errorArgument("Missing argument to '%s'", a rgv[i]);617 i++; 618 server = a rgv[i];619 } 620 else if (strcmp(a rgv[i], "-target") == 0)621 { 622 if (a rgc <= i + 1)623 return errorArgument("Missing argument to '%s'", a rgv[i]);624 i++; 625 target = a rgv[i];626 } 627 else if (strcmp(a rgv[i], "-port") == 0)628 { 629 if (a rgc <= i + 1)630 return errorArgument("Missing argument to '%s'", a rgv[i]);631 i++; 632 port = a rgv[i];633 } 634 else if (strcmp(a rgv[i], "-lun") == 0)635 { 636 if (a rgc <= i + 1)637 return errorArgument("Missing argument to '%s'", a rgv[i]);638 i++; 639 lun = a rgv[i];640 } 641 else if (strcmp(a rgv[i], "-encodedlun") == 0)642 { 643 if (a rgc <= i + 1)644 return errorArgument("Missing argument to '%s'", a rgv[i]);645 i++; 646 lun = BstrFmt("enc%s", a rgv[i]);647 } 648 else if (strcmp(a rgv[i], "-username") == 0)649 { 650 if (a rgc <= i + 1)651 return errorArgument("Missing argument to '%s'", a rgv[i]);652 i++; 653 username = a rgv[i];654 } 655 else if (strcmp(a rgv[i], "-password") == 0)656 { 657 if (a rgc <= i + 1)658 return errorArgument("Missing argument to '%s'", a rgv[i]);659 i++; 660 password = a rgv[i];661 } 662 else if (strcmp(a rgv[i], "-comment") == 0)663 { 664 if (a rgc <= i + 1)665 return errorArgument("Missing argument to '%s'", a rgv[i]);666 i++; 667 comment = a rgv[i];668 } 669 else if (strcmp(a rgv[i], "-intnet") == 0)607 for (int i = 0; i < a->argc; i++) 608 { 609 if (strcmp(a->argv[i], "-server") == 0) 610 { 611 if (a->argc <= i + 1) 612 return errorArgument("Missing argument to '%s'", a->argv[i]); 613 i++; 614 server = a->argv[i]; 615 } 616 else if (strcmp(a->argv[i], "-target") == 0) 617 { 618 if (a->argc <= i + 1) 619 return errorArgument("Missing argument to '%s'", a->argv[i]); 620 i++; 621 target = a->argv[i]; 622 } 623 else if (strcmp(a->argv[i], "-port") == 0) 624 { 625 if (a->argc <= i + 1) 626 return errorArgument("Missing argument to '%s'", a->argv[i]); 627 i++; 628 port = a->argv[i]; 629 } 630 else if (strcmp(a->argv[i], "-lun") == 0) 631 { 632 if (a->argc <= i + 1) 633 return errorArgument("Missing argument to '%s'", a->argv[i]); 634 i++; 635 lun = a->argv[i]; 636 } 637 else if (strcmp(a->argv[i], "-encodedlun") == 0) 638 { 639 if (a->argc <= i + 1) 640 return errorArgument("Missing argument to '%s'", a->argv[i]); 641 i++; 642 lun = BstrFmt("enc%s", a->argv[i]); 643 } 644 else if (strcmp(a->argv[i], "-username") == 0) 645 { 646 if (a->argc <= i + 1) 647 return errorArgument("Missing argument to '%s'", a->argv[i]); 648 i++; 649 username = a->argv[i]; 650 } 651 else if (strcmp(a->argv[i], "-password") == 0) 652 { 653 if (a->argc <= i + 1) 654 return errorArgument("Missing argument to '%s'", a->argv[i]); 655 i++; 656 password = a->argv[i]; 657 } 658 else if (strcmp(a->argv[i], "-comment") == 0) 659 { 660 if (a->argc <= i + 1) 661 return errorArgument("Missing argument to '%s'", a->argv[i]); 662 i++; 663 comment = a->argv[i]; 664 } 665 else if (strcmp(a->argv[i], "-intnet") == 0) 670 666 { 671 667 i++; … … 673 669 } 674 670 else 675 return errorSyntax(USAGE_ADDISCSIDISK, "Invalid parameter '%s'", Utf8Str(a rgv[i]).raw());671 return errorSyntax(USAGE_ADDISCSIDISK, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw()); 676 672 } 677 673 … … 683 679 { 684 680 ComPtr<IHardDisk2> hardDisk; 685 CHECK_ERROR_BREAK (a VirtualBox,681 CHECK_ERROR_BREAK (a->virtualBox, 686 682 CreateHardDisk2(Bstr ("iSCSI"), 687 683 BstrFmt ("%ls/%ls", server.raw(), target.raw()), … … 745 741 746 742 747 int handleShowHardDiskInfo(int argc, char *argv[], 748 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 743 int handleShowHardDiskInfo(HandlerArg *a) 749 744 { 750 745 HRESULT rc; 751 746 752 if (a rgc != 1)747 if (a->argc != 1) 753 748 return errorSyntax(USAGE_SHOWHDINFO, "Incorrect number of parameters"); 754 749 … … 759 754 760 755 /* first guess is that it's a UUID */ 761 Guid uuid(a rgv[0]);762 rc = virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam());756 Guid uuid(a->argv[0]); 757 rc = a->virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam()); 763 758 /* no? then it must be a filename */ 764 759 if (FAILED (rc)) 765 760 { 766 filepath = a rgv[0];767 rc = virtualBox->FindHardDisk2(filepath, hardDisk.asOutParam());761 filepath = a->argv[0]; 762 rc = a->virtualBox->FindHardDisk2(filepath, hardDisk.asOutParam()); 768 763 /* no? well, then it's an unkwnown image */ 769 764 if (FAILED (rc)) 770 765 { 771 CHECK_ERROR( virtualBox, OpenHardDisk2(filepath, hardDisk.asOutParam()));766 CHECK_ERROR(a->virtualBox, OpenHardDisk2(filepath, hardDisk.asOutParam())); 772 767 if (SUCCEEDED (rc)) 773 768 { … … 840 835 { 841 836 ComPtr<IMachine> machine; 842 CHECK_ERROR( virtualBox, GetMachine(machineIds[j], machine.asOutParam()));837 CHECK_ERROR(a->virtualBox, GetMachine(machineIds[j], machine.asOutParam())); 843 838 ASSERT(machine); 844 839 Bstr name; … … 869 864 } 870 865 871 int handleOpenMedium(int argc, char *argv[], 872 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 866 int handleOpenMedium(HandlerArg *a) 873 867 { 874 868 HRESULT rc; 875 869 876 if (a rgc < 2)870 if (a->argc < 2) 877 871 return errorSyntax(USAGE_REGISTERIMAGE, "Not enough parameters"); 878 872 879 Bstr filepath(a rgv[1]);880 881 if (strcmp(a rgv[0], "disk") == 0)873 Bstr filepath(a->argv[1]); 874 875 if (strcmp(a->argv[0], "disk") == 0) 882 876 { 883 877 const char *type = NULL; 884 878 /* there can be a type parameter */ 885 if ((a rgc > 2) && (argc != 4))879 if ((a->argc > 2) && (a->argc != 4)) 886 880 return errorSyntax(USAGE_REGISTERIMAGE, "Incorrect number of parameters"); 887 if (a rgc == 4)888 { 889 if (strcmp(a rgv[2], "-type") != 0)890 return errorSyntax(USAGE_REGISTERIMAGE, "Invalid parameter '%s'", Utf8Str(a rgv[2]).raw());891 if ( (strcmp(a rgv[3], "normal") != 0)892 && (strcmp(a rgv[3], "immutable") != 0)893 && (strcmp(a rgv[3], "writethrough") != 0))894 return errorArgument("Invalid hard disk type '%s' specified", Utf8Str(a rgv[3]).raw());895 type = a rgv[3];881 if (a->argc == 4) 882 { 883 if (strcmp(a->argv[2], "-type") != 0) 884 return errorSyntax(USAGE_REGISTERIMAGE, "Invalid parameter '%s'", Utf8Str(a->argv[2]).raw()); 885 if ( (strcmp(a->argv[3], "normal") != 0) 886 && (strcmp(a->argv[3], "immutable") != 0) 887 && (strcmp(a->argv[3], "writethrough") != 0)) 888 return errorArgument("Invalid hard disk type '%s' specified", Utf8Str(a->argv[3]).raw()); 889 type = a->argv[3]; 896 890 } 897 891 898 892 ComPtr<IHardDisk2> hardDisk; 899 CHECK_ERROR( virtualBox, OpenHardDisk2(filepath, hardDisk.asOutParam()));893 CHECK_ERROR(a->virtualBox, OpenHardDisk2(filepath, hardDisk.asOutParam())); 900 894 if (SUCCEEDED(rc) && hardDisk) 901 895 { … … 912 906 } 913 907 } 914 else if (strcmp(a rgv[0], "dvd") == 0)908 else if (strcmp(a->argv[0], "dvd") == 0) 915 909 { 916 910 ComPtr<IDVDImage2> dvdImage; 917 CHECK_ERROR( virtualBox, OpenDVDImage(filepath, Guid(), dvdImage.asOutParam()));918 } 919 else if (strcmp(a rgv[0], "floppy") == 0)911 CHECK_ERROR(a->virtualBox, OpenDVDImage(filepath, Guid(), dvdImage.asOutParam())); 912 } 913 else if (strcmp(a->argv[0], "floppy") == 0) 920 914 { 921 915 ComPtr<IFloppyImage2> floppyImage; 922 CHECK_ERROR( virtualBox, OpenFloppyImage(filepath, Guid(), floppyImage.asOutParam()));916 CHECK_ERROR(a->virtualBox, OpenFloppyImage(filepath, Guid(), floppyImage.asOutParam())); 923 917 } 924 918 else 925 return errorSyntax(USAGE_REGISTERIMAGE, "Invalid parameter '%s'", Utf8Str(a rgv[1]).raw());919 return errorSyntax(USAGE_REGISTERIMAGE, "Invalid parameter '%s'", Utf8Str(a->argv[1]).raw()); 926 920 927 921 return SUCCEEDED(rc) ? 0 : 1; 928 922 } 929 923 930 int handleCloseMedium(int argc, char *argv[], 931 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 924 int handleCloseMedium(HandlerArg *a) 932 925 { 933 926 HRESULT rc; 934 927 935 if (a rgc != 2)928 if (a->argc != 2) 936 929 return errorSyntax(USAGE_UNREGISTERIMAGE, "Incorrect number of parameters"); 937 930 938 931 /* first guess is that it's a UUID */ 939 Guid uuid(a rgv[1]);940 941 if (strcmp(a rgv[0], "disk") == 0)932 Guid uuid(a->argv[1]); 933 934 if (strcmp(a->argv[0], "disk") == 0) 942 935 { 943 936 ComPtr<IHardDisk2> hardDisk; 944 rc = virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam());937 rc = a->virtualBox->GetHardDisk2(uuid, hardDisk.asOutParam()); 945 938 /* not a UUID or not registered? Then it must be a filename */ 946 939 if (!hardDisk) 947 940 { 948 CHECK_ERROR( virtualBox, FindHardDisk2(Bstr(argv[1]), hardDisk.asOutParam()));941 CHECK_ERROR(a->virtualBox, FindHardDisk2(Bstr(a->argv[1]), hardDisk.asOutParam())); 949 942 } 950 943 if (SUCCEEDED(rc) && hardDisk) … … 954 947 } 955 948 else 956 if (strcmp(a rgv[0], "dvd") == 0)949 if (strcmp(a->argv[0], "dvd") == 0) 957 950 { 958 951 ComPtr<IDVDImage2> dvdImage; 959 rc = virtualBox->GetDVDImage(uuid, dvdImage.asOutParam());952 rc = a->virtualBox->GetDVDImage(uuid, dvdImage.asOutParam()); 960 953 /* not a UUID or not registered? Then it must be a filename */ 961 954 if (!dvdImage) 962 955 { 963 CHECK_ERROR( virtualBox, FindDVDImage(Bstr(argv[1]), dvdImage.asOutParam()));956 CHECK_ERROR(a->virtualBox, FindDVDImage(Bstr(a->argv[1]), dvdImage.asOutParam())); 964 957 } 965 958 if (SUCCEEDED(rc) && dvdImage) … … 969 962 } 970 963 else 971 if (strcmp(a rgv[0], "floppy") == 0)964 if (strcmp(a->argv[0], "floppy") == 0) 972 965 { 973 966 ComPtr<IFloppyImage2> floppyImage; 974 rc = virtualBox->GetFloppyImage(uuid, floppyImage.asOutParam());967 rc = a->virtualBox->GetFloppyImage(uuid, floppyImage.asOutParam()); 975 968 /* not a UUID or not registered? Then it must be a filename */ 976 969 if (!floppyImage) 977 970 { 978 CHECK_ERROR( virtualBox, FindFloppyImage(Bstr(argv[1]), floppyImage.asOutParam()));971 CHECK_ERROR(a->virtualBox, FindFloppyImage(Bstr(a->argv[1]), floppyImage.asOutParam())); 979 972 } 980 973 if (SUCCEEDED(rc) && floppyImage) … … 984 977 } 985 978 else 986 return errorSyntax(USAGE_UNREGISTERIMAGE, "Invalid parameter '%s'", Utf8Str(a rgv[1]).raw());979 return errorSyntax(USAGE_UNREGISTERIMAGE, "Invalid parameter '%s'", Utf8Str(a->argv[1]).raw()); 987 980 988 981 return SUCCEEDED(rc) ? 0 : 1; -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestProp.cpp
r15994 r16052 214 214 } 215 215 216 static int handleGetGuestProperty(int argc, char *argv[], 217 ComPtr<IVirtualBox> aVirtualBox, 218 ComPtr<ISession> aSession) 216 static int handleGetGuestProperty(HandlerArg *a) 219 217 { 220 218 HRESULT rc = S_OK; 221 219 222 220 bool verbose = false; 223 if ((3 == a rgc) && (0 == strcmp(argv[2], "-verbose")))221 if ((3 == a->argc) && (0 == strcmp(a->argv[2], "-verbose"))) 224 222 verbose = true; 225 else if (a rgc != 2)223 else if (a->argc != 2) 226 224 return errorSyntax(USAGE_GUESTPROPERTY, "Incorrect parameters"); 227 225 228 226 ComPtr<IMachine> machine; 229 227 /* assume it's a UUID */ 230 rc = a VirtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());228 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 231 229 if (FAILED(rc) || !machine) 232 230 { 233 231 /* must be a name */ 234 CHECK_ERROR(a VirtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));232 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 235 233 } 236 234 if (machine) … … 240 238 241 239 /* open a session for the VM - new or existing */ 242 if (FAILED (a VirtualBox->OpenSession(aSession, uuid)))243 CHECK_ERROR_RET (a VirtualBox, OpenExistingSession(aSession, uuid), 1);240 if (FAILED (a->virtualBox->OpenSession(a->session, uuid))) 241 CHECK_ERROR_RET (a->virtualBox, OpenExistingSession(a->session, uuid), 1); 244 242 245 243 /* get the mutable session machine */ 246 a Session->COMGETTER(Machine)(machine.asOutParam());244 a->session->COMGETTER(Machine)(machine.asOutParam()); 247 245 248 246 Bstr value; 249 247 uint64_t u64Timestamp; 250 248 Bstr flags; 251 CHECK_ERROR(machine, GetGuestProperty(Bstr(a rgv[1]), value.asOutParam(),249 CHECK_ERROR(machine, GetGuestProperty(Bstr(a->argv[1]), value.asOutParam(), 252 250 &u64Timestamp, flags.asOutParam())); 253 251 if (!value) … … 264 262 } 265 263 266 static int handleSetGuestProperty(int argc, char *argv[], 267 ComPtr<IVirtualBox> aVirtualBox, 268 ComPtr<ISession> aSession) 264 static int handleSetGuestProperty(HandlerArg *a) 269 265 { 270 266 HRESULT rc = S_OK; … … 278 274 const char *pszValue = NULL; 279 275 const char *pszFlags = NULL; 280 if (3 == a rgc)281 { 282 pszValue = a rgv[2];283 } 284 else if (4 == a rgc)276 if (3 == a->argc) 277 { 278 pszValue = a->argv[2]; 279 } 280 else if (4 == a->argc) 285 281 usageOK = false; 286 else if (5 == a rgc)287 { 288 pszValue = a rgv[2];289 if (strcmp(a rgv[3], "-flags") != 0)282 else if (5 == a->argc) 283 { 284 pszValue = a->argv[2]; 285 if (strcmp(a->argv[3], "-flags") != 0) 290 286 usageOK = false; 291 pszFlags = a rgv[4];292 } 293 else if (a rgc != 2)287 pszFlags = a->argv[4]; 288 } 289 else if (a->argc != 2) 294 290 usageOK = false; 295 291 if (!usageOK) 296 292 return errorSyntax(USAGE_GUESTPROPERTY, "Incorrect parameters"); 297 293 /* This is always needed. */ 298 pszName = a rgv[1];294 pszName = a->argv[1]; 299 295 300 296 ComPtr<IMachine> machine; 301 297 /* assume it's a UUID */ 302 rc = a VirtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());298 rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 303 299 if (FAILED(rc) || !machine) 304 300 { 305 301 /* must be a name */ 306 CHECK_ERROR(a VirtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));302 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 307 303 } 308 304 if (machine) … … 312 308 313 309 /* open a session for the VM - new or existing */ 314 if (FAILED (a VirtualBox->OpenSession(aSession, uuid)))315 CHECK_ERROR_RET (a VirtualBox, OpenExistingSession(aSession, uuid), 1);310 if (FAILED (a->virtualBox->OpenSession(a->session, uuid))) 311 CHECK_ERROR_RET (a->virtualBox, OpenExistingSession(a->session, uuid), 1); 316 312 317 313 /* get the mutable session machine */ 318 a Session->COMGETTER(Machine)(machine.asOutParam());314 a->session->COMGETTER(Machine)(machine.asOutParam()); 319 315 320 316 if ((NULL == pszValue) && (NULL == pszFlags)) … … 328 324 CHECK_ERROR(machine, SaveSettings()); 329 325 330 a Session->Close();326 a->session->Close(); 331 327 } 332 328 return SUCCEEDED(rc) ? 0 : 1; … … 339 335 * @note see the command line API description for parameters 340 336 */ 341 static int handleEnumGuestProperty(int argc, char *argv[], 342 ComPtr<IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 337 static int handleEnumGuestProperty(HandlerArg *a) 343 338 { 344 339 /* … … 346 341 * arguments. 347 342 */ 348 if ((a rgc < 1) || (2 ==argc) ||349 ((a rgc > 3) && strcmp(argv[1], "-patterns") != 0))343 if ((a->argc < 1) || (2 == a->argc) || 344 ((a->argc > 3) && strcmp(a->argv[1], "-patterns") != 0)) 350 345 return errorSyntax(USAGE_GUESTPROPERTY, "Incorrect parameters"); 351 346 … … 353 348 * Pack the patterns 354 349 */ 355 Utf8Str Utf8Patterns(a rgc > 2 ?argv[2] : "*");356 for (ssize_t i = 3; i < a rgc; ++i)357 Utf8Patterns = Utf8StrFmt ("%s,%s", Utf8Patterns.raw(), a rgv[i]);350 Utf8Str Utf8Patterns(a->argc > 2 ? a->argv[2] : "*"); 351 for (ssize_t i = 3; i < a->argc; ++i) 352 Utf8Patterns = Utf8StrFmt ("%s,%s", Utf8Patterns.raw(), a->argv[i]); 358 353 359 354 /* … … 362 357 ComPtr<IMachine> machine; 363 358 /* assume it's a UUID */ 364 HRESULT rc = a VirtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());359 HRESULT rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 365 360 if (FAILED(rc) || !machine) 366 361 { 367 362 /* must be a name */ 368 CHECK_ERROR(a VirtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));363 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 369 364 } 370 365 if (machine) … … 374 369 375 370 /* open a session for the VM - new or existing */ 376 if (FAILED (a VirtualBox->OpenSession(aSession, uuid)))377 CHECK_ERROR_RET (a VirtualBox, OpenExistingSession(aSession, uuid), 1);371 if (FAILED (a->virtualBox->OpenSession(a->session, uuid))) 372 CHECK_ERROR_RET (a->virtualBox, OpenExistingSession(a->session, uuid), 1); 378 373 379 374 /* get the mutable session machine */ 380 a Session->COMGETTER(Machine)(machine.asOutParam());375 a->session->COMGETTER(Machine)(machine.asOutParam()); 381 376 382 377 com::SafeArray <BSTR> names; … … 407 402 * @note see the command line API description for parameters 408 403 */ 409 static int handleWaitGuestProperty(int argc, char *argv[], 410 ComPtr<IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 404 static int handleWaitGuestProperty(HandlerArg *a) 411 405 { 412 406 … … 417 411 uint32_t u32Timeout = RT_INDEFINITE_WAIT; 418 412 bool usageOK = true; 419 if (a rgc < 2)413 if (a->argc < 2) 420 414 usageOK = false; 421 415 else 422 pszPatterns = a rgv[1];416 pszPatterns = a->argv[1]; 423 417 ComPtr<IMachine> machine; 424 418 /* assume it's a UUID */ 425 HRESULT rc = a VirtualBox->GetMachine(Guid(argv[0]), machine.asOutParam());419 HRESULT rc = a->virtualBox->GetMachine(Guid(a->argv[0]), machine.asOutParam()); 426 420 if (FAILED(rc) || !machine) 427 421 { 428 422 /* must be a name */ 429 CHECK_ERROR(a VirtualBox, FindMachine(Bstr(argv[0]), machine.asOutParam()));423 CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam())); 430 424 } 431 425 if (!machine) 432 426 usageOK = false; 433 for (int i = 2; usageOK && i < a rgc; ++i)434 { 435 if (strcmp(a rgv[i], "-timeout") == 0)436 { 437 if ( i + 1 >= a rgc438 || RTStrToUInt32Full(a rgv[i + 1], 10, &u32Timeout)427 for (int i = 2; usageOK && i < a->argc; ++i) 428 { 429 if (strcmp(a->argv[i], "-timeout") == 0) 430 { 431 if ( i + 1 >= a->argc 432 || RTStrToUInt32Full(a->argv[i + 1], 10, &u32Timeout) 439 433 != VINF_SUCCESS 440 434 ) … … 456 450 GuestPropertyCallback *callback = new GuestPropertyCallback(pszPatterns, uuid); 457 451 callback->AddRef(); 458 a VirtualBox->RegisterCallback (callback);452 a->virtualBox->RegisterCallback (callback); 459 453 bool stop = false; 460 454 #ifdef USE_XPCOM_QUEUE 461 int max_fd = g_pEventQ->GetEventQueueSelectFD();455 int max_fd = a->eventQ->GetEventQueueSelectFD(); 462 456 #endif 463 457 for (; !stop && u32Timeout > 0; u32Timeout -= RT_MIN(u32Timeout, 1000)) … … 483 477 uint64_t u64NextTime = RTTimeSpecGetMilli(RTTimeNow(&TimeNow)); 484 478 u32Timeout += (uint32_t)(u64Time + 1000 - u64NextTime); 485 g_pEventQ->ProcessPendingEvents();479 a->eventQ->ProcessPendingEvents(); 486 480 if (callback->Signalled()) 487 481 stop = true; … … 499 493 * Clean up the callback. 500 494 */ 501 a VirtualBox->UnregisterCallback (callback);495 a->virtualBox->UnregisterCallback (callback); 502 496 if (!callback->Signalled()) 503 497 RTPrintf("Time out or interruption while waiting for a notification.\n"); … … 516 510 * @note see the command line API description for parameters 517 511 */ 518 int handleGuestProperty(int argc, char *argv[], 519 ComPtr<IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 520 { 521 if (0 == argc) 512 int handleGuestProperty(HandlerArg *a) 513 { 514 HandlerArg arg = *a; 515 arg.argc = a->argc - 1; 516 arg.argv = a->argv + 1; 517 518 if (0 == a->argc) 522 519 return errorSyntax(USAGE_GUESTPROPERTY, "Incorrect parameters"); 523 if (0 == strcmp(a rgv[0], "get"))524 return handleGetGuestProperty( argc - 1, argv + 1, aVirtualBox, aSession);525 else if (0 == strcmp(a rgv[0], "set"))526 return handleSetGuestProperty( argc - 1, argv + 1, aVirtualBox, aSession);527 else if (0 == strcmp(a rgv[0], "enumerate"))528 return handleEnumGuestProperty( argc - 1, argv + 1, aVirtualBox, aSession);529 else if (0 == strcmp(a rgv[0], "wait"))530 return handleWaitGuestProperty( argc - 1, argv + 1, aVirtualBox, aSession);520 if (0 == strcmp(a->argv[0], "get")) 521 return handleGetGuestProperty(&arg); 522 else if (0 == strcmp(a->argv[0], "set")) 523 return handleSetGuestProperty(&arg); 524 else if (0 == strcmp(a->argv[0], "enumerate")) 525 return handleEnumGuestProperty(&arg); 526 else if (0 == strcmp(a->argv[0], "wait")) 527 return handleWaitGuestProperty(&arg); 531 528 /* else */ 532 529 return errorSyntax(USAGE_GUESTPROPERTY, "Incorrect parameters"); -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
r15918 r16052 1857 1857 #endif 1858 1858 1859 int handleShowVMInfo(int argc, char *argv[], 1860 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 1859 int handleShowVMInfo(HandlerArg *a) 1861 1860 { 1862 1861 HRESULT rc; 1863 1862 1864 1863 /* at least one option: the UUID or name of the VM */ 1865 if (a rgc < 1)1864 if (a->argc < 1) 1866 1865 return errorSyntax(USAGE_SHOWVMINFO, "Incorrect number of parameters"); 1867 1866 1868 1867 /* try to find the given machine */ 1869 1868 ComPtr <IMachine> machine; 1870 Guid uuid (a rgv[0]);1869 Guid uuid (a->argv[0]); 1871 1870 if (!uuid.isEmpty()) 1872 1871 { 1873 CHECK_ERROR ( virtualBox, GetMachine (uuid, machine.asOutParam()));1874 } 1875 else 1876 { 1877 CHECK_ERROR ( virtualBox, FindMachine (Bstr(argv[0]), machine.asOutParam()));1872 CHECK_ERROR (a->virtualBox, GetMachine (uuid, machine.asOutParam())); 1873 } 1874 else 1875 { 1876 CHECK_ERROR (a->virtualBox, FindMachine (Bstr(a->argv[0]), machine.asOutParam())); 1878 1877 if (SUCCEEDED (rc)) 1879 1878 machine->COMGETTER(Id) (uuid.asOutParam()); … … 1887 1886 bool fStatistics = false; 1888 1887 bool fMachinereadable = false; 1889 for (int i=1;i<a rgc;i++)1890 { 1891 if (!strcmp(a rgv[i], "-details"))1888 for (int i=1;i<a->argc;i++) 1889 { 1890 if (!strcmp(a->argv[i], "-details")) 1892 1891 fDetails = true; 1893 1892 else 1894 if (!strcmp(a rgv[i], "-statistics"))1893 if (!strcmp(a->argv[i], "-statistics")) 1895 1894 fStatistics = true; 1896 if (!strcmp(a rgv[1], "-machinereadable"))1895 if (!strcmp(a->argv[1], "-machinereadable")) 1897 1896 fMachinereadable = true; 1898 1897 } … … 1912 1911 1913 1912 /* open an existing session for the VM */ 1914 rc = virtualBox->OpenExistingSession (session, uuid);1913 rc = a->virtualBox->OpenExistingSession (a->session, uuid); 1915 1914 if (SUCCEEDED(rc)) 1916 1915 /* get the session machine */ 1917 rc = session->COMGETTER(Machine)(machine.asOutParam());1916 rc = a->session->COMGETTER(Machine)(machine.asOutParam()); 1918 1917 if (SUCCEEDED(rc)) 1919 1918 /* get the session console */ 1920 rc = session->COMGETTER(Console)(console.asOutParam());1921 1922 rc = showVMInfo ( virtualBox, machine, console, details);1919 rc = a->session->COMGETTER(Console)(console.asOutParam()); 1920 1921 rc = showVMInfo (a->virtualBox, machine, console, details); 1923 1922 1924 1923 if (console) 1925 session->Close();1924 a->session->Close(); 1926 1925 1927 1926 return SUCCEEDED (rc) ? 0 : 1; -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
r15570 r16052 64 64 #endif 65 65 66 int handleList(int argc, char *argv[], 67 ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session) 66 int handleList(HandlerArg *a) 68 67 { 69 68 HRESULT rc = S_OK; 70 69 71 70 /* exactly one option: the object */ 72 if (a rgc != 1)71 if (a->argc != 1) 73 72 return errorSyntax(USAGE_LIST, "Incorrect number of parameters"); 74 73 75 74 /* which object? */ 76 if (strcmp(a rgv[0], "vms") == 0)75 if (strcmp(a->argv[0], "vms") == 0) 77 76 { 78 77 /* … … 80 79 */ 81 80 com::SafeIfaceArray <IMachine> machines; 82 rc = virtualBox->COMGETTER(Machines2)(ComSafeArrayAsOutParam (machines));81 rc = a->virtualBox->COMGETTER(Machines2)(ComSafeArrayAsOutParam (machines)); 83 82 if (SUCCEEDED(rc)) 84 83 { … … 89 88 { 90 89 if (machines [i]) 91 rc = showVMInfo( virtualBox, machines [i]);92 } 93 } 94 } 95 else 96 if (strcmp(a rgv[0], "runningvms") == 0)90 rc = showVMInfo(a->virtualBox, machines [i]); 91 } 92 } 93 } 94 else 95 if (strcmp(a->argv[0], "runningvms") == 0) 97 96 { 98 97 /* … … 100 99 */ 101 100 com::SafeIfaceArray <IMachine> machines; 102 rc = virtualBox->COMGETTER(Machines2)(ComSafeArrayAsOutParam (machines));101 rc = a->virtualBox->COMGETTER(Machines2)(ComSafeArrayAsOutParam (machines)); 103 102 if (SUCCEEDED(rc)) 104 103 { … … 132 131 } 133 132 else 134 if (strcmp(a rgv[0], "ostypes") == 0)133 if (strcmp(a->argv[0], "ostypes") == 0) 135 134 { 136 135 ComPtr<IGuestOSTypeCollection> coll; 137 136 ComPtr<IGuestOSTypeEnumerator> enumerator; 138 CHECK_ERROR( virtualBox, COMGETTER(GuestOSTypes)(coll.asOutParam()));137 CHECK_ERROR(a->virtualBox, COMGETTER(GuestOSTypes)(coll.asOutParam())); 139 138 if (SUCCEEDED(rc) && coll) 140 139 { … … 155 154 } 156 155 else 157 if (strcmp(a rgv[0], "hostdvds") == 0)156 if (strcmp(a->argv[0], "hostdvds") == 0) 158 157 { 159 158 ComPtr<IHost> host; 160 CHECK_ERROR( virtualBox, COMGETTER(Host)(host.asOutParam()));159 CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); 161 160 ComPtr<IHostDVDDriveCollection> coll; 162 161 ComPtr<IHostDVDDriveEnumerator> enumerator; … … 177 176 } 178 177 else 179 if (strcmp(a rgv[0], "hostfloppies") == 0)178 if (strcmp(a->argv[0], "hostfloppies") == 0) 180 179 { 181 180 ComPtr<IHost> host; 182 CHECK_ERROR( virtualBox, COMGETTER(Host)(host.asOutParam()));181 CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); 183 182 ComPtr<IHostFloppyDriveCollection> coll; 184 183 ComPtr<IHostFloppyDriveEnumerator> enumerator; … … 199 198 } 200 199 else 201 if (strcmp(a rgv[0], "hostifs") == 0)200 if (strcmp(a->argv[0], "hostifs") == 0) 202 201 { 203 202 ComPtr<IHost> host; 204 CHECK_ERROR( virtualBox, COMGETTER(Host)(host.asOutParam()));203 CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); 205 204 com::SafeIfaceArray <IHostNetworkInterface> hostNetworkInterfaces; 206 CHECK_ERROR(host, 205 CHECK_ERROR(host, 207 206 COMGETTER(NetworkInterfaces) (ComSafeArrayAsOutParam (hostNetworkInterfaces))); 208 207 for (size_t i = 0; i < hostNetworkInterfaces.size(); ++i) … … 256 255 } 257 256 else 258 if (strcmp(a rgv[0], "hostinfo") == 0)257 if (strcmp(a->argv[0], "hostinfo") == 0) 259 258 { 260 259 ComPtr<IHost> Host; 261 CHECK_ERROR ( virtualBox, COMGETTER(Host)(Host.asOutParam()));260 CHECK_ERROR (a->virtualBox, COMGETTER(Host)(Host.asOutParam())); 262 261 263 262 RTPrintf("Host Information:\n\n"); … … 311 310 } 312 311 else 313 if (strcmp(a rgv[0], "hddbackends") == 0)312 if (strcmp(a->argv[0], "hddbackends") == 0) 314 313 { 315 314 ComPtr<ISystemProperties> systemProperties; 316 CHECK_ERROR( virtualBox,315 CHECK_ERROR(a->virtualBox, 317 316 COMGETTER(SystemProperties) (systemProperties.asOutParam())); 318 317 com::SafeIfaceArray <IHardDiskFormat> hardDiskFormats; … … 387 386 } 388 387 else 389 if (strcmp(a rgv[0], "hdds") == 0)388 if (strcmp(a->argv[0], "hdds") == 0) 390 389 { 391 390 com::SafeIfaceArray <IHardDisk2> hdds; 392 CHECK_ERROR( virtualBox, COMGETTER(HardDisks2)(ComSafeArrayAsOutParam (hdds)));391 CHECK_ERROR(a->virtualBox, COMGETTER(HardDisks2)(ComSafeArrayAsOutParam (hdds))); 393 392 for (size_t i = 0; i < hdds.size(); ++ i) 394 393 { … … 413 412 { 414 413 ComPtr<IMachine> machine; 415 CHECK_ERROR( virtualBox, GetMachine(machineIds[j], machine.asOutParam()));414 CHECK_ERROR(a->virtualBox, GetMachine(machineIds[j], machine.asOutParam())); 416 415 ASSERT(machine); 417 416 Bstr name; … … 429 428 } 430 429 else 431 if (strcmp(a rgv[0], "dvds") == 0)430 if (strcmp(a->argv[0], "dvds") == 0) 432 431 { 433 432 com::SafeIfaceArray<IDVDImage2> dvds; 434 CHECK_ERROR( virtualBox, COMGETTER(DVDImages)(ComSafeArrayAsOutParam(dvds)));433 CHECK_ERROR(a->virtualBox, COMGETTER(DVDImages)(ComSafeArrayAsOutParam(dvds))); 435 434 for (size_t i = 0; i < dvds.size(); ++ i) 436 435 { … … 450 449 } 451 450 else 452 if (strcmp(a rgv[0], "floppies") == 0)451 if (strcmp(a->argv[0], "floppies") == 0) 453 452 { 454 453 com::SafeIfaceArray<IFloppyImage2> floppies; 455 CHECK_ERROR( virtualBox, COMGETTER(FloppyImages)(ComSafeArrayAsOutParam(floppies)));454 CHECK_ERROR(a->virtualBox, COMGETTER(FloppyImages)(ComSafeArrayAsOutParam(floppies))); 456 455 for (size_t i = 0; i < floppies.size(); ++ i) 457 456 { … … 471 470 } 472 471 else 473 if (strcmp(a rgv[0], "usbhost") == 0)472 if (strcmp(a->argv[0], "usbhost") == 0) 474 473 { 475 474 ComPtr<IHost> Host; 476 CHECK_ERROR_RET ( virtualBox, COMGETTER(Host)(Host.asOutParam()), 1);475 CHECK_ERROR_RET (a->virtualBox, COMGETTER(Host)(Host.asOutParam()), 1); 477 476 478 477 ComPtr<IHostUSBDeviceCollection> CollPtr; … … 562 561 } 563 562 else 564 if (strcmp(a rgv[0], "usbfilters") == 0)563 if (strcmp(a->argv[0], "usbfilters") == 0) 565 564 { 566 565 RTPrintf("Global USB Device Filters:\n\n"); 567 566 568 567 ComPtr <IHost> host; 569 CHECK_ERROR_RET ( virtualBox, COMGETTER(Host) (host.asOutParam()), 1);568 CHECK_ERROR_RET (a->virtualBox, COMGETTER(Host) (host.asOutParam()), 1); 570 569 571 570 ComPtr<IHostUSBDeviceFilterCollection> coll; … … 637 636 } 638 637 } 639 else if (strcmp(a rgv[0], "systemproperties") == 0)638 else if (strcmp(a->argv[0], "systemproperties") == 0) 640 639 { 641 640 ComPtr<ISystemProperties> systemProperties; 642 virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam());641 a->virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam()); 643 642 644 643 Bstr str; … … 670 669 } 671 670 else 672 return errorSyntax(USAGE_LIST, "Invalid parameter '%s'", Utf8Str(a rgv[0]).raw());671 return errorSyntax(USAGE_LIST, "Invalid parameter '%s'", Utf8Str(a->argv[0]).raw()); 673 672 674 673 return SUCCEEDED(rc) ? 0 : 1; -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageMetrics.cpp
r14740 r16052 523 523 } 524 524 525 int handleMetrics(int argc, char *argv[], 526 ComPtr<IVirtualBox> aVirtualBox, ComPtr<ISession> aSession) 525 int handleMetrics(HandlerArg *a) 527 526 { 528 527 int rc; 529 528 530 529 /* at least one option: subcommand name */ 531 if (a rgc < 1)530 if (a->argc < 1) 532 531 return errorSyntax(USAGE_METRICS, "Subcommand missing"); 533 532 534 533 ComPtr<IPerformanceCollector> performanceCollector; 535 CHECK_ERROR(a VirtualBox, COMGETTER(PerformanceCollector)(performanceCollector.asOutParam()));536 537 if (!strcmp(a rgv[0], "list"))538 rc = handleMetricsList(a rgc, argv, aVirtualBox, performanceCollector);539 else if (!strcmp(a rgv[0], "setup"))540 rc = handleMetricsSetup(a rgc, argv, aVirtualBox, performanceCollector);541 else if (!strcmp(a rgv[0], "query"))542 rc = handleMetricsQuery(a rgc, argv, aVirtualBox, performanceCollector);543 else if (!strcmp(a rgv[0], "collect"))544 rc = handleMetricsCollect(a rgc, argv, aVirtualBox, performanceCollector);534 CHECK_ERROR(a->virtualBox, COMGETTER(PerformanceCollector)(performanceCollector.asOutParam())); 535 536 if (!strcmp(a->argv[0], "list")) 537 rc = handleMetricsList(a->argc, a->argv, a->virtualBox, performanceCollector); 538 else if (!strcmp(a->argv[0], "setup")) 539 rc = handleMetricsSetup(a->argc, a->argv, a->virtualBox, performanceCollector); 540 else if (!strcmp(a->argv[0], "query")) 541 rc = handleMetricsQuery(a->argc, a->argv, a->virtualBox, performanceCollector); 542 else if (!strcmp(a->argv[0], "collect")) 543 rc = handleMetricsCollect(a->argc, a->argv, a->virtualBox, performanceCollector); 545 544 else 546 return errorSyntax(USAGE_METRICS, "Invalid subcommand '%s'", a rgv[0]);545 return errorSyntax(USAGE_METRICS, "Invalid subcommand '%s'", a->argv[0]); 547 546 548 547 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.