1
1
/* defs.h -- data types and declarations.
2
Copyright (C) 1990, 91, 92, 93, 94, 2000 Free Software Foundation, Inc.
2
Copyright (C) 1990, 91, 92, 93, 94, 2000, 2004 Free Software Foundation, Inc.
4
4
This program is free software; you can redistribute it and/or modify
5
5
it under the terms of the GNU General Public License as published by
14
14
You should have received a copy of the GNU General Public License
15
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 9 Temple Place - Suite 330, Boston, MA 02111-1307,
16
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20
#include <gnulib/config.h>
22
#undef PACKAGE_VERSION
23
#undef PACKAGE_TARNAME
27
22
#include <config.h>
28
23
#include <sys/types.h>
29
24
#include <sys/stat.h>
221
#if !defined(NEW_EXEC)
199
224
short offset; /* Offset in `vec' of this arg. */
200
225
short count; /* Number of path replacements in this arg. */
201
226
char *origarg; /* Arg with "{}" intact. */
230
#include "buildcmd.h"
234
#if defined(NEW_EXEC)
236
boolean multiple; /* -exec {} \+ denotes multiple argument. */
237
struct buildcmd_control ctl;
238
struct buildcmd_state state;
239
char **replace_vec; /* Command arguments (for ";" style) */
241
boolean use_current_dir; /* If nonzero, don't chdir to start dir */
206
243
struct path_arg *paths; /* Array of args with path replacements. */
207
244
char **vec; /* Array of args to pass to program. */
210
248
/* The format string for a -printf or -fprintf is chopped into one or
316
365
#define VOID char
319
VOID *xmalloc PARAMS((size_t n));
320
VOID *xrealloc PARAMS((VOID *p, size_t n));
323
char *xstrdup PARAMS((char *string));
325
368
/* find global function declarations. */
371
/* SymlinkOption represents the choice of
372
* -P, -L or -P (default) on the command line.
376
SYMLINK_NEVER_DEREF, /* Option -P */
377
SYMLINK_ALWAYS_DEREF, /* Option -L */
378
SYMLINK_DEREF_ARGSONLY /* Option -H */
380
extern enum SymlinkOption symlink_handling; /* defined in find.c. */
382
void set_follow_state PARAMS((enum SymlinkOption opt));
328
char *filesystem_type PARAMS((char *path, char *relpath, struct stat *statp));
386
char *filesystem_type PARAMS((const struct stat *statp));
387
char * get_mounted_filesystems (void);
388
dev_t * get_mounted_devices PARAMS((size_t *));
390
/* Pointer to a parser function. */
391
typedef boolean (*PARSE_FUNC)(char *argv[], int *arg_ptr);
331
PFB find_parser PARAMS((char *search_name));
394
PARSE_FUNC find_parser PARAMS((char *search_name));
332
395
boolean parse_close PARAMS((char *argv[], int *arg_ptr));
333
396
boolean parse_open PARAMS((char *argv[], int *arg_ptr));
334
397
boolean parse_print PARAMS((char *argv[], int *arg_ptr));
343
406
boolean pred_cnewer PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
344
407
boolean pred_comma PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
345
408
boolean pred_ctime PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
409
boolean pred_delete PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
346
410
boolean pred_empty PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
347
411
boolean pred_exec PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
412
boolean pred_execdir PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
348
413
boolean pred_false PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
349
414
boolean pred_fls PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
350
415
boolean pred_fprint PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
368
433
boolean pred_nogroup PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
369
434
boolean pred_nouser PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
370
435
boolean pred_ok PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
436
boolean pred_okdir PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
371
437
boolean pred_open PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
372
438
boolean pred_or PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
373
439
boolean pred_path PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
375
441
boolean pred_print PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
376
442
boolean pred_print0 PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
377
443
boolean pred_prune PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
444
boolean pred_quit PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
378
445
boolean pred_regex PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
446
boolean pred_samefile PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
379
447
boolean pred_size PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
380
448
boolean pred_true PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
381
449
boolean pred_type PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
383
451
boolean pred_used PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
384
452
boolean pred_user PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
385
453
boolean pred_xtype PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr));
386
char *find_pred_name PARAMS((PFB pred_func));
455
int launch PARAMS((const struct buildcmd_control *ctl,
456
struct buildcmd_state *buildstate));
459
char *find_pred_name PARAMS((PRED_FUNC pred_func));
388
void print_tree PARAMS((struct predicate *node, int indent));
389
void print_list PARAMS((struct predicate *node));
464
void print_tree PARAMS((FILE*, struct predicate *node, int indent));
465
void print_list PARAMS((FILE*, struct predicate *node));
466
void print_optlist PARAMS((FILE *fp, struct predicate *node));
390
467
#endif /* DEBUG */
394
471
get_expr PARAMS((struct predicate **input, short int prev_prec));
395
472
boolean opt_expr PARAMS((struct predicate **eval_treep));
396
473
boolean mark_stat PARAMS((struct predicate *tree));
474
boolean mark_type PARAMS((struct predicate *tree));
399
477
struct predicate *get_new_pred PARAMS((void));
400
478
struct predicate *get_new_pred_chk_op PARAMS((void));
401
struct predicate *insert_primary PARAMS((boolean (*pred_func )()));
479
struct predicate *insert_primary PARAMS((PRED_FUNC));
402
480
void usage PARAMS((char *msg));
404
482
extern char *program_name;
405
483
extern struct predicate *predicates;
406
484
extern struct predicate *last_pred;
407
extern boolean do_dir_first;
411
extern int output_block_size;
412
extern time_t start_time;
413
extern time_t cur_day_start;
414
extern boolean full_days;
415
extern boolean no_leaf_check;
416
extern boolean stay_on_filesystem;
417
extern boolean stop_at_current_level;
418
extern boolean have_stat;
419
extern char *rel_pathname;
488
/* If true, process directory before contents. True unless -depth given. */
489
boolean do_dir_first;
491
/* If >=0, don't descend more than this many levels of subdirectories. */
494
/* If >=0, don't process files above this level. */
497
/* If true, do not assume that files in directories with nlink == 2
498
are non-directories. */
499
boolean no_leaf_check;
501
/* If true, don't cross filesystem boundaries. */
502
boolean stay_on_filesystem;
504
/* If true, we ignore the problem where we find that a directory entry
505
* no longer exists by the time we get around to processing it.
507
boolean ignore_readdir_race;
509
/* If true, we issue warning messages
512
time_t start_time; /* Time at start of execution. */
514
/* Seconds between 00:00 1/1/70 and either one day before now
515
(the default), or the start of today (if -daystart is given). */
516
time_t cur_day_start;
518
/* If true, cur_day_start has been adjusted to the start of the day. */
521
int output_block_size; /* Output block size. */
523
enum SymlinkOption symlink_handling;
526
/* Pointer to the function used to stat files. */
527
int (*xstat) (const char *name, struct stat *statbuf);
530
/* Indicate if we can implement safely_chdir() using the O_NOFOLLOW
533
boolean open_nofollow_available;
535
extern struct options options;
540
/* Current depth; 0 means current path is a command line arg. */
543
/* If true, we have called stat on the current path. */
546
/* If true, we know the type of the current path. */
548
mode_t type; /* this is the actual type */
550
/* The file being operated on, relative to the current directory.
551
Used for stat, readlink, remove, and opendir. */
554
/* Length of current path. */
557
/* If true, don't descend past current directory.
558
Can be set by -prune, -maxdepth, and -xdev/-mount. */
559
boolean stop_at_current_level;
561
/* Status value to return to system. */
564
extern struct state state;
420
566
extern char const *starting_dir;
421
567
extern int starting_desc;
422
568
#if ! defined HAVE_FCHDIR && ! defined fchdir
423
569
# define fchdir(fd) (-1)
425
extern int exit_status;
426
extern int path_length;
427
extern int (*xstat) ();
428
extern boolean dereference;