* ustat.c: New file. * Makefile.am (strace_SOURCES): Add it. * linux/dummy.h: Remove. * tests/ustat.c: New file. * tests/ustat.test: New test. * tests/.gitignore: Add ustat. * tests/Makefile.am (check_PROGRAMS): Likewise. (DECODER_TESTS): Add ustat.test. --- Makefile.am | 1 + linux/dummy.h | 1 - tests/.gitignore | 1 + tests/Makefile.am | 2 ++ tests/ustat.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/ustat.test | 6 ++++++ ustat.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 tests/ustat.c create mode 100755 tests/ustat.test create mode 100644 ustat.c
diff --git a/Makefile.am b/Makefile.am index 0e157db..37c9ff7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -247,6 +247,7 @@ strace_SOURCES = \ umount.c \ uname.c \ userfaultfd.c \ + ustat.c \ util.c \ utime.c \ utimes.c \ diff --git a/linux/dummy.h b/linux/dummy.h index 0aee35b..2758cfb 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -156,7 +156,6 @@ #define sys_timerfd printargs #define sys_tuxcall printargs #define sys_ulimit printargs -#define sys_ustat printargs #define sys_vserver printargs /* deprecated */ diff --git a/tests/.gitignore b/tests/.gitignore index 3270176..49061b2 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -351,6 +351,7 @@ unlink unlinkat unshare userfaultfd +ustat utime utimensat utimes diff --git a/tests/Makefile.am b/tests/Makefile.am index 57dd8b9..ceeccd8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -414,6 +414,7 @@ check_PROGRAMS = \ utime \ utimensat \ utimes \ + ustat \ vfork-f \ vhangup \ vmsplice \ @@ -796,6 +797,7 @@ DECODER_TESTS = \ utime.test \ utimensat.test \ utimes.test \ + ustat.test \ vhangup.test \ vmsplice.test \ wait4.test \ diff --git a/tests/ustat.c b/tests/ustat.c new file mode 100644 index 0000000..df58879 --- /dev/null +++ b/tests/ustat.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 JingPiao Chen <chenjingp...@gmail.com> + * 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 <asm/unistd.h> + +#ifdef __NR_ustat + +#include <stdio.h> +#include <unistd.h> +#include <ustat.h> + +int +main(void) +{ + struct ustat ust; + + long rc = syscall(__NR_ustat, -1, 0); + printf("ustat(makedev(%u, %u), NULL) = %s\n", major((unsigned int) -1), + minor((unsigned int) -1), sprintrc(rc)); + + rc = syscall(__NR_ustat, -1, &ust); + printf("ustat(makedev(%u, %u), %p) = %s\n", major((unsigned int) -1), + minor((unsigned int) -1), &ust, sprintrc(rc)); + + puts("+++ exited with 0 +++"); + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_ustat") + +#endif diff --git a/tests/ustat.test b/tests/ustat.test new file mode 100755 index 0000000..71d9a1b --- /dev/null +++ b/tests/ustat.test @@ -0,0 +1,6 @@ +#!/bin/sh + +# Check ustat syscall decoding. + +. "${srcdir=.}/init.sh" +run_strace_match_diff -a25 diff --git a/ustat.c b/ustat.c new file mode 100644 index 0000000..d8d0160 --- /dev/null +++ b/ustat.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2017 JingPiao Chen <chenjingp...@gmail.com> + * 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 "defs.h" +#include <ustat.h> + +SYS_FUNC(ustat) +{ + if (entering(tcp)) + print_dev_t(tcp->u_arg[0]); + else { + struct ustat ust; + + tprints(", "); + if (umoven_or_printaddr(tcp, tcp->u_arg[1], sizeof(ust), &ust)) + return 0; + tprintf("{f_tfree=%lld, f_tinode=%llu", + sign_extend_unsigned_to_ll(ust.f_tfree)); + zero_extend_signed_to_ull(ust.f_tinode), + tprints(", f_fname="); + print_quoted_string(ust.f_fname, sizeof(ust.f_fname), + QUOTE_0_TERMINATED); + tprints(", f_fpack="); + print_quoted_string(ust.f_fpack, sizeof(ust.f_fpack), + QUOTE_0_TERMINATED); + tprints("}"); + } + + return 0; +} -- 2.7.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel