The branch, master has been updated
       via  7407b52... Start removing SMB_STRUCT_STAT variables except for the 
directory enumeration code (which needs it). Jeremy.
      from  a770cae... Remove "store create time" code, cause create time to be 
stored in the "user.DOSATTRIB" EA. From the docs: In Samba 3.5.0 and above the 
"user.DOSATTRIB" extended attribute has been extended to store the create time 
for a file as well as the DOS attributes. This is done in a backwards 
compatible way so files created by Samba 3.5.0 and above can still have the DOS 
attribute read from this extended attribute by earlier versions of Samba, but 
they will not be able to read the create time stored there. Storing the create 
time separately from the normal filesystem meta-data allows Samba to faithfully 
reproduce NTFS semantics on top of a POSIX filesystem. Passes make test but 
will need more testing. Jeremy.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7407b526e3214287a8f42073044e2ebab058198a
Author: Jeremy Allison <[email protected]>
Date:   Tue Nov 17 16:06:08 2009 -0800

    Start removing SMB_STRUCT_STAT variables except for
    the directory enumeration code (which needs it).
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/reply.c |   28 +++++++++++++---------------
 1 files changed, 13 insertions(+), 15 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index caa80f9..b4e0f57 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -2334,7 +2334,7 @@ void reply_ctemp(struct smb_request *req)
 ********************************************************************/
 
 static NTSTATUS can_rename(connection_struct *conn, files_struct *fsp,
-                          uint16 dirtype, SMB_STRUCT_STAT *pst)
+                       uint16 dirtype)
 {
        uint32 fmode;
 
@@ -2347,7 +2347,7 @@ static NTSTATUS can_rename(connection_struct *conn, 
files_struct *fsp,
                return NT_STATUS_NO_SUCH_FILE;
        }
 
-       if (S_ISDIR(pst->st_ex_mode)) {
+       if (S_ISDIR(fsp->fsp_name->st.st_ex_mode)) {
                if (fsp->posix_open) {
                        return NT_STATUS_OK;
                }
@@ -3027,7 +3027,6 @@ void reply_readbraw(struct smb_request *req)
        SMB_OFF_T startpos;
        files_struct *fsp;
        struct lock_struct lock;
-       SMB_STRUCT_STAT st;
        SMB_OFF_T size = 0;
 
        START_PROFILE(SMBreadbraw);
@@ -3119,7 +3118,7 @@ void reply_readbraw(struct smb_request *req)
                        reply_readbraw_error();
                        END_PROFILE(SMBreadbraw);
                        return;
-               }      
+               }
        }
 
        maxcount = (SVAL(req->vwv+3, 0) & 0xFFFF);
@@ -3138,8 +3137,8 @@ void reply_readbraw(struct smb_request *req)
                return;
        }
 
-       if (SMB_VFS_FSTAT(fsp, &st) == 0) {
-               size = st.st_ex_size;
+       if (fsp_stat(fsp) == 0) {
+               size = fsp->fsp_name->st.st_ex_size;
        }
 
        if (startpos >= size) {
@@ -3414,12 +3413,11 @@ static void send_file_readX(connection_struct *conn, 
struct smb_request *req,
                            files_struct *fsp, SMB_OFF_T startpos,
                            size_t smb_maxcnt)
 {
-       SMB_STRUCT_STAT sbuf;
        ssize_t nread = -1;
        struct lock_struct lock;
        int saved_errno = 0;
 
-       if(SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
+       if(fsp_stat(fsp) == -1) {
                reply_nterror(req, map_nt_error_from_unix(errno));
                return;
        }
@@ -3433,8 +3431,9 @@ static void send_file_readX(connection_struct *conn, 
struct smb_request *req,
                return;
        }
 
-       if (!S_ISREG(sbuf.st_ex_mode) || (startpos > sbuf.st_ex_size)
-           || (smb_maxcnt > (sbuf.st_ex_size - startpos))) {
+       if (!S_ISREG(fsp->fsp_name->st.st_ex_mode) ||
+                       (startpos > fsp->fsp_name->st.st_ex_size)
+                       || (smb_maxcnt > (fsp->fsp_name->st.st_ex_size - 
startpos))) {
                /*
                 * We already know that we would do a short read, so don't
                 * try the sendfile() path.
@@ -4499,16 +4498,15 @@ void reply_lseek(struct smb_request *req)
                if((res = SMB_VFS_LSEEK(fsp,startpos,umode)) == -1) {
                        if(errno == EINVAL) {
                                SMB_OFF_T current_pos = startpos;
-                               SMB_STRUCT_STAT sbuf;
 
-                               if(SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
+                               if(fsp_stat(fsp) == -1) {
                                        reply_nterror(req,
                                                map_nt_error_from_unix(errno));
                                        END_PROFILE(SMBlseek);
                                        return;
                                }
 
-                               current_pos += sbuf.st_ex_size;
+                               current_pos += fsp->fsp_name->st.st_ex_size;
                                if(current_pos < 0)
                                        res = SMB_VFS_LSEEK(fsp,0,SEEK_SET);
                        }
@@ -5387,7 +5385,6 @@ NTSTATUS rmdir_internals(TALLOC_CTX *ctx,
                         struct smb_filename *smb_dname)
 {
        int ret;
-       SMB_STRUCT_STAT st;
 
        SMB_ASSERT(!is_ntfs_stream_smb_fname(smb_dname));
 
@@ -5422,6 +5419,7 @@ NTSTATUS rmdir_internals(TALLOC_CTX *ctx,
                 * retry. If we fail to delete any of them (and we *don't*
                 * do a recursive delete) then fail the rmdir.
                 */
+               SMB_STRUCT_STAT st;
                char *dname = NULL;
                long dirpos = 0;
                struct smb_Dir *dir_hnd = OpenDir(talloc_tos(), conn,
@@ -6034,7 +6032,7 @@ NTSTATUS rename_internals_fsp(connection_struct *conn,
                goto out;
        }
 
-       status = can_rename(conn, fsp, attrs, &fsp->fsp_name->st);
+       status = can_rename(conn, fsp, attrs);
 
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(3, ("rename_internals_fsp: Error %s rename %s -> %s\n",


-- 
Samba Shared Repository

Reply via email to