summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2008-12-26 12:00:18 +0100
committerJim Meyering <meyering@redhat.com>2008-12-26 12:08:51 +0100
commit0c65638b0fe521a47e72f318edfb12c5b3b850f5 (patch)
tree86c0cbef89f4047592ef382a15ad9f334909d10b
parent5c065bb0cb979dff21c474c0ff45b0c9013791d4 (diff)
downloadcoreutils-0c65638b0fe521a47e72f318edfb12c5b3b850f5.tar.xz
maint: ensure dd's computation of O_FULLBLOCK uses all O_ symbol names
* src/dd.c (O_FULLBLOCK): Use a more uniform initializer, that makes it easier to extract all O_ symbol names. * maint.mk (syntax-check-rules): Also search for sc_ rules in cfg.mk. (sc_root_tests): Ensure that this rule sets $diff. * cfg.mk (sc_dd_O_FLAGS): New rule.
-rw-r--r--cfg.mk14
-rw-r--r--maint.mk4
-rw-r--r--src/dd.c3
3 files changed, 18 insertions, 3 deletions
diff --git a/cfg.mk b/cfg.mk
index 9de10cefe..7e08026ed 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -43,3 +43,17 @@ gnulib_dir = /gnulib
export VERBOSE = yes
old_NEWS_hash = e56dee27333ad86eaf0aa7ac7d04fca5 -
+
+# Ensure that the list of O_ symbols used to compute O_FULLBLOCK is complete.
+dd = $(srcdir)/src/dd.c
+sc_dd_O_FLAGS:
+ @rm -f $@.1 $@.2
+ @{ echo O_FULLBLOCK; perl -nle '/MAX \((O_\w*),/ and print $$1' \
+ $(dd); } | sort > $@.1
+ @{ echo O_NOFOLLOW; perl -nle '/{"[a-z]+",\s*(O_\w+)},/ and print $$1' \
+ $(dd); } | sort > $@.2
+ @diff -u $@.1 $@.2 || diff=1 || diff=; \
+ rm -f $@.1 $@.2; \
+ test "$$diff" \
+ && { echo '$(ME): $(dd) has inconsistent O_ flag lists'>&2; \
+ exit 1; } || :
diff --git a/maint.mk b/maint.mk
index 7a9649e10..82a526ce5 100644
--- a/maint.mk
+++ b/maint.mk
@@ -70,7 +70,7 @@ export LC_ALL = C
# Collect the names of rules starting with `sc_'.
syntax-check-rules := $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' \
- $(srcdir)/$(ME))
+ $(srcdir)/$(ME) $(srcdir)/cfg.mk)
.PHONY: $(syntax-check-rules)
local-checks-available = \
@@ -318,7 +318,7 @@ sc_root_tests:
$(srcdir)/tests/Makefile.am \
| sed 's/^ *//;/^root_tests =/d' \
| tr -s '\012\\' ' ' | fmt -1 | sort > $$t2; \
- diff -u $$t1 $$t2 || diff=1; \
+ diff -u $$t1 $$t2 || diff=1 || diff=; \
rm -f $$t1 $$t2; \
test "$$diff" \
&& { echo 'tests/Makefile.am: missing check-root action'>&2; \
diff --git a/src/dd.c b/src/dd.c
index 763961261..d683c5d67 100644
--- a/src/dd.c
+++ b/src/dd.c
@@ -279,7 +279,8 @@ enum
MAX (O_NOFOLLOW,
MAX (O_NOLINKS,
MAX (O_NONBLOCK,
- MAX (O_SYNC, O_TEXT))))))))))))) << 1)
+ MAX (O_SYNC,
+ MAX (O_TEXT, 0)))))))))))))) << 1)
};
/* Ensure that we didn't shift it off the end. */