VirtualBox

Changeset 19236 in vbox


Ignore:
Timestamp:
Apr 28, 2009 12:58:25 PM (16 years ago)
Author:
vboxsync
Message:

Main: Added first step for ability to run VBox with read-only configuration files.

Location:
trunk/src/VBox/Main
Files:
4 edited

Legend:

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

    r19017 r19236  
    75627562                              RTFILE_O_READWRITE | RTFILE_O_OPEN |
    75637563                              RTFILE_O_DENY_WRITE);
    7564         if (RT_FAILURE (vrc))
    7565         {
     7564        if (RT_FAILURE (vrc) && (vrc != VERR_FILE_NOT_FOUND))
     7565        {
     7566            /* Open the associated config file only with read access. */
     7567            vrc = RTFileOpen (&mData->mHandleCfgFile,
     7568                              Utf8Str (mData->mConfigFileFull),
     7569                              RTFILE_O_READ | RTFILE_O_OPEN |
     7570                              RTFILE_O_DENY_NONE);
     7571            if (RT_FAILURE (vrc))
     7572            {
     7573                /* We even cannot open it in read mode, so there's seriously
     7574                   something wrong. */
     7575                rc = setError (E_FAIL,
     7576                        tr ("Could not even open settings file '%ls' in read mode (%Rrc)"),
     7577                        mData->mConfigFile.raw(), vrc);
     7578            }
     7579            else
     7580            {
     7581                mData->mConfigFileReadonly = TRUE;
     7582            }
     7583        }
     7584        else
     7585        {
     7586            mData->mConfigFileReadonly = FALSE;
     7587        }
     7588
     7589        if (RT_FAILURE(vrc))
     7590        {   
    75667591            mData->mHandleCfgFile = NIL_RTFILE;
    7567 
    7568             rc = setError (VBOX_E_FILE_ERROR,
    7569                 tr ("Could not lock the settings file '%ls' (%Rrc)"),
    7570                 mData->mConfigFileFull.raw(), vrc);
     7592            mData->mConfigFileReadonly = FALSE;
    75717593        }
    75727594    }
     
    75957617        /** @todo flush the directory. */
    75967618        mData->mHandleCfgFile = NIL_RTFILE;
     7619        mData->mConfigFileReadonly = FALSE;
    75977620    }
    75987621
  • trunk/src/VBox/Main/VirtualBoxImpl.cpp

    r19017 r19236  
    40804080    Assert (!isConfigLocked());
    40814081    if (!isConfigLocked())
    4082     {
    4083         /* open the associated config file */
     4082    {   
     4083        /* Open the associated config file. */
    40844084        int vrc = RTFileOpen (&mData.mCfgFile.mHandle,
    4085                              Utf8Str (mData.mCfgFile.mName),
    4086                              RTFILE_O_READWRITE | RTFILE_O_OPEN |
    4087                              RTFILE_O_DENY_WRITE);
    4088         if (RT_FAILURE (vrc))
    4089         {
     4085                              Utf8Str (mData.mCfgFile.mName),
     4086                              RTFILE_O_READWRITE | RTFILE_O_OPEN |
     4087                              RTFILE_O_DENY_WRITE);
     4088        if (RT_FAILURE (vrc) && (vrc != VERR_FILE_NOT_FOUND))
     4089        {
     4090            /* Open the associated config file only with read access. */
     4091            vrc = RTFileOpen (&mData.mCfgFile.mHandle,
     4092                              Utf8Str (mData.mCfgFile.mName),
     4093                              RTFILE_O_READ | RTFILE_O_OPEN |
     4094                              RTFILE_O_DENY_NONE);
     4095            if (RT_FAILURE (vrc))
     4096            {
     4097                /* We even cannot open it in read mode, so there's seriously
     4098                   something wrong. */
     4099                rc = setError (E_FAIL,
     4100                        tr ("Could not even open settings file '%ls' in read mode (%Rrc)"),
     4101                        mData.mCfgFile.mName.raw(), vrc);
     4102            }
     4103            else
     4104            {
     4105                mData.mCfgFile.mReadonly = TRUE;
     4106            }
     4107        }
     4108        else
     4109        {
     4110            mData.mCfgFile.mReadonly = FALSE;
     4111        }
     4112
     4113        if (RT_FAILURE(vrc))
     4114        {   
    40904115            mData.mCfgFile.mHandle = NIL_RTFILE;
    4091 
    4092             /*
    4093              *  It is OK if the file is not found, it will be created by
    4094              *  init(). Otherwise return an error.
    4095              */
    4096             if (vrc != VERR_FILE_NOT_FOUND)
    4097                 rc = setError (E_FAIL,
    4098                     tr ("Could not lock the settings file '%ls' (%Rrc)"),
    4099                     mData.mCfgFile.mName.raw(), vrc);
     4116            mData.mCfgFile.mReadonly = FALSE;
    41004117        }
    41014118
     
    41034120                          mData.mCfgFile.mName.raw(), mData.mCfgFile.mHandle, rc));
    41044121    }
    4105 
    41064122    return rc;
    41074123}
     
    41274143        /** @todo flush the directory too. */
    41284144        mData.mCfgFile.mHandle = NIL_RTFILE;
     4145        mData.mCfgFile.mReadonly = FALSE;
    41294146        LogFlowThisFunc (("\n"));
    41304147    }
  • trunk/src/VBox/Main/include/MachineImpl.h

    r19134 r19236  
    152152        BOOL mRegistered;
    153153
     154        /** Flag indicating that the config file is read-only. */
     155        BOOL mConfigFileReadonly;
    154156        Bstr mConfigFile;
    155157        Bstr mConfigFileFull;
  • trunk/src/VBox/Main/include/VirtualBoxImpl.h

    r18177 r19236  
    422422            const Bstr mName;
    423423            RTFILE mHandle;
     424            /** Flag indicating that the config file is read-only. */
     425            BOOL mReadonly;
    424426        };
    425427
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