aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2024-08-30 17:21:01 +0200
committerMattias Andrée <maandree@kth.se>2024-08-30 17:21:22 +0200
commit8a572a7cf41d220f6afbf4ea9a65710edf885e98 (patch)
tree18fd584bd315f8d78ee9ce4606e92e7d302a2645
parentSecond commit (diff)
downloadanysum-8a572a7cf41d220f6afbf4ea9a65710edf885e98.tar.gz
anysum-8a572a7cf41d220f6afbf4ea9a65710edf885e98.tar.bz2
anysum-8a572a7cf41d220f6afbf4ea9a65710edf885e98.tar.xz
m + add -W[no-]xlink and -W[no-]xdev
Signed-off-by: Mattias Andrée <maandree@kth.se>
-rw-r--r--README23
-rw-r--r--anysum.122
-rw-r--r--anysum.c3
-rw-r--r--b224sum.122
-rw-r--r--b256sum.122
-rw-r--r--b384sum.122
-rw-r--r--b512sum.122
-rw-r--r--bsum.122
-rw-r--r--command.c2
-rw-r--r--common.h5
-rw-r--r--get.c28
-rw-r--r--keccak224sum.122
-rw-r--r--keccak256sum.122
-rw-r--r--keccak384sum.122
-rw-r--r--keccak512sum.122
-rw-r--r--keccaksum.122
-rw-r--r--md2sum.122
-rw-r--r--md4sum.122
-rw-r--r--md5sum.122
-rw-r--r--opts.c28
-rw-r--r--rawshake128sum.122
-rw-r--r--rawshake256sum.122
-rw-r--r--rawshake512sum.122
-rw-r--r--read.c2
-rw-r--r--rmd128sum.122
-rw-r--r--rmd160sum.122
-rw-r--r--rmd256sum.122
-rw-r--r--rmd320sum.122
-rw-r--r--sha0sum.122
-rw-r--r--sha1sum.122
-rw-r--r--sha224sum.122
-rw-r--r--sha256sum.122
-rw-r--r--sha3-224sum.122
-rw-r--r--sha3-256sum.122
-rw-r--r--sha3-384sum.122
-rw-r--r--sha3-512sum.122
-rw-r--r--sha384sum.122
-rw-r--r--sha3sum.122
-rw-r--r--sha512-224sum.122
-rw-r--r--sha512-256sum.122
-rw-r--r--sha512sum.122
-rw-r--r--shake128sum.122
-rw-r--r--shake256sum.122
-rw-r--r--shake512sum.122
44 files changed, 890 insertions, 15 deletions
diff --git a/README b/README
index cfef42b..252f63c 100644
--- a/README
+++ b/README
@@ -219,14 +219,31 @@ OPTIONS
recursive
If a file operand is a directory, the checksum
- is computed for all files recursively.
- This option is ignored if the -c option is
- used.
+ is computed for all files recursively. This
+ option is ignored if the -c option is used.
no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+ xdev
+ Implies -Wrecursive but also allows the
+ recursion across mountpoints.
+
+ no-xdev
+ Disable recursion across mountpoints. (This is
+ the default behaviour). Note that this does
+ not disable recursion by itself.
+
+ xlink
+ Implies -Wrecursive but also allows the
+ recursion across symbolic links.
+
+ no-xlink
+ Disable recursion across symbolic links. (This
+ is the default behaviour). Note that this does
+ not disable recursion by itself.
+
-w
Warn about, but skip, lines that are not properly
formatted.
diff --git a/anysum.1 b/anysum.1
index b2038cc..1a65a66 100644
--- a/anysum.1
+++ b/anysum.1
@@ -289,6 +289,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/anysum.c b/anysum.c
index 6853ca5..de85e46 100644
--- a/anysum.c
+++ b/anysum.c
@@ -107,7 +107,8 @@ main(int argc, char **argv)
}
}
ret = calculate_and_print_each(argv, config.algorithms, config.nalgorithms, config.threads,
- config.format, config.hexinput, config.recursive);
+ config.format, config.hexinput, config.recursive, config.xdev,
+ config.xlink);
}
for (i = 0; i < config.nalgorithms; i++)
diff --git a/b224sum.1 b/b224sum.1
index 7f3551f..6dea665 100644
--- a/b224sum.1
+++ b/b224sum.1
@@ -117,6 +117,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/b256sum.1 b/b256sum.1
index 511542a..f4bb2e8 100644
--- a/b256sum.1
+++ b/b256sum.1
@@ -117,6 +117,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/b384sum.1 b/b384sum.1
index 43aca61..ed0151c 100644
--- a/b384sum.1
+++ b/b384sum.1
@@ -117,6 +117,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/b512sum.1 b/b512sum.1
index 92d883d..cde76a6 100644
--- a/b512sum.1
+++ b/b512sum.1
@@ -117,6 +117,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/bsum.1 b/bsum.1
index e897946..49f99f9 100644
--- a/bsum.1
+++ b/bsum.1
@@ -133,6 +133,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/command.c b/command.c
index d280766..de21786 100644
--- a/command.c
+++ b/command.c
@@ -42,7 +42,7 @@ getcommand(const char **name_out, enum libhashsum_algorithm *algorithm_out)
return BSUM;
specialised:
- if (!libhashsum_get_algorithm_string(algorithm_out, name))
+ if (!libhashsum_get_algorithm_from_string(algorithm_out, name))
eprintf("invalid command name, is not \"anysum\" and "
"does not match any known hash function");
if (strchr(name, '['))
diff --git a/common.h b/common.h
index a228fbd..f601ae5 100644
--- a/common.h
+++ b/common.h
@@ -58,6 +58,8 @@ struct config {
int warn_improper_format;
int hexinput;
int recursive;
+ int xdev;
+ int xlink;
struct algorithm *algorithms;
size_t nalgorithms;
size_t threads;
@@ -113,7 +115,8 @@ struct thread_data {
/* get.c */
int calculate_and_print_each(char **files, struct algorithm *algorithms, size_t nalgorithms,
- size_t nthreads, enum format format, int hexinput, int recursive);
+ size_t nthreads, enum format format, int hexinput, int recursive,
+ int xdev, int xlink);
/* check.c */
int verify_checksums(char **files, struct algorithm *algorithms, size_t nalgorithms, size_t nthreads,
diff --git a/get.c b/get.c
index 5758388..fe92ab3 100644
--- a/get.c
+++ b/get.c
@@ -10,8 +10,10 @@ struct recursion_buffer {
static int
-calculate_and_print(const char *file, struct barrier_group *group, struct global_data *global, struct recursion_buffer *recbuf)
+calculate_and_print(const char *file, struct barrier_group *group, struct global_data *global,
+ struct recursion_buffer *recbuf, int is_top, int xlink, int xdev, dev_t dev)
{
+ static struct stat st;
struct dirent *f;
DIR *dir;
size_t i, len, old_len;
@@ -21,6 +23,20 @@ calculate_and_print(const char *file, struct barrier_group *group, struct global
dir = opendir(file);
if (!dir)
goto as_file;
+ if (!is_top && !xlink) {
+ if (lstat(file, &st))
+ goto recusion_error_print;
+ if (S_ISLNK(st.st_mode))
+ return 0;
+ }
+ if (!xdev) {
+ if (fstat(dirfd(dir), &st))
+ goto recusion_error_print;
+ if (is_top)
+ dev = st.st_dev;
+ else if (st.st_dev != dev)
+ return 0;
+ }
if (recbuf->size - recbuf->len < strlen(file) + 1U) {
recbuf->size = recbuf->len + strlen(file) + 1U;
recbuf->buf = erealloc(recbuf->buf, recbuf->size);
@@ -32,17 +48,20 @@ calculate_and_print(const char *file, struct barrier_group *group, struct global
recbuf->buf[recbuf->len++] = '/';
len = recbuf->len;
while ((errno = 0, f = readdir(dir))) {
+ if (f->d_name[0] == '.' && !f->d_name[f->d_name[1] == '.' ? 2 : 1])
+ continue;
if (recbuf->size - len < strlen(f->d_name) + 1U) {
recbuf->size = len + strlen(f->d_name) + 1U;
recbuf->buf = erealloc(recbuf->buf, recbuf->size);
}
stpcpy(&recbuf->buf[len], f->d_name);
- if (calculate_and_print(recbuf->buf, group, global, recbuf))
+ if (calculate_and_print(recbuf->buf, group, global, recbuf, 0, xlink, xdev, dev))
goto recusion_error;
}
recbuf->len = old_len;
recbuf->buf[recbuf->len] = '\0';
if (errno) {
+ recusion_error_print:
weprintf("%s:", file);
recusion_error:
closedir(dir);
@@ -63,7 +82,8 @@ as_file:
int
calculate_and_print_each(char **files, struct algorithm *algorithms, size_t nalgorithms,
- size_t nthreads, enum format format, int hexinput, int recursive)
+ size_t nthreads, enum format format, int hexinput, int recursive,
+ int xdev, int xlink)
{
struct recursion_buffer recbuf = {NULL, 0, 0};
size_t wanted_nalgorithms = nalgorithms;
@@ -85,7 +105,7 @@ calculate_and_print_each(char **files, struct algorithm *algorithms, size_t nalg
createbarriergroup(&group, nthreads, &global);
for (; *files; files++)
- if (calculate_and_print(*files, &group, &global, recursive ? &recbuf : NULL))
+ if (calculate_and_print(*files, &group, &global, recursive ? &recbuf : NULL, 1, xlink, xdev, 0))
ret = 2;
if (global.nalgorithms != wanted_nalgorithms)
diff --git a/keccak224sum.1 b/keccak224sum.1
index f1761e3..f3e6a32 100644
--- a/keccak224sum.1
+++ b/keccak224sum.1
@@ -108,6 +108,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/keccak256sum.1 b/keccak256sum.1
index e39bf56..ccfce96 100644
--- a/keccak256sum.1
+++ b/keccak256sum.1
@@ -108,6 +108,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/keccak384sum.1 b/keccak384sum.1
index 774ca03..fbcf6d3 100644
--- a/keccak384sum.1
+++ b/keccak384sum.1
@@ -108,6 +108,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/keccak512sum.1 b/keccak512sum.1
index 4858004..e29d6e0 100644
--- a/keccak512sum.1
+++ b/keccak512sum.1
@@ -108,6 +108,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/keccaksum.1 b/keccaksum.1
index 8b27314..cbc76ee 100644
--- a/keccaksum.1
+++ b/keccaksum.1
@@ -135,6 +135,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/md2sum.1 b/md2sum.1
index 6460c53..8dd679c 100644
--- a/md2sum.1
+++ b/md2sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/md4sum.1 b/md4sum.1
index 7fb1ddb..05e4e4d 100644
--- a/md4sum.1
+++ b/md4sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/md5sum.1 b/md5sum.1
index e342b7d..1a88901 100644
--- a/md5sum.1
+++ b/md5sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/opts.c b/opts.c
index 5c264dd..7805897 100644
--- a/opts.c
+++ b/opts.c
@@ -55,17 +55,37 @@ parseopt_vendor(void *config_, char *opt, char *val)
eprintf("-W option \"%s\" expected positive integer value or \"auto\"", opt);
} else if (!strcmp(opt, "recursive")) {
- /* TODO the default behaviour should be to not traverse across mount points,
- * not to not follow symbolic links, however this should be tweakable */
- if (!val)
+ if (val)
eprintf("-W option \"%s\" should not have an associated value", opt);
config->recursive = 1;
} else if (!strcmp(opt, "no-recursive")) {
- if (!val)
+ if (val)
eprintf("-W option \"%s\" should not have an associated value", opt);
config->recursive = 0;
+ } else if (!strcmp(opt, "xdev")) {
+ if (val)
+ eprintf("-W option \"%s\" should not have an associated value", opt);
+ config->recursive = 1;
+ config->xdev = 1;
+
+ } else if (!strcmp(opt, "no-xdev")) {
+ if (val)
+ eprintf("-W option \"%s\" should not have an associated value", opt);
+ config->xdev = 0;
+
+ } else if (!strcmp(opt, "xlink")) {
+ if (val)
+ eprintf("-W option \"%s\" should not have an associated value", opt);
+ config->recursive = 1;
+ config->xlink = 1;
+
+ } else if (!strcmp(opt, "no-xlink")) {
+ if (val)
+ eprintf("-W option \"%s\" should not have an associated value", opt);
+ config->xlink = 0;
+
} else {
return 0;
}
diff --git a/rawshake128sum.1 b/rawshake128sum.1
index d3fa614..ad461fd 100644
--- a/rawshake128sum.1
+++ b/rawshake128sum.1
@@ -113,6 +113,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/rawshake256sum.1 b/rawshake256sum.1
index 5932407..1627774 100644
--- a/rawshake256sum.1
+++ b/rawshake256sum.1
@@ -113,6 +113,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/rawshake512sum.1 b/rawshake512sum.1
index 81df55c..2d43c11 100644
--- a/rawshake512sum.1
+++ b/rawshake512sum.1
@@ -113,6 +113,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/read.c b/read.c
index 07cf893..1ed5847 100644
--- a/read.c
+++ b/read.c
@@ -7,7 +7,7 @@ feedbuffer(int fd, struct buffer *buffer, const char *fname)
{
ssize_t r;
if (buffer->offset == buffer->size)
- buffer->buf = erealloc(buffer->buf, buffer->size += 8096);
+ buffer->buf = erealloc(buffer->buf, buffer->size += 8192);
again:
r = read(fd, &buffer->buf[buffer->offset], buffer->size - buffer->offset);
if (r <= 0) {
diff --git a/rmd128sum.1 b/rmd128sum.1
index c19de2d..cd18b2e 100644
--- a/rmd128sum.1
+++ b/rmd128sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/rmd160sum.1 b/rmd160sum.1
index e470631..c2d3367 100644
--- a/rmd160sum.1
+++ b/rmd160sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/rmd256sum.1 b/rmd256sum.1
index 125dc68..9fd7238 100644
--- a/rmd256sum.1
+++ b/rmd256sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/rmd320sum.1 b/rmd320sum.1
index 463ef3b..176291a 100644
--- a/rmd320sum.1
+++ b/rmd320sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha0sum.1 b/sha0sum.1
index b909e7c..cc041af 100644
--- a/sha0sum.1
+++ b/sha0sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha1sum.1 b/sha1sum.1
index f54dbe7..7bf7c3a 100644
--- a/sha1sum.1
+++ b/sha1sum.1
@@ -98,6 +98,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha224sum.1 b/sha224sum.1
index 5894ef8..d206cb4 100644
--- a/sha224sum.1
+++ b/sha224sum.1
@@ -99,6 +99,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha256sum.1 b/sha256sum.1
index eb23644..2d19e73 100644
--- a/sha256sum.1
+++ b/sha256sum.1
@@ -99,6 +99,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha3-224sum.1 b/sha3-224sum.1
index f1c59a2..e7be65f 100644
--- a/sha3-224sum.1
+++ b/sha3-224sum.1
@@ -108,6 +108,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha3-256sum.1 b/sha3-256sum.1
index 17c64f1..860af36 100644
--- a/sha3-256sum.1
+++ b/sha3-256sum.1
@@ -108,6 +108,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha3-384sum.1 b/sha3-384sum.1
index 6dadf8d..eabc572 100644
--- a/sha3-384sum.1
+++ b/sha3-384sum.1
@@ -108,6 +108,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha3-512sum.1 b/sha3-512sum.1
index a3faaae..50bef69 100644
--- a/sha3-512sum.1
+++ b/sha3-512sum.1
@@ -100,6 +100,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -l
diff --git a/sha384sum.1 b/sha384sum.1
index 085c22c..1718c18 100644
--- a/sha384sum.1
+++ b/sha384sum.1
@@ -99,6 +99,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha3sum.1 b/sha3sum.1
index 182d36e..92f862e 100644
--- a/sha3sum.1
+++ b/sha3sum.1
@@ -117,6 +117,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha512-224sum.1 b/sha512-224sum.1
index f19a592..ec49d7c 100644
--- a/sha512-224sum.1
+++ b/sha512-224sum.1
@@ -99,6 +99,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha512-256sum.1 b/sha512-256sum.1
index 8ff46ca..2cc8fb8 100644
--- a/sha512-256sum.1
+++ b/sha512-256sum.1
@@ -99,6 +99,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/sha512sum.1 b/sha512sum.1
index 7f0fec8..bcbb598 100644
--- a/sha512sum.1
+++ b/sha512sum.1
@@ -99,6 +99,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/shake128sum.1 b/shake128sum.1
index 59f0669..239b916 100644
--- a/shake128sum.1
+++ b/shake128sum.1
@@ -113,6 +113,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/shake256sum.1 b/shake256sum.1
index a870510..258879c 100644
--- a/shake256sum.1
+++ b/shake256sum.1
@@ -113,6 +113,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w
diff --git a/shake512sum.1 b/shake512sum.1
index 0f34822..89879a1 100644
--- a/shake512sum.1
+++ b/shake512sum.1
@@ -113,6 +113,28 @@ option is used.
.B no-recursive
The utility shall traverse directories.
(This is the default behaviour).
+.TP
+.B xdev
+Implies
+.B -W recursive
+but also allows the recursion across mountpoints.
+.TP
+.B no-xdev
+Disable recursion across mountpoints.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
+.TP
+.B xlink
+Implies
+.B -W recursive
+but also allows the recursion across symbolic links.
+.TP
+.B no-xlink
+Disable recursion across symbolic links.
+(This is the default behaviour).
+Note that this does not disable
+recursion by itself.
.RE
.TP
.B -w