VirtualBox

Changeset 32201 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Sep 2, 2010 1:56:03 PM (14 years ago)
Author:
vboxsync
Message:

VBoxControl: More cleanup.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp

    r32198 r32201  
    2424#include <iprt/initterm.h>
    2525#include <iprt/mem.h>
     26#include <iprt/message.h>
    2627#include <iprt/path.h>
    2728#include <iprt/string.h>
     
    513514}
    514515
    515 int handleSetVideoMode(int argc, char *argv[])
     516static RTEXITCODE handleSetVideoMode(int argc, char *argv[])
    516517{
    517518    if (argc != 3 && argc != 4)
    518519    {
    519520        usage(SET_VIDEO_MODE);
    520         return 1;
     521        return RTEXITCODE_FAILURE;
    521522    }
    522523
     
    550551            RTPrintf("done.\n");
    551552        }
    552         else VBoxControlError("Error retrieving API for display change!");
    553     }
    554     else VBoxControlError("Error retrieving handle to user32.dll!");
    555 
    556     return 0;
     553        else
     554            VBoxControlError("Error retrieving API for display change!");
     555    }
     556    else
     557        VBoxControlError("Error retrieving handle to user32.dll!");
     558
     559    return RTEXITCODE_SUCCESS;
    557560}
    558561
     
    593596}
    594597
    595 int handleGetVideoAcceleration(int argc, char *argv[])
     598static RTEXITCODE handleGetVideoAcceleration(int argc, char *argv[])
    596599{
    597600    ULONG status;
     
    611614        RegCloseKey(hkeyVideo);
    612615    }
    613     return 0;
    614 }
    615 
    616 int handleSetVideoAcceleration(int argc, char *argv[])
     616    return RTEXITCODE_SUCCESS;
     617}
     618
     619static RTEXITCODE handleSetVideoAcceleration(int argc, char *argv[])
    617620{
    618621    ULONG status;
     
    625628    {
    626629        usage(SET_VIDEO_ACCEL);
    627         return 1;
     630        return RTEXITCODE_FAILURE;
    628631    }
    629632
     
    643646        RegCloseKey(hkeyVideo);
    644647    }
    645     return 0;
     648    return RTEXITCODE_SUCCESS;
    646649}
    647650
     
    755758}
    756759
    757 int handleListCustomModes(int argc, char *argv[])
     760static RTEXITCODE handleListCustomModes(int argc, char *argv[])
    758761{
    759762    if (argc != 0)
    760763    {
    761764        usage(LIST_CUST_MODES);
    762         return 1;
     765        return RTEXITCODE_FAILURE;
    763766    }
    764767
     
    780783        RegCloseKey(hkeyVideo);
    781784    }
    782     return 0;
    783 }
    784 
    785 int handleAddCustomMode(int argc, char *argv[])
     785    return RTEXITCODE_SUCCESS;
     786}
     787
     788static RTEXITCODE handleAddCustomMode(int argc, char *argv[])
    786789{
    787790    if (argc != 3)
    788791    {
    789792        usage(ADD_CUST_MODE);
    790         return 1;
     793        return RTEXITCODE_FAILURE;
    791794    }
    792795
     
    803806    {
    804807        VBoxControlError("Error: invalid mode specified!\n");
    805         return 1;
     808        return RTEXITCODE_FAILURE;
    806809    }
    807810
     
    841844        RegCloseKey(hkeyVideo);
    842845    }
    843     return 0;
    844 }
    845 
    846 int handleRemoveCustomMode(int argc, char *argv[])
     846    return RTEXITCODE_SUCCESS;
     847}
     848
     849static RTEXITCODE handleRemoveCustomMode(int argc, char *argv[])
    847850{
    848851    if (argc != 3)
    849852    {
    850853        usage(REMOVE_CUST_MODE);
    851         return 1;
     854        return RTEXITCODE_FAILURE;
    852855    }
    853856
     
    877880    }
    878881
    879     return 0;
     882    return RTEXITCODE_SUCCESS;
    880883}
    881884
     
    887890 * This is accessed through the "VBoxGuestPropSvc" HGCM service.
    888891 *
    889  * @returns 0 on success, 1 on failure
     892 * @returns Command exit code.
    890893 * @note see the command line API description for parameters
    891894 */
    892 int getGuestProperty(int argc, char **argv)
     895static RTEXITCODE getGuestProperty(int argc, char **argv)
    893896{
    894897    using namespace guestProp;
     
    903906    {
    904907        usage(GUEST_PROP);
    905         return 1;
     908        return RTEXITCODE_FAILURE;
    906909    }
    907910
     
    976979        VbglR3GuestPropDisconnect(u32ClientId);
    977980    RTMemFree(pvBuf);
    978     return RT_SUCCESS(rc) ? 0 : 1;
     981    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
    979982}
    980983
     
    984987 * This is accessed through the "VBoxGuestPropSvc" HGCM service.
    985988 *
    986  * @returns 0 on success, 1 on failure
     989 * @returns Command exit code.
    987990 * @note see the command line API description for parameters
    988991 */
    989 static int setGuestProperty(int argc, char *argv[])
     992static RTEXITCODE setGuestProperty(int argc, char *argv[])
    990993{
    991994    /*
     
    10161019    {
    10171020        usage(GUEST_PROP);
    1018         return 1;
     1021        return RTEXITCODE_FAILURE;
    10191022    }
    10201023    /* This is always needed. */
     
    10411044    if (u32ClientId != 0)
    10421045        VbglR3GuestPropDisconnect(u32ClientId);
    1043     return RT_SUCCESS(rc) ? 0 : 1;
     1046    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
    10441047}
    10451048
     
    10491052 * This is accessed through the "VBoxGuestPropSvc" HGCM service.
    10501053 *
    1051  * @returns 0 on success, 1 on failure
     1054 * @returns Command exit code.
    10521055 * @note see the command line API description for parameters
    10531056 */
    1054 static int enumGuestProperty(int argc, char *argv[])
     1057static RTEXITCODE enumGuestProperty(int argc, char *argv[])
    10551058{
    10561059    /*
     
    10701073    {
    10711074        usage(GUEST_PROP);
    1072         return 1;
     1075        return RTEXITCODE_FAILURE;
    10731076    }
    10741077
     
    11081111    else
    11091112        VBoxControlError("Failed to connect to the guest property service! Error: %Rrc\n", rc);
    1110     return RT_SUCCESS(rc) ? 0 : 1;
     1113    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
    11111114}
    11121115
     
    11161119 * This is accessed through the "VBoxGuestPropSvc" HGCM service.
    11171120 *
    1118  * @returns 0 on success, 1 on failure
     1121 * @returns Command exit code.
    11191122 * @note see the command line API description for parameters
    11201123 */
    1121 int waitGuestProperty(int argc, char **argv)
     1124static RTEXITCODE waitGuestProperty(int argc, char **argv)
    11221125{
    11231126    using namespace guestProp;
     
    11631166    {
    11641167        usage(GUEST_PROP);
    1165         return 1;
     1168        return RTEXITCODE_FAILURE;
    11661169    }
    11671170
     
    12431246        VbglR3GuestPropDisconnect(u32ClientId);
    12441247    RTMemFree(pvBuf);
    1245     return RT_SUCCESS(rc) ? 0 : 1;
     1248    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
    12461249}
    12471250
     
    12541257 * @note see the command line API description for parameters
    12551258 */
    1256 static int handleGuestProperty(int argc, char *argv[])
     1259static RTEXITCODE handleGuestProperty(int argc, char *argv[])
    12571260{
    12581261    if (0 == argc)
    12591262    {
    12601263        usage(GUEST_PROP);
    1261         return 1;
    1262     }
    1263     if (0 == strcmp(argv[0], "get"))
     1264        return RTEXITCODE_FAILURE;
     1265    }
     1266    if (!strcmp(argv[0], "get"))
    12641267        return getGuestProperty(argc - 1, argv + 1);
    1265     else if (0 == strcmp(argv[0], "set"))
     1268    else if (!strcmp(argv[0], "set"))
    12661269        return setGuestProperty(argc - 1, argv + 1);
    1267     else if (0 == strcmp(argv[0], "enumerate"))
     1270    else if (!strcmp(argv[0], "enumerate"))
    12681271        return enumGuestProperty(argc - 1, argv + 1);
    1269     else if (0 == strcmp(argv[0], "wait"))
     1272    else if (!strcmp(argv[0], "wait"))
    12701273        return waitGuestProperty(argc - 1, argv + 1);
    12711274    /* else */
    12721275    usage(GUEST_PROP);
    1273     return 1;
     1276    return RTEXITCODE_FAILURE;
    12741277}
    12751278#endif
     
    12791282 * Lists the Shared Folders provided by the host.
    12801283 */
    1281 int listSharedFolders(int argc, char **argv)
     1284static RTEXITCODE listSharedFolders(int argc, char **argv)
    12821285{
    12831286    bool usageOK = true;
     
    12851288    if (argc == 1)
    12861289    {
    1287         if (   strcmp(argv[0], "-automount")  == 0
    1288             || strcmp(argv[0], "--automount") == 0
    1289            )
    1290         {
     1290        if (   !strcmp(argv[0], "-automount")
     1291            || !strcmp(argv[0], "--automount"))
    12911292            fOnlyShowAutoMount = true;
    1292         }
    12931293        else
    12941294            usageOK = false;
     
    13001300    {
    13011301        usage(GUEST_SHAREDFOLDERS);
    1302         return 1;
     1302        return RTEXITCODE_FAILURE;
    13031303    }
    13041304
     
    13411341        VbglR3SharedFolderDisconnect(u32ClientId);
    13421342    }
    1343     return RT_SUCCESS(rc) ? 0 : 1;
     1343    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
    13441344}
    13451345
     
    13501350 * @note see the command line API description for parameters
    13511351 */
    1352 static int handleSharedFolder(int argc, char *argv[])
     1352static RTEXITCODE handleSharedFolder(int argc, char *argv[])
    13531353{
    13541354    if (0 == argc)
    13551355    {
    13561356        usage(GUEST_SHAREDFOLDERS);
    1357         return 1;
    1358     }
    1359     if (0 == strcmp(argv[0], "list"))
     1357        return RTEXITCODE_FAILURE;
     1358    }
     1359    if (!strcmp(argv[0], "list"))
    13601360        return listSharedFolders(argc - 1, argv + 1);
    13611361    /* else */
    13621362    usage(GUEST_SHAREDFOLDERS);
    1363     return 1;
     1363    return RTEXITCODE_FAILURE;
    13641364}
    13651365#endif
    13661366
    13671367/** command handler type */
    1368 typedef DECLCALLBACK(int) FNHANDLER(int argc, char *argv[]);
     1368typedef DECLCALLBACK(RTEXITCODE) FNHANDLER(int argc, char *argv[]);
    13691369typedef FNHANDLER *PFNHANDLER;
    13701370
     
    13721372struct COMMANDHANDLER
    13731373{
    1374     const char *command;
    1375     PFNHANDLER handler;
    1376 } g_commandHandlers[] =
     1374    const char *pszCommand;
     1375    PFNHANDLER pfnHandler;
     1376} g_aCommandHandlers[] =
    13771377{
    13781378#if defined(RT_OS_WINDOWS) && !defined(VBOX_CONTROL_TEST)
    1379     { "getvideoacceleration", handleGetVideoAcceleration },
    1380     { "setvideoacceleration", handleSetVideoAcceleration },
    1381     { "listcustommodes", handleListCustomModes },
    1382     { "addcustommode", handleAddCustomMode },
    1383     { "removecustommode", handleRemoveCustomMode },
    1384     { "setvideomode", handleSetVideoMode },
     1379    { "getvideoacceleration",   handleGetVideoAcceleration },
     1380    { "setvideoacceleration",   handleSetVideoAcceleration },
     1381    { "listcustommodes",        handleListCustomModes },
     1382    { "addcustommode",          handleAddCustomMode },
     1383    { "removecustommode",       handleRemoveCustomMode },
     1384    { "setvideomode",           handleSetVideoMode },
    13851385#endif
    13861386#ifdef VBOX_WITH_GUEST_PROPS
    1387     { "guestproperty", handleGuestProperty },
     1387    { "guestproperty",          handleGuestProperty },
    13881388#endif
    13891389#ifdef VBOX_WITH_SHARED_FOLDERS
    1390     { "sharedfolder", handleSharedFolder },
     1390    { "sharedfolder",           handleSharedFolder },
    13911391#endif
    1392     { NULL, NULL }  /* terminator */
     1392    { NULL,                     NULL }  /* unnecessary terminator entry */
    13931393};
    13941394
     
    13971397{
    13981398    /** The application's global return code */
    1399     int rc = 0;
     1399    RTEXITCODE rcExit = RTEXITCODE_SUCCESS;
    14001400    /** An IPRT return code for local use */
    14011401    int rrc = VINF_SUCCESS;
     
    14091409    bool fOnlyInfo = false;
    14101410
     1411    rrc = RTR3Init();
     1412    if (RT_FAILURE(rrc))
     1413        return RTMsgInitFailure(rrc);
     1414
    14111415    /*
    14121416     * Start by handling command line switches
    14131417     */
    1414 
    1415     /** Are we finished with handling switches? */
    1416     bool done = false;
     1418    /** @todo RTGetOpt conversion of the whole file. */
     1419    bool done = false;      /**< Are we finished with handling switches? */
    14171420    while (!done && (iArg < argc))
    14181421    {
    1419         if (   0 == strcmp(argv[iArg], "-V")
    1420             || 0 == strcmp(argv[iArg], "-v")
    1421             || 0 == strcmp(argv[iArg], "--version")
    1422             || 0 == strcmp(argv[iArg], "-version")
    1423             || 0 == strcmp(argv[iArg], "getversion")
     1422        if (   !strcmp(argv[iArg], "-V")
     1423            || !strcmp(argv[iArg], "-v")
     1424            || !strcmp(argv[iArg], "--version")
     1425            || !strcmp(argv[iArg], "-version")
     1426            || !strcmp(argv[iArg], "getversion")
    14241427           )
    14251428            {
     
    14301433                done = true;
    14311434            }
    1432         else if (   0 == strcmp(argv[iArg], "-nologo")
    1433                  || 0 == strcmp(argv[iArg], "--nologo"))
     1435        else if (   !strcmp(argv[iArg], "-nologo")
     1436                 || !strcmp(argv[iArg], "--nologo"))
    14341437            fShowLogo = false;
    1435         else if (   0 == strcmp(argv[iArg], "-help")
    1436                  || 0 == strcmp(argv[iArg], "--help"))
     1438        else if (   !strcmp(argv[iArg], "-help")
     1439                 || !strcmp(argv[iArg], "--help"))
    14371440        {
    14381441            fOnlyInfo = true;
     
    14521455     * and show the usage if the user asked us to
    14531456     */
    1454 
    14551457    g_pszProgName = RTPathFilename(argv[0]);
    14561458    if (fShowLogo)
     
    14651467     * Do global initialisation for the programme if we will be handling a command
    14661468     */
    1467 
    14681469    if (!fOnlyInfo)
    14691470    {
    1470         rrc = RTR3Init(); /** @todo r=bird: This ALWAYS goes first, the only exception is when you have to parse args to figure out which to call! */
    1471         if (!RT_SUCCESS(rrc))
    1472         {
    1473             VBoxControlError("Failed to initialise the VirtualBox runtime - error %Rrc\n", rrc);
    1474             rc = 1;
    1475         }
    1476         if (0 == rc)
    1477         {
    1478             if (!RT_SUCCESS(VbglR3Init()))
    1479             {
    1480                 VBoxControlError("Could not contact the host system.  Make sure that you are running this\n"
    1481                                  "application inside a VirtualBox guest system, and that you have sufficient\n"
    1482                                  "user permissions.\n");
    1483                 rc = 1;
    1484             }
     1471        rrc = VbglR3Init();
     1472        if (RT_FAILURE(rrc))
     1473        {
     1474            VBoxControlError("Could not contact the host system.  Make sure that you are running this\n"
     1475                             "application inside a VirtualBox guest system, and that you have sufficient\n"
     1476                             "user permissions.\n");
     1477            rcExit = RTEXITCODE_FAILURE;
    14851478        }
    14861479    }
     
    14901483     */
    14911484
    1492     if (!fOnlyInfo && (0 == rc))
     1485    if (!fOnlyInfo && rcExit == RTEXITCODE_SUCCESS)
    14931486    {
    14941487        /*
     
    14971490         * here.
    14981491         */
     1492        /** @todo this must be done before we start checking for --help and
     1493         *        stuff above. */
    14991494        for (int i = iArg; i < argc; i++)
    15001495        {
    1501             char *converted;
    1502             RTStrCurrentCPToUtf8(&converted, argv[i]);
    1503             argv[i] = converted;
     1496            char *pszConverted;
     1497            RTStrCurrentCPToUtf8(&pszConverted, argv[i]);
     1498            argv[i] = pszConverted;
    15041499        }
    15051500
     
    15101505            /** And if so, what is its position in the table? */
    15111506            unsigned index = 0;
    1512             while (   index < RT_ELEMENTS(g_commandHandlers)
     1507            while (   index < RT_ELEMENTS(g_aCommandHandlers)
    15131508                   && !found
    1514                    && (g_commandHandlers[index].command != NULL))
     1509                   && (g_aCommandHandlers[index].pszCommand != NULL))
    15151510            {
    1516                 if (0 == strcmp(argv[iArg], g_commandHandlers[index].command))
     1511                if (!strcmp(argv[iArg], g_aCommandHandlers[index].pszCommand))
    15171512                    found = true;
    15181513                else
     
    15201515            }
    15211516            if (found)
    1522                 rc = g_commandHandlers[index].handler(argc - iArg - 1, argv + iArg + 1);
     1517                rcExit = g_aCommandHandlers[index].pfnHandler(argc - iArg - 1, argv + iArg + 1);
    15231518            else
    15241519            {
    1525                 rc = 1;
     1520                rcExit = RTEXITCODE_FAILURE;
    15261521                usage();
    15271522            }
     
    15301525        {
    15311526            /* The user didn't specify a command. */
    1532             rc = 1;
     1527            rcExit = RTEXITCODE_FAILURE;
    15331528            usage();
    15341529        }
     
    15391534        for (int i = iArg; i < argc; i++)
    15401535            RTStrFree(argv[i]);
    1541 
    15421536    }
    15431537
     
    15451539     * And exit, returning the status
    15461540     */
    1547 
    1548     return rc;
    1549 }
    1550 
     1541    return rcExit;
     1542}
     1543
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