|
|
1.1 ! root 1: /* ! 2: #notarget: cris*-*-elf ! 3: */ ! 4: ! 5: #define _GNU_SOURCE ! 6: #include <string.h> ! 7: #include <stdlib.h> ! 8: #include <stdio.h> ! 9: #include <sys/types.h> ! 10: #include <sys/stat.h> ! 11: #include <fcntl.h> ! 12: #include <unistd.h> ! 13: #include <sys/mman.h> ! 14: ! 15: int main (int argc, char *argv[]) ! 16: { ! 17: int fd = open (argv[0], O_RDONLY); ! 18: struct stat sb; ! 19: int size; ! 20: void *a; ! 21: const char *str = "a string you'll only find in the program"; ! 22: ! 23: if (fd == -1) ! 24: { ! 25: perror ("open"); ! 26: abort (); ! 27: } ! 28: ! 29: if (fstat (fd, &sb) < 0) ! 30: { ! 31: perror ("fstat"); ! 32: abort (); ! 33: } ! 34: ! 35: size = sb.st_size; ! 36: ! 37: /* We want to test mmapping a size that isn't exactly a page. */ ! 38: if ((size & 8191) == 0) ! 39: size--; ! 40: ! 41: a = mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); ! 42: ! 43: if (memmem (a, size, str, strlen (str) + 1) == NULL) ! 44: abort (); ! 45: ! 46: printf ("pass\n"); ! 47: exit (0); ! 48: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.