Make build-many-glibcs.py re-exec itself if changed by checkout.
[glibc.git] / posix / tst-mmap-offset.c
blob53e78559c2c15a2fcbf22a6456edc08d467b183f
1 /* BZ #18877 mmap offset test.
3 Copyright (C) 2015-2016 Free Software Foundation, Inc.
4 This file is part of the GNU C Library.
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, see
18 <http://www.gnu.org/licenses/>. */
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string.h>
23 #include <unistd.h>
24 #include <sys/mman.h>
26 static int
27 printmsg (int rc, const char *msg)
29 printf ("%s failed: %m\n", msg);
30 return rc;
33 /* Check if negative offsets are handled correctly by mmap. */
34 static int
35 do_test (void)
37 const int prot = PROT_READ | PROT_WRITE;
38 const int flags = MAP_SHARED;
39 const unsigned long length = 0x10000;
40 const unsigned long offset = 0xace00000;
41 const unsigned long size = offset + length;
42 void *addr;
43 int fd;
44 char fname[] = "tst-mmap-offset-XXXXXX";
46 fd = mkstemp64 (fname);
47 if (fd < 0)
48 return printmsg (1, "mkstemp");
50 if (unlink (fname))
51 return printmsg (1, "unlink");
53 if (ftruncate64 (fd, size))
54 return printmsg (0, "ftruncate64");
56 addr = mmap (NULL, length, prot, flags, fd, offset);
57 if (MAP_FAILED == addr)
58 return printmsg (1, "mmap");
60 /* This memcpy is likely to SIGBUS if mmap has messed up with offset. */
61 memcpy (addr, fname, sizeof (fname));
63 return 0;
66 #define TEST_FUNCTION do_test ()
67 #include "../test-skeleton.c"