aboutsummaryrefslogtreecommitdiff
path: root/jim-aio.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-05-31 20:28:57 +1000
committerSteve Bennett <steveb@workware.net.au>2011-06-10 14:00:34 +1000
commitc46fde880b6d3f9eef24e8dd1ab7bc3f6a8a0f18 (patch)
treecec487099b56288a73528ae30ec5855cefefdc91 /jim-aio.c
parentf2524e6687ac64d1e1a6bbaa9d07c30236b61df1 (diff)
downloadjimtcl-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.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/jim-aio.c b/jim-aio.c
index 1e295ed..e5e8898 100644
--- a/jim-aio.c
+++ b/jim-aio.c
@@ -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?",