]> granicus.if.org Git - strace/commitdiff
tests: change text marker in fork-f and vfork-f tests
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 8 Jan 2016 00:44:04 +0000 (00:44 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 8 Jan 2016 02:45:05 +0000 (02:45 +0000)
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.

tests/fork-f.c
tests/fork-f.test
tests/vfork-f.c

index aee0c5e513fff6e46b055161bdb54af159569380..11ac3d970226694067ad70542ac21e8247aaabfd 100644 (file)
 #include <unistd.h>
 #include <sys/wait.h>
 
-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;
 }
index 8fdf062e49836d723d90beed5d8f5ad791444d87..07de2b0815f3d6b725d7f1c686fa3b4ff8422f97 100755 (executable)
@@ -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"
 
index 961141d6e9493f12462990bf387d140f114b798a..b14e4b49928fb557ab91ffb7a95f9d706b440ee4 100644 (file)
 #include <sys/wait.h>
 
 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;
 }