]> granicus.if.org Git - strace/blob - tests/getdents.awk
c230e26734b34c3bda1cdb366f20f691e4d61274
[strace] / tests / getdents.awk
1 BEGIN {
2   lines = 3
3   fail = 0
4
5   i = "[0-9]+"
6   len = "[1-9]" i
7
8   d_ino = "d_ino=" i
9   d_off = "d_off=" i
10   d_reclen = "d_reclen=" len
11   d_name_1 = "d_name=\"\\.\""
12   d_name_2 = "d_name=\"\\.\\.\""
13   d_name_3 = "d_name=\"(A\\\\n){127}Z\""
14   # Some older systems might not pass back d_type at all like Alpha.
15   d_type_dir = "d_type=DT_(DIR|UNKNOWN)"
16   d_type_reg = "d_type=DT_(REG|UNKNOWN)"
17
18   dirent_1   = "\\{" d_ino ", " d_off ", " d_reclen ", " d_name_1 ", " d_type_dir "\\}"
19   dirent_2   = "\\{" d_ino ", " d_off ", " d_reclen ", " d_name_2 ", " d_type_dir "\\}"
20   dirent_3   = "\\{" d_ino ", " d_off ", " d_reclen ", " d_name_3 ", " d_type_reg "\\}"
21
22   dirent64_1 = "\\{" d_ino ", " d_off ", " d_reclen ", " d_type_dir ", " d_name_1 "\\}"
23   dirent64_2 = "\\{" d_ino ", " d_off ", " d_reclen ", " d_type_dir ", " d_name_2 "\\}"
24   dirent64_3 = "\\{" d_ino ", " d_off ", " d_reclen ", " d_type_reg ", " d_name_3 "\\}"
25
26   d_123 = dirent_1 " " dirent_2 " " dirent_3
27   d_213 = dirent_2 " " dirent_1 " " dirent_3
28   d_132 = dirent_1 " " dirent_3 " " dirent_2
29   d_321 = dirent_3 " " dirent_2 " " dirent_1
30   d_231 = dirent_2 " " dirent_3 " " dirent_1
31   d_312 = dirent_3 " " dirent_1 " " dirent_2
32
33   d64_123 = dirent64_1 " " dirent64_2 " " dirent64_3
34   d64_213 = dirent64_2 " " dirent64_1 " " dirent64_3
35   d64_132 = dirent64_1 " " dirent64_3 " " dirent64_2
36   d64_321 = dirent64_3 " " dirent64_2 " " dirent64_1
37   d64_231 = dirent64_2 " " dirent64_3 " " dirent64_1
38   d64_312 = dirent64_3 " " dirent64_1 " " dirent64_2
39
40   dents = "\\{(" d_123 "|" d_213 "|" d_132 "|" d_321 "|" d_231 "|" d_312 ")\\}"
41   dents64 = "\\{(" d64_123 "|" d64_213 "|" d64_132 "|" d64_321 "|" d64_231 "|" d64_312 ")\\}"
42
43   getdents   =   "^getdents\\(" i ", " dents   ", " len "\\) += " len "$"
44   getdents64 = "^getdents64\\(" i ", " dents64 ", " len "\\) += " len "$"
45 }
46
47 NR == 1 {if (match($0, getdents) || match($0, getdents64)) next}
48
49 NR == 2 && /^getdents(64)?\([0-9]+, \{\}, [1-9][0-9]+\) += 0$/ {next}
50
51 NR == lines && /^\+\+\+ exited with 0 \+\+\+$/ {next}
52
53 {
54   print "Line " NR " does not match: " $0
55   fail=1
56 }
57
58 END {
59   if (NR != lines) {
60     print "Expected " lines " lines, found " NR " line(s)."
61     print ""
62     exit 1
63   }
64   if (fail) {
65     print ""
66     exit 1
67   }
68 }