VirtualBox

Ignore:
Timestamp:
Nov 22, 2013 11:15:41 AM (11 years ago)
Author:
vboxsync
Message:

VBoxManage: split 'guestcontrol' help into sub categories

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk

    r49165 r49621  
    2323endif
    2424VBoxManageHelp_TEMPLATE   = VBoxAdvBldProg
    25 VBoxManageHelp_DEFS      += VBOX_ONLY_DOCS
    26 VBoxManageHelp_SOURCES = \
     25VBoxManageHelp_DEFS      += \
     26        VBOX_ONLY_DOCS \
     27        $(if $(VBOX_WITH_GUEST_CONTROL),VBOX_WITH_GUEST_CONTROL)
     28VBoxManageHelp_SOURCES    = \
    2729        VBoxManage.cpp \
    2830        VBoxManageHelp.cpp \
     
    3537VBoxManage_TEMPLATE   = VBOXMAINCLIENTEXE
    3638VBoxManage_DEFS.win   = _WIN32_WINNT=0x0500
    37 VBoxManage_SOURCES = \
     39VBoxManage_SOURCES    = \
    3840        VBoxManage.cpp \
    3941        VBoxInternalManage.cpp \
  • trunk/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp

    r48878 r49621  
    23842384
    23852385            default:
    2386                 return errorGetOpt(USAGE_DEBUGLOG , ch, &ValueUnion);
     2386                return errorGetOpt(USAGE_DEBUGLOG, ch, &ValueUnion);
    23872387        }
    23882388    }
     
    24542454
    24552455            default:
    2456                 return errorGetOpt(USAGE_GUESTSTATS , ch, &ValueUnion);
     2456                return errorGetOpt(USAGE_GUESTSTATS, ch, &ValueUnion);
    24572457        }
    24582458    }
     
    25232523        return CmdLoadSyms(a->argc - 1, &a->argv[1], a->virtualBox, a->session);
    25242524    //if (!strcmp(pszCmd, "unloadsyms"))
    2525     //    return CmdUnloadSyms(argc - 1 , &a->argv[1]);
     2525    //    return CmdUnloadSyms(argc - 1, &a->argv[1]);
    25262526    if (!strcmp(pszCmd, "sethduuid") || !strcmp(pszCmd, "sethdparentuuid"))
    25272527        return CmdSetHDUUID(a->argc, &a->argv[0], a->virtualBox, a->session);
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp

    r46649 r49621  
    333333            {
    334334                showLogo(g_pStdOut);
    335                 printUsage(USAGE_ALL, g_pStdOut);
     335                printUsage(USAGE_ALL, ~0U, g_pStdOut);
    336336                return 0;
    337337            }
     
    357357            /* Special option to dump really all commands,
    358358             * even the ones not understood on this platform. */
    359             printUsage(USAGE_DUMPOPTS, g_pStdOut);
     359            printUsage(USAGE_DUMPOPTS, ~0U, g_pStdOut);
    360360            return 0;
    361361        }
     
    555555                        && s_commandHandlers[commandIndex].help))
    556556                {
    557                     printUsage(s_commandHandlers[commandIndex].help, g_pStdOut);
     557                    printUsage(s_commandHandlers[commandIndex].help, ~0U, g_pStdOut);
    558558                    rcExit = RTEXITCODE_FAILURE; /* error */
    559559                }
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h

    r47908 r49621  
    3030#include <iprt/message.h>
    3131#include <iprt/stream.h>
     32#include <iprt/getopt.h>
    3233
    3334////////////////////////////////////////////////////////////////////////////////
     
    106107/** @} */
    107108
     109#ifdef VBOX_WITH_GUEST_CONTROL
     110# define USAGE_GSTCTRL_EXEC         RT_BIT(0)
     111# define USAGE_GSTCTRL_COPYFROM     RT_BIT(1)
     112# define USAGE_GSTCTRL_COPYTO       RT_BIT(2)
     113# define USAGE_GSTCTRL_CREATEDIR    RT_BIT(3)
     114# define USAGE_GSTCTRL_REMOVEDIR    RT_BIT(4)
     115# define USAGE_GSTCTRL_REMOVEFILE   RT_BIT(5)
     116# define USAGE_GSTCTRL_RENAME       RT_BIT(6)
     117# define USAGE_GSTCTRL_CREATETEMP   RT_BIT(7)
     118# define USAGE_GSTCTRL_LIST         RT_BIT(8)
     119# define USAGE_GSTCTRL_PROCESS      RT_BIT(9)
     120# define USAGE_GSTCTRL_KILL         RT_BIT(10)
     121# define USAGE_GSTCTRL_SESSION      RT_BIT(11)
     122# define USAGE_GSTCTRL_STAT         RT_BIT(12)
     123# define USAGE_GSTCTRL_UPDATEADDS   RT_BIT(13)
     124# define USAGE_GSTCTRL_WATCH        RT_BIT(14)
     125#endif
     126
    108127typedef uint64_t USAGECATEGORY;
    109128
     
    148167
    149168/* VBoxManageHelp.cpp */
    150 void printUsage(USAGECATEGORY u64Cmd, PRTSTREAM pStrm);
    151 RTEXITCODE errorSyntax(USAGECATEGORY u64Cmd, const char *pszFormat, ...);
    152 RTEXITCODE errorGetOpt(USAGECATEGORY u64Cmd, int rc, union RTGETOPTUNION const *pValueUnion);
     169void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm);
     170RTEXITCODE errorSyntax(USAGECATEGORY fCategory, const char *pszFormat, ...);
     171RTEXITCODE errorSyntaxEx(USAGECATEGORY fCategory, uint32_t fSubCategory, const char *pszFormat, ...);
     172RTEXITCODE errorGetOpt(USAGECATEGORY fCategory, int rc, union RTGETOPTUNION const *pValueUnion);
     173RTEXITCODE errorGetOptEx(USAGECATEGORY fCategory, uint32_t fSubCategory, int rc, union RTGETOPTUNION const *pValueUnion);
    153174RTEXITCODE errorArgument(const char *pszFormat, ...);
    154175
    155 void printUsageInternal(USAGECATEGORY u64Cmd, PRTSTREAM pStrm);
     176void printUsageInternal(USAGECATEGORY fCategory, PRTSTREAM pStrm);
    156177
    157178#ifndef VBOX_ONLY_DOCS
     
    187208
    188209/* VBoxManageGuestCtrl.cpp */
    189 extern void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2);
     210extern void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint32_t fSubCategory);
    190211
    191212#ifndef VBOX_ONLY_DOCS
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageBandwidthControl.cpp

    r48950 r49621  
    275275        switch (c)
    276276        {
    277             case 'M':   enmDetails = VMINFO_MACHINEREADABLE; break;
    278             default:    return errorGetOpt(USAGE_BANDWIDTHCONTROL, c, &ValueUnion);
     277            case 'M':
     278                enmDetails = VMINFO_MACHINEREADABLE;
     279                break;
     280            default:
     281                return errorGetOpt(USAGE_BANDWIDTHCONTROL, c, &ValueUnion);
    279282        }
    280283    }
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp

    r49503 r49621  
    301301#endif /* VBOX_ONLY_DOCS */
    302302
    303 void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2)
     303void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint32_t uSubCmd)
    304304{
    305305    RTStrmPrintf(pStrm,
    306                        "%s guestcontrol %s    <uuid|vmname>\n"
    307                  "                            exec[ute]\n"
    308                  "                            --image <path to program> --username <name>\n"
    309                  "                            [--passwordfile <file> | --password <password>]\n"
    310                  "                            [--domain <domain>] [--verbose] [--timeout <msec>]\n"
    311                  "                            [--environment \"<NAME>=<VALUE> [<NAME>=<VALUE>]\"]\n"
    312                  "                            [--wait-exit] [--wait-stdout] [--wait-stderr]\n"
    313                  "                            [--dos2unix] [--unix2dos]\n"
    314                  "                            [-- [<argument1>] ... [<argumentN>]]\n"
    315                  /** @todo Add a "--" parameter (has to be last parameter) to directly execute
    316                   *        stuff, e.g. "VBoxManage guestcontrol execute <VMName> --username <> ... -- /bin/rm -Rf /foo". */
    317                  "\n"
    318                  "                            copyfrom\n"
    319                  "                            <guest source> <host dest> --username <name>\n"
    320                  "                            [--passwordfile <file> | --password <password>]\n"
    321                  "                            [--domain <domain>] [--verbose]\n"
    322                  "                            [--dryrun] [--follow] [--recursive]\n"
    323                  "\n"
    324                  "                            copyto|cp\n"
    325                  "                            <host source> <guest dest> --username <name>\n"
    326                  "                            [--passwordfile <file> | --password <password>]\n"
    327                  "                            [--domain <domain>] [--verbose]\n"
    328                  "                            [--dryrun] [--follow] [--recursive]\n"
    329                  "\n"
    330                  "                            createdir[ectory]|mkdir|md\n"
    331                  "                            <guest directory>... --username <name>\n"
    332                  "                            [--passwordfile <file> | --password <password>]\n"
    333                  "                            [--domain <domain>] [--verbose]\n"
    334                  "                            [--parents] [--mode <mode>]\n"
    335                  "\n"
    336                  "                            removedir[ectory]|rmdir\n"
    337                  "                            <guest directory>... --username <name>\n"
    338                  "                            [--passwordfile <file> | --password <password>]\n"
    339                  "                            [--domain <domain>] [--verbose]\n"
    340                  "                            [--recursive|-R|-r]\n"
    341                  "\n"
    342                  "                            removefile|rm\n"
    343                  "                            <guest file>... --username <name>\n"
    344                  "                            [--passwordfile <file> | --password <password>]\n"
    345                  "                            [--domain <domain>] [--verbose]\n"
    346                  "\n"
    347                  "                            ren[ame]|mv\n"
    348                  "                            <source>... <dest> --username <name>\n"
    349                  "                            [--passwordfile <file> | --password <password>]\n"
    350                  "                            [--domain <domain>] [--verbose]\n"
    351                  "\n"
    352                  "                            createtemp[orary]|mktemp\n"
    353                  "                            <template> --username <name>\n"
    354                  "                            [--passwordfile <file> | --password <password>]\n"
    355                  "                            [--directory] [--secure] [--tmpdir <directory>]\n"
    356                  "                            [--domain <domain>] [--mode <mode>] [--verbose]\n"
    357                  "\n"
    358                  "                            list <all|sessions|processes|files> [--verbose]\n"
    359                  "\n"
    360                  /** @todo Add an own help group for "session" and "process" sub commands. */
    361                  "                            process kill --session-id <ID>\n"
     306                       "%s guestcontrol %s    <uuid|vmname>\n%s",
     307                 pcszSep1, pcszSep2,
     308                 uSubCmd == ~0U ? "\n" : "");
     309    if (uSubCmd & USAGE_GSTCTRL_EXEC)
     310        RTStrmPrintf(pStrm,
     311                 "                              exec[ute]\n"
     312                 "                              --image <path to program> --username <name>\n"
     313                 "                              [--passwordfile <file> | --password <password>]\n"
     314                 "                              [--domain <domain>] [--verbose] [--timeout <msec>]\n"
     315                 "                              [--environment \"<NAME>=<VALUE> [<NAME>=<VALUE>]\"]\n"
     316                 "                              [--wait-exit] [--wait-stdout] [--wait-stderr]\n"
     317                 "                              [--dos2unix] [--unix2dos]\n"
     318                 "                              [-- [<argument1>] ... [<argumentN>]]\n"
     319                 "\n");
     320    if (uSubCmd & USAGE_GSTCTRL_COPYFROM)
     321        RTStrmPrintf(pStrm,
     322                 "                              copyfrom\n"
     323                 "                              <guest source> <host dest> --username <name>\n"
     324                 "                              [--passwordfile <file> | --password <password>]\n"
     325                 "                              [--domain <domain>] [--verbose]\n"
     326                 "                              [--dryrun] [--follow] [--recursive]\n"
     327                 "\n");
     328    if (uSubCmd & USAGE_GSTCTRL_COPYTO)
     329        RTStrmPrintf(pStrm,
     330                 "                              copyto|cp\n"
     331                 "                              <host source> <guest dest> --username <name>\n"
     332                 "                              [--passwordfile <file> | --password <password>]\n"
     333                 "                              [--domain <domain>] [--verbose]\n"
     334                 "                              [--dryrun] [--follow] [--recursive]\n"
     335                 "\n");
     336    if (uSubCmd & USAGE_GSTCTRL_CREATEDIR)
     337        RTStrmPrintf(pStrm,
     338                 "                              createdir[ectory]|mkdir|md\n"
     339                 "                              <guest directory>... --username <name>\n"
     340                 "                              [--passwordfile <file> | --password <password>]\n"
     341                 "                              [--domain <domain>] [--verbose]\n"
     342                 "                              [--parents] [--mode <mode>]\n"
     343                 "\n");
     344    if (uSubCmd & USAGE_GSTCTRL_REMOVEDIR)
     345        RTStrmPrintf(pStrm,
     346                 "                              removedir[ectory]|rmdir\n"
     347                 "                              <guest directory>... --username <name>\n"
     348                 "                              [--passwordfile <file> | --password <password>]\n"
     349                 "                              [--domain <domain>] [--verbose]\n"
     350                 "                              [--recursive|-R|-r]\n"
     351                 "\n");
     352    if (uSubCmd & USAGE_GSTCTRL_REMOVEFILE)
     353        RTStrmPrintf(pStrm,
     354                 "                              removefile|rm\n"
     355                 "                              <guest file>... --username <name>\n"
     356                 "                              [--passwordfile <file> | --password <password>]\n"
     357                 "                              [--domain <domain>] [--verbose]\n"
     358                 "\n");
     359    if (uSubCmd & USAGE_GSTCTRL_RENAME)
     360        RTStrmPrintf(pStrm,
     361                 "                              ren[ame]|mv\n"
     362                 "                              <source>... <dest> --username <name>\n"
     363                 "                              [--passwordfile <file> | --password <password>]\n"
     364                 "                              [--domain <domain>] [--verbose]\n"
     365                 "\n");
     366    if (uSubCmd & USAGE_GSTCTRL_CREATETEMP)
     367        RTStrmPrintf(pStrm,
     368                 "                              createtemp[orary]|mktemp\n"
     369                 "                              <template> --username <name>\n"
     370                 "                              [--passwordfile <file> | --password <password>]\n"
     371                 "                              [--directory] [--secure] [--tmpdir <directory>]\n"
     372                 "                              [--domain <domain>] [--mode <mode>] [--verbose]\n"
     373                 "\n");
     374    if (uSubCmd & USAGE_GSTCTRL_LIST)
     375        RTStrmPrintf(pStrm,
     376                 "                              list <all|sessions|processes|files> [--verbose]\n"
     377                 "\n");
     378    /** @todo Add an own help group for "session" and "process" sub commands. */
     379    if (uSubCmd & USAGE_GSTCTRL_PROCESS)
     380         RTStrmPrintf(pStrm,
     381                 "                              process kill --session-id <ID>\n"
     382                 "                                           | --session-name <name or pattern>\n"
     383                 "                                           [--verbose]\n"
     384                 "                                           <PID> ... <PID n>\n"
     385                 "\n");
     386    if (uSubCmd & USAGE_GSTCTRL_KILL)
     387        RTStrmPrintf(pStrm,
     388                 "                              [p[s]]kill --session-id <ID>\n"
    362389                 "                                         | --session-name <name or pattern>\n"
    363390                 "                                         [--verbose]\n"
    364391                 "                                         <PID> ... <PID n>\n"
    365                  "\n"
    366                  "                            [p[s]]kill --session-id <ID>\n"
    367                  "                                       | --session-name <name or pattern>\n"
    368                  "                                       [--verbose]\n"
    369                  "                                       <PID> ... <PID n>\n"
    370                  "\n"
    371                  "                            session close  --session-id <ID>\n"
    372                  "                                         | --session-name <name or pattern>\n"
    373                  "                                         | --all\n"
    374                  "                                         [--verbose]\n"
    375                  "                            stat\n"
    376                  "                            <file>... --username <name>\n"
    377                  "                            [--passwordfile <file> | --password <password>]\n"
    378                  "                            [--domain <domain>] [--verbose]\n"
    379                  "\n"
    380                  "                            updateadditions\n"
    381                  "                            [--source <guest additions .ISO>] [--verbose]\n"
    382                  "                            [--wait-start]\n"
    383                  "                            [-- [<argument1>] ... [<argumentN>]]\n"
    384                  "\n"
    385                  "                            watch [--verbose]\n"
    386                  "\n", pcszSep1, pcszSep2);
     392                 "\n");
     393    if (uSubCmd & USAGE_GSTCTRL_SESSION)
     394        RTStrmPrintf(pStrm,
     395                 "                              session close  --session-id <ID>\n"
     396                 "                                           | --session-name <name or pattern>\n"
     397                 "                                           | --all\n"
     398                 "                                           [--verbose]\n"
     399                 "\n");
     400    if (uSubCmd & USAGE_GSTCTRL_STAT)
     401        RTStrmPrintf(pStrm,
     402                 "                              stat\n"
     403                 "                              <file>... --username <name>\n"
     404                 "                              [--passwordfile <file> | --password <password>]\n"
     405                 "                              [--domain <domain>] [--verbose]\n"
     406                 "\n");
     407    if (uSubCmd & USAGE_GSTCTRL_UPDATEADDS)
     408        RTStrmPrintf(pStrm,
     409                 "                              updateadditions\n"
     410                 "                              [--source <guest additions .ISO>] [--verbose]\n"
     411                 "                              [--wait-start]\n"
     412                 "                              [-- [<argument1>] ... [<argumentN>]]\n"
     413                 "\n");
     414    if (uSubCmd & USAGE_GSTCTRL_WATCH)
     415        RTStrmPrintf(pStrm,
     416                 "                              watch [--verbose]\n"
     417                 "\n");
    387418}
    388419
     
    749780 */
    750781static RTEXITCODE ctrlInitVM(HandlerArg *pArg,
    751                              PGCTLCMDCTX pCtx, uint32_t uFlags)
     782                             PGCTLCMDCTX pCtx, uint32_t uFlags, uint32_t uUsage)
    752783{
    753784    AssertPtrReturn(pArg, RTEXITCODE_FAILURE);
     
    859890                        iArgIdx = GetState.iNext;
    860891                        break;
     892
     893                    case 'h': /* Help */
     894                        errorGetOptEx(USAGE_GUESTCONTROL, uUsage, ch, &ValueUnion);
     895                        return RTEXITCODE_SYNTAX;
    861896
    862897                    default:
     
    909944        {
    910945            if (pCtx->strUsername.isEmpty())
    911                 rcExit = errorSyntax(USAGE_GUESTCONTROL, "No user name specified!");
     946                rcExit = errorSyntaxEx(USAGE_GUESTCONTROL, uUsage, "No user name specified!");
    912947        }
    913948    }
     
    11601195                case GETOPTDEF_EXEC_DOS2UNIX:
    11611196                    if (eOutputType != OUTPUTTYPE_UNDEFINED)
    1162                         return errorSyntax(USAGE_GUESTCONTROL, "More than one output type (dos2unix/unix2dos) specified!");
     1197                        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_EXEC,
     1198                                             "More than one output type (dos2unix/unix2dos) specified!");
    11631199                    eOutputType = OUTPUTTYPE_DOS2UNIX;
    11641200                    break;
     
    11711207                    vrc = RTGetOptArgvFromString(&papszArg, &cArgs, ValueUnion.psz, NULL);
    11721208                    if (RT_FAILURE(vrc))
    1173                         return errorSyntax(USAGE_GUESTCONTROL, "Failed to parse environment value, rc=%Rrc", vrc);
     1209                        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_EXEC,
     1210                                             "Failed to parse environment value, rc=%Rrc", vrc);
    11741211                    for (int j = 0; j < cArgs; j++)
    11751212                        aEnv.push_back(Bstr(papszArg[j]).raw());
     
    11991236                case GETOPTDEF_EXEC_UNIX2DOS:
    12001237                    if (eOutputType != OUTPUTTYPE_UNDEFINED)
    1201                         return errorSyntax(USAGE_GUESTCONTROL, "More than one output type (dos2unix/unix2dos) specified!");
     1238                        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_EXEC,
     1239                                             "More than one output type (dos2unix/unix2dos) specified!");
    12021240                    eOutputType = OUTPUTTYPE_UNIX2DOS;
    12031241                    break;
     
    12331271                        aArgs.push_back(Bstr(ValueUnion.psz).raw());
    12341272                    else
    1235                         return RTGetOptPrintError(ch, &ValueUnion);
     1273                        return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_EXEC, ch, &ValueUnion);
    12361274                    break;
    12371275
     
    12481286
    12491287    if (strCmd.isEmpty())
    1250         return errorSyntax(USAGE_GUESTCONTROL, "No command to execute specified!");
     1288        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_EXEC,
     1289                             "No command to execute specified!");
    12511290
    12521291    /** @todo Any output conversion not supported yet! */
    12531292    if (eOutputType != OUTPUTTYPE_UNDEFINED)
    1254         return errorSyntax(USAGE_GUESTCONTROL, "Output conversion not implemented yet!");
     1293        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_EXEC,
     1294                             "Output conversion not implemented yet!");
    12551295
    12561296    RTEXITCODE rcExit = RTEXITCODE_SUCCESS;
     
    23942434    bool fCopyRecursive = false;
    23952435    bool fDryRun = false;
     2436    uint32_t uUsage = fHostToGuest ? USAGE_GSTCTRL_COPYTO : USAGE_GSTCTRL_COPYFROM;
    23962437
    23972438    SOURCEVEC vecSources;
     
    24382479
    24392480            default:
    2440                 return RTGetOptPrintError(ch, &ValueUnion);
    2441                 break;
     2481                return errorGetOptEx(USAGE_GUESTCONTROL, uUsage, ch, &ValueUnion);
    24422482        }
    24432483    }
    24442484
    24452485    if (!vecSources.size())
    2446         return errorSyntax(USAGE_GUESTCONTROL,
    2447                            "No source(s) specified!");
     2486        return errorSyntaxEx(USAGE_GUESTCONTROL, uUsage,
     2487                             "No source(s) specified!");
    24482488
    24492489    if (strDest.isEmpty())
    2450         return errorSyntax(USAGE_GUESTCONTROL,
    2451                            "No destination specified!");
     2490        return errorSyntaxEx(USAGE_GUESTCONTROL, uUsage,
     2491                             "No destination specified!");
    24522492
    24532493    /*
     
    26632703
    26642704            default:
    2665                 return RTGetOptPrintError(ch, &ValueUnion);
    2666                 break;
     2705                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CREATEDIR, ch, &ValueUnion);
    26672706        }
    26682707    }
     
    26702709    uint32_t cDirs = mapDirs.size();
    26712710    if (!cDirs)
    2672         return errorSyntax(USAGE_GUESTCONTROL, "No directory to create specified!");
     2711        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CREATEDIR,
     2712                             "No directory to create specified!");
    26732713
    26742714    /*
     
    27262766
    27272767            default:
    2728                 return RTGetOptPrintError(ch, &ValueUnion);
    2729                 break;
     2768                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_REMOVEDIR, ch, &ValueUnion);
    27302769        }
    27312770    }
     
    27332772    uint32_t cDirs = mapDirs.size();
    27342773    if (!cDirs)
    2735         return errorSyntax(USAGE_GUESTCONTROL, "No directory to remove specified!");
     2774        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_REMOVEDIR,
     2775                             "No directory to remove specified!");
    27362776
    27372777    /*
     
    28092849
    28102850            default:
    2811                 return RTGetOptPrintError(ch, &ValueUnion);
    2812                 break;
     2851                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_REMOVEFILE, ch, &ValueUnion);
    28132852        }
    28142853    }
     
    28162855    uint32_t cFiles = mapDirs.size();
    28172856    if (!cFiles)
    2818         return errorSyntax(USAGE_GUESTCONTROL, "No file to remove specified!");
     2857        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_REMOVEFILE,
     2858                             "No file to remove specified!");
    28192859
    28202860    /*
     
    28792919
    28802920                default:
    2881                     return RTGetOptPrintError(ch, &ValueUnion);
    2882                     break;
     2921                    return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RENAME, ch, &ValueUnion);
    28832922            }
    28842923        }
     
    28942933    uint32_t cSources = vecSources.size();
    28952934    if (!cSources)
    2896         return errorSyntax(USAGE_GUESTCONTROL, "No source(s) to move specified!");
     2935        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RENAME,
     2936                             "No source(s) to move specified!");
    28972937    if (cSources < 2)
    2898         return errorSyntax(USAGE_GUESTCONTROL, "No destination specified!");
     2938        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_RENAME,
     2939                             "No destination specified!");
    28992940
    29002941    /* Delete last element, which now is the destination. */
     
    30553096                    strTemplate = ValueUnion.psz;
    30563097                else
    3057                     return errorSyntax(USAGE_GUESTCONTROL,
    3058                                        "More than one template specified!\n");
     3098                    return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CREATETEMP,
     3099                                         "More than one template specified!\n");
    30593100                break;
    30603101            }
    30613102
    30623103            default:
    3063                 return RTGetOptPrintError(ch, &ValueUnion);
    3064                 break;
     3104                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CREATETEMP, ch, &ValueUnion);
    30653105        }
    30663106    }
    30673107
    30683108    if (strTemplate.isEmpty())
    3069         return errorSyntax(USAGE_GUESTCONTROL, "No template specified!");
     3109        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CREATETEMP,
     3110                             "No template specified!");
    30703111
    30713112    if (!fDirectory)
    3072         return errorSyntax(USAGE_GUESTCONTROL, "Creating temporary files is currently not supported!");
     3113        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_CREATETEMP,
     3114                             "Creating temporary files is currently not supported!");
    30733115
    30743116    /*
     
    31363178            case 'c': /* Format */
    31373179            case 't': /* Terse */
    3138                 return errorSyntax(USAGE_GUESTCONTROL, "Command \"%s\" not implemented yet!",
    3139                                    ValueUnion.psz);
    3140                 break; /* Never reached. */
     3180                return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_STAT,
     3181                                     "Command \"%s\" not implemented yet!", ValueUnion.psz);
    31413182
    31423183            case VINF_GETOPT_NOT_OPTION:
     
    31453186
    31463187            default:
    3147                 return RTGetOptPrintError(ch, &ValueUnion);
    3148                 break;
     3188                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_STAT, ch, &ValueUnion);
    31493189        }
    31503190    }
     
    31523192    uint32_t cObjs = mapObjs.size();
    31533193    if (!cObjs)
    3154         return errorSyntax(USAGE_GUESTCONTROL, "No element(s) to check specified!");
     3194        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_STAT,
     3195                             "No element(s) to check specified!");
    31553196
    31563197    HRESULT rc;
     
    32573298
    32583299            default:
    3259                 return RTGetOptPrintError(ch, &ValueUnion);
    3260                 break;
     3300                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_UPDATEADDS, ch, &ValueUnion);
    32613301        }
    32623302    }
     
    33353375
    33363376    if (pCtx->iArgc < 1)
    3337         return errorSyntax(USAGE_GUESTCONTROL, "Must specify a listing category");
     3377        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_LIST,
     3378                             "Must specify a listing category");
    33383379
    33393380    RTEXITCODE rcExit = RTEXITCODE_SUCCESS;
     
    34593500    }
    34603501    else
    3461         return errorSyntax(USAGE_GUESTCONTROL, "Invalid listing category '%s", pCtx->ppaArgv[0]);
     3502        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_LIST,
     3503                             "Invalid listing category '%s", pCtx->ppaArgv[0]);
    34623504
    34633505    return rcExit;
     
    34693511
    34703512    if (pCtx->iArgc < 1)
    3471         return errorSyntax(USAGE_GUESTCONTROL, "Must specify at least a PID to close");
     3513        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_PROCESS,
     3514                             "Must specify at least a PID to close");
    34723515
    34733516    static const RTGETOPTDEF s_aOptions[] =
     
    35243567
    35253568            default:
    3526                 return RTGetOptPrintError(ch, &ValueUnion);
    3527                 break;
     3569                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_PROCESS, ch, &ValueUnion);
    35283570        }
    35293571    }
    35303572
    35313573    if (vecPID.empty())
    3532         return errorSyntax(USAGE_GUESTCONTROL, "At least one PID must be specified to kill!");
    3533     else if (   strSessionName.isEmpty()
    3534              && ulSessionID == UINT32_MAX)
    3535     {
    3536         return errorSyntax(USAGE_GUESTCONTROL, "No session ID specified!");
    3537     }
    3538     else if (   !strSessionName.isEmpty()
    3539              && ulSessionID != UINT32_MAX)
    3540     {
    3541         return errorSyntax(USAGE_GUESTCONTROL, "Either session ID or name (pattern) must be specified");
    3542     }
     3574        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_PROCESS,
     3575                             "At least one PID must be specified to kill!");
     3576
     3577    if (   strSessionName.isEmpty()
     3578        && ulSessionID == UINT32_MAX)
     3579        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_PROCESS,
     3580                             "No session ID specified!");
     3581
     3582    if (   !strSessionName.isEmpty()
     3583        && ulSessionID != UINT32_MAX)
     3584        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_PROCESS,
     3585                             "Either session ID or name (pattern) must be specified");
    35433586
    35443587    if (RT_FAILURE(vrc))
    3545         return errorSyntax(USAGE_GUESTCONTROL, "Invalid parameters specified");
     3588        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_PROCESS,
     3589                             "Invalid parameters specified");
    35463590
    35473591    HRESULT rc = S_OK;
     
    36463690
    36473691    if (pCtx->iArgc < 1)
    3648         return errorSyntax(USAGE_GUESTCONTROL, "Must specify an action");
     3692        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_PROCESS,
     3693                             "Must specify an action");
    36493694
    36503695    /** Use RTGetOpt here when handling command line args gets more complex. */
     
    36583703    }
    36593704
    3660     return errorSyntax(USAGE_GUESTCONTROL, "Invalid process action '%s'", pCtx->ppaArgv[0]);
     3705    return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_PROCESS,
     3706                         "Invalid process action '%s'", pCtx->ppaArgv[0]);
    36613707}
    36623708
     
    36663712
    36673713    if (pCtx->iArgc < 1)
    3668         return errorSyntax(USAGE_GUESTCONTROL, "Must specify at least a session to close");
     3714        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_SESSION,
     3715                             "Must specify at least a session to close");
    36693716
    36703717    static const RTGETOPTDEF s_aOptions[] =
     
    37063753
    37073754            default:
    3708                 return RTGetOptPrintError(ch, &ValueUnion);
    3709                 break;
     3755                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_SESSION, ch, &ValueUnion);
    37103756        }
    37113757    }
     
    37133759    if (   strSessionName.isEmpty()
    37143760        && ulSessionID == UINT32_MAX)
    3715     {
    3716         return errorSyntax(USAGE_GUESTCONTROL, "No session ID specified!");
    3717     }
    3718     else if (   !strSessionName.isEmpty()
    3719              && ulSessionID != UINT32_MAX)
    3720     {
    3721         return errorSyntax(USAGE_GUESTCONTROL, "Either session ID or name (pattern) must be specified");
    3722     }
     3761        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_SESSION,
     3762                             "No session ID specified!");
     3763
     3764    if (   !strSessionName.isEmpty()
     3765        && ulSessionID != UINT32_MAX)
     3766        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_SESSION,
     3767                             "Either session ID or name (pattern) must be specified");
    37233768
    37243769    HRESULT rc = S_OK;
     
    37863831
    37873832    if (pCtx->iArgc < 1)
    3788         return errorSyntax(USAGE_GUESTCONTROL, "Must specify an action");
     3833        return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_SESSION,
     3834                             "Must specify an action");
    37893835
    37903836    /** Use RTGetOpt here when handling command line args gets more complex. */
     
    37983844    }
    37993845
    3800     return errorSyntax(USAGE_GUESTCONTROL, "Invalid session action '%s'", pCtx->ppaArgv[0]);
     3846    return errorSyntaxEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_SESSION,
     3847                         "Invalid session action '%s'", pCtx->ppaArgv[0]);
    38013848}
    38023849
     
    38253872
    38263873            default:
    3827                 return RTGetOptPrintError(ch, &ValueUnion);
    3828                 break;
     3874                return errorGetOptEx(USAGE_GUESTCONTROL, USAGE_GSTCTRL_WATCH, ch, &ValueUnion);
    38293875        }
    38303876    }
     
    39083954
    39093955    uint32_t uCmdCtxFlags = 0;
     3956    uint32_t uUsage;
    39103957    GCTLCMD gctlCmd;
    39113958    if (   !RTStrICmp(pArg->argv[1], "exec")
    39123959        || !RTStrICmp(pArg->argv[1], "execute"))
     3960    {
    39133961        gctlCmd.pfnHandler = handleCtrlProcessExec;
     3962        uUsage = USAGE_GSTCTRL_EXEC;
     3963    }
    39143964    else if (!RTStrICmp(pArg->argv[1], "copyfrom"))
     3965    {
    39153966        gctlCmd.pfnHandler = handleCtrlCopyFrom;
     3967        uUsage = USAGE_GSTCTRL_COPYFROM;
     3968    }
    39163969    else if (   !RTStrICmp(pArg->argv[1], "copyto")
    39173970             || !RTStrICmp(pArg->argv[1], "cp"))
     3971    {
    39183972        gctlCmd.pfnHandler = handleCtrlCopyTo;
     3973        uUsage = USAGE_GSTCTRL_COPYTO;
     3974    }
    39193975    else if (   !RTStrICmp(pArg->argv[1], "createdirectory")
    39203976             || !RTStrICmp(pArg->argv[1], "createdir")
    39213977             || !RTStrICmp(pArg->argv[1], "mkdir")
    39223978             || !RTStrICmp(pArg->argv[1], "md"))
     3979    {
    39233980        gctlCmd.pfnHandler = handleCtrlCreateDirectory;
     3981        uUsage = USAGE_GSTCTRL_CREATEDIR;
     3982    }
    39243983    else if (   !RTStrICmp(pArg->argv[1], "removedirectory")
    39253984             || !RTStrICmp(pArg->argv[1], "removedir")
    39263985             || !RTStrICmp(pArg->argv[1], "rmdir"))
     3986    {
    39273987        gctlCmd.pfnHandler = handleCtrlRemoveDirectory;
     3988        uUsage = USAGE_GSTCTRL_REMOVEDIR;
     3989    }
    39283990    else if (   !RTStrICmp(pArg->argv[1], "rm")
    39293991             || !RTStrICmp(pArg->argv[1], "removefile"))
     3992    {
    39303993        gctlCmd.pfnHandler = handleCtrlRemoveFile;
     3994        uUsage = USAGE_GSTCTRL_REMOVEFILE;
     3995    }
    39313996    else if (   !RTStrICmp(pArg->argv[1], "ren")
    39323997             || !RTStrICmp(pArg->argv[1], "rename")
    39333998             || !RTStrICmp(pArg->argv[1], "mv"))
     3999    {
    39344000        gctlCmd.pfnHandler = handleCtrlRename;
     4001        uUsage = USAGE_GSTCTRL_RENAME;
     4002    }
    39354003    else if (   !RTStrICmp(pArg->argv[1], "createtemporary")
    39364004             || !RTStrICmp(pArg->argv[1], "createtemp")
    39374005             || !RTStrICmp(pArg->argv[1], "mktemp"))
     4006    {
    39384007        gctlCmd.pfnHandler = handleCtrlCreateTemp;
     4008        uUsage = USAGE_GSTCTRL_CREATETEMP;
     4009    }
    39394010    else if (   !RTStrICmp(pArg->argv[1], "kill")    /* Linux. */
    39404011             || !RTStrICmp(pArg->argv[1], "pkill")   /* Solaris / *BSD. */
     
    39454016                     | CTLCMDCTX_FLAGS_NO_SIGNAL_HANDLER;
    39464017        gctlCmd.pfnHandler = handleCtrlProcessClose;
     4018        uUsage = USAGE_GSTCTRL_KILL;
    39474019    }
    39484020    /** @todo Implement "killall"? */
    39494021    else if (   !RTStrICmp(pArg->argv[1], "stat"))
     4022    {
    39504023        gctlCmd.pfnHandler = handleCtrlStat;
     4024        uUsage = USAGE_GSTCTRL_STAT;
     4025    }
    39514026    else if (   !RTStrICmp(pArg->argv[1], "updateadditions")
    39524027             || !RTStrICmp(pArg->argv[1], "updateadds"))
     
    39554030                     | CTLCMDCTX_FLAGS_NO_SIGNAL_HANDLER;
    39564031        gctlCmd.pfnHandler = handleCtrlUpdateAdditions;
     4032        uUsage = USAGE_GSTCTRL_UPDATEADDS;
    39574033    }
    39584034    else if (   !RTStrICmp(pArg->argv[1], "list"))
     
    39614037                     | CTLCMDCTX_FLAGS_NO_SIGNAL_HANDLER;
    39624038        gctlCmd.pfnHandler = handleCtrlList;
     4039        uUsage = USAGE_GSTCTRL_LIST;
    39634040    }
    39644041    else if (   !RTStrICmp(pArg->argv[1], "session"))
     
    39674044                     | CTLCMDCTX_FLAGS_NO_SIGNAL_HANDLER;
    39684045        gctlCmd.pfnHandler = handleCtrlSession;
     4046        uUsage = USAGE_GSTCTRL_SESSION;
    39694047    }
    39704048    else if (   !RTStrICmp(pArg->argv[1], "process"))
     
    39734051                     | CTLCMDCTX_FLAGS_NO_SIGNAL_HANDLER;
    39744052        gctlCmd.pfnHandler = handleCtrlProcess;
     4053        uUsage = USAGE_GSTCTRL_PROCESS;
    39754054    }
    39764055    else if (   !RTStrICmp(pArg->argv[1], "watch"))
     
    39794058                     | CTLCMDCTX_FLAGS_NO_SIGNAL_HANDLER;
    39804059        gctlCmd.pfnHandler = handleCtrlWatch;
     4060        uUsage = USAGE_GSTCTRL_WATCH;
    39814061    }
    39824062    else
     
    39864066    RT_ZERO(cmdCtx);
    39874067
    3988     RTEXITCODE rcExit = ctrlInitVM(pArg, &cmdCtx, uCmdCtxFlags);
     4068    RTEXITCODE rcExit = ctrlInitVM(pArg, &cmdCtx, uCmdCtxFlags, uUsage);
    39894069    if (rcExit == RTEXITCODE_SUCCESS)
    39904070    {
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r49190 r49621  
    4747}
    4848
    49 void printUsage(USAGECATEGORY u64Cmd, PRTSTREAM pStrm)
     49void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
    5050{
    5151    bool fDumpOpts = false;
     
    8181#endif
    8282
    83     if (u64Cmd == USAGE_DUMPOPTS)
     83    if (fCategory == USAGE_DUMPOPTS)
    8484    {
    8585        fDumpOpts = true;
     
    9090        fDarwin = true;
    9191        fVBoxSDL = true;
    92         u64Cmd = USAGE_ALL;
     92        fCategory = USAGE_ALL;
    9393    }
    9494
     
    9797                 "\n");
    9898
    99     if (u64Cmd == USAGE_ALL)
     99    if (fCategory == USAGE_ALL)
    100100        RTStrmPrintf(pStrm,
    101101                     "  VBoxManage [<general option>] <command>\n"
     
    111111    const char *pcszSep1 = " ";
    112112    const char *pcszSep2 = "         ";
    113     if (u64Cmd != USAGE_ALL)
     113    if (fCategory != USAGE_ALL)
    114114    {
    115115        pcszSep1 = "VBoxManage";
     
    119119#define SEP pcszSep1, pcszSep2
    120120
    121     if (u64Cmd & USAGE_LIST)
     121    if (fCategory & USAGE_LIST)
    122122        RTStrmPrintf(pStrm,
    123123                           "%s list [--long|-l]%s vms|runningvms|ostypes|hostdvds|hostfloppies|\n"
     
    132132                     "\n", SEP);
    133133
    134     if (u64Cmd & USAGE_SHOWVMINFO)
     134    if (fCategory & USAGE_SHOWVMINFO)
    135135        RTStrmPrintf(pStrm,
    136136                           "%s showvminfo %s      <uuid|vmname> [--details]\n"
     
    139139                     "\n", SEP, SEP);
    140140
    141     if (u64Cmd & USAGE_REGISTERVM)
     141    if (fCategory & USAGE_REGISTERVM)
    142142        RTStrmPrintf(pStrm,
    143143                           "%s registervm %s      <filename>\n"
    144144                     "\n", SEP);
    145145
    146     if (u64Cmd & USAGE_UNREGISTERVM)
     146    if (fCategory & USAGE_UNREGISTERVM)
    147147        RTStrmPrintf(pStrm,
    148148                           "%s unregistervm %s    <uuid|vmname> [--delete]\n"
    149149                     "\n", SEP);
    150150
    151     if (u64Cmd & USAGE_CREATEVM)
     151    if (fCategory & USAGE_CREATEVM)
    152152        RTStrmPrintf(pStrm,
    153153                           "%s createvm %s        --name <name>\n"
     
    159159                     "\n", SEP);
    160160
    161     if (u64Cmd & USAGE_MODIFYVM)
     161    if (fCategory & USAGE_MODIFYVM)
    162162    {
    163163        RTStrmPrintf(pStrm,
     
    382382    }
    383383
    384     if (u64Cmd & USAGE_CLONEVM)
     384    if (fCategory & USAGE_CLONEVM)
    385385        RTStrmPrintf(pStrm,
    386386                           "%s clonevm %s         <uuid|vmname>\n"
     
    396396                     "\n", SEP);
    397397
    398     if (u64Cmd & USAGE_IMPORTAPPLIANCE)
     398    if (fCategory & USAGE_IMPORTAPPLIANCE)
    399399        RTStrmPrintf(pStrm,
    400400                           "%s import %s          <ovfname/ovaname>\n"
     
    405405                     "                             for a particular OVF)\n\n", SEP);
    406406
    407     if (u64Cmd & USAGE_EXPORTAPPLIANCE)
     407    if (fCategory & USAGE_EXPORTAPPLIANCE)
    408408        RTStrmPrintf(pStrm,
    409409                           "%s export %s          <machines> --output|-o <name>.<ovf/ova>\n"
     
    422422                     "\n", SEP);
    423423
    424     if (u64Cmd & USAGE_STARTVM)
     424    if (fCategory & USAGE_STARTVM)
    425425    {
    426426        RTStrmPrintf(pStrm,
     
    434434    }
    435435
    436     if (u64Cmd & USAGE_CONTROLVM)
     436    if (fCategory & USAGE_CONTROLVM)
    437437    {
    438438        RTStrmPrintf(pStrm,
     
    487487    }
    488488
    489     if (u64Cmd & USAGE_DISCARDSTATE)
     489    if (fCategory & USAGE_DISCARDSTATE)
    490490        RTStrmPrintf(pStrm,
    491491                           "%s discardstate %s    <uuid|vmname>\n"
    492492                     "\n", SEP);
    493493
    494     if (u64Cmd & USAGE_ADOPTSTATE)
     494    if (fCategory & USAGE_ADOPTSTATE)
    495495        RTStrmPrintf(pStrm,
    496496                           "%s adoptstate %s      <uuid|vmname> <state_file>\n"
    497497                     "\n", SEP);
    498498
    499     if (u64Cmd & USAGE_SNAPSHOT)
     499    if (fCategory & USAGE_SNAPSHOT)
    500500        RTStrmPrintf(pStrm,
    501501                           "%s snapshot %s        <uuid|vmname>\n"
     
    511511                     "\n", SEP);
    512512
    513     if (u64Cmd & USAGE_CLOSEMEDIUM)
     513    if (fCategory & USAGE_CLOSEMEDIUM)
    514514        RTStrmPrintf(pStrm,
    515515                           "%s closemedium %s     disk|dvd|floppy <uuid|filename>\n"
     
    517517                     "\n", SEP);
    518518
    519     if (u64Cmd & USAGE_STORAGEATTACH)
     519    if (fCategory & USAGE_STORAGEATTACH)
    520520        RTStrmPrintf(pStrm,
    521521                           "%s storageattach %s   <uuid|vmname>\n"
     
    549549                     "\n", SEP);
    550550
    551     if (u64Cmd & USAGE_STORAGECONTROLLER)
     551    if (fCategory & USAGE_STORAGECONTROLLER)
    552552        RTStrmPrintf(pStrm,
    553553                           "%s storagectl %s      <uuid|vmname>\n"
     
    562562                     "\n", SEP);
    563563
    564     if (u64Cmd & USAGE_BANDWIDTHCONTROL)
     564    if (fCategory & USAGE_BANDWIDTHCONTROL)
    565565        RTStrmPrintf(pStrm,
    566566                           "%s bandwidthctl %s    <uuid|vmname>\n"
     
    575575                     "\n", SEP);
    576576
    577     if (u64Cmd & USAGE_SHOWHDINFO)
     577    if (fCategory & USAGE_SHOWHDINFO)
    578578        RTStrmPrintf(pStrm,
    579579                           "%s showhdinfo %s      <uuid|filename>\n"
    580580                     "\n", SEP);
    581581
    582     if (u64Cmd & USAGE_CREATEHD)
     582    if (fCategory & USAGE_CREATEHD)
    583583        RTStrmPrintf(pStrm,
    584584                           "%s createhd %s        --filename <filename>\n"
     
    589589                     "\n", SEP);
    590590
    591     if (u64Cmd & USAGE_MODIFYHD)
     591    if (fCategory & USAGE_MODIFYHD)
    592592        RTStrmPrintf(pStrm,
    593593                           "%s modifyhd %s        <uuid|filename>\n"
     
    600600                     "\n", SEP);
    601601
    602     if (u64Cmd & USAGE_CLONEHD)
     602    if (fCategory & USAGE_CLONEHD)
    603603        RTStrmPrintf(pStrm,
    604604                           "%s clonehd %s         <uuid|inputfile> <uuid|outputfile>\n"
     
    608608                     "\n", SEP);
    609609
    610     if (u64Cmd & USAGE_CONVERTFROMRAW)
     610    if (fCategory & USAGE_CONVERTFROMRAW)
    611611        RTStrmPrintf(pStrm,
    612612                           "%s convertfromraw %s  <filename> <outputfile>\n"
     
    620620                     "\n", SEP, SEP);
    621621
    622     if (u64Cmd & USAGE_GETEXTRADATA)
     622    if (fCategory & USAGE_GETEXTRADATA)
    623623        RTStrmPrintf(pStrm,
    624624                           "%s getextradata %s    global|<uuid|vmname>\n"
     
    626626                     "\n", SEP);
    627627
    628     if (u64Cmd & USAGE_SETEXTRADATA)
     628    if (fCategory & USAGE_SETEXTRADATA)
    629629        RTStrmPrintf(pStrm,
    630630                           "%s setextradata %s    global|<uuid|vmname>\n"
     
    633633                     "\n", SEP);
    634634
    635     if (u64Cmd & USAGE_SETPROPERTY)
     635    if (fCategory & USAGE_SETPROPERTY)
    636636        RTStrmPrintf(pStrm,
    637637                           "%s setproperty %s     machinefolder default|<folder> |\n"
     
    645645                     "\n", SEP);
    646646
    647     if (u64Cmd & USAGE_USBFILTER_ADD)
     647    if (fCategory & USAGE_USBFILTER_ADD)
    648648        RTStrmPrintf(pStrm,
    649649                           "%s usbfilter %s       add <index,0-N>\n"
     
    662662                     "\n", SEP);
    663663
    664     if (u64Cmd & USAGE_USBFILTER_MODIFY)
     664    if (fCategory & USAGE_USBFILTER_MODIFY)
    665665        RTStrmPrintf(pStrm,
    666666                           "%s usbfilter %s       modify <index,0-N>\n"
     
    679679                     "\n", SEP);
    680680
    681     if (u64Cmd & USAGE_USBFILTER_REMOVE)
     681    if (fCategory & USAGE_USBFILTER_REMOVE)
    682682        RTStrmPrintf(pStrm,
    683683                           "%s usbfilter %s       remove <index,0-N>\n"
     
    685685                     "\n", SEP);
    686686
    687     if (u64Cmd & USAGE_SHAREDFOLDER_ADD)
     687    if (fCategory & USAGE_SHAREDFOLDER_ADD)
    688688        RTStrmPrintf(pStrm,
    689689                           "%s sharedfolder %s    add <uuid|vmname>\n"
     
    692692                     "\n", SEP);
    693693
    694     if (u64Cmd & USAGE_SHAREDFOLDER_REMOVE)
     694    if (fCategory & USAGE_SHAREDFOLDER_REMOVE)
    695695        RTStrmPrintf(pStrm,
    696696                           "%s sharedfolder %s    remove <uuid|vmname>\n"
     
    699699
    700700#ifdef VBOX_WITH_GUEST_PROPS
    701     if (u64Cmd & USAGE_GUESTPROPERTY)
     701    if (fCategory & USAGE_GUESTPROPERTY)
    702702        usageGuestProperty(pStrm, SEP);
    703703#endif /* VBOX_WITH_GUEST_PROPS defined */
    704704
    705705#ifdef VBOX_WITH_GUEST_CONTROL
    706     if (u64Cmd & USAGE_GUESTCONTROL)
    707         usageGuestControl(pStrm, SEP);
     706    if (fCategory & USAGE_GUESTCONTROL)
     707        usageGuestControl(pStrm, SEP, fSubCategory);
    708708#endif /* VBOX_WITH_GUEST_CONTROL defined */
    709709
    710     if (u64Cmd & USAGE_DEBUGVM)
     710    if (fCategory & USAGE_DEBUGVM)
    711711    {
    712712        RTStrmPrintf(pStrm,
     
    730730                     "\n", SEP);
    731731    }
    732     if (u64Cmd & USAGE_METRICS)
     732    if (fCategory & USAGE_METRICS)
    733733        RTStrmPrintf(pStrm,
    734734                           "%s metrics %s         list [*|host|<vmname> [<metric_list>]]\n"
     
    755755
    756756#if defined(VBOX_WITH_NAT_SERVICE)
    757     if (u64Cmd & USAGE_NATNETWORK)
     757    if (fCategory & USAGE_NATNETWORK)
    758758    {
    759759        RTStrmPrintf(pStrm,
     
    786786
    787787#if defined(VBOX_WITH_NETFLT)
    788     if (u64Cmd & USAGE_HOSTONLYIFS)
     788    if (fCategory & USAGE_HOSTONLYIFS)
    789789    {
    790790        RTStrmPrintf(pStrm,
     
    801801#endif
    802802
    803     if (u64Cmd & USAGE_DHCPSERVER)
     803    if (fCategory & USAGE_DHCPSERVER)
    804804    {
    805805        RTStrmPrintf(pStrm,
     
    819819                     "\n", SEP, SEP);
    820820    }
    821     if (u64Cmd & USAGE_EXTPACK)
     821    if (fCategory & USAGE_EXTPACK)
    822822    {
    823823        RTStrmPrintf(pStrm,
     
    833833 * @returns RTEXITCODE_SYNTAX.
    834834 */
    835 RTEXITCODE errorSyntax(USAGECATEGORY u64Cmd, const char *pszFormat, ...)
     835RTEXITCODE errorSyntax(USAGECATEGORY fCategory, const char *pszFormat, ...)
    836836{
    837837    va_list args;
     
    839839#ifndef VBOX_ONLY_DOCS
    840840    if (g_fInternalMode)
    841         printUsageInternal(u64Cmd, g_pStdErr);
     841        printUsageInternal(fCategory, g_pStdErr);
    842842    else
    843         printUsage(u64Cmd, g_pStdErr);
     843        printUsage(fCategory, ~0U, g_pStdErr);
    844844#endif /* !VBOX_ONLY_DOCS */
    845845    va_start(args, pszFormat);
     
    847847    va_end(args);
    848848    return RTEXITCODE_SYNTAX;
     849}
     850
     851/**
     852 * Print a usage synopsis and the syntax error message.
     853 * @returns RTEXITCODE_SYNTAX.
     854 */
     855RTEXITCODE errorSyntaxEx(USAGECATEGORY fCategory, uint32_t fSubCategory, const char *pszFormat, ...)
     856{
     857    va_list args;
     858    showLogo(g_pStdErr); // show logo even if suppressed
     859#ifndef VBOX_ONLY_DOCS
     860    if (g_fInternalMode)
     861        printUsageInternal(fCategory, g_pStdErr);
     862    else
     863        printUsage(fCategory, fSubCategory, g_pStdErr);
     864#endif /* !VBOX_ONLY_DOCS */
     865    va_start(args, pszFormat);
     866    RTStrmPrintf(g_pStdErr, "\nSyntax error: %N\n", pszFormat, &args);
     867    va_end(args);
     868    return RTEXITCODE_SYNTAX;
     869}
     870
     871/**
     872 * errorSyntax for RTGetOpt users.
     873 *
     874 * @returns RTEXITCODE_SYNTAX.
     875 *
     876 * @param   fCategory          The usage category of the command.
     877 * @param   fSubCategory         The usage sub-category of the command.
     878 * @param   rc              The RTGetOpt return code.
     879 * @param   pValueUnion     The value union.
     880 */
     881RTEXITCODE errorGetOptEx(USAGECATEGORY fCategory, uint32_t fSubCategory, int rc, union RTGETOPTUNION const *pValueUnion)
     882{
     883    /*
     884     * Check if it is an unhandled standard option.
     885     */
     886    if (rc == 'V')
     887    {
     888        RTPrintf("%sr%d\n", VBOX_VERSION_STRING, RTBldCfgRevision());
     889        return RTEXITCODE_SUCCESS;
     890    }
     891
     892    if (rc == 'h')
     893    {
     894        showLogo(g_pStdErr);
     895#ifndef VBOX_ONLY_DOCS
     896        if (g_fInternalMode)
     897            printUsageInternal(fCategory, g_pStdOut);
     898        else
     899            printUsage(fCategory, fSubCategory, g_pStdOut);
     900#endif
     901        return RTEXITCODE_SUCCESS;
     902    }
     903
     904    /*
     905     * General failure.
     906     */
     907    showLogo(g_pStdErr); // show logo even if suppressed
     908#ifndef VBOX_ONLY_DOCS
     909    if (g_fInternalMode)
     910        printUsageInternal(fCategory, g_pStdErr);
     911    else
     912        printUsage(fCategory, fSubCategory, g_pStdErr);
     913#endif /* !VBOX_ONLY_DOCS */
     914
     915    if (rc == VINF_GETOPT_NOT_OPTION)
     916        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid parameter '%s'", pValueUnion->psz);
     917    if (rc > 0)
     918    {
     919        if (RT_C_IS_PRINT(rc))
     920            return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid option -%c", rc);
     921        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid option case %i", rc);
     922    }
     923    if (rc == VERR_GETOPT_UNKNOWN_OPTION)
     924        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Unknown option: %s", pValueUnion->psz);
     925    if (rc == VERR_GETOPT_INVALID_ARGUMENT_FORMAT)
     926        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid argument format: %s", pValueUnion->psz);
     927    if (pValueUnion->pDef)
     928        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "%s: %Rrs", pValueUnion->pDef->pszLong, rc);
     929    return RTMsgErrorExit(RTEXITCODE_SYNTAX, "%Rrs", rc);
    849930}
    850931
     
    858939 * @param   pValueUnion     The value union.
    859940 */
    860 RTEXITCODE errorGetOpt(USAGECATEGORY fUsageCategory, int rc, union RTGETOPTUNION const *pValueUnion)
     941RTEXITCODE errorGetOpt(USAGECATEGORY fCategory, int rc, union RTGETOPTUNION const *pValueUnion)
    861942{
    862     /*
    863      * Check if it is an unhandled standard option.
    864      */
    865     if (rc == 'V')
    866     {
    867         RTPrintf("%sr%d\n", VBOX_VERSION_STRING, RTBldCfgRevision());
    868         return RTEXITCODE_SUCCESS;
    869     }
    870 
    871     if (rc == 'h')
    872     {
    873         showLogo(g_pStdErr);
    874 #ifndef VBOX_ONLY_DOCS
    875         if (g_fInternalMode)
    876             printUsageInternal(fUsageCategory, g_pStdOut);
    877         else
    878             printUsage(fUsageCategory, g_pStdOut);
    879 #endif
    880         return RTEXITCODE_SUCCESS;
    881     }
    882 
    883     /*
    884      * General failure.
    885      */
    886     showLogo(g_pStdErr); // show logo even if suppressed
    887 #ifndef VBOX_ONLY_DOCS
    888     if (g_fInternalMode)
    889         printUsageInternal(fUsageCategory, g_pStdErr);
    890     else
    891         printUsage(fUsageCategory, g_pStdErr);
    892 #endif /* !VBOX_ONLY_DOCS */
    893 
    894     if (rc == VINF_GETOPT_NOT_OPTION)
    895         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid parameter '%s'", pValueUnion->psz);
    896     if (rc > 0)
    897     {
    898         if (RT_C_IS_PRINT(rc))
    899             return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid option -%c", rc);
    900         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid option case %i", rc);
    901     }
    902     if (rc == VERR_GETOPT_UNKNOWN_OPTION)
    903         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Unknown option: %s", pValueUnion->psz);
    904     if (rc == VERR_GETOPT_INVALID_ARGUMENT_FORMAT)
    905         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Invalid argument format: %s", pValueUnion->psz);
    906     if (pValueUnion->pDef)
    907         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "%s: %Rrs", pValueUnion->pDef->pszLong, rc);
    908     return RTMsgErrorExit(RTEXITCODE_SYNTAX, "%Rrs", rc);
     943    return errorGetOptEx(fCategory, ~0U, rc, pValueUnion);
    909944}
    910945
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp

    r48983 r49621  
    10271027                            strAttachment = "nat";
    10281028                            strNatSettings = Utf8StrFmt("mtu=\"%d\"\nsockSnd=\"%d\"\nsockRcv=\"%d\"\ntcpWndSnd=\"%d\"\ntcpWndRcv=\"%d\"\n",
    1029                                 mtu, sockSnd ? sockSnd : 64, sockRcv ? sockRcv : 64 , tcpSnd ? tcpSnd : 64, tcpRcv ? tcpRcv : 64);
     1029                                mtu, sockSnd ? sockSnd : 64, sockRcv ? sockRcv : 64, tcpSnd ? tcpSnd : 64, tcpRcv ? tcpRcv : 64);
    10301030                        }
    10311031                        else
     
    10331033                            strAttachment = "NAT";
    10341034                            strNatSettings = Utf8StrFmt("NIC %d Settings:  MTU: %d, Socket (send: %d, receive: %d), TCP Window (send:%d, receive: %d)\n",
    1035                                 currentNIC + 1, mtu, sockSnd ? sockSnd : 64, sockRcv ? sockRcv : 64 , tcpSnd ? tcpSnd : 64, tcpRcv ? tcpRcv : 64);
     1035                                currentNIC + 1, mtu, sockSnd ? sockSnd : 64, sockRcv ? sockRcv : 64, tcpSnd ? tcpSnd : 64, tcpRcv ? tcpRcv : 64);
    10361036                        }
    10371037                        break;
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