VirtualBox

Changeset 22601 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Aug 31, 2009 12:22:42 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
51650
Message:

Main/GuestProperties: tentatively fix r51587 and r51594 to use C constructs, not C++ ones

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/ConsoleImpl2.cpp

    r22567 r22601  
    28322832        AssertMsgReturn(SUCCEEDED(hrc), ("hrc=%#x\n", hrc),
    28332833                        VERR_GENERAL_FAILURE);
    2834         size_t cProps = namesOut.size();
     2834        size_t cProps = namesOut.size(), cAlloc = cProps + 1;
    28352835        if (   valuesOut.size() != cProps
    28362836            || timestampsOut.size() != cProps
     
    28392839            AssertFailedReturn(VERR_INVALID_PARAMETER);
    28402840
    2841         try
    2842         {
    2843             std::vector<Utf8Str> utf8Names, utf8Values, utf8Flags;
    2844             std::vector<const char *> names, values, flags;
    2845             std::vector<ULONG64> timestamps;
    2846             for (unsigned i = 0; i < cProps && RT_SUCCESS(rc); ++i)
    2847             {
    2848                 AssertPtrReturn(namesOut[i], VERR_INVALID_PARAMETER);
    2849                 utf8Names.push_back(Bstr(namesOut[i]));
    2850                 utf8Values.push_back(Bstr(valuesOut[i]));
    2851                 timestamps.push_back(timestampsOut[i]);
    2852                 utf8Flags.push_back(Bstr(flagsOut[i]));
    2853             }
    2854             for (unsigned i = 0; i < cProps && RT_SUCCESS(rc); ++i)
    2855             {
    2856                 names.push_back(utf8Names[i].c_str());
    2857                 AssertPtrReturn(names[i], VERR_NO_MEMORY);
     2841        char **pacszNames, **pacszValues, **pacszFlags;
     2842        char szEmpty[] = "";
     2843        ULONG64 *pau64Timestamps;
     2844        pacszNames = (char **)RTMemTmpAllocZ(sizeof(void *) * cAlloc);
     2845        pacszValues = (char **)RTMemTmpAllocZ(sizeof(void *) * cAlloc);
     2846        pau64Timestamps = (ULONG64 *)RTMemTmpAllocZ(sizeof(ULONG64) * cAlloc);
     2847        pacszFlags = (char **)RTMemTmpAllocZ(sizeof(void *) * cAlloc);
     2848        if (!(pacszNames && pacszValues && pau64Timestamps && pacszFlags))
     2849            rc = VERR_NO_MEMORY;
     2850        for (unsigned i = 0; RT_SUCCESS(rc) && i < cProps; ++i)
     2851        {
     2852            AssertPtrReturn(namesOut[i], VERR_INVALID_PARAMETER);
     2853            rc = RTUtf16ToUtf8(namesOut[i], &pacszNames[i]);
     2854            if (RT_FAILURE(rc))
     2855                break;
     2856            if (valuesOut[i])
     2857                rc = RTUtf16ToUtf8(valuesOut[i], &pacszValues[i]);
     2858            else
     2859                pacszValues[i] = szEmpty;
     2860            if (RT_FAILURE(rc))
     2861                break;
     2862            pau64Timestamps[i] = timestampsOut[i];
     2863            if (flagsOut[i])
     2864                rc = RTUtf16ToUtf8(flagsOut[i], &pacszFlags[i]);
     2865            else
     2866                pacszFlags[i] = szEmpty;
     2867        }
     2868        if (RT_SUCCESS(rc))
     2869            configSetProperties(pConsole->mVMMDev, (void *)pacszNames,
     2870                                (void *)pacszValues, (void *)pau64Timestamps,
     2871                                (void *)pacszFlags);
     2872        if (pacszNames && pacszValues && pau64Timestamps && pacszFlags)
     2873            for (unsigned i = 0; i < cProps; ++i)
     2874            {
     2875                RTStrFree(pacszNames[i]);
    28582876                if (valuesOut[i])
    2859                     values.push_back(utf8Values[i].c_str());
    2860                 else
    2861                     values.push_back("");
    2862                 AssertPtrReturn(values[i], VERR_NO_MEMORY);
     2877                    RTStrFree(pacszValues[i]);
    28632878                if (flagsOut[i])
    2864                     flags.push_back(utf8Flags[i].c_str());
    2865                 else
    2866                     flags.push_back("");
    2867                 AssertPtrReturn(flags[i], VERR_NO_MEMORY);
    2868             }
    2869             names.push_back(NULL);
    2870             values.push_back(NULL);
    2871             timestamps.push_back(0);
    2872             flags.push_back(NULL);
    2873 
    2874             configSetProperties(pConsole->mVMMDev,
    2875                                 (void *)&names.front(),
    2876                                 (void *)&values.front(),
    2877                                 (void *)&timestamps.front(),
    2878                                 (void *)&flags.front());
    2879         }
    2880         catch(std::bad_alloc & /*e*/)
    2881         {
    2882             return VERR_NO_MEMORY;
    2883         }
     2879                    RTStrFree(pacszFlags[i]);
     2880            }
     2881        RTMemTmpFree(pacszNames);
     2882        RTMemTmpFree(pacszValues);
     2883        RTMemTmpFree(pau64Timestamps);
     2884        RTMemTmpFree(pacszFlags);
    28842885
    28852886        /* Set the VBox version string as a guest property */
Note: See TracChangeset for help on using the changeset viewer.

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