VirtualBox

Changeset 75913 in vbox


Ignore:
Timestamp:
Dec 3, 2018 2:55:56 PM (6 years ago)
Author:
vboxsync
Message:

Main/GuestCtrlPrivate.cpp: Implemented full filetype -> FsObjType conversion. bugref:9320

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/GuestCtrlPrivate.cpp

    r75888 r75913  
    3939#include <iprt/rand.h>
    4040#include <iprt/time.h>
     41#include <VBox/AssertGuest.h>
    4142
    4243
     
    9293    LogFlowFunc(("\n"));
    9394
    94     int rc = VINF_SUCCESS;
    95 
    96     try
    97     {
    9895#ifdef DEBUG
    99         strmBlk.DumpToLog();
     96    strmBlk.DumpToLog();
    10097#endif
    10198        /* Object name. */
    102         mName = strmBlk.GetString("name");
    103         if (mName.isEmpty()) throw VERR_NOT_FOUND;
    104         /* Type. */
    105         Utf8Str strType(strmBlk.GetString("ftype"));
    106         if (strType.equalsIgnoreCase("-"))
    107             mType = FsObjType_File;
    108         else if (strType.equalsIgnoreCase("d"))
    109             mType = FsObjType_Directory;
    110         /** @todo Add more types! */
    111         else
    112             mType = FsObjType_Unknown;
    113         if (fLong)
    114         {
    115             /* Dates. */
    116             mAccessTime       = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_atime");
    117             mBirthTime        = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_birthtime");
    118             mChangeTime       = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_ctime");
    119             mModificationTime = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_mtime");
    120         }
    121         /* Object size. */
    122         rc = strmBlk.GetInt64Ex("st_size", &mObjectSize);
    123         if (RT_FAILURE(rc)) throw rc;
    124         /** @todo Add complete ls info! */
    125     }
    126     catch (int rc2)
    127     {
    128         rc = rc2;
    129     }
    130 
    131     LogFlowFuncLeaveRC(rc);
    132     return rc;
    133 }
    134 
    135 int GuestFsObjData::FromMkTemp(const GuestProcessStreamBlock &strmBlk)
    136 {
    137     LogFlowFunc(("\n"));
    138 
    139     int rc;
    140 
    141     try
    142     {
    143 #ifdef DEBUG
    144         strmBlk.DumpToLog();
    145 #endif
    146         /* Object name. */
    147         mName = strmBlk.GetString("name");
    148         if (mName.isEmpty()) throw VERR_NOT_FOUND;
    149         /* Assign the stream block's rc. */
    150         rc = strmBlk.GetRc();
    151     }
    152     catch (int rc2)
    153     {
    154         rc = rc2;
    155     }
    156 
    157     LogFlowFuncLeaveRC(rc);
    158     return rc;
    159 }
    160 
    161 int GuestFsObjData::FromStat(const GuestProcessStreamBlock &strmBlk)
    162 {
    163     LogFlowFunc(("\n"));
    164 
    165     int rc = VINF_SUCCESS;
    166 
    167     try
    168     {
    169 #ifdef DEBUG
    170         strmBlk.DumpToLog();
    171 #endif
    172         /* Node ID, optional because we don't include this
    173          * in older VBoxService (< 4.2) versions. */
    174         mNodeID = strmBlk.GetInt64("node_id");
    175         /* Object name. */
    176         mName = strmBlk.GetString("name");
    177         if (mName.isEmpty()) throw VERR_NOT_FOUND;
    178         /* Type. */
    179         Utf8Str strType(strmBlk.GetString("ftype"));
    180         if (strType.equalsIgnoreCase("-"))
    181             mType = FsObjType_File;
    182         else if (strType.equalsIgnoreCase("d"))
    183             mType = FsObjType_Directory;
    184         else /** @todo Add more types! */
    185             mType = FsObjType_Unknown;
    186         /* Dates. */
     99    mName = strmBlk.GetString("name");
     100    ASSERT_GUEST_RETURN(mName.isNotEmpty(), VERR_NOT_FOUND);
     101
     102    /* Type. */
     103    mType = FsObjType_Unknown;
     104    const char *pszType = strmBlk.GetString("ftype");
     105    if (pszType)
     106        switch (*pszType)
     107        {
     108            case '-':   mType = FsObjType_File; break;
     109            case 'd':   mType = FsObjType_Directory; break;
     110            case 'l':   mType = FsObjType_Symlink; break;
     111            case 'c':   mType = FsObjType_DevChar; break;
     112            case 'b':   mType = FsObjType_DevBlock; break;
     113            case 'f':   mType = FsObjType_Fifo; break;
     114            case 's':   mType = FsObjType_Socket; break;
     115            case 'w':   mType = FsObjType_WhiteOut; break;
     116            default: AssertMsgFailed(("%s\n", pszType));
     117        }
     118
     119    /* Dates. */
     120    if (fLong)
     121    {
    187122        mAccessTime       = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_atime");
    188123        mBirthTime        = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_birthtime");
    189124        mChangeTime       = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_ctime");
    190125        mModificationTime = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_mtime");
    191         /* Object size. */
    192         rc = strmBlk.GetInt64Ex("st_size", &mObjectSize);
    193         if (RT_FAILURE(rc)) throw rc;
    194         /** @todo Add complete stat info! */
    195     }
    196     catch (int rc2)
    197     {
    198         rc = rc2;
    199     }
     126    }
     127
     128    /* Object size. */
     129    int rc = strmBlk.GetInt64Ex("st_size", &mObjectSize);
     130    ASSERT_GUEST_RC_RETURN(rc, rc);
     131
     132    /* Owner. */
     133    mUID = strmBlk.GetUInt32("uid");
     134    mGID = strmBlk.GetUInt32("gid");
     135
     136    /** @todo Add complete stat info!
     137     * int64_t              mAllocatedSize;
     138     * uint32_t             mDeviceNumber;
     139     * Utf8Str              mFileAttrs;
     140     * uint32_t             mGenerationID;
     141     * Utf8Str              mGroupName;
     142     * uint32_t             mNumHardLinks;
     143     * uint32_t             mNodeIDDevice;
     144     * uint32_t             mUserFlags;
     145     * Utf8Str              mUserName;
     146     * Utf8Str              mACL;
     147     */
     148
     149    LogFlowFuncLeave();
     150    return VINF_SUCCESS;
     151}
     152
     153int GuestFsObjData::FromMkTemp(const GuestProcessStreamBlock &strmBlk)
     154{
     155    LogFlowFunc(("\n"));
     156
     157#ifdef DEBUG
     158    strmBlk.DumpToLog();
     159#endif
     160    /* Object name. */
     161    mName = strmBlk.GetString("name");
     162    ASSERT_GUEST_RETURN(mName.isNotEmpty(), VERR_NOT_FOUND);
     163
     164    /* Assign the stream block's rc. */
     165    int rc = strmBlk.GetRc();
    200166
    201167    LogFlowFuncLeaveRC(rc);
    202168    return rc;
     169}
     170
     171int GuestFsObjData::FromStat(const GuestProcessStreamBlock &strmBlk)
     172{
     173    LogFlowFunc(("\n"));
     174
     175#ifdef DEBUG
     176    strmBlk.DumpToLog();
     177#endif
     178    /* Node ID, optional because we don't include this in older VBoxService (< 4.2) versions. */
     179    mNodeID = strmBlk.GetInt64("node_id");
     180
     181    /* Object name. */
     182    mName = strmBlk.GetString("name");
     183    ASSERT_GUEST_RETURN(mName.isNotEmpty(), VERR_NOT_FOUND);
     184
     185    /* Type. */
     186    const char *pszType = strmBlk.GetString("ftype");
     187    if (pszType)
     188        switch (*pszType)
     189        {
     190            case '-':   mType = FsObjType_File; break;
     191            case 'd':   mType = FsObjType_Directory; break;
     192            case 'l':   mType = FsObjType_Symlink; break;
     193            case 'c':   mType = FsObjType_DevChar; break;
     194            case 'b':   mType = FsObjType_DevBlock; break;
     195            case 'f':   mType = FsObjType_Fifo; break;
     196            case 's':   mType = FsObjType_Socket; break;
     197            case 'w':   mType = FsObjType_WhiteOut; break;
     198            default: AssertMsgFailed(("%s\n", pszType));
     199        }
     200
     201    /* Dates. */
     202    mAccessTime       = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_atime");
     203    mBirthTime        = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_birthtime");
     204    mChangeTime       = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_ctime");
     205    mModificationTime = GuestFsObjData::UnixEpochNsFromKey(strmBlk, "st_mtime");
     206
     207    /* Object size. */
     208    int rc = strmBlk.GetInt64Ex("st_size", &mObjectSize);
     209    ASSERT_GUEST_RC_RETURN(rc, rc);
     210
     211    /* Owner. */
     212    mUID = strmBlk.GetUInt32("uid");
     213    mGID = strmBlk.GetUInt32("gid");
     214
     215    /** @todo Add complete stat info!
     216     * int64_t              mAllocatedSize;
     217     * uint32_t             mDeviceNumber;
     218     * Utf8Str              mFileAttrs;
     219     * uint32_t             mGenerationID;
     220     * Utf8Str              mGroupName;
     221     * uint32_t             mNumHardLinks;
     222     * uint32_t             mNodeIDDevice;
     223     * uint32_t             mUserFlags;
     224     * Utf8Str              mUserName;
     225     * Utf8Str              mACL;
     226     */
     227
     228    LogFlowFuncLeave();
     229    return VINF_SUCCESS;
    203230}
    204231
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