]> granicus.if.org Git - strace/commitdiff
Filter out redundant ioctl entries early
authorDmitry V. Levin <ldv@altlinux.org>
Mon, 3 Nov 2014 20:14:31 +0000 (20:14 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 4 Nov 2014 03:13:36 +0000 (03:13 +0000)
For two ioctl entries with the same code, if one's name is a prefix
to another's name, keep the entry with a shorter name.  Filter out
redundant ioctl entries at ioctlsort stage so that distributed
ioctlent.h.in files will be already filtered.

* linux/ioctlsort.c (is_not_prefix): New function.
(main): Use it.
* linux/ioctlent-filter.awk: Remove.
* Makefile.am (EXTRA_DIST): Remove linux/ioctlent-filter.awk.
($(ioctlent_h)): Don't use linux/ioctlent-filter.awk.

Makefile.am
linux/ioctlent-filter.awk [deleted file]
linux/ioctlsort.c

index 703f4da16b2e5d99869537971857f2b605b3ebad..fa6e73e6e2ac7886a04a1ed0443fdf092d192394 100644 (file)
@@ -127,7 +127,6 @@ EXTRA_DIST =                                \
        linux/ia64/syscallent.h         \
        linux/inet_diag.h               \
        linux/inotify.h                 \
-       linux/ioctlent-filter.awk       \
        linux/ioctlent.h.in             \
        linux/ioctlent.sh               \
        linux/ioctlsort.c               \
@@ -316,5 +315,4 @@ $(ioctlent_h): $(top_builddir)/config.status $(ioctlent_h_deps)
        $(MKDIR_P) $(builddir)/$(OS)
        cat $(ioctlent_h_deps) | \
                $(COMPILE) -E -P - | \
-               LC_ALL=C sort -u -k3,3 -k2,2 | \
-               awk -f $(srcdir)/linux/ioctlent-filter.awk > $@
+               LC_ALL=C sort -u -k3,3 -k2,2 > $@
diff --git a/linux/ioctlent-filter.awk b/linux/ioctlent-filter.awk
deleted file mode 100644 (file)
index 181c4bf..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/awk -f
-# Filter out redundant "*32" symbols.
-
-BEGIN {
-       s=""
-       c=""
-}
-
-NF == 3 && $2 ~ /^"[^",]*",$/ {
-       if ($2 == s && $3 == c)
-               next
-       s = $2
-       sub(/",$/, "32\",", s)
-       c = $3
-}
-
-{
-       print
-}
index dab30f1265c7c0fb223251c8fa1d5966ef632fec..393b534952ffcfab0f718fcb83643d260761f36c 100644 (file)
@@ -30,6 +30,14 @@ int compare(const void* a, const void* b) {
        return (code1 > code2) ? 1 : (code1 < code2) ? -1 : strcmp(name1, name2);
 }
 
+static int is_not_prefix(const char *s1, const char *s2) {
+       size_t len = strlen(s1);
+
+       if (len > strlen(s2))
+               return 1;
+       return memcmp(s1, s2, len);
+}
+
 int main(int argc, char** argv) {
        int i;
 
@@ -41,8 +49,8 @@ int main(int argc, char** argv) {
        qsort(ioctls, nioctls, sizeof(ioctls[0]), compare);
        puts("\t/* Generated by ioctlsort */");
        for (i = 0; i < nioctls; i++)
-               if (i == 0 || ioctls[i].code != ioctls[i-1].code ||
-                   strcmp(ioctls[i].name, ioctls[i-1].name))
+               if (i == 0 || ioctls[i-1].code != ioctls[i].code ||
+                   is_not_prefix(ioctls[i-1].name, ioctls[i].name))
                        printf("\t{\"%s\",\t\"%s\",\t%#06lx},\n",
                                ioctls[i].header, ioctls[i].name, ioctls[i].code);