VirtualBox

Changeset 28029 in vbox


Ignore:
Timestamp:
Apr 7, 2010 7:31:23 AM (15 years ago)
Author:
vboxsync
Message:

Guest Control/VBoxService+Main: Bugfix for multiple environment blocks.

Location:
trunk/src/VBox
Files:
4 edited

Legend:

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

    r28014 r28029  
    157157                                              uint32_t *puTimeLimit)
    158158{
     159    AssertPtr(pszCmd);
     160    AssertPtr(puFlags);
     161    AssertPtr(pszArgs);
     162    AssertPtr(puNumArgs);
     163    AssertPtr(pszEnv);
     164    AssertPtr(pcbEnv);
     165    AssertPtr(puNumEnvVars);
     166    AssertPtr(pszStdIn);
     167    AssertPtr(pszStdOut);
     168    AssertPtr(pszStdOut);
     169    AssertPtr(pszStdErr);
     170    AssertPtr(pszUser);
     171    AssertPtr(pszPassword);
     172    AssertPtr(puTimeLimit);
     173
    159174    VBoxGuestCtrlHGCMMsgExecCmd Msg;
    160175
     
    169184    VbglHGCMParmPtrSet(&Msg.args, pszArgs, cbArgs);
    170185    VbglHGCMParmUInt32Set(&Msg.num_env, 0);
     186    VbglHGCMParmUInt32Set(&Msg.cb_env, 0);
    171187    VbglHGCMParmPtrSet(&Msg.env, pszEnv, *pcbEnv);
    172188    VbglHGCMParmPtrSet(&Msg.std_in, pszStdIn, cbStdIn);
     
    185201        Msg.num_args.GetUInt32(puNumArgs);
    186202        Msg.num_env.GetUInt32(puNumEnvVars);
    187         Msg.timeout.GetUInt32(puTimeLimit);
     203        Msg.cb_env.GetUInt32(pcbEnv);
     204        Msg.timeout.GetUInt32(puTimeLimit);       
    188205    }
    189206    return rc;
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp

    r28016 r28029  
    139139                char *pcCur = execData.szEnv;
    140140                uint32_t i = 0;
    141                 while (pcCur < execData.szEnv + execData.cbEnv)
     141                uint32_t cbLen = 0;
     142                while (cbLen < execData.cbEnv)
    142143                {
    143144                    if (RTStrAPrintf(&ppaEnv[i++], "%s", pcCur) < 0)
     
    146147                        break;
    147148                    }
    148                     pcCur += strlen(pcCur) + 1; /* Skip terminating zero. */
     149                    cbLen += strlen(pcCur) + 1; /* Skip terminating zero. */
     150                    pcCur += cbLen;
    149151                }
    150152            }
     
    154156                /* Do the actual execution. */
    155157                rc = VBoxServiceControlExecProcess(&execData, ppaArg, ppaEnv);
    156                 for (uint32_t i = 0; i < execData.uNumEnvVars; i++)
    157                     RTStrFree(ppaEnv[i]);
    158                 RTMemFree(ppaEnv);
     158                /* Cleanup. */
     159                if (execData.uNumEnvVars)
     160                {
     161                    for (uint32_t i = 0; i < execData.uNumEnvVars; i++)
     162                        RTStrFree(ppaEnv[i]);
     163                    RTMemFree(ppaEnv);
     164                }
    159165            }
    160166            RTGetOptArgvFree(ppaArg);
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlExec.cpp

    r27926 r28029  
    515515        for (i = 0; i < pExecData->uNumEnvVars; i++)
    516516        {
    517             // @todo rc = RTEnvPutEx(hEnv, pExecData->[i]);
     517            rc = RTEnvPutEx(hEnv, papszEnv[i]);
    518518            if (RT_FAILURE(rc))
    519519                break;
  • trunk/src/VBox/Main/GuestImpl.cpp

    r28012 r28029  
    493493   
    494494                void *pvEnv = NULL;
    495                 uint32_t uNumEnv = env.size();
     495                uint32_t uNumEnv = 0;
    496496                uint32_t cbEnv = 0;
    497497   
    498                 for (unsigned i = 0; i < uNumEnv; i++)
     498                for (unsigned i = 0; i < env.size(); i++)
    499499                {
    500500                    vrc = prepareExecuteEnv(Utf8Str(env[i]).raw(), &pvEnv, &cbEnv, &uNumEnv);
     
    511511                    Utf8Str Utf8Password(aPassword);
    512512               
    513                     VBOXHGCMSVCPARM paParms[13];
     513                    VBOXHGCMSVCPARM paParms[14];
    514514                    int i = 0;
    515515                    paParms[i++].setPointer((void*)Utf8Command.raw(), (uint32_t)strlen(Utf8Command.raw()) + 1);
     
    518518                    paParms[i++].setPointer((void*)pszArgs, cbArgs);
    519519                    paParms[i++].setUInt32(uNumEnv);
     520                    paParms[i++].setUInt32(cbEnv);
    520521                    paParms[i++].setPointer((void*)pvEnv, cbEnv);
    521522                    paParms[i++].setPointer((void*)Utf8StdIn.raw(), (uint32_t)strlen(Utf8StdIn.raw()) + 1);
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