VirtualBox

Changeset 56349 in vbox


Ignore:
Timestamp:
Jun 10, 2015 11:38:30 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
100938
Message:

VBoxManage: Let main() set the current command and made 'VBoxManage help extpack' work.

Location:
trunk/src/VBox/Frontends/VBoxManage
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp

    r56118 r56349  
    5454#define VBMG_CMD_F_NO_COM       RT_BIT_32(0)
    5555
     56#define VBMG_CMD_TODO HELP_CMD_VBOXMANAGE_INVALID
     57
    5658
    5759/*******************************************************************************
     
    6466{
    6567    /** The command.   */
    66     const char     *pszCommand;
     68    const char                 *pszCommand;
    6769    /** The help category. */
    68     USAGECATEGORY   enmHelpCat;
     70    USAGECATEGORY               enmHelpCat;
     71    /** The new help command. */
     72    enum HELP_CMD_VBOXMANAGE    enmCmdHelp;
    6973    /** The handler. */
    70     RTEXITCODE (*pfnHandler)(HandlerArg *pArg);
     74    RTEXITCODE                (*pfnHandler)(HandlerArg *pArg);
    7175    /** VBMG_CMD_F_XXX,    */
    72     uint32_t        fFlags;
     76    uint32_t                    fFlags;
    7377} VBMGCMD;
    7478/** Pointer to a const VBoxManage command descriptor. */
     
    9599static const VBMGCMD g_aCommands[] =
    96100{
    97     { "internalcommands",   0,                          handleInternalCommands,     0 },
    98     { "list",               USAGE_LIST,                 handleList,                 0 },
    99     { "showvminfo",         USAGE_SHOWVMINFO,           handleShowVMInfo,           0 },
    100     { "registervm",         USAGE_REGISTERVM,           handleRegisterVM,           0 },
    101     { "unregistervm",       USAGE_UNREGISTERVM,         handleUnregisterVM,         0 },
    102     { "clonevm",            USAGE_CLONEVM,              handleCloneVM,              0 },
    103     { "mediumproperty",     USAGE_MEDIUMPROPERTY,       handleMediumProperty,       0 },
    104     { "hdproperty",         USAGE_MEDIUMPROPERTY,       handleMediumProperty,       0 }, /* backward compatibility */
    105     { "createmedium",       USAGE_CREATEMEDIUM,         handleCreateMedium,         0 },
    106     { "createhd",           USAGE_CREATEMEDIUM,         handleCreateMedium,         0 }, /* backward compatibility */
    107     { "createvdi",          USAGE_CREATEMEDIUM,         handleCreateMedium,         0 }, /* backward compatibility */
    108     { "modifymedium",       USAGE_MODIFYMEDIUM,         handleModifyMedium,         0 },
    109     { "modifyhd",           USAGE_MODIFYMEDIUM,         handleModifyMedium,         0 }, /* backward compatibility */
    110     { "modifyvdi",          USAGE_MODIFYMEDIUM,         handleModifyMedium,         0 }, /* backward compatibility */
    111     { "clonemedium",        USAGE_CLONEMEDIUM,          handleCloneMedium,          0 },
    112     { "clonehd",            USAGE_CLONEMEDIUM,          handleCloneMedium,          0 }, /* backward compatibility */
    113     { "clonevdi",           USAGE_CLONEMEDIUM,          handleCloneMedium,          0 }, /* backward compatibility */
    114     { "encryptmedium",      USAGE_ENCRYPTMEDIUM,        handleEncryptMedium,        0 },
    115     { "checkmediumpwd",     USAGE_MEDIUMENCCHKPWD,      handleCheckMediumPassword,  0 },
    116     { "createvm",           USAGE_CREATEVM,             handleCreateVM,             0 },
    117     { "modifyvm",           USAGE_MODIFYVM,             handleModifyVM,             0 },
    118     { "startvm",            USAGE_STARTVM,              handleStartVM,              0 },
    119     { "controlvm",          USAGE_CONTROLVM,            handleControlVM,            0 },
    120     { "discardstate",       USAGE_DISCARDSTATE,         handleDiscardState,         0 },
    121     { "adoptstate",         USAGE_ADOPTSTATE,           handleAdoptState,           0 },
    122     { "snapshot",           USAGE_SNAPSHOT,             handleSnapshot,             0 },
    123     { "closemedium",        USAGE_CLOSEMEDIUM,          handleCloseMedium,          0 },
    124     { "storageattach",      USAGE_STORAGEATTACH,        handleStorageAttach,        0 },
    125     { "storagectl",         USAGE_STORAGECONTROLLER,    handleStorageController,    0 },
    126     { "showmediuminfo",     USAGE_SHOWMEDIUMINFO,       handleShowMediumInfo,       0 },
    127     { "showhdinfo",         USAGE_SHOWMEDIUMINFO,       handleShowMediumInfo,       0 }, /* backward compatibility */
    128     { "showvdiinfo",        USAGE_SHOWMEDIUMINFO,       handleShowMediumInfo,       0 }, /* backward compatibility */
    129     { "getextradata",       USAGE_GETEXTRADATA,         handleGetExtraData,         0 },
    130     { "setextradata",       USAGE_SETEXTRADATA,         handleSetExtraData,         0 },
    131     { "setproperty",        USAGE_SETPROPERTY,          handleSetProperty,          0 },
    132     { "usbfilter",          USAGE_USBFILTER,            handleUSBFilter,            0 },
    133     { "sharedfolder",       USAGE_SHAREDFOLDER,         handleSharedFolder,         0 },
     101    { "internalcommands",   0,                      VBMG_CMD_TODO, handleInternalCommands,     0 },
     102    { "list",               USAGE_LIST,             VBMG_CMD_TODO, handleList,                 0 },
     103    { "showvminfo",         USAGE_SHOWVMINFO,       VBMG_CMD_TODO, handleShowVMInfo,           0 },
     104    { "registervm",         USAGE_REGISTERVM,       VBMG_CMD_TODO, handleRegisterVM,           0 },
     105    { "unregistervm",       USAGE_UNREGISTERVM,     VBMG_CMD_TODO, handleUnregisterVM,         0 },
     106    { "clonevm",            USAGE_CLONEVM,          VBMG_CMD_TODO, handleCloneVM,              0 },
     107    { "mediumproperty",     USAGE_MEDIUMPROPERTY,   VBMG_CMD_TODO, handleMediumProperty,       0 },
     108    { "hdproperty",         USAGE_MEDIUMPROPERTY,   VBMG_CMD_TODO, handleMediumProperty,       0 }, /* backward compatibility */
     109    { "createmedium",       USAGE_CREATEMEDIUM,     VBMG_CMD_TODO, handleCreateMedium,         0 },
     110    { "createhd",           USAGE_CREATEMEDIUM,     VBMG_CMD_TODO, handleCreateMedium,         0 }, /* backward compatibility */
     111    { "createvdi",          USAGE_CREATEMEDIUM,     VBMG_CMD_TODO, handleCreateMedium,         0 }, /* backward compatibility */
     112    { "modifymedium",       USAGE_MODIFYMEDIUM,     VBMG_CMD_TODO, handleModifyMedium,         0 },
     113    { "modifyhd",           USAGE_MODIFYMEDIUM,     VBMG_CMD_TODO, handleModifyMedium,         0 }, /* backward compatibility */
     114    { "modifyvdi",          USAGE_MODIFYMEDIUM,     VBMG_CMD_TODO, handleModifyMedium,         0 }, /* backward compatibility */
     115    { "clonemedium",        USAGE_CLONEMEDIUM,      VBMG_CMD_TODO, handleCloneMedium,          0 },
     116    { "clonehd",            USAGE_CLONEMEDIUM,      VBMG_CMD_TODO, handleCloneMedium,          0 }, /* backward compatibility */
     117    { "clonevdi",           USAGE_CLONEMEDIUM,      VBMG_CMD_TODO, handleCloneMedium,          0 }, /* backward compatibility */
     118    { "encryptmedium",      USAGE_ENCRYPTMEDIUM,    VBMG_CMD_TODO, handleEncryptMedium,        0 },
     119    { "checkmediumpwd",     USAGE_MEDIUMENCCHKPWD,  VBMG_CMD_TODO, handleCheckMediumPassword,  0 },
     120    { "createvm",           USAGE_CREATEVM,         VBMG_CMD_TODO, handleCreateVM,             0 },
     121    { "modifyvm",           USAGE_MODIFYVM,         VBMG_CMD_TODO, handleModifyVM,             0 },
     122    { "startvm",            USAGE_STARTVM,          VBMG_CMD_TODO, handleStartVM,              0 },
     123    { "controlvm",          USAGE_CONTROLVM,        VBMG_CMD_TODO, handleControlVM,            0 },
     124    { "discardstate",       USAGE_DISCARDSTATE,     VBMG_CMD_TODO, handleDiscardState,         0 },
     125    { "adoptstate",         USAGE_ADOPTSTATE,       VBMG_CMD_TODO, handleAdoptState,           0 },
     126    { "snapshot",           USAGE_SNAPSHOT,         VBMG_CMD_TODO, handleSnapshot,             0 },
     127    { "closemedium",        USAGE_CLOSEMEDIUM,      VBMG_CMD_TODO, handleCloseMedium,          0 },
     128    { "storageattach",      USAGE_STORAGEATTACH,    VBMG_CMD_TODO, handleStorageAttach,        0 },
     129    { "storagectl",         USAGE_STORAGECONTROLLER,VBMG_CMD_TODO, handleStorageController,    0 },
     130    { "showmediuminfo",     USAGE_SHOWMEDIUMINFO,   VBMG_CMD_TODO, handleShowMediumInfo,       0 },
     131    { "showhdinfo",         USAGE_SHOWMEDIUMINFO,   VBMG_CMD_TODO, handleShowMediumInfo,       0 }, /* backward compatibility */
     132    { "showvdiinfo",        USAGE_SHOWMEDIUMINFO,   VBMG_CMD_TODO, handleShowMediumInfo,       0 }, /* backward compatibility */
     133    { "getextradata",       USAGE_GETEXTRADATA,     VBMG_CMD_TODO, handleGetExtraData,         0 },
     134    { "setextradata",       USAGE_SETEXTRADATA,     VBMG_CMD_TODO, handleSetExtraData,         0 },
     135    { "setproperty",        USAGE_SETPROPERTY,      VBMG_CMD_TODO, handleSetProperty,          0 },
     136    { "usbfilter",          USAGE_USBFILTER,        VBMG_CMD_TODO, handleUSBFilter,            0 },
     137    { "sharedfolder",       USAGE_SHAREDFOLDER,     VBMG_CMD_TODO, handleSharedFolder,         0 },
    134138#ifdef VBOX_WITH_GUEST_PROPS
    135     { "guestproperty",      USAGE_GUESTPROPERTY,        handleGuestProperty,        0 },
     139    { "guestproperty",      USAGE_GUESTPROPERTY,    VBMG_CMD_TODO, handleGuestProperty,        0 },
    136140#endif
    137141#ifdef VBOX_WITH_GUEST_CONTROL
    138     { "guestcontrol",       USAGE_GUESTCONTROL,         handleGuestControl,         0 },
     142    { "guestcontrol",       USAGE_GUESTCONTROL,     VBMG_CMD_TODO, handleGuestControl,         0 },
    139143#endif
    140     { "metrics",            USAGE_METRICS,              handleMetrics,              0 },
    141     { "import",             USAGE_IMPORTAPPLIANCE,      handleImportAppliance,      0 },
    142     { "export",             USAGE_EXPORTAPPLIANCE,      handleExportAppliance,      0 },
     144    { "metrics",            USAGE_METRICS,          VBMG_CMD_TODO, handleMetrics,              0 },
     145    { "import",             USAGE_IMPORTAPPLIANCE,  VBMG_CMD_TODO, handleImportAppliance,      0 },
     146    { "export",             USAGE_EXPORTAPPLIANCE,  VBMG_CMD_TODO, handleExportAppliance,      0 },
    143147#ifdef VBOX_WITH_NETFLT
    144     { "hostonlyif",         USAGE_HOSTONLYIFS,          handleHostonlyIf,           0 },
     148    { "hostonlyif",         USAGE_HOSTONLYIFS,      VBMG_CMD_TODO, handleHostonlyIf,           0 },
    145149#endif
    146     { "dhcpserver",         USAGE_DHCPSERVER,           handleDHCPServer,           0 },
     150    { "dhcpserver",         USAGE_DHCPSERVER,       VBMG_CMD_TODO, handleDHCPServer,           0 },
    147151#ifdef VBOX_WITH_NAT_SERVICE
    148     { "natnetwork",         USAGE_NATNETWORK,           handleNATNetwork,           0 },
     152    { "natnetwork",         USAGE_NATNETWORK,       VBMG_CMD_TODO, handleNATNetwork,           0 },
    149153#endif
    150     { "extpack",            USAGE_EXTPACK,             handleExtPack,              0 },
    151     { "bandwidthctl",       USAGE_BANDWIDTHCONTROL,     handleBandwidthControl,     0 },
    152     { "debugvm",            USAGE_DEBUGVM,              handleDebugVM,              0 },
    153     { "convertfromraw",     USAGE_CONVERTFROMRAW,       handleConvertFromRaw,       VBMG_CMD_F_NO_COM },
    154     { "convertdd",          USAGE_CONVERTFROMRAW,       handleConvertFromRaw,       VBMG_CMD_F_NO_COM },
     154    { "extpack",            USAGE_EXTPACK,       HELP_CMD_EXTPACK, handleExtPack,              0 },
     155    { "bandwidthctl",       USAGE_BANDWIDTHCONTROL, VBMG_CMD_TODO, handleBandwidthControl,     0 },
     156    { "debugvm",            USAGE_DEBUGVM,          VBMG_CMD_TODO, handleDebugVM,              0 },
     157    { "convertfromraw",     USAGE_CONVERTFROMRAW,   VBMG_CMD_TODO, handleConvertFromRaw,       VBMG_CMD_F_NO_COM },
     158    { "convertdd",          USAGE_CONVERTFROMRAW,   VBMG_CMD_TODO, handleConvertFromRaw,       VBMG_CMD_F_NO_COM },
    155159};
    156160
     
    549553#ifndef VBOX_ONLY_DOCS
    550554    PCVBMGCMD pCmd = lookupCommand(argv[iCmd]);
     555    if (pCmd && pCmd->enmCmdHelp != VBMG_CMD_TODO)
     556        setCurrentCommand(pCmd->enmCmdHelp);
     557
    551558    if (   pCmd
    552559        && (   fShowHelp
     
    554561                && pCmd->enmHelpCat != 0)))
    555562    {
    556         printUsage(pCmd->enmHelpCat, ~0U, g_pStdOut);
     563        if (pCmd->enmCmdHelp == VBMG_CMD_TODO)
     564            printUsage(pCmd->enmHelpCat, ~0U, g_pStdOut);
     565        else if (fShowHelp)
     566            printHelp(g_pStdOut);
     567        else
     568            printUsage(g_pStdOut);
    557569        return RTEXITCODE_FAILURE; /* error */
    558570    }
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h

    r56344 r56349  
    190190void        setCurrentSubcommand(uint64_t fCurSubcommandScope);
    191191
     192void        printUsage(PRTSTREAM pStrm);
     193void        printHelp(PRTSTREAM pStrm);
    192194RTEXITCODE  errorNoSubcommand(void);
    193195RTEXITCODE  errorUnknownSubcommand(const char *pszSubCmd);
     196RTEXITCODE  errorTooManyParameters(char **papszArgs);
    194197RTEXITCODE  errorGetOpt(int rcGetOpt, union RTGETOPTUNION const *pValueUnion);
    195198RTEXITCODE  errorSyntax(const char *pszFormat, ...);
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r56345 r56349  
    282282
    283283/**
     284 * Prints the brief usage information for the current (sub)command.
     285 *
     286 * @param   pStrm               The output stream.
     287 */
     288void printUsage(PRTSTREAM pStrm)
     289{
     290    printBriefCommandOrSubcommandHelp(g_enmCurCommand, g_fCurSubcommandScope, pStrm);
     291}
     292
     293
     294/**
    284295 * Prints full help for a command or subcommand.
    285296 *
     
    309320
    310321/**
     322 * Prints the full help for the current (sub)command.
     323 *
     324 * @param   pStrm               The output stream.
     325 */
     326void printHelp(PRTSTREAM pStrm)
     327{
     328    printFullCommandOrSubcommandHelp(g_enmCurCommand, g_fCurSubcommandScope, pStrm);
     329}
     330
     331
     332/**
    311333 * Display no subcommand error message and current command usage.
    312334 *
     
    346368    return errorSyntax("Unknown subcommand: %s", pszSubcommand);
    347369}
     370
     371
     372/**
     373 * Display too many parameters error message and current command usage.
     374 *
     375 * May show full command help instead if the subcommand is a common help option.
     376 *
     377 * @returns RTEXITCODE_SYNTAX, or RTEXITCODE_SUCCESS if common help option.
     378 * @param   papszArgs           The first unwanted parameter.  Terminated by
     379 *                              NULL entry.
     380 */
     381RTEXITCODE errorTooManyParameters(char **papszArgs)
     382{
     383    Assert(g_enmCurCommand != HELP_CMD_VBOXMANAGE_INVALID);
     384    Assert(g_fCurSubcommandScope != UINT64_MAX);
     385
     386    /* check if help was requested. */
     387    if (papszArgs)
     388        for (uint32_t i = 0; papszArgs[i]; i++)
     389            if (   strcmp(papszArgs[i], "--help") == 0
     390                || strcmp(papszArgs[i], "-h") == 0
     391                || strcmp(papszArgs[i], "-?") == 0)
     392            {
     393                printFullCommandOrSubcommandHelp(g_enmCurCommand, g_fCurSubcommandScope, g_pStdOut);
     394                return RTEXITCODE_SUCCESS;
     395            }
     396
     397    return errorSyntax("Too many parameters");
     398}
     399
    348400
    349401/**
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp

    r56344 r56349  
    10991099RTEXITCODE handleExtPack(HandlerArg *a)
    11001100{
    1101     setCurrentCommand(HELP_CMD_EXTPACK);
    11021101    if (a->argc < 1)
    11031102        return errorNoSubcommand();
     
    12061205        setCurrentSubcommand(HELP_SCOPE_EXTPACK_CLEANUP);
    12071206        if (a->argc > 1)
    1208             return errorSyntax("Too many parameters given to \"extpack cleanup\"");
     1207            return errorTooManyParameters(&a->argv[1]);
    12091208        CHECK_ERROR2I_RET(ptrExtPackMgr, Cleanup(), RTEXITCODE_FAILURE);
    12101209        RTPrintf("Successfully performed extension pack cleanup\n");
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette