blob: 35f82f84edafd9ee50a54e300dcdc66e9978bc9e [file]
/*
* Copyright 2011 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 <stdio.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int main() {
struct stat s;
int f = open("/test", O_RDWR, 0777);
assert(f);
int err = posix_fadvise(f, 3, 2, POSIX_FADV_DONTNEED);
printf("posix_fadvise: %d\n", err);
assert(err == 0);
printf("\n");
err = posix_fallocate(f, 3, 2);
printf("posix_fallocate: %d\n", err);
assert(err == 0);
printf("errno: %d\n", errno);
stat("/test", &s);
assert(s.st_size == 6);
memset(&s, 0, sizeof s);
printf("\n");
err = posix_fallocate(f, 3, 7);
printf("posix_fallocate 2: %d\n", err);
assert(err == 0);
stat("/test", &s);
printf("st_size: %lld\n", s.st_size);
printf("\n");
err = posix_fallocate(f, -1, 7);
printf("posix_fallocate 3: %s\n", strerror(err));
err = posix_fallocate(f, 3, -1);
printf("posix_fallocate 4: %s\n", strerror(err));
// Values over 2^53 are not representable in JS and
// should result in EFBIG.
err = posix_fallocate(f, 1, 0x00ffffffffffffff);
printf("posix_fallocate 5: %s\n", strerror(err));
assert(err == EFBIG);
err = posix_fallocate(f, 0x00ffffffffffffff, 1);
printf("posix_fallocate 6: %s\n", strerror(err));
assert(err == EFBIG);
// 2^53 is representable but too large for a MEMFS file.
err = posix_fallocate(f, (off_t)1 << 53, 1);
printf("posix_fallocate 7: %s\n", strerror(err));
assert(err == EFBIG);
return 0;
}