VirtualBox

Ignore:
Timestamp:
Oct 21, 2008 8:18:58 AM (16 years ago)
Author:
vboxsync
Message:

Main (Guest Properties): some cleaning up

File:
1 edited

Legend:

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

    r13379 r13417  
    10091009    using namespace guestProp;
    10101010
     1011    int rc = VINF_SUCCESS;
    10111012    /* No locking, as this is purely a notification which does not make any
    10121013     * changes to the object state. */
     
    10151016    AssertReturn(HOSTCALLBACKMAGIC == pCBData->u32Magic, VERR_INVALID_PARAMETER);
    10161017    ComObjPtr <Console> pConsole = reinterpret_cast <Console *> (pvExtension);
    1017     pConsole->mControl->PushGuestProperty(Bstr(pCBData->pcszName),
    1018                                           Bstr(pCBData->pcszValue),
    1019                                           pCBData->u64Timestamp,
    1020                                           Bstr(pCBData->pcszFlags));
    1021     return VINF_SUCCESS;
     1018    Bstr name(pCBData->pcszName);
     1019    Bstr value(pCBData->pcszValue);
     1020    Bstr flags(pCBData->pcszFlags);
     1021    if (   name.isNull()
     1022        || (value.isNull() && (pCBData->pcszValue != NULL))
     1023        || (flags.isNull() && (pCBData->pcszFlags != NULL))
     1024       )
     1025        rc = VERR_NO_MEMORY;
     1026    else
     1027        if (FAILED(pConsole->mControl->PushGuestProperty(name, value,
     1028                                                         pCBData->u64Timestamp,
     1029                                                         flags)))
     1030            rc = VERR_UNRESOLVED_ERROR;  /** @todo translate error code */
     1031    return rc;
    10221032}
    10231033#endif
     
    36533663     * double-terminated zero-separated one.
    36543664     */
    3655     Utf8Str Utf8PatternsIn = aPatterns;
    3656     if ((aPatterns != NULL) && Utf8PatternsIn.isNull())
     3665    Utf8Str utf8In(aPatterns);
     3666    Utf8Str utf8Out(utf8In.length() + 2);  /* Double terminator */
     3667    if (   ((aPatterns != NULL) && (utf8In.isNull()))
     3668        || utf8Out.isNull())
    36573669        return E_OUTOFMEMORY;
    3658     size_t cchPatterns = Utf8PatternsIn.length();
    3659     Utf8Str Utf8Patterns(cchPatterns + 2);  /* Double terminator */
    3660     if (Utf8Patterns.isNull())
    3661         return E_OUTOFMEMORY;
    3662     char *pszPatterns = Utf8Patterns.mutableRaw();
    3663     unsigned iPatterns = 0;
    3664     for (unsigned i = 0; i < cchPatterns; ++i)
    3665     {
    3666         char cIn = Utf8PatternsIn.raw()[i];
    3667         if ((cIn != ',') && (cIn != ' '))
    3668             pszPatterns[iPatterns] = cIn;
    3669         else if (cIn != ' ')
    3670             pszPatterns[iPatterns] = '\0';
    3671         if (cIn != ' ')
    3672             ++iPatterns;
    3673     }
    3674     pszPatterns[iPatterns] = '\0';
     3670    const char *pcszIn = utf8In.raw();
     3671    char *pszzOut = utf8Out.mutableRaw();
     3672    size_t iIn = 0, iOut = 0;
     3673    if (aPatterns != NULL)
     3674        while (pcszIn[iIn] != '\0')
     3675        {
     3676            if (pcszIn[iIn] != ',')
     3677            {
     3678                pszzOut[iOut] = pcszIn[iIn];
     3679                ++iIn;
     3680            }
     3681            else
     3682            {
     3683                pszzOut[iOut] = '\0';
     3684                while ((',' == pcszIn[iIn]) || (' ' == pcszIn[iIn]))
     3685                    ++iIn;
     3686            }
     3687            ++iOut;
     3688        }
     3689    pszzOut[iOut] = '\0';
     3690
    36753691    parm[0].type = VBOX_HGCM_SVC_PARM_PTR;
    3676     parm[0].u.pointer.addr = pszPatterns;
    3677     parm[0].u.pointer.size = iPatterns + 1;
     3692    parm[0].u.pointer.addr = pszzOut;
     3693    parm[0].u.pointer.size = iOut + 1;
    36783694
    36793695    /*
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