[BusyBox-cvs] busybox/findutils Config.in,1.1,1.2 find.c,1.36,1.37

Erik Andersen andersen at codepoet.org
Thu Jan 23 05:27:46 UTC 2003


Update of /var/cvs/busybox/findutils
In directory winder:/tmp/cvs-serv30912/findutils

Modified Files:
	Config.in find.c 
Log Message:
Apply patch from Ghozlane Toumi to add -inum support to find.
Apply patch from Ghozlane Toumi to make find smaller by combining
    similar error messages
Forward port find -newer support from busybox stable that was 
    missing from unstable.  -Erik.
Fixup usage messages for find.  -Erik


Index: Config.in
===================================================================
RCS file: /var/cvs/busybox/findutils/Config.in,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- Config.in	5 Dec 2002 08:40:41 -0000	1.1
+++ Config.in	23 Jan 2003 05:27:42 -0000	1.2
@@ -39,6 +39,21 @@
 	help
 	  Please submit a patch to add help text for this item.
 
+config CONFIG_FEATURE_FIND_NEWER
+	bool "  Enable -newer option for comparing file mtimes"
+	default y
+	depends on CONFIG_FIND
+	help
+	  Support the 'find -newer' option for finding any files which have
+	  a modified time that is more recent than the specified FILE.
+
+config CONFIG_FEATURE_FIND_INUM
+	bool "  Enable inode number matching (-inum) option"
+	default y
+	depends on CONFIG_FIND
+	help
+	  Support the 'fine -inum' option for searching by inode number.
+
 config CONFIG_GREP
 	bool "grep"
 	default n

Index: find.c
===================================================================
RCS file: /var/cvs/busybox/findutils/find.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- find.c	11 Dec 2002 21:22:21 -0000	1.36
+++ find.c	23 Jan 2003 05:27:42 -0000	1.37
@@ -34,6 +34,9 @@
 #include <ctype.h>
 #include "busybox.h"
 
+//XXX just found out about libbb/messages.c . maybe move stuff there ? - ghoz
+const char msg_req_arg[] = "option `%s' requires an argument";
+const char msg_invalid_arg[] = "invalid argument `%s' to `%s'";
 
 static char *pattern;
 
@@ -56,6 +59,13 @@
 static int xdev_count = 0;
 #endif
 
+#ifdef CONFIG_FEATURE_FIND_NEWER
+time_t newer_mtime;
+#endif
+
+#ifdef CONFIG_FEATURE_FIND_INUM
+static ino_t inode_num;
+#endif
 
 static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
 {
@@ -109,7 +119,19 @@
 		}
 	}
 #endif
-
+#ifdef CONFIG_FEATURE_FIND_NEWER
+	if (newer_mtime != 0) {
+		time_t file_age = newer_mtime - statbuf->st_mtime;
+		if (file_age >= 0)
+			goto no_match;
+	}
+#endif
+#ifdef CONFIG_FEATURE_FIND_INUM
+	if (inode_num != 0) {
+		if (!(statbuf->st_ino == inode_num))
+			goto no_match;
+	}
+#endif
 	puts(fileName);
 no_match:
 	return (TRUE);
@@ -145,7 +167,7 @@
 	}
 
 	if (mask == 0 || type[1] != '\0')
-		error_msg_and_die("invalid argument `%s' to `-type'", type);
+		error_msg_and_die(msg_invalid_arg, type, "-type");
 
 	return mask;
 }
@@ -170,24 +192,22 @@
 			}
 		else if (strcmp(argv[i], "-name") == 0) {
 			if (++i == argc)
-				error_msg_and_die("option `-name' requires an argument");
+				error_msg_and_die(msg_req_arg, "-name");
 			pattern = argv[i];
 #ifdef CONFIG_FEATURE_FIND_TYPE
 		} else if (strcmp(argv[i], "-type") == 0) {
 			if (++i == argc)
-				error_msg_and_die("option `-type' requires an argument");
+				error_msg_and_die(msg_req_arg, "-type");
 			type_mask = find_type(argv[i]);
 #endif
 #ifdef CONFIG_FEATURE_FIND_PERM
 		} else if (strcmp(argv[i], "-perm") == 0) {
 			char *end;
 			if (++i == argc)
-				error_msg_and_die("option `-perm' requires an argument");
+				error_msg_and_die(msg_req_arg, "-perm");
 			perm_mask = strtol(argv[i], &end, 8);
-			if (end[0] != '\0')
-				error_msg_and_die("invalid argument `%s' to `-perm'", argv[i]);
-			if (perm_mask > 07777)
-				error_msg_and_die("invalid argument `%s' to `-perm'", argv[i]);
+			if ((end[0] != '\0') || (perm_mask > 07777))
+				error_msg_and_die(msg_invalid_arg, argv[i], "-perm");
 			if ((perm_char = argv[i][0]) == '-')
 				perm_mask = -perm_mask;
 #endif
@@ -195,10 +215,10 @@
 		} else if (strcmp(argv[i], "-mtime") == 0) {
 			char *end;
 			if (++i == argc)
-				error_msg_and_die("option `-mtime' requires an argument");
+				error_msg_and_die(msg_req_arg, "-mtime");
 			mtime_days = strtol(argv[i], &end, 10);
 			if (end[0] != '\0')
-				error_msg_and_die("invalid argument `%s' to `-mtime'", argv[i]);
+				error_msg_and_die(msg_invalid_arg, argv[i], "-mtime");
 			if ((mtime_char = argv[i][0]) == '-')
 				mtime_days = -mtime_days;
 #endif
@@ -222,6 +242,24 @@
 					xdev_dev [i-1] = stbuf. st_dev;
 				}
 			}						
+#endif
+#ifdef CONFIG_FEATURE_FIND_NEWER
+		} else if (strcmp(argv[i], "-newer") == 0) {
+			struct stat stat_newer;
+			if (++i == argc)
+				error_msg_and_die(msg_req_arg, "-newer");
+		    if (stat (argv[i], &stat_newer) != 0)
+				error_msg_and_die("file %s not found", argv[i]);
+			newer_mtime = stat_newer.st_mtime;
+#endif
+#ifdef CONFIG_FEATURE_FIND_INUM
+		} else if (strcmp(argv[i], "-inum") == 0) {
+			char *end;
+			if (++i == argc)
+				error_msg_and_die(msg_req_arg, "-inum");
+			inode_num = strtol(argv[i], &end, 10);
+			if (end[0] != '\0')
+				error_msg_and_die(msg_invalid_arg, argv[i], "-inum");
 #endif
 		} else
 			show_usage();




More information about the busybox-cvs mailing list