git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 04/26] copy.c: delete unused code in copy_file()

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Feb 16, 2016, 13:29 UTC
Message-ID
<1455629367-26193-5-git-send-email-pclouds@gmail.com>
In-Reply-To
<1455629367-26193-1-git-send-email-pclouds@gmail.com>
 - selinux preservation code
 - make-link code
 - delete link dereference code
 - non-recursive copy code
 - stat no preservation code
 - verbose printing code
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 copy.c | 101 +++++------------------------------------------------------------
 1 file changed, 7 insertions(+), 94 deletions(-)
diff --git a/copy.c b/copy.c
index 29e9d5b..d24a8ae 100644
--- a/copy.c
+++ b/copy.c
@@ -82,14 +82,7 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
 	smallint dest_exists = 0;
 	smallint ovr;
 
-/* Inverse of cp -d ("cp without -d") */
-#define FLAGS_DEREF (flags & (FILEUTILS_DEREFERENCE + FILEUTILS_DEREFERENCE_L0))
-
-	if ((FLAGS_DEREF ? stat : lstat)(source, &source_stat) < 0) {
-		/* This may be a dangling symlink.
-		 * Making [sym]links to dangling symlinks works, so... */
-		if (flags & (FILEUTILS_MAKE_SOFTLINK|FILEUTILS_MAKE_HARDLINK))
-			goto make_links;
+	if (lstat(source, &source_stat) < 0) {
 		bb_perror_msg("can't stat '%s'", source);
 		return -1;
 	}
@@ -109,35 +102,12 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
 		dest_exists = 1;
 	}
 
-#if ENABLE_SELINUX
-	if ((flags & FILEUTILS_PRESERVE_SECURITY_CONTEXT) && is_selinux_enabled() > 0) {
-		security_context_t con;
-		if (lgetfilecon(source, &con) >= 0) {
-			if (setfscreatecon(con) < 0) {
-				bb_perror_msg("can't set setfscreatecon %s", con);
-				freecon(con);
-				return -1;
-			}
-		} else if (errno == ENOTSUP || errno == ENODATA) {
-			setfscreatecon_or_die(NULL);
-		} else {
-			bb_perror_msg("can't lgetfilecon %s", source);
-			return -1;
-		}
-	}
-#endif
-
 	if (S_ISDIR(source_stat.st_mode)) {
 		DIR *dp;
 		const char *tp;
 		struct dirent *d;
 		mode_t saved_umask = 0;
 
-		if (!(flags & FILEUTILS_RECUR)) {
-			bb_error_msg("omitting directory '%s'", source);
-			return -1;
-		}
-
 		/* Did we ever create source ourself before? */
 		tp = is_in_ino_dev_hashtable(&source_stat);
 		if (tp) {
@@ -160,8 +130,6 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
 			saved_umask = umask(0);
 
 			mode = source_stat.st_mode;
-			if (!(flags & FILEUTILS_PRESERVE_STATUS))
-				mode = source_stat.st_mode & ~saved_umask;
 			/* Allow owner to access new dir (at least for now) */
 			mode |= S_IRWXU;
 			if (mkdir(dest, mode) < 0) {
@@ -210,45 +178,17 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
 		goto preserve_mode_ugid_time;
 	}
 
-	if (flags & (FILEUTILS_MAKE_SOFTLINK|FILEUTILS_MAKE_HARDLINK)) {
-		int (*lf)(const char *oldpath, const char *newpath);
- make_links:
-		/* Hmm... maybe
-		 * if (DEREF && MAKE_SOFTLINK) source = realpath(source) ?
-		 * (but realpath returns NULL on dangling symlinks...) */
-		lf = (flags & FILEUTILS_MAKE_SOFTLINK) ? symlink : link;
-		if (lf(source, dest) < 0) {
-			ovr = ask_and_unlink(dest, flags);
-			if (ovr <= 0)
-				return ovr;
-			if (lf(source, dest) < 0) {
-				bb_perror_msg("can't create link '%s'", dest);
-				return -1;
-			}
-		}
-		/* _Not_ jumping to preserve_mode_ugid_time:
-		 * (sym)links don't have those */
-		return 0;
-	}
-
-	if (/* "cp thing1 thing2" without -R: just open and read() from thing1 */
-	    !(flags & FILEUTILS_RECUR)
-	    /* "cp [-opts] regular_file thing2" */
-	 || S_ISREG(source_stat.st_mode)
-	 /* DEREF uses stat, which never returns S_ISLNK() == true.
-	  * So the below is never true: */
-	 /* || (FLAGS_DEREF && S_ISLNK(source_stat.st_mode)) */
-	) {
+	if (S_ISREG(source_stat.st_mode) ) { /* "cp [-opts] regular_file thing2" */
 		int src_fd;
 		int dst_fd;
 		mode_t new_mode;
 
-		if (!FLAGS_DEREF && S_ISLNK(source_stat.st_mode)) {
+		if (S_ISLNK(source_stat.st_mode)) {
 			/* "cp -d symlink dst": create a link */
 			goto dont_cat;
 		}
 
-		if (ENABLE_FEATURE_PRESERVE_HARDLINKS && !FLAGS_DEREF) {
+		if (ENABLE_FEATURE_PRESERVE_HARDLINKS) {
 			const char *link_target;
 			link_target = is_in_ino_dev_hashtable(&source_stat);
 			if (link_target) {
@@ -295,25 +235,6 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
 			}
 		}
 
-#if ENABLE_SELINUX
-		if ((flags & (FILEUTILS_PRESERVE_SECURITY_CONTEXT|FILEUTILS_SET_SECURITY_CONTEXT))
-		 && is_selinux_enabled() > 0
-		) {
-			security_context_t con;
-			if (getfscreatecon(&con) == -1) {
-				bb_perror_msg("getfscreatecon");
-				return -1;
-			}
-			if (con) {
-				if (setfilecon(dest, con) == -1) {
-					bb_perror_msg("setfilecon:%s,%s", dest, con);
-					freecon(con);
-					return -1;
-				}
-				freecon(con);
-			}
-		}
-#endif
 		if (bb_copyfd_eof(src_fd, dst_fd) == -1)
 			retval = -1;
 		/* Careful with writing... */
@@ -348,9 +269,8 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
 				bb_perror_msg("can't create symlink '%s'", dest);
 				return -1;
 			}
-			if (flags & FILEUTILS_PRESERVE_STATUS)
-				if (lchown(dest, source_stat.st_uid, source_stat.st_gid) < 0)
-					bb_perror_msg("can't preserve %s of '%s'", "ownership", dest);
+			if (lchown(dest, source_stat.st_uid, source_stat.st_gid) < 0)
+				bb_perror_msg("can't preserve %s of '%s'", "ownership", dest);
 		}
 		/* _Not_ jumping to preserve_mode_ugid_time:
 		 * symlinks don't have those */
@@ -370,10 +290,7 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
 
  preserve_mode_ugid_time:
 
-	if (flags & FILEUTILS_PRESERVE_STATUS
-	/* Cannot happen: */
-	/* && !(flags & (FILEUTILS_MAKE_SOFTLINK|FILEUTILS_MAKE_HARDLINK)) */
-	) {
+	if (1 /*FILEUTILS_PRESERVE_STATUS*/) {
 		struct timeval times[2];
 
 		times[1].tv_sec = times[0].tv_sec = source_stat.st_mtime;
@@ -389,10 +306,6 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
 			bb_perror_msg("can't preserve %s of '%s'", "permissions", dest);
 	}
 
-	if (flags & FILEUTILS_VERBOSE) {
-		printf("'%s' -> '%s'\n", source, dest);
-	}
-
 	return retval;
 }
 #endif
-- 
2.7.0.377.g4cd97dd
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 26 of 50 in “"git worktree move" preview”
  1. 00/20 "git worktree move" previewNguyễn Thái Ngọc Duy, Feb 3, 2016
  2. 01/20 usage.c: move format processing out of die_errno()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  3. 02/20 usage.c: add sys_error() that prints strerror() automaticallyNguyễn Thái Ngọc Duy, Feb 3, 2016
  4. 03/20 path.c: add git_common_path() and strbuf_git_common_path()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  5. 04/20 path.c: add is_git_path_shared()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  6. 05/20 copy.c: add copy_dir_recursively()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  7. 06/20 worktree.c: use is_dot_or_dotdot()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  8. 07/20 worktree.c: store "id" instead of "git_dir"Nguyễn Thái Ngọc Duy, Feb 3, 2016
  9. 08/20 worktree.c: add clear_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  10. 09/20 worktree.c: add find_worktree_by_path()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  11. 10/20 worktree.c: add is_main_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  12. 11/20 worktree.c: recognize no main worktreeNguyễn Thái Ngọc Duy, Feb 3, 2016
  13. 12/20 worktree.c: add update_worktree_location()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  14. 13/20 worktree.c: add update_worktree_gitfile()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  15. 14/20 worktree.c: add collect_per_worktree_git_paths()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  16. 15/20 worktree: avoid 0{40}, too many zeroes, hard to readNguyễn Thái Ngọc Duy, Feb 3, 2016
  17. 16/20 worktree: simplify prefixing pathsNguyễn Thái Ngọc Duy, Feb 3, 2016
  18. 17/20 worktree: add "move" commmandNguyễn Thái Ngọc Duy, Feb 3, 2016
  19. 18/20 worktree: refactor add_worktree()Nguyễn Thái Ngọc Duy, Feb 3, 2016
  20. 19/20 worktree: move repo, simple caseNguyễn Thái Ngọc Duy, Feb 3, 2016
  21. 20/20 worktree: move repo, convert main worktreeNguyễn Thái Ngọc Duy, Feb 3, 2016
  22. 00/26 worktree lock, move, remove and unlockNguyễn Thái Ngọc Duy, Feb 16, 2016
  23. 01/26 usage.c: move format processing out of die_errno()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  24. 02/26 usage.c: add sys_error() that prints strerror() automaticallyNguyễn Thái Ngọc Duy, Feb 16, 2016
  25. 03/26 copy.c: import copy_file() from busyboxNguyễn Thái Ngọc Duy, Feb 16, 2016
  26. 04/26 copy.c: delete unused code in copy_file()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  27. 05/26 copy.c: convert bb_(p)error_msg to (sys_)errorNguyễn Thái Ngọc Duy, Feb 16, 2016
  28. 06/26 copy.c: style fixNguyễn Thái Ngọc Duy, Feb 16, 2016
  29. 07/26 copy.c: convert copy_file() to copy_dir_recursively()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  30. 08/26 completion: support git-worktreeNguyễn Thái Ngọc Duy, Feb 16, 2016
  31. 09/26 git-worktree.txt: keep subcommand listing in alphabetical orderNguyễn Thái Ngọc Duy, Feb 16, 2016
  32. 10/26 wrapper.c: allow to create an empty file with write_file()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  33. Junio C HamanoFeb 17, 2016
  34. Duy NguyenFeb 18, 2016
  35. 11/26 path.c: add git_common_path() and strbuf_git_common_path()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  36. 12/26 worktree.c: use is_dot_or_dotdot()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  37. 13/26 worktree.c: store "id" instead of "git_dir"Nguyễn Thái Ngọc Duy, Feb 16, 2016
  38. 14/26 worktree.c: add clear_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  39. 15/26 worktree.c: add find_worktree_by_path()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  40. 16/26 worktree.c: add is_main_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  41. 17/26 worktree.c: add validate_worktree()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  42. 18/26 worktree.c: add update_worktree_location()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  43. 19/26 worktree.c: add is_worktree_locked()Nguyễn Thái Ngọc Duy, Feb 16, 2016
  44. 20/26 worktree: avoid 0{40}, too many zeroes, hard to readNguyễn Thái Ngọc Duy, Feb 16, 2016
  45. 21/26 worktree: simplify prefixing pathsNguyễn Thái Ngọc Duy, Feb 16, 2016
  46. 22/26 worktree: add "lock" commandNguyễn Thái Ngọc Duy, Feb 16, 2016
  47. 23/26 worktree: add "unlock" commandNguyễn Thái Ngọc Duy, Feb 16, 2016
  48. 24/26 worktree: add "move" commmandNguyễn Thái Ngọc Duy, Feb 16, 2016
  49. 25/26 worktree move: accept destination as directoryNguyễn Thái Ngọc Duy, Feb 16, 2016
  50. 26/26 worktree: add "remove" commandNguyễn Thái Ngọc Duy, Feb 16, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.