[PATCH] tests: add fchmod.test

Dmitry V. Levin ldv at altlinux.org
Thu Mar 10 00:30:36 UTC 2016


On Thu, Mar 10, 2016 at 12:09:22AM +0000, Fabien Siron wrote:
> * tests/fchmod.c: New file.
> * tests/fchmod.test: New test.
> * tests/.gitignore: Add fchmod.
> * tests/Makefile.am (check_PROGRAMS): Likewise.
> (TESTS): Add fchmod.test.
> ---
>  tests/.gitignore  |  1 +
>  tests/Makefile.am |  2 ++
>  tests/fchmod.c    | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/fchmod.test | 11 ++++++++
>  4 files changed, 96 insertions(+)
>  create mode 100644 tests/fchmod.c
>  create mode 100755 tests/fchmod.test
> 
> diff --git a/tests/.gitignore b/tests/.gitignore
> index c6a94d8..f212fde 100644
> --- a/tests/.gitignore
> +++ b/tests/.gitignore
> @@ -25,6 +25,7 @@ execve-v
>  execveat
>  execveat-v
>  fanotify_mark
> +fchmod
>  fcntl
>  fcntl64
>  file_handle
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 92d3255..81b56e8 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -75,6 +75,7 @@ check_PROGRAMS = \
>  	execveat \
>  	execveat-v \
>  	fanotify_mark \
> +	fchmod \
>  	fcntl \
>  	fcntl64 \
>  	file_handle \
> @@ -239,6 +240,7 @@ TESTS = \
>  	execveat.test \
>  	execveat-v.test \
>  	fanotify_mark.test \
> +	fchmod.test \
>  	fcntl.test \
>  	fcntl64.test \
>  	file_handle.test \
> diff --git a/tests/fchmod.c b/tests/fchmod.c
> new file mode 100644
> index 0000000..192c8c3
> --- /dev/null
> +++ b/tests/fchmod.c
> @@ -0,0 +1,82 @@
> +/*
> + * Copyright (c) 2016 Fabien Siron <fabien.siron at epita.fr>
> + * 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 <sys/syscall.h>
> +
> +#if defined __NR_fchmod
> +
> +#include <fcntl.h>
> +#include <sys/stat.h>
> +#include <stdio.h>
> +#include <unistd.h>
> +#include <errno.h>
> +
> +int
> +main(void)
> +{
> +	static const char fname[] = "fchmod_test_file";
> +
> +	int fd = open(fname, O_CREAT|O_RDONLY, 0x400);

File access permissions are usually specified in octal form,
0x400 looks like a typo.

> +	if (fd == -1)
> +		perror_msg_and_fail("open");
> +
> +	int fchmod_res = syscall(__NR_fchmod, fd, 0600);
> +
> +	if (fchmod_res == 0) {
> +		printf("fchmod(%i, 0600) = 0\n", fd);

In strace we prefer to use %d instead of %i.

> +	} else {
> +		if (errno == ENOSYS) {
> +			printf("fchmod(%i, 0600) = -1 ENOSYS (%m)\n", fd);
> +		} else {
> +			perror_msg_and_fail("fchmod");
> +		}
> +	}
> +
> +	if (unlink(fname) == -1)
> +		perror_msg_and_fail("unlink");

Unlike chmod, fchmod doesn't need a file name, so you can unlink
the file as soon as you've got the descriptor.
This would open the way for further simplification of the test.


-- 
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20160310/d17f76eb/attachment.bin>


More information about the Strace-devel mailing list