[BusyBox-cvs] busybox/libbb copy_file.c,1.26,1.27

Glenn McGrath bug1 at busybox.net
Sat Dec 20 04:38:04 UTC 2003


Update of /var/cvs/busybox/libbb
In directory nail:/tmp/cvs-serv2819/libbb

Modified Files:
	copy_file.c 
Log Message:
Use low level file descriptors to match bb_copyfd_eof


Index: copy_file.c
===================================================================
RCS file: /var/cvs/busybox/libbb/copy_file.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- copy_file.c	21 Nov 2003 22:24:56 -0000	1.26
+++ copy_file.c	20 Dec 2003 04:38:01 -0000	1.27
@@ -123,7 +123,8 @@
 			status = -1;
 		}
 	} else if (S_ISREG(source_stat.st_mode)) {
-		FILE *sfp, *dfp=NULL;
+		int src_fd;
+		int dst_fd;
 #ifdef CONFIG_FEATURE_PRESERVE_HARDLINKS
 		char *link_name;
 
@@ -137,30 +138,32 @@
 			return 0;
 		}
 #endif
-
-		if ((sfp = bb_wfopen(source, "r")) == NULL) {
-			return -1;
+		src_fd = open(source, O_RDONLY);
+		if (src_fd == -1) {
+			bb_perror_msg("unable to open `%s'", source);
+			return(-1);
 		}
 
 		if (dest_exists) {
 			if (flags & FILEUTILS_INTERACTIVE) {
-				fprintf(stderr, "%s: overwrite `%s'? ", bb_applet_name, dest);
+				bb_error_msg("overwrite `%s'? ", dest);
 				if (!bb_ask_confirmation()) {
-					fclose (sfp);
+					close (src_fd);
 					return 0;
 				}
 			}
 
-			if ((dfp = fopen(dest, "w")) == NULL) {
+			dst_fd = open(dest, O_WRONLY);
+			if (dst_fd == -1) {
 				if (!(flags & FILEUTILS_FORCE)) {
 					bb_perror_msg("unable to open `%s'", dest);
-					fclose (sfp);
+					close(src_fd);
 					return -1;
 				}
 
 				if (unlink(dest) < 0) {
 					bb_perror_msg("unable to remove `%s'", dest);
-					fclose (sfp);
+					close(src_fd);
 					return -1;
 				}
 
@@ -169,27 +172,23 @@
 		}
 
 		if (!dest_exists) {
-			int fd;
-
-			if ((fd = open(dest, O_WRONLY|O_CREAT, source_stat.st_mode)) < 0 ||
-					(dfp = fdopen(fd, "w")) == NULL) {
-				if (fd >= 0)
-					close(fd);
+			dst_fd = open(dest, O_WRONLY|O_CREAT, source_stat.st_mode);
+			if (dst_fd == -1) {
 				bb_perror_msg("unable to open `%s'", dest);
-				fclose (sfp);
-				return -1;
+				close(src_fd);
+				return(-1);
 			}
 		}
 
-		if (bb_copyfd_eof(fileno(sfp), fileno(dfp)) == -1)
+		if (bb_copyfd_eof(src_fd, dst_fd) == -1)
 			status = -1;
 
-		if (fclose(dfp) < 0) {
+		if (close(dst_fd) < 0) {
 			bb_perror_msg("unable to close `%s'", dest);
 			status = -1;
 		}
 
-		if (fclose(sfp) < 0) {
+		if (close(src_fd) < 0) {
 			bb_perror_msg("unable to close `%s'", source);
 			status = -1;
 		}




More information about the busybox-cvs mailing list