diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-05-31 20:28:57 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-06-10 14:00:34 +1000 |
commit | c46fde880b6d3f9eef24e8dd1ab7bc3f6a8a0f18 (patch) | |
tree | cec487099b56288a73528ae30ec5855cefefdc91 /jim-aio.c | |
parent | f2524e6687ac64d1e1a6bbaa9d07c30236b61df1 (diff) | |
download | jimtcl-c46fde880b6d3f9eef24e8dd1ab7bc3f6a8a0f18.zip jimtcl-c46fde880b6d3f9eef24e8dd1ab7bc3f6a8a0f18.tar.gz jimtcl-c46fde880b6d3f9eef24e8dd1ab7bc3f6a8a0f18.tar.bz2 |
Add aio support for buffering
And fconfigure for Tcl compatibility
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-aio.c')
-rw-r--r-- | jim-aio.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -715,6 +715,41 @@ static int aio_cmd_ndelay(Jim_Interp *interp, int argc, Jim_Obj *const *argv) } #endif +static int aio_cmd_buffering(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + AioFile *af = Jim_CmdPrivData(interp); + + static const char *options[] = { + "none", + "line", + "full", + NULL + }; + enum + { + OPT_NONE, + OPT_LINE, + OPT_FULL, + }; + int option; + + if (Jim_GetEnum(interp, argv[0], options, &option, NULL, JIM_ERRMSG) != JIM_OK) { + return JIM_ERR; + } + switch (option) { + case OPT_NONE: + setvbuf(af->fp, NULL, _IONBF, 0); + break; + case OPT_LINE: + setvbuf(af->fp, NULL, _IOLBF, BUFSIZ); + break; + case OPT_FULL: + setvbuf(af->fp, NULL, _IOFBF, BUFSIZ); + break; + } + return JIM_OK; +} + #ifdef jim_ext_eventloop static void JimAioFileEventFinalizer(Jim_Interp *interp, void *clientData) { @@ -874,6 +909,13 @@ static const jim_subcmd_type aio_command_table[] = { .description = "Set O_NDELAY (if arg). Returns current/new setting." }, #endif + { .cmd = "buffering", + .args = "none|line|full", + .function = aio_cmd_buffering, + .minargs = 1, + .maxargs = 1, + .description = "Sets buffering" + }, #ifdef jim_ext_eventloop { .cmd = "readable", .args = "?readable-script?", |