On Mon, Mar 07, 2016 at 11:32:02AM +0800, Fei Jie wrote: [...] > --- /dev/null > +++ b/tests/dup.c > @@ -0,0 +1,27 @@ > +#include "tests.h" > +#include <sys/syscall.h> > + > +#ifdef __NR_dup
I think you can safely assume that dup syscall is available
and use dup() wrapper from libc.
> --- /dev/null
> +++ b/tests/dup2.c
> @@ -0,0 +1,28 @@
> +#include "tests.h"
> +#include <sys/syscall.h>
> +
> +#ifdef __NR_dup2
> +
> +# include <errno.h>
> +# include <stdio.h>
> +# include <unistd.h>
> +
> +int
> +main(void)
> +{
> + const long int fd_old = (long int) 0xdeadbeefffffffff;
> + const long int fd_new = (long int) 0xdeadbeeffffffffe;
> + int rc = syscall(__NR_dup2, fd_old, fd_new);
> + printf("dup2(%d, %d) = %d %s (%m)\n",
> + (int)fd_old, (int)fd_new, rc,
The test for dup2 is fine, but please add space symbols after casts
consistently.
> --- /dev/null
> +++ b/tests/dup3.c
> @@ -0,0 +1,29 @@
> +#include "tests.h"
> +#include <sys/syscall.h>
> +
> +#ifdef __NR_dup3
> +
> +# include <errno.h>
> +# include <fcntl.h>
> +# include <stdio.h>
> +# include <unistd.h>
> +
> +int
> +main(void)
> +{
> + const long int fd_old = (long int) 0xdeadbeefffffffff;
> + const long int fd_new = (long int) 0xdeadbeeffffffffe;
> + int rc = syscall(__NR_dup3, fd_old, fd_new, O_CLOEXEC);
> + printf("dup3(%d, %d, O_CLOEXEC) = %d %s (%m)\n",
Since O_CLOEXEC is a relatively new flag, we have to test it before use,
see tests/userfaultfd.c as an example.
Note that <fcntl.h> has to be included before the test.
--
ldv
pgpFHY840L8_k.pgp
Description: PGP signature
------------------------------------------------------------------------------ Transform Data into Opportunity. Accelerate data analysis in your applications with Intel Data Analytics Acceleration Library. Click to learn more. http://makebettercode.com/inteldaal-eval
_______________________________________________ Strace-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/strace-devel
