svn commit: trunk/busybox: archival coreutils debianutils findutils etc...

aldot at busybox.net aldot at busybox.net
Thu Mar 29 10:30:53 UTC 2007


Author: aldot
Date: 2007-03-29 03:30:50 -0700 (Thu, 29 Mar 2007)
New Revision: 18271

Log:
- fold recurse, depthFirst and dereference params into one param flags.
  Minor size improvement (-16b for size, -24b according to bloat-o-meter).


Modified:
   trunk/busybox/archival/tar.c
   trunk/busybox/coreutils/chmod.c
   trunk/busybox/coreutils/chown.c
   trunk/busybox/coreutils/diff.c
   trunk/busybox/debianutils/run_parts.c
   trunk/busybox/findutils/find.c
   trunk/busybox/findutils/grep.c
   trunk/busybox/include/libbb.h
   trunk/busybox/libbb/recursive_action.c
   trunk/busybox/modutils/insmod.c
   trunk/busybox/selinux/chcon.c


Changeset:
Modified: trunk/busybox/archival/tar.c
===================================================================
--- trunk/busybox/archival/tar.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/archival/tar.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -562,8 +562,9 @@
 
 	/* Read the directory/files and iterate over them one at a time */
 	while (include) {
-		if (!recursive_action(include->data, TRUE, dereferenceFlag,
-				FALSE, writeFileToTarball, writeFileToTarball, &tbInfo, 0))
+		if (!recursive_action(include->data, (action_recurse |
+				 dereferenceFlag ? action_followLinks : 0),
+				writeFileToTarball, writeFileToTarball, &tbInfo, 0))
 		{
 			errorFlag = TRUE;
 		}

Modified: trunk/busybox/coreutils/chmod.c
===================================================================
--- trunk/busybox/coreutils/chmod.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/coreutils/chmod.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -101,8 +101,6 @@
 	do {
 		if (!recursive_action(*argv,
 			OPT_RECURSE,    // recurse
-			FALSE,          // follow links: coreutils doesn't
-			FALSE,          // depth first
 			fileAction,     // file action
 			fileAction,     // dir action
 			smode,          // user data

Modified: trunk/busybox/coreutils/chown.c
===================================================================
--- trunk/busybox/coreutils/chown.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/coreutils/chown.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -92,13 +92,12 @@
 		}
 
 		if (!recursive_action(arg,
-				OPT_RECURSE,    // recurse
-				OPT_TRAVERSE,   // follow links if -L
-				FALSE,          // depth first
-				fileAction,     // file action
-				fileAction,     // dir action
-				chown_func,     // user data
-				0)              // depth
+				(OPT_RECURSE ? action_recurse : 0 | /* recurse */
+				 OPT_TRAVERSE ? action_followLinks : 0),/* follow links if -L */
+				fileAction,     /* file action */
+				fileAction,     /* dir action */
+				chown_func,     /* user data */
+				0)              /* depth */
 		) {
 			retval = EXIT_FAILURE;
 		}

Modified: trunk/busybox/coreutils/diff.c
===================================================================
--- trunk/busybox/coreutils/diff.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/coreutils/diff.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -1079,7 +1079,8 @@
 	 * add_to_dirlist then removes root dir prefix. */
 
 	if (option_mask32 & FLAG_r) {
-		recursive_action(path, TRUE, TRUE, FALSE, add_to_dirlist, NULL,
+		recursive_action(path, action_recurse|action_followLinks,
+					add_to_dirlist, NULL,
 					(void*)(strlen(path)+1), 0);
 	} else {
 		DIR *dp;

Modified: trunk/busybox/debianutils/run_parts.c
===================================================================
--- trunk/busybox/debianutils/run_parts.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/debianutils/run_parts.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -138,9 +138,7 @@
 		G.cmd[tmp] = arg_list->data;
 	/* G.cmd[tmp] = NULL; - G is already zeroed out */
 	if (!recursive_action(argv[argc - 1],
-			TRUE,		/* recurse */
-			TRUE,		/* follow links */
-			FALSE,		/* depth first */
+			action_recurse|action_followLinks,
 			act,		/* file action */
 			act,		/* dir action */
 			NULL,		/* user data */

Modified: trunk/busybox/findutils/find.c
===================================================================
--- trunk/busybox/findutils/find.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/findutils/find.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -574,7 +574,7 @@
 int find_main(int argc, char **argv);
 int find_main(int argc, char **argv)
 {
-	int dereference = FALSE;
+	bool dereference = FALSE;
 	char *arg;
 	char **argp;
 	int i, firstopt, status = EXIT_SUCCESS;
@@ -632,13 +632,11 @@
 
 	for (i = 1; i < firstopt; i++) {
 		if (!recursive_action(argv[i],
-				TRUE,           // recurse
-				dereference,    // follow links
-				FALSE,          // depth first
-				fileAction,     // file action
-				fileAction,     // dir action
-				NULL,           // user data
-				0))             // depth
+				action_recurse|(1<<dereference), /* flags */
+				fileAction,     /* file action */
+				fileAction,     /* dir action */
+				NULL,           /* user data */
+				0))             /* depth */
 			status = EXIT_FAILURE;
 	}
 	return status;

Modified: trunk/busybox/findutils/grep.c
===================================================================
--- trunk/busybox/findutils/grep.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/findutils/grep.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -336,9 +336,9 @@
 {
 	int matched = 0;
 	recursive_action(dir,
-		/* recurse= */ 1,
-		/* followLinks= */ 0,
-		/* depthFirst= */ 1,
+		/* recurse= */ action_recurse |
+		/* followLinks= */ /* no. 0 | */
+		/* depthFirst= */ action_depthFirst,
 		/* fileAction= */ file_action_grep,
 		/* dirAction= */ NULL,
 		/* userData= */ &matched,

Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/include/libbb.h	2007-03-29 10:30:50 UTC (rev 18271)
@@ -231,11 +231,14 @@
 extern int is_directory(const char *name, int followLinks, struct stat *statBuf);
 extern int remove_file(const char *path, int flags);
 extern int copy_file(const char *source, const char *dest, int flags);
-extern int recursive_action(const char *fileName, int recurse,
-	int followLinks, int depthFirst,
+#define action_recurse		(1<<0)
+#define action_followLinks	(1<<1)
+#define action_depthFirst	(1<<2)
+#define action_reverse		(1<<3)
+extern int recursive_action(const char *fileName, unsigned flags,
 	int (*fileAction) (const char *fileName, struct stat* statbuf, void* userData, int depth),
 	int (*dirAction) (const char *fileName, struct stat* statbuf, void* userData, int depth),
-	void* userData, int depth);
+	void* userData, const unsigned depth);
 extern int device_open(const char *device, int mode);
 extern int get_console_fd(void);
 extern char *find_block_device(const char *path);

Modified: trunk/busybox/libbb/recursive_action.c
===================================================================
--- trunk/busybox/libbb/recursive_action.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/libbb/recursive_action.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -22,7 +22,8 @@
  * is so stinking huge.
  */
 
-static int true_action(const char *fileName, struct stat *statbuf, void* userData, int depth)
+static int true_action(const char *fileName, struct stat *statbuf,
+						void* userData, int depth)
 {
 	return TRUE;
 }
@@ -41,11 +42,11 @@
  */
 
 int recursive_action(const char *fileName,
-		int recurse, int followLinks, int depthFirst,
+		unsigned flags,
 		int (*fileAction)(const char *fileName, struct stat *statbuf, void* userData, int depth),
 		int (*dirAction)(const char *fileName, struct stat *statbuf, void* userData, int depth),
 		void* userData,
-		int depth)
+		const unsigned depth)
 {
 	struct stat statbuf;
 	int status;
@@ -54,22 +55,20 @@
 
 	if (!fileAction) fileAction = true_action;
 	if (!dirAction) dirAction = true_action;
+	status = (flags & action_followLinks ? stat : lstat)(fileName, &statbuf);
 
-	status = (followLinks ? stat : lstat)(fileName, &statbuf);
-
 	if (status < 0) {
 #ifdef DEBUG_RECURS_ACTION
 		bb_error_msg("status=%d followLinks=%d TRUE=%d",
-				status, followLinks, TRUE);
+				status, flags & action_followLinks, TRUE);
 #endif
-		bb_perror_msg("%s", fileName);
-		return FALSE;
+		goto done_nak_warn;
 	}
 
 	/* If S_ISLNK(m), then we know that !S_ISDIR(m).
 	 * Then we can skip checking first part: if it is true, then
 	 * (!dir) is also true! */
-	if ( /* (!followLinks && S_ISLNK(statbuf.st_mode)) || */
+	if ( /* (!(flags & action_followLinks) && S_ISLNK(statbuf.st_mode)) || */
 	 !S_ISDIR(statbuf.st_mode)
 	) {
 		return fileAction(fileName, &statbuf, userData, depth);
@@ -77,15 +76,14 @@
 
 	/* It's a directory (or a link to one, and followLinks is set) */
 
-	if (!recurse) {
+	if (!(flags & action_recurse)) {
 		return dirAction(fileName, &statbuf, userData, depth);
 	}
 
-	if (!depthFirst) {
+	if (!(flags & action_depthFirst)) {
 		status = dirAction(fileName, &statbuf, userData, depth);
 		if (!status) {
-			bb_perror_msg("%s", fileName);
-			return FALSE;
+			goto done_nak_warn;
 		}
 		if (status == SKIP)
 			return TRUE;
@@ -96,8 +94,7 @@
 		/* findutils-4.1.20 reports this */
 		/* (i.e. it doesn't silently return with exit code 1) */
 		/* To trigger: "find -exec rm -rf {} \;" */
-		bb_perror_msg("%s", fileName);
-		return FALSE;
+		goto done_nak_warn;
 	}
 	status = TRUE;
 	while ((next = readdir(dir)) != NULL) {
@@ -106,21 +103,23 @@
 		nextFile = concat_subpath_file(fileName, next->d_name);
 		if (nextFile == NULL)
 			continue;
-		if (!recursive_action(nextFile, TRUE, followLinks, depthFirst,
+		/* now descend into it, forcing recursion. */
+		if (!recursive_action(nextFile, flags | action_recurse,
 				fileAction, dirAction, userData, depth+1)) {
 			status = FALSE;
 		}
 		free(nextFile);
 	}
 	closedir(dir);
-	if (depthFirst) {
-		if (!dirAction(fileName, &statbuf, userData, depth)) {
-			bb_perror_msg("%s", fileName);
-			return FALSE;
-		}
+	if (flags & action_depthFirst &&
+		!dirAction(fileName, &statbuf, userData, depth)) {
+			goto done_nak_warn;
 	}
 
 	if (!status)
 		return FALSE;
 	return TRUE;
+done_nak_warn:
+	bb_perror_msg("%s", fileName);
+	return FALSE;
 }

Modified: trunk/busybox/modutils/insmod.c
===================================================================
--- trunk/busybox/modutils/insmod.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/modutils/insmod.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -4044,7 +4044,7 @@
 				module_dir = tmdn;
 			else
 				module_dir = real_module_dir;
-			recursive_action(module_dir, TRUE, FALSE, FALSE,
+			recursive_action(module_dir, action_recurse,
 					check_module_name_match, 0, m_fullName, 0);
 			free(tmdn);
 		}
@@ -4059,7 +4059,7 @@
 				strcpy(module_dir, _PATH_MODULES);
 			/* No module found under /lib/modules/`uname -r`, this
 			 * time cast the net a bit wider.  Search /lib/modules/ */
-			if (!recursive_action(module_dir, TRUE, FALSE, FALSE,
+			if (!recursive_action(module_dir, action_recurse,
 						    check_module_name_match, 0, m_fullName, 0)
 			) {
 				if (m_filename == 0

Modified: trunk/busybox/selinux/chcon.c
===================================================================
--- trunk/busybox/selinux/chcon.c	2007-03-28 22:50:26 UTC (rev 18270)
+++ trunk/busybox/selinux/chcon.c	2007-03-29 10:30:50 UTC (rev 18271)
@@ -163,9 +163,7 @@
 		fname[fname_len] = '\0';
 
 		if (recursive_action(fname,
-				     option_mask32 & OPT_RECURSIVE,
-				     FALSE,	/* followLinks */
-				     FALSE,	/* depthFirst */
+				     1<<option_mask32 & OPT_RECURSIVE,
 				     change_filedir_context,
 				     change_filedir_context,
 				     NULL, 0) != TRUE)




More information about the busybox-cvs mailing list