[PATCH 2/3] s3-printing: clean up get_correct_cversion error paths

David Disseldorp ddiss at suse.de
Tue Mar 1 11:17:48 MST 2011


Remove an unneeded variable and simplify error paths.
---
 source3/printing/nt_printing.c |   34 ++++++++++++++++------------------
 1 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index d7d3740..3b805f4 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -579,13 +579,12 @@ static uint32 get_correct_cversion(struct pipes_struct *p,
 				   const char *driverpath_in,
 				   WERROR *perr)
 {
-	int               cversion;
+	int cversion = -1;
 	NTSTATUS          nt_status;
 	struct smb_filename *smb_fname = NULL;
 	char *driverpath = NULL;
 	files_struct      *fsp = NULL;
 	connection_struct *conn = NULL;
-	NTSTATUS status;
 	char *oldcwd;
 	char *printdollar = NULL;
 	int printdollar_snum;
@@ -650,7 +649,7 @@ static uint32 get_correct_cversion(struct pipes_struct *p,
 		goto error_exit;
 	}
 
-	status = SMB_VFS_CREATE_FILE(
+	nt_status = SMB_VFS_CREATE_FILE(
 		conn,					/* conn */
 		NULL,					/* req */
 		0,					/* root_dir_fid */
@@ -668,7 +667,7 @@ static uint32 get_correct_cversion(struct pipes_struct *p,
 		&fsp,					/* result */
 		NULL);					/* pinfo */
 
-	if (!NT_STATUS_IS_OK(status)) {
+	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(3,("get_correct_cversion: Can't open file [%s], errno = "
 			 "%d\n", smb_fname_str_dbg(smb_fname), errno));
 		*perr = WERR_ACCESS_DENIED;
@@ -679,12 +678,14 @@ static uint32 get_correct_cversion(struct pipes_struct *p,
 		int    ret;
 
 		ret = get_file_version(fsp, smb_fname->base_name, &major, &minor);
-		if (ret == -1) goto error_exit;
-
-		if (!ret) {
+		if (ret == -1) {
+			*perr = WERR_INVALID_PARAM;
+			goto error_exit;
+		} else if (!ret) {
 			DEBUG(6,("get_correct_cversion: Version info not "
 				 "found [%s]\n",
 				 smb_fname_str_dbg(smb_fname)));
+			*perr = WERR_INVALID_PARAM;
 			goto error_exit;
 		}
 
@@ -716,12 +717,9 @@ static uint32 get_correct_cversion(struct pipes_struct *p,
 
 	DEBUG(10,("get_correct_cversion: Driver file [%s] cversion = %d\n",
 		  smb_fname_str_dbg(smb_fname), cversion));
-
-	goto done;
+	*perr = WERR_OK;
 
  error_exit:
-	cversion = -1;
- done:
 	TALLOC_FREE(smb_fname);
 	if (fsp != NULL) {
 		close_file(NULL, fsp, NORMAL_CLOSE);
@@ -730,9 +728,10 @@ static uint32 get_correct_cversion(struct pipes_struct *p,
 		vfs_ChDir(conn, oldcwd);
 		conn_free(conn);
 	}
-	if (cversion != -1) {
-		*perr = WERR_OK;
+	if (!NT_STATUS_IS_OK(*perr)) {
+		cversion = -1;
 	}
+
 	return cversion;
 }
 
@@ -1908,7 +1907,8 @@ bool delete_driver_files(const struct auth_serversupplied_info *session_info,
 
 	if ( !CAN_WRITE(conn) ) {
 		DEBUG(3,("delete_driver_files: Cannot delete print driver when [print$] is read-only\n"));
-		goto fail;
+		ret = false;
+		goto err_out;
 	}
 
 	/* now delete the files; must strip the '\print$' string from
@@ -1964,10 +1964,8 @@ bool delete_driver_files(const struct auth_serversupplied_info *session_info,
 		}
 	}
 
-	goto done;
- fail:
-	ret = false;
- done:
+	ret = true;
+ err_out:
 	if (conn != NULL) {
 		vfs_ChDir(conn, oldcwd);
 		conn_free(conn);
-- 
1.7.1



More information about the samba-technical mailing list