Author: vlendec
Date: 2006-05-17 12:59:30 +0000 (Wed, 17 May 2006)
New Revision: 15658

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15658

Log:
Micro-step towards getting rid of set_saved_error & friends. Lift
set_saved_ntstatus up from file_new one level. The plan is to work the way up
to open_file_ntcreate and higher.

Volker

Modified:
   trunk/source/printing/printfsp.c
   trunk/source/smbd/fake_file.c
   trunk/source/smbd/files.c
   trunk/source/smbd/open.c


Changeset:
Modified: trunk/source/printing/printfsp.c
===================================================================
--- trunk/source/printing/printfsp.c    2006-05-17 11:14:26 UTC (rev 15657)
+++ trunk/source/printing/printfsp.c    2006-05-17 12:59:30 UTC (rev 15658)
@@ -32,11 +32,15 @@
 {
        int jobid;
        SMB_STRUCT_STAT sbuf;
-       files_struct *fsp = file_new(conn);
+       files_struct *fsp;
        fstring name;
+       NTSTATUS status;
 
-       if(!fsp)
+       status = file_new(conn, &fsp);
+       if(!NT_STATUS_IS_OK(status)) {
+               set_saved_ntstatus(status);
                return NULL;
+       }
 
        fstrcpy( name, "Remote Downlevel Document");
        if (fname) {

Modified: trunk/source/smbd/fake_file.c
===================================================================
--- trunk/source/smbd/fake_file.c       2006-05-17 11:14:26 UTC (rev 15657)
+++ trunk/source/smbd/fake_file.c       2006-05-17 12:59:30 UTC (rev 15658)
@@ -107,6 +107,7 @@
                                uint32 access_mask)
 {
        files_struct *fsp = NULL;
+       NTSTATUS status;
 
        /* access check */
        if (current_user.ut.uid != 0) {
@@ -116,8 +117,9 @@
                return NULL;
        }
 
-       fsp = file_new(conn);
-       if(!fsp) {
+       status = file_new(conn, &fsp);
+       if(!NT_STATUS_IS_OK(status)) {
+               set_saved_ntstatus(status);
                return NULL;
        }
 

Modified: trunk/source/smbd/files.c
===================================================================
--- trunk/source/smbd/files.c   2006-05-17 11:14:26 UTC (rev 15657)
+++ trunk/source/smbd/files.c   2006-05-17 12:59:30 UTC (rev 15658)
@@ -61,7 +61,7 @@
  Find first available file slot.
 ****************************************************************************/
 
-files_struct *file_new(connection_struct *conn)
+NTSTATUS file_new(connection_struct *conn, files_struct **result)
 {
        int i;
        static int first_file;
@@ -84,23 +84,19 @@
                /* TODO: We have to unconditionally return a DOS error here,
                 * W2k3 even returns ERRDOS/ERRnofids for ntcreate&x with
                 * NTSTATUS negotiated */
-               set_saved_ntstatus(NT_STATUS_TOO_MANY_OPENED_FILES);
-               return NULL;
+               return NT_STATUS_TOO_MANY_OPENED_FILES;
        }
 
        fsp = SMB_MALLOC_P(files_struct);
        if (!fsp) {
-               set_saved_ntstatus(NT_STATUS_NO_MEMORY);
-               return NULL;
+               return NT_STATUS_NO_MEMORY;
        }
 
        ZERO_STRUCTP(fsp);
 
        fsp->fh = SMB_MALLOC_P(struct fd_handle);
        if (!fsp->fh) {
-               SAFE_FREE(fsp);
-               set_saved_ntstatus(NT_STATUS_NO_MEMORY);
-               return NULL;
+               return NT_STATUS_NO_MEMORY;
        }
 
        ZERO_STRUCTP(fsp->fh);
@@ -133,8 +129,9 @@
        if (fsp_fi_cache.fsp == NULL) {
                ZERO_STRUCT(fsp_fi_cache);
        }
-       
-       return fsp;
+
+       *result = fsp;
+       return NT_STATUS_OK;
 }
 
 /****************************************************************************
@@ -529,9 +526,13 @@
                                uint32 share_access,
                                uint32 create_options)
 {
-       files_struct *dup_fsp = file_new(fsp->conn);
+       NTSTATUS status;
+       files_struct *dup_fsp;
 
-       if (!dup_fsp) {
+       status = file_new(fsp->conn, &dup_fsp);
+
+       if (!NT_STATUS_IS_OK(status)) {
+               set_saved_ntstatus(status);
                return NULL;
        }
 

Modified: trunk/source/smbd/open.c
===================================================================
--- trunk/source/smbd/open.c    2006-05-17 11:14:26 UTC (rev 15657)
+++ trunk/source/smbd/open.c    2006-05-17 12:59:30 UTC (rev 15658)
@@ -1336,8 +1336,9 @@
                return NULL;
        }
 
-       fsp = file_new(conn);
-       if(!fsp) {
+       status = file_new(conn, &fsp);
+       if(!NT_STATUS_IS_OK(status)) {
+               set_saved_ntstatus(status);
                return NULL;
        }
 
@@ -1775,13 +1776,15 @@
 {
        files_struct *fsp = NULL;
        BOOL fsp_open;
+       NTSTATUS status;
 
        if (!VALID_STAT(*psbuf)) {
                return NULL;
        }
 
-       fsp = file_new(conn);
-       if(!fsp) {
+       status = file_new(conn, &fsp);
+       if(!NT_STATUS_IS_OK(status)) {
+               set_saved_ntstatus(status);
                return NULL;
        }
 
@@ -1933,8 +1936,9 @@
                }
        }
 
-       fsp = file_new(conn);
-       if(!fsp) {
+       status = file_new(conn, &fsp);
+       if(!NT_STATUS_IS_OK(status)) {
+               set_saved_ntstatus(status);
                return NULL;
        }
 
@@ -2027,6 +2031,7 @@
                             SMB_STRUCT_STAT *psbuf)
 {
        files_struct *fsp = NULL;
+       NTSTATUS status;
 
        if (!VALID_STAT(*psbuf))
                return NULL;
@@ -2035,9 +2040,11 @@
        if(S_ISDIR(psbuf->st_mode))
                return NULL;
 
-       fsp = file_new(conn);
-       if(!fsp)
+       status = file_new(conn, &fsp);
+       if(!fsp) {
+               set_saved_ntstatus(status);
                return NULL;
+       }
 
        DEBUG(5,("open_file_stat: 'opening' file %s\n", fname));
 

Reply via email to