aboutsummaryrefslogtreecommitdiff
path: root/jim-aio.c
diff options
context:
space:
mode:
authorantirez <antirez>2005-03-05 21:11:24 +0000
committerantirez <antirez>2005-03-05 21:11:24 +0000
commit14f723c4d8e7eeeb8fee0f7df7666440d50b9203 (patch)
tree673c6aa7df59bf9d192d07c244c7a351864bce6d /jim-aio.c
parent4506024d028cf2727e92fc42f996d97c103e787d (diff)
downloadjimtcl-14f723c4d8e7eeeb8fee0f7df7666440d50b9203.zip
jimtcl-14f723c4d8e7eeeb8fee0f7df7666440d50b9203.tar.gz
jimtcl-14f723c4d8e7eeeb8fee0f7df7666440d50b9203.tar.bz2
more AIO file methods.
Diffstat (limited to 'jim-aio.c')
-rw-r--r--jim-aio.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/jim-aio.c b/jim-aio.c
index ea66fa1..d0b0c3e 100644
--- a/jim-aio.c
+++ b/jim-aio.c
@@ -1,7 +1,7 @@
/* Jim - ANSI I/O extension
* Copyright 2005 Salvatore Sanfilippo <antirez@invece.org>
*
- * $Id: jim-aio.c,v 1.2 2005/03/05 18:51:50 antirez Exp $
+ * $Id: jim-aio.c,v 1.3 2005/03/05 21:11:24 antirez Exp $
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -69,6 +69,7 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc,
/* SEEK */
int orig = SEEK_SET;
long offset;
+
if (argc != 3 && argc != 4) {
Jim_WrongNumArgs(interp, 2, argv, "offset ?origin?");
return JIM_ERR;
@@ -95,6 +96,17 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc,
return JIM_ERR;
}
return JIM_OK;
+ } else if (Jim_CompareStringImmediate(interp, argv[1], "tell")) {
+ /* TELL */
+ long position;
+
+ if (argc != 2) {
+ Jim_WrongNumArgs(interp, 2, argv, "");
+ return JIM_ERR;
+ }
+ position = ftell(af->fp);
+ Jim_SetResult(interp, Jim_NewIntObj(interp, position));
+ return JIM_OK;
} else if (Jim_CompareStringImmediate(interp, argv[1], "gets")) {
/* GETS */
char buf[AIO_BUF_LEN];
@@ -150,11 +162,39 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc,
Jim_SetResult(interp, objPtr);
}
return JIM_OK;
+ } else if (Jim_CompareStringImmediate(interp, argv[1], "puts")) {
+ /* PUTS */
+ unsigned int wlen;
+ const char *wdata;
+
+ if (argc != 3 && (argc != 4 || !Jim_CompareStringImmediate(
+ interp, argv[2], "-nonewline"))) {
+ Jim_WrongNumArgs(interp, 2, argv, "?-nonewline? string");
+ return JIM_ERR;
+ }
+ wdata = Jim_GetString(argv[2+(argc==4)], &wlen);
+ if (fwrite(wdata, 1, wlen, af->fp) != wlen ||
+ (argc == 3 && fwrite("\n", 1, 1, af->fp) != 1)) {
+ JimAioSetError(interp);
+ return JIM_ERR;
+ }
+ return JIM_OK;
+ } else if (Jim_CompareStringImmediate(interp, argv[1], "flush")) {
+ /* FLUSH */
+ if (argc != 2) {
+ Jim_WrongNumArgs(interp, 2, argv, "");
+ return JIM_ERR;
+ }
+ if (fflush(af->fp) == EOF) {
+ JimAioSetError(interp);
+ return JIM_ERR;
+ }
+ return JIM_OK;
} else {
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
Jim_AppendStrings(interp, Jim_GetResult(interp),
"Invalid option for AIO file, should be: "
- "close, gets, read, puts, seek, tell", NULL);
+ "close, flush, gets, read, puts, seek, tell", NULL);
return JIM_ERR;
}
}