This adds a primary to find(1) "-exit <arg>", it will cause
find to exit(2) with the <arg> as the exit status.

Useful for finding the first instance of something:

find . -type f -newer ../src.tar.gz -exit 0 && echo hi

this will make find abort with a zero exit status early upon
finding a file newer than ../src.tar.gz.

cvs diff: Diffing .
Index: extern.h
===================================================================
RCS file: /home/ncvs/src/usr.bin/find/extern.h,v
retrieving revision 1.21
diff -u -r1.21 extern.h
--- extern.h    28 May 2004 17:17:15 -0000      1.21
+++ extern.h    16 Jul 2004 07:07:50 -0000
@@ -58,6 +58,7 @@
 creat_f        c_depth;
 creat_f        c_empty;
 creat_f        c_exec;
+creat_f        c_exit;
 creat_f        c_flags;
 creat_f        c_follow;
 #if !defined(__NetBSD__)
@@ -90,6 +91,7 @@
 exec_f f_depth;
 exec_f f_empty;
 exec_f f_exec;
+exec_f f_exit;
 exec_f f_expr;
 exec_f f_flags;
 exec_f f_fstype;
Index: find.1
===================================================================
RCS file: /home/ncvs/src/usr.bin/find/find.1,v
retrieving revision 1.66
diff -u -r1.66 find.1
--- find.1      7 Jul 2004 19:57:15 -0000       1.66
+++ find.1      16 Jul 2004 07:12:58 -0000
@@ -372,6 +372,10 @@
 .Ar flags
 bits match those of
 .Ar notflags .
+.It Ic -exit Ar exitstatus
+This primary will cause the find program to exit immediately with an exit
+status of
+.Ar exitstatus .
 .It Ic -fstype Ar type
 True if the file is contained in a file system of type
 .Ar type .
Index: function.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/find/function.c,v
retrieving revision 1.50
diff -u -r1.50 function.c
--- function.c  28 May 2004 17:17:15 -0000      1.50
+++ function.c  16 Jul 2004 07:07:05 -0000
@@ -748,6 +748,25 @@
 }
 
 int
+f_exit(PLAN *plan, FTSENT *entry)
+{
+
+       exit(plan->flags);
+}
+
+PLAN *
+c_exit(OPTION *option, char ***argvp)
+{
+       PLAN *new;
+       int ex;
+
+       ex = atoi(nextarg(option, argvp));
+       new = palloc(option);
+       new->flags = ex;
+       return (new);
+}
+
+int
 f_flags(PLAN *plan, FTSENT *entry)
 {
        u_long flags;
Index: option.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/find/option.c,v
retrieving revision 1.22
diff -u -r1.22 option.c
--- option.c    28 May 2004 17:17:15 -0000      1.22
+++ option.c    16 Jul 2004 07:06:49 -0000
@@ -76,6 +76,7 @@
        { "-empty",     c_empty,        f_empty,        0 },
        { "-exec",      c_exec,         f_exec,         0 },
        { "-execdir",   c_exec,         f_exec,         F_EXECDIR },
+       { "-exit",      c_exit,         f_exit,         0 },
        { "-false",     c_simple,       f_not,          0 },
        { "-flags",     c_flags,        f_flags,        0 },
        { "-follow",    c_follow,       f_always_true,  0 },
-- 
- Alfred Perlstein
- Research Engineering Development Inc.
- email: [EMAIL PROTECTED] cell: 408-480-4684
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to