1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
/*
* Copyright 2019 The Emscripten Authors. All rights reserved.
* Emscripten is available under two separate licenses, the MIT license and the
* University of Illinois/NCSA Open Source License. Both these licenses can be
* found in the LICENSE file.
*/
#include <assert.h>
#include <errno.h>
#include <limits.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <unistd.h>
#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#endif
#define FNAME_RO "data_ro.dat"
#define FNAME_RW "data_rw.dat"
/*
* Each test will return 0 as success (no error) and error code in case of failure:
* - > 0 it is errno value
* - < 0 test specific failure (not related to any syscall)
*/
#define ASSERT(cond, msg) do { \
if (!(cond)) { \
printf("%s:%03d FAILED '%s' - %s errno: %d\n", \
__func__, __LINE__, #cond, msg, errno); \
return (errno != 0 ? errno : -1); \
} \
} while (0)
#define TEST_START() printf("%s - START\n", __func__)
#define TEST_PASS() do { \
printf("%s - PASSED\n", __func__); \
return 0; \
} while (0)
const char file_data[] =
"Copyright 2019 The Emscripten Authors. All rights reserved.\n"
"Emscripten is available under two separate licenses, the MIT license and the\n"
"University of Illinois/NCSA Open Source License. Both these licenses can be\n"
"found in the LICENSE file.\n";
FILE *f_ro = NULL;
FILE *f_rw = NULL;
// Length of the file data excluding trailing '\0'. Equivalent to strlen(file_data) .
size_t file_len() {
return sizeof(file_data) - 1;
}
int test_mmap_anon() {
TEST_START();
errno = 0;
void *m = (char *)mmap(NULL, file_len(), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
ASSERT(m != MAP_FAILED, "Failed to mmap pages");
ASSERT(munmap(m, file_len()) == 0, "Failed to unmmap allocated pages");
TEST_PASS();
}
typedef int (*test_fn)();
int main() {
int failures = 0;
test_fn tests[] = {
test_mmap_anon,
NULL
};
int tests_run = 0;
while (tests[tests_run] != NULL) {
failures += (tests[tests_run]() != 0 ? 1 : 0);
++tests_run;
}
printf("tests_run: %d\n", tests_run);
printf("failures: %d\n", failures);
return failures;
}
|