Changeset 22601 in vbox for trunk/src/VBox/Main
- Timestamp:
- Aug 31, 2009 12:22:42 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 51650
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/ConsoleImpl2.cpp
r22567 r22601 2832 2832 AssertMsgReturn(SUCCEEDED(hrc), ("hrc=%#x\n", hrc), 2833 2833 VERR_GENERAL_FAILURE); 2834 size_t cProps = namesOut.size() ;2834 size_t cProps = namesOut.size(), cAlloc = cProps + 1; 2835 2835 if ( valuesOut.size() != cProps 2836 2836 || timestampsOut.size() != cProps … … 2839 2839 AssertFailedReturn(VERR_INVALID_PARAMETER); 2840 2840 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]); 2858 2876 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]); 2863 2878 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 *)×tamps.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); 2884 2885 2885 2886 /* Set the VBox version string as a guest property */
Note:
See TracChangeset
for help on using the changeset viewer.