00001
00002
00003
00004 #include <string.h>
00005 #include <syscall.h>
00006 #include "tests/vm/sample.inc"
00007 #include "tests/lib.h"
00008 #include "tests/main.h"
00009
00010 void
00011 test_main (void)
00012 {
00013 static const char overwrite[] = "Now is the time for all good...";
00014 static char buffer[sizeof sample - 1];
00015 char *actual = (char *) 0x54321000;
00016 int handle;
00017 mapid_t map;
00018
00019
00020 CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
00021 CHECK ((map = mmap (handle, actual)) != MAP_FAILED, "mmap \"sample.txt\"");
00022 if (memcmp (actual, sample, strlen (sample)))
00023 fail ("read of mmap'd file reported bad data");
00024
00025
00026 CHECK (write (handle, overwrite, strlen (overwrite))
00027 == (int) strlen (overwrite),
00028 "write \"sample.txt\"");
00029
00030
00031
00032 msg ("munmap \"sample.txt\"");
00033 munmap (map);
00034
00035
00036 msg ("seek \"sample.txt\"");
00037 seek (handle, 0);
00038 CHECK (read (handle, buffer, sizeof buffer) == sizeof buffer,
00039 "read \"sample.txt\"");
00040
00041
00042 if (memcmp (buffer, overwrite, strlen (overwrite))
00043 || memcmp (buffer + strlen (overwrite), sample + strlen (overwrite),
00044 strlen (sample) - strlen (overwrite)))
00045 {
00046 if (!memcmp (buffer, sample, strlen (sample)))
00047 fail ("munmap wrote back clean page");
00048 else
00049 fail ("read surprising data from file");
00050 }
00051 else
00052 msg ("file change was retained after munmap");
00053 }