aio recvfrom was not null terminating the result
[jimtcl.git] / jim-interactive.c
blob284630917ba6d5145defa7ab1c9df0a85989cf85
1 #include "jim.h"
2 #include <errno.h>
4 int Jim_InteractivePrompt(Jim_Interp *interp)
6 int retcode = JIM_OK;
7 Jim_Obj *scriptObjPtr;
9 printf("Welcome to Jim version %d.%d, "
10 "Copyright (c) 2005-8 Salvatore Sanfilippo" JIM_NL, JIM_VERSION / 100, JIM_VERSION % 100);
11 Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, "1");
12 while (1) {
13 char buf[1024];
14 const char *result;
15 int reslen;
17 if (retcode != 0) {
18 const char *retcodestr = Jim_ReturnCode(retcode);
20 if (*retcodestr == '?') {
21 printf("[%d] . ", retcode);
23 else {
24 printf("[%s] . ", retcodestr);
27 else
28 printf(". ");
29 fflush(stdout);
30 scriptObjPtr = Jim_NewStringObj(interp, "", 0);
31 Jim_IncrRefCount(scriptObjPtr);
32 while (1) {
33 const char *str;
34 char state;
35 int len;
37 errno = 0;
38 if (fgets(buf, 1024, stdin) == NULL) {
39 if (errno == EINTR) {
40 continue;
42 Jim_DecrRefCount(interp, scriptObjPtr);
43 goto out;
45 Jim_AppendString(interp, scriptObjPtr, buf, -1);
46 str = Jim_GetString(scriptObjPtr, &len);
47 if (Jim_ScriptIsComplete(str, len, &state))
48 break;
49 printf("%c> ", state);
50 fflush(stdout);
52 retcode = Jim_EvalObj(interp, scriptObjPtr);
53 Jim_DecrRefCount(interp, scriptObjPtr);
54 result = Jim_GetString(Jim_GetResult(interp), &reslen);
55 if (retcode == JIM_ERR) {
56 Jim_PrintErrorMessage(interp);
58 else if (retcode == JIM_EXIT) {
59 exit(Jim_GetExitCode(interp));
61 else {
62 if (reslen) {
63 printf("%s\n", result);
67 out:
68 return 0;