From: Eugene Syromyatnikov Date: Fri, 2 Feb 2018 16:21:22 +0000 (+0100) Subject: tests: check file name printing in strace -y mode X-Git-Tag: v4.22~137 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e196eebea44494a79e8ba39c005502f2069185fc;p=strace tests: check file name printing in strace -y mode * tests/fsync-y.c: New file. * tests/.gitignore: Add fsync-y. * tests/Makefile.am (check_PROGRAMS): Likewise. * tests/gen_tests.in (fsync-y): New test. Co-Authored-by: Dmitry V. Levin --- diff --git a/tests/.gitignore b/tests/.gitignore index e2f7c47f..430adca4 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -82,6 +82,7 @@ fstatat64 fstatfs fstatfs64 fsync +fsync-y ftruncate ftruncate64 futex diff --git a/tests/Makefile.am b/tests/Makefile.am index 493a7f97..e54ada7b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -101,6 +101,7 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \ execveat-v \ filter-unavailable \ fork-f \ + fsync-y \ getpid \ getppid \ gettid \ diff --git a/tests/fsync-y.c b/tests/fsync-y.c new file mode 100644 index 00000000..e4be87ec --- /dev/null +++ b/tests/fsync-y.c @@ -0,0 +1,71 @@ +/* + * Check printing of file name in strace -y mode. + * + * Copyright (c) 2018 The strace developers. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "tests.h" + +#include +#include +#include +#include + +int +main(void) +{ + char dir[PATH_MAX + 1]; + + const struct { + const char *path; + const char *cstr; + const char *fdstr; + } checks[] = { + { ARG_STR("\1\0020\v\0047\f\58\t\79\n\10\0171\r\0167\218\37 \\\'\"<<0::0>>1~\177\200\377"), + "\\1\\0020\\v\\0047\\f\\58\\t\\79\\n\\10\\0171\\r\\0167" + "\\218\\37 \\\\\'\\\"<<0::0>>1~\\177\\200\\377" }, + }; + + if (!getcwd(dir, sizeof(dir))) + perror_msg_and_fail("getcwd"); + + for (unsigned int i = 0; i < ARRAY_SIZE(checks); i++) { + long fd = open(checks[i].path, O_RDONLY|O_CREAT, 0600); + if (fd < 0) + perror_msg_and_fail("open(%s)", checks[i].cstr); + + int rc = fsync(fd); + + printf("fsync(%ld<", fd); + print_quoted_string_ex(dir, false); + printf("/%s>) = %s\n", checks[i].fdstr, sprintrc(rc)); + + close(fd); + } + + puts("+++ exited with 0 +++"); + return 0; +} diff --git a/tests/gen_tests.in b/tests/gen_tests.in index 57ed3fdc..6215e3dd 100644 --- a/tests/gen_tests.in +++ b/tests/gen_tests.in @@ -85,6 +85,7 @@ fstatat64 -a32 -v -P stat.sample -P /dev/full fstatfs -a18 fstatfs64 -a24 fsync -a10 +fsync-y -y -e trace=fsync ftruncate -a24 ftruncate64 -a36 futimesat -a28