--- findutils-4.2.27/find/parser.c.orig 2005-12-04 03:07:52.000000000 +0100 +++ findutils-4.2.27/find/parser.c 2006-02-06 01:11:14.000000000 +0100 @@ -145,6 +145,9 @@ static boolean parse_ignore_race PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); static boolean parse_noignore_race PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); static boolean parse_warn PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +#ifdef HAVE_LIBVSERVER +static boolean parse_xid PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +#endif static boolean parse_xtype PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); static boolean parse_quit PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); @@ -278,6 +281,9 @@ PARSE_TEST ("user", user), PARSE_OPTION ("warn", warn), /* GNU */ PARSE_TEST_NP ("wholename", wholename), /* GNU, replaces -path */ +#ifdef HAVE_LIBVSERVER + PARSE_TEST ("xid", xid), /*vserver */ +#endif PARSE_OPTION ("xdev", xdev), PARSE_TEST ("xtype", xtype), /* GNU */ #ifdef UNIMPLEMENTED_UNIX @@ -1767,6 +1773,53 @@ return true; } +#ifdef HAVE_LIBVSERVER +# ifndef HAVE_XID_T +typedef unsigned int xid_t; +# endif +# ifndef HAVE_NID_T +typedef unsigned int nid_t; +# endif +# include + +static boolean +parse_xid (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *ptr, *errstr; + xid_t xid; + struct predicate *our_pred; + + if (argv == NULL || argv[*arg_ptr] == NULL) + return false; + + our_pred = insert_primary_withpred (entry, pred_xid); + + ptr = argv[*arg_ptr]; + switch (*ptr) + { + case '+': + our_pred->args.info.kind = COMP_GT; + ptr++; + break; + case '-': + our_pred->args.info.kind = COMP_LT; + ptr++; + break; + default: + our_pred->args.info.kind = COMP_EQ; + break; + } + + xid = vc_xidopt2xid (ptr, true, &errstr); + if (xid == VC_NOCTX) + error (1, 0, _("invalid xid %s: %s"), quote(argv[*arg_ptr]), errstr); + our_pred->args.info.l_val = xid; + + (*arg_ptr)++; + return true; +} +#endif + static boolean parse_xtype (const struct parser_table* entry, char **argv, int *arg_ptr) { --- findutils-4.2.27/find/defs.h.orig 2005-09-04 19:59:34.000000000 +0200 +++ findutils-4.2.27/find/defs.h 2006-02-06 00:53:25.000000000 +0100 @@ -478,6 +478,9 @@ boolean pred_uid PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_used PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_user PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); +#ifdef HAVE_LIBVSERVER +boolean pred_xid PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); +#endif boolean pred_xtype PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); --- findutils-4.2.27/find/pred.c.orig 2005-11-30 07:17:15.000000000 +0100 +++ findutils-4.2.27/find/pred.c 2006-02-06 01:40:23.000000000 +0100 @@ -214,6 +214,9 @@ {pred_uid, "uid "}, {pred_used, "used "}, {pred_user, "user "}, +#ifdef HAVE_LIBVSERVER + {pred_xid, "xid "}, +#endif {pred_xtype, "xtype "}, {0, "none "} }; @@ -1457,6 +1460,45 @@ return (false); } +#ifdef HAVE_LIBVSERVER +# ifndef HAVE_XID_T +typedef unsigned int xid_t; +# endif +# ifndef HAVE_NID_T +typedef unsigned int nid_t; +# endif +# include + +boolean +pred_xid (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + xid_t xid = vc_getfilecontext(state.rel_pathname); + + if (xid == VC_NOCTX) + return false; + + switch (pred_ptr->args.info.kind) + { + case COMP_GT: + if (xid > pred_ptr->args.info.l_val) + return true; + break; + case COMP_LT: + if (xid < pred_ptr->args.info.l_val) + return true; + break; + case COMP_EQ: + if (xid == pred_ptr->args.info.l_val) + return true; + break; + default: + break; + } + + return false; +} +#endif + boolean pred_xtype (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) { --- findutils-4.2.27/configure.in.orig 2005-12-06 07:53:12.000000000 +0100 +++ findutils-4.2.27/configure.in 2006-02-06 00:51:50.000000000 +0100 @@ -199,6 +199,11 @@ #include ]) +dnl vserver +AC_CHECK_LIB([vserver], [vc_get_iattr]) +AC_CHECK_TYPES([xid_t, nid_t]) + + dnl internationalization macros AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION(0.14.5)