blob: df94cd43f02cc2a98ac724576170e5b04ffebae1 [file] [log] [blame]
/*
* File I/O binding example.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "duktape.h"
static int fileio_readfile(duk_context *ctx) {
const char *filename = duk_to_string(ctx, 0);
FILE *f = NULL;
long len;
void *buf;
size_t got;
if (!filename) {
goto error;
}
f = fopen(filename, "rb");
if (!f) {
goto error;
}
if (fseek(f, 0, SEEK_END) != 0) {
goto error;
}
len = ftell(f);
if (fseek(f, 0, SEEK_SET) != 0) {
goto error;
}
buf = duk_push_fixed_buffer(ctx, (size_t) len);
got = fread(buf, 1, len, f);
if (got != (size_t) len) {
goto error;
}
fclose(f);
f = NULL;
return 1;
error:
if (f) {
fclose(f);
}
return DUK_RET_ERROR;
}
static duk_function_list_entry fileio_funcs[] = {
{ "readfile", fileio_readfile, 1 },
{ NULL, NULL, 0 }
};
void fileio_register(duk_context *ctx) {
/* Set global 'FileIo'. */
duk_push_global_object(ctx);
duk_push_object(ctx);
duk_put_function_list(ctx, -1, fileio_funcs);
duk_put_prop_string(ctx, -2, "FileIo");
duk_pop(ctx);
}