Add history and config-struct to recurse
For loop detection, a history is mandatory. In the process of also adding a flexible struct to recurse, the recurse-definition was moved to fs.h. The motivation behind the struct is to allow easy extensions to the recurse-function without having to change the prototypes of all functions in the process. Adding flags is really simple as well now. Using the recursor-struct, it's also easier to see which defaults apply to a program (for instance, which type of follow, ...). Another change was to add proper stat-lstat-usage in recurse. It was wrong before.
This commit is contained in:
26
fs.h
26
fs.h
@@ -1,4 +1,24 @@
|
||||
/* See LICENSE file for copyright and license details. */
|
||||
#include <sys/types.h>
|
||||
|
||||
struct history {
|
||||
struct history *prev;
|
||||
dev_t dev;
|
||||
ino_t ino;
|
||||
};
|
||||
|
||||
struct recursor {
|
||||
void (*fn)(const char *, void *, struct recursor *);
|
||||
struct history *hist;
|
||||
int depth;
|
||||
int follow;
|
||||
int flags;
|
||||
};
|
||||
|
||||
enum {
|
||||
SAMEDEV = 1 << 0,
|
||||
};
|
||||
|
||||
extern int cp_aflag;
|
||||
extern int cp_fflag;
|
||||
extern int cp_pflag;
|
||||
@@ -11,5 +31,9 @@ extern int rm_fflag;
|
||||
extern int rm_rflag;
|
||||
extern int rm_status;
|
||||
|
||||
extern int recurse_status;
|
||||
|
||||
void recurse(const char *, void *, struct recursor *);
|
||||
|
||||
int cp(const char *, const char *, int);
|
||||
void rm(const char *, int, void *);
|
||||
void rm(const char *, void *, struct recursor *);
|
||||
|
Reference in New Issue
Block a user