diff --git a/test/wasi/c/ftruncate.c b/test/wasi/c/ftruncate.c new file mode 100644 index 00000000000000..cf41802a01faf6 --- /dev/null +++ b/test/wasi/c/ftruncate.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +#define BASE_DIR "/tmp" +#define OUTPUT_DIR BASE_DIR "/testdir" +#define PATH OUTPUT_DIR "/output.txt" + +int main(void) { + struct stat st; + int fd; + + (void)st; + assert(0 == mkdir(OUTPUT_DIR, 0755)); + + fd = open(PATH, O_CREAT | O_WRONLY, 0666); + assert(fd != -1); + + /* Verify that the file is initially empty. */ + assert(0 == fstat(fd, &st)); + assert(st.st_size == 0); + assert(0 == lseek(fd, 0, SEEK_CUR)); + + /* Increase the file size using ftruncate(). */ + assert(0 == ftruncate(fd, 500)); + assert(0 == fstat(fd, &st)); + assert(st.st_size == 500); + assert(0 == lseek(fd, 0, SEEK_CUR)); + + /* Truncate the file using ftruncate(). */ + assert(0 == ftruncate(fd, 300)); + assert(0 == fstat(fd, &st)); + assert(st.st_size == 300); + assert(0 == lseek(fd, 0, SEEK_CUR)); + + assert(0 == close(fd)); + return 0; +} diff --git a/test/wasi/test-wasi.js b/test/wasi/test-wasi.js index e4bd44e83d186c..8ebc290d7b8269 100644 --- a/test/wasi/test-wasi.js +++ b/test/wasi/test-wasi.js @@ -71,6 +71,7 @@ if (process.argv[2] === 'wasi-child') { runWASI({ test: 'exitcode', exitCode: 120 }); runWASI({ test: 'fd_prestat_get_refresh' }); runWASI({ test: 'freopen', stdout: `hello from input2.txt${EOL}` }); + runWASI({ test: 'ftruncate' }); runWASI({ test: 'getentropy' }); // Tests that are currently unsupported on IBM i PASE. diff --git a/test/wasi/wasm/ftruncate.wasm b/test/wasi/wasm/ftruncate.wasm new file mode 100755 index 00000000000000..a16e90d98ddb28 Binary files /dev/null and b/test/wasi/wasm/ftruncate.wasm differ