[PATCH 01/49] create_inode: clean up return mess in do_write_internal

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



do_write_internal returns errno when ext2 library calls fail; since
errno only reflects the outcome of the last C library call, this will
result in confused callers.  Eliminate the naked return since
this results in an undefined return value.

Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
---
 misc/create_inode.c |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)


diff --git a/misc/create_inode.c b/misc/create_inode.c
index cf4a58f..647480c 100644
--- a/misc/create_inode.c
+++ b/misc/create_inode.c
@@ -353,14 +353,14 @@ errcode_t do_write_internal(ext2_ino_t cwd, const char *src, const char *dest)
 	if (retval == 0) {
 		com_err(__func__, 0, "The file '%s' already exists\n", dest);
 		close(fd);
-		return errno;
+		return retval;
 	}
 
 	retval = ext2fs_new_inode(current_fs, cwd, 010755, 0, &newfile);
 	if (retval) {
 		com_err(__func__, retval, 0);
 		close(fd);
-		return errno;
+		return retval;
 	}
 #ifdef DEBUGFS
 	printf("Allocated inode: %u\n", newfile);
@@ -372,7 +372,7 @@ errcode_t do_write_internal(ext2_ino_t cwd, const char *src, const char *dest)
 		if (retval) {
 			com_err(__func__, retval, "while expanding directory");
 			close(fd);
-			return errno;
+			return retval;
 		}
 		retval = ext2fs_link(current_fs, cwd, dest, newfile,
 					EXT2_FT_REG_FILE);
@@ -412,12 +412,15 @@ errcode_t do_write_internal(ext2_ino_t cwd, const char *src, const char *dest)
 	if ((retval = ext2fs_write_new_inode(current_fs, newfile, &inode))) {
 		com_err(__func__, retval, "while creating inode %u", newfile);
 		close(fd);
-		return errno;
+		return retval;
 	}
 	if (inode.i_flags & EXT4_INLINE_DATA_FL) {
 		retval = ext2fs_inline_data_init(current_fs, newfile);
-		if (retval)
-			return;
+		if (retval) {
+			com_err("copy_file", retval, 0);
+			close(fd);
+			return retval;
+		}
 	}
 	if (LINUX_S_ISREG(inode.i_mode)) {
 		if (statbuf.st_blocks < statbuf.st_size / S_BLKSIZE) {
@@ -434,7 +437,7 @@ errcode_t do_write_internal(ext2_ino_t cwd, const char *src, const char *dest)
 	}
 	close(fd);
 
-	return 0;
+	return retval;
 }
 
 /* Copy files from source_dir to fs */

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux