VirtualBox

Changeset 34338 in vbox


Ignore:
Timestamp:
Nov 24, 2010 7:54:45 PM (14 years ago)
Author:
vboxsync
Message:

VBoxManage/GuestCtrl: More RTGetOpt.

File:
1 edited

Legend:

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

    r34337 r34338  
    12171217        return errorSyntax(USAGE_GUESTCONTROL, "Incorrect parameters");
    12181218
     1219    static const RTGETOPTDEF s_aOptions[] =
     1220    {
     1221        //{ "--flags",               'f',         RTGETOPT_REQ_STRING  },
     1222        { "--mode",                'm',         RTGETOPT_REQ_UINT32  },
     1223        { "--parents",             'P',         RTGETOPT_REQ_NOTHING },
     1224        { "--password",            'p',         RTGETOPT_REQ_STRING  },
     1225        { "--username",            'u',         RTGETOPT_REQ_STRING  },
     1226        { "--verbose",             'v',         RTGETOPT_REQ_NOTHING }
     1227    };
     1228
     1229    int ch;
     1230    RTGETOPTUNION ValueUnion;
     1231    RTGETOPTSTATE GetState;
     1232    RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0);
     1233
    12191234    Utf8Str Utf8Directory(a->argv[1]);
    12201235    Utf8Str Utf8UserName;
     
    12231238    uint32_t uMode = 0;
    12241239    bool fVerbose = false;
    1225 /** @todo r=bird: Use RTGetOpt here, no new code using strcmp-if-switching!  */
    1226 
    1227     /* Iterate through all possible commands (if available). */
    1228     bool usageOK = true;
    1229     for (int i = 3; usageOK && i < a->argc; i++)
    1230     {
    1231         if (   !strcmp(a->argv[i], "--username")
    1232             || !strcmp(a->argv[i], "--user"))
    1233         {
    1234             if (i + 1 >= a->argc)
    1235                 usageOK = false;
    1236             else
    1237             {
    1238                 Utf8UserName = a->argv[i + 1];
    1239                 ++i;
    1240             }
    1241         }
    1242         else if (   !strcmp(a->argv[i], "--password")
    1243                  || !strcmp(a->argv[i], "--pwd"))
    1244         {
    1245             if (i + 1 >= a->argc)
    1246                 usageOK = false;
    1247             else
    1248             {
    1249                 Utf8Password = a->argv[i + 1];
    1250                 ++i;
    1251             }
    1252         }
    1253         else if (   !strcmp(a->argv[i], "--parents")
    1254                  || !strcmp(a->argv[i], "-p"))
    1255         {
    1256             uFlags |= CreateDirectoryFlag_Parents;
    1257         }
    1258         else if (   !strcmp(a->argv[i], "--mode")
    1259                  || !strcmp(a->argv[i], "-m"))
    1260         {
    1261             if (i + 1 >= a->argc
    1262                 || RTStrToUInt32Full(a->argv[i + 1], 8 /* Base, octal */, &uMode) != VINF_SUCCESS)
    1263                 usageOK = false;
    1264             else
    1265             {
    1266                 ++i;
    1267             }
    1268         }
    1269         else if (!strcmp(a->argv[i], "--flags"))
    1270         {
    1271             if (i + 1 >= a->argc)
    1272                 usageOK = false;
    1273             else
    1274             {
     1240
     1241    int vrc = VINF_SUCCESS;
     1242    bool fUsageOK = true;
     1243    while (   (ch = RTGetOpt(&GetState, &ValueUnion))
     1244           && RT_SUCCESS(vrc))
     1245    {
     1246        /* For options that require an argument, ValueUnion has received the value. */
     1247        switch (ch)
     1248        {
     1249            case 'f': /* Flags */
    12751250                /* Nothing to do here yet. */
    1276                 ++i;
    1277             }
    1278         }
    1279         else if (!strcmp(a->argv[i], "--verbose"))
    1280             fVerbose = true;
    1281         else
    1282             return errorSyntax(USAGE_GUESTCONTROL,
    1283                                "Invalid parameter '%s'", Utf8Str(a->argv[i]).c_str());
    1284     }
    1285 
    1286     if (!usageOK)
     1251                break;
     1252
     1253            case 'm': /* Mode */
     1254                uMode = ValueUnion.u32;
     1255                break;
     1256
     1257            case 'P': /* Create parents */
     1258                uFlags |= CreateDirectoryFlag_Parents;
     1259                break;
     1260
     1261            case 'p': /* Password */
     1262                Utf8Password = ValueUnion.psz;
     1263                break;
     1264
     1265            case 'u': /* User name */
     1266                Utf8UserName = ValueUnion.psz;
     1267                break;
     1268
     1269            case 'v': /* Verbose */
     1270                fVerbose = true;
     1271                break;
     1272
     1273            case VINF_GETOPT_NOT_OPTION:
     1274            {
     1275                Utf8Directory = ValueUnion.psz;
     1276                break;
     1277            }
     1278
     1279            default:
     1280                return RTGetOptPrintError(ch, &ValueUnion);
     1281        }
     1282    }
     1283
     1284    if (!fUsageOK)
    12871285        return errorSyntax(USAGE_GUESTCONTROL, "Incorrect parameters");
    12881286
    12891287    if (Utf8Directory.isEmpty())
    12901288        return errorSyntax(USAGE_GUESTCONTROL,
    1291                            "No directory specified!");
     1289                           "No directory to create specified!");
    12921290
    12931291    if (Utf8UserName.isEmpty())
     
    12971295    HRESULT rc = S_OK;
    12981296    ComPtr<IGuest> guest;
    1299     int vrc = ctrlInitVM(a, a->argv[0] /* VM Name */, &guest);
     1297    vrc = ctrlInitVM(a, a->argv[0] /* VM Name */, &guest);
    13001298    if (RT_SUCCESS(vrc))
    13011299    {
     
    14891487
    14901488    /* switch (cmd) */
    1491     if (   !strcmp(a->argv[0], "exec")
    1492         || !strcmp(a->argv[0], "execute"))
     1489    if (   !RTStrICmp(a->argv[0], "exec")
     1490        || !RTStrICmp(a->argv[0], "execute"))
    14931491    {
    14941492        return handleCtrlExecProgram(&arg);
    14951493    }
    1496     else if (   !strcmp(a->argv[0], "copyto")
    1497              || !strcmp(a->argv[0], "cp"))
     1494    else if (   !RTStrICmp(a->argv[0], "copyto")
     1495             || !RTStrICmp(a->argv[0], "cp"))
    14981496    {
    14991497        return handleCtrlCopyTo(&arg);
    15001498    }
    1501     else if (   !strcmp(a->argv[0], "createdirectory")
    1502              || !strcmp(a->argv[0], "createdir")
    1503              || !strcmp(a->argv[0], "mkdir")
    1504              || !strcmp(a->argv[0], "md"))
     1499    else if (   !RTStrICmp(a->argv[0], "createdirectory")
     1500             || !RTStrICmp(a->argv[0], "createdir")
     1501             || !RTStrICmp(a->argv[0], "mkdir")
     1502             || !RTStrICmp(a->argv[0], "md"))
    15051503    {
    15061504        return handleCtrlCreateDirectory(&arg);
    15071505    }
    1508     else if (   !strcmp(a->argv[0], "updateadditions")
    1509              || !strcmp(a->argv[0], "updateadds"))
     1506    else if (   !RTStrICmp(a->argv[0], "updateadditions")
     1507             || !RTStrICmp(a->argv[0], "updateadds"))
    15101508    {
    15111509        return handleCtrlUpdateAdditions(&arg);
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