From: Dmitry V. Levin Date: Fri, 8 Jan 2016 00:44:04 +0000 (+0000) Subject: tests: change text marker in fork-f and vfork-f tests X-Git-Tag: v4.12~674 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6833d61090eb7381f200c92f6d59748c8e410a8a;p=strace tests: change text marker in fork-f and vfork-f tests Use chdir syscalls instead of pwrite64 syscalls as a method of inserting text markers into strace output because the former are more portable. * tests/fork-f.c (logit): Rename to logit_. Use chdir instead of pwrite. (logit): New macro wrapper around logit_. (main): Update expected output. * tests/vfork-f.c: Likewise. * tests/fork-f.test: Update. --- diff --git a/tests/fork-f.c b/tests/fork-f.c index aee0c5e5..11ac3d97 100644 --- a/tests/fork-f.c +++ b/tests/fork-f.c @@ -32,24 +32,27 @@ #include #include -static int -logit(const char *const str) +static inline int +logit_(const char *const str) { - return pwrite(-1, str, strlen(str), 0) >= 0; + return !chdir(str); } -int main(int ac, char **av, char **ep) +#define prefix "fork-f." +#define logit(arg) logit_(prefix arg) + +int main(int ac, char **av) { if (ac < 1) return 1; if (ac > 1) - return logit(av[1]); + return logit("exec"); logit("start"); - int fds[2]; + int child_wait_fds[2]; (void) close(0); - if (pipe(fds)) + if (pipe(child_wait_fds)) perror_msg_and_fail("pipe"); pid_t pid = fork(); @@ -58,12 +61,12 @@ int main(int ac, char **av, char **ep) perror_msg_and_fail("fork"); if (!pid) { - close(fds[1]); + close(child_wait_fds[1]); - if (read(0, fds, sizeof(int))) + if (read(0, child_wait_fds, sizeof(int))) _exit(2); - char *const args[] = { av[0], (char *) "exec", NULL }; + char *const args[] = { av[0], (char *) "", NULL }; if (logit("child") || execve(args[0], args, args + 1)) _exit(2); } @@ -71,21 +74,24 @@ int main(int ac, char **av, char **ep) close(0); logit("parent"); - close(fds[1]); + close(child_wait_fds[1]); int status; assert(wait(&status) == pid); assert(status == 0); + pid_t ppid = getpid(); logit("finish"); - pid_t ppid = getpid(); - close(-1); - printf("%-5d pwrite64(-1, \"start\", 5, 0) = -1 EBADF (%m)\n" - "%-5d pwrite64(-1, \"parent\", 6, 0) = -1 EBADF (%m)\n" - "%-5d pwrite64(-1, \"child\", 5, 0) = -1 EBADF (%m)\n" - "%-5d pwrite64(-1, \"exec\", 4, 0) = -1 EBADF (%m)\n" - "%-5d pwrite64(-1, \"finish\", 6, 0) = -1 EBADF (%m)\n", - ppid, ppid, pid, pid, ppid); + printf("%-5d chdir(\"%sstart\") = -1 ENOENT (%m)\n" + "%-5d chdir(\"%sparent\") = -1 ENOENT (%m)\n" + "%-5d chdir(\"%schild\") = -1 ENOENT (%m)\n" + "%-5d chdir(\"%sexec\") = -1 ENOENT (%m)\n" + "%-5d chdir(\"%sfinish\") = -1 ENOENT (%m)\n", + ppid, prefix, + ppid, prefix, + pid, prefix, + pid, prefix, + ppid, prefix); return 0; } diff --git a/tests/fork-f.test b/tests/fork-f.test index 8fdf062e..07de2b08 100755 --- a/tests/fork-f.test +++ b/tests/fork-f.test @@ -6,7 +6,7 @@ run_prog > /dev/null OUT="$LOG.out" -run_strace -a32 -qq -f -epwrite64 -esignal=none $args > "$OUT" +run_strace -a26 -qq -f -echdir -esignal=none $args > "$OUT" match_diff "$LOG" "$OUT" rm -f "$OUT" diff --git a/tests/vfork-f.c b/tests/vfork-f.c index 961141d6..b14e4b49 100644 --- a/tests/vfork-f.c +++ b/tests/vfork-f.c @@ -34,19 +34,22 @@ #include static inline int -logit(const char *const str) +logit_(const char *const str) { - return pwrite(-1, str, strlen(str), 0) >= 0; + return !chdir(str); } -int main(int ac, char **av, char **ep) +#define prefix "vfork-f." +#define logit(arg) logit_(prefix arg) + +int main(int ac, char **av) { if (ac < 1) return 1; if (ac > 1) { if (read(0, &ac, sizeof(int))) return 2; - return logit(av[1]); + return logit("exec"); } logit("start"); @@ -66,7 +69,7 @@ int main(int ac, char **av, char **ep) if (fcntl(parent_wait_fds[1], F_SETFD, FD_CLOEXEC)) perror_msg_and_fail("fcntl"); - char *const args[] = { av[0], (char *) "exec", NULL }; + char *const args[] = { av[0], (char *) "", NULL }; pid_t pid = vfork(); if (pid < 0) @@ -89,15 +92,18 @@ int main(int ac, char **av, char **ep) assert(wait(&status) == pid); assert(status == 0); + pid_t ppid = getpid(); logit("finish"); - pid_t ppid = getpid(); - close(-1); - printf("%-5d pwrite64(-1, \"start\", 5, 0) = -1 EBADF (%m)\n" - "%-5d pwrite64(-1, \"child\", 5, 0) = -1 EBADF (%m)\n" - "%-5d pwrite64(-1, \"parent\", 6, 0) = -1 EBADF (%m)\n" - "%-5d pwrite64(-1, \"exec\", 4, 0) = -1 EBADF (%m)\n" - "%-5d pwrite64(-1, \"finish\", 6, 0) = -1 EBADF (%m)\n", - ppid, pid, ppid, pid, ppid); + printf("%-5d chdir(\"%sstart\") = -1 ENOENT (%m)\n" + "%-5d chdir(\"%schild\") = -1 ENOENT (%m)\n" + "%-5d chdir(\"%sparent\") = -1 ENOENT (%m)\n" + "%-5d chdir(\"%sexec\") = -1 ENOENT (%m)\n" + "%-5d chdir(\"%sfinish\") = -1 ENOENT (%m)\n", + ppid, prefix, + pid, prefix, + ppid, prefix, + pid, prefix, + ppid, prefix); return 0; }