aboutsummaryrefslogtreecommitdiff
path: root/jim-aio.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-09-17 10:13:38 +1000
committerSteve Bennett <steveb@workware.net.au>2011-09-24 14:55:46 +1000
commit0547bb3caec933de0f8239112994fc523d8481d0 (patch)
treef05229538b14ab549b403b64c55db0fa997f6074 /jim-aio.c
parentc84f5fcf6d341372c8dbb272f7069e3a14cd83a7 (diff)
downloadjimtcl-0547bb3caec933de0f8239112994fc523d8481d0.zip
jimtcl-0547bb3caec933de0f8239112994fc523d8481d0.tar.gz
jimtcl-0547bb3caec933de0f8239112994fc523d8481d0.tar.bz2
Simplify and minimise aio gets
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-aio.c')
-rw-r--r--jim-aio.c42
1 files changed, 18 insertions, 24 deletions
diff --git a/jim-aio.c b/jim-aio.c
index 6b912fd..7f2a22b 100644
--- a/jim-aio.c
+++ b/jim-aio.c
@@ -417,33 +417,30 @@ static int aio_cmd_gets(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
AioFile *af = Jim_CmdPrivData(interp);
char buf[AIO_BUF_LEN];
Jim_Obj *objPtr;
+ int len;
errno = 0;
objPtr = Jim_NewStringObj(interp, NULL, 0);
while (1) {
- int more = 0;
-
buf[AIO_BUF_LEN - 1] = '_';
if (fgets(buf, AIO_BUF_LEN, af->fp) == NULL)
break;
- if (buf[AIO_BUF_LEN - 1] == '\0' && buf[AIO_BUF_LEN - 2] != '\n')
- more = 1;
- if (more) {
+
+ if (buf[AIO_BUF_LEN - 1] == '\0' && buf[AIO_BUF_LEN - 2] != '\n') {
Jim_AppendString(interp, objPtr, buf, AIO_BUF_LEN - 1);
}
else {
- int len = strlen(buf);
-
- if (len) {
- int hasnl = (buf[len - 1] == '\n');
+ len = strlen(buf);
+ if (len && (buf[len - 1] == '\n')) {
/* strip "\n" */
- Jim_AppendString(interp, objPtr, buf, strlen(buf) - hasnl);
+ len--;
}
- }
- if (!more)
+
+ Jim_AppendString(interp, objPtr, buf, len);
break;
+ }
}
if (ferror(af->fp) && errno != EAGAIN && errno != EINTR) {
/* I/O error */
@@ -452,23 +449,20 @@ static int aio_cmd_gets(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
clearerr(af->fp);
return JIM_ERR;
}
- /* On EOF returns -1 if varName was specified, or the empty string. */
- if (feof(af->fp) && Jim_Length(objPtr) == 0) {
- Jim_FreeNewObj(interp, objPtr);
- if (argc) {
- Jim_SetResultInt(interp, -1);
- }
- return JIM_OK;
- }
- if (argc) {
- int totLen;
- Jim_GetString(objPtr, &totLen);
+ if (argc) {
if (Jim_SetVariable(interp, argv[0], objPtr) != JIM_OK) {
Jim_FreeNewObj(interp, objPtr);
return JIM_ERR;
}
- Jim_SetResultInt(interp, totLen);
+
+ len = Jim_Length(objPtr);
+
+ if (len == 0 && feof(af->fp)) {
+ /* On EOF returns -1 if varName was specified */
+ len = -1;
+ }
+ Jim_SetResultInt(interp, len);
}
else {
Jim_SetResult(interp, objPtr);