diff options
-rw-r--r-- | Makefile.in | 4 | ||||
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | jim-aio.c | 22 | ||||
-rw-r--r-- | jim-exec.c | 5 | ||||
-rw-r--r-- | jim-file.c | 5 | ||||
-rw-r--r-- | jim-package.c | 9 | ||||
-rw-r--r-- | jim.c | 4 |
7 files changed, 37 insertions, 18 deletions
diff --git a/Makefile.in b/Makefile.in index 26e61ea..4081dc8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -23,8 +23,11 @@ SDKHDRS := jim.h jim-subcmd.h EXTENSIONS_OBJS := $(patsubst %,jim-%.o,$(EXTENSIONS)) +.PRECIOUS: jim-%.c + # Create C extensions from pure Tcl extensions jim-%.c: %.tcl + echo $@ >>.clean tclsh make-c-ext $*.tcl # Emulate tinytcl @@ -56,3 +59,4 @@ install: clean: rm -f *.o lib*.a $(TARGETS) load_extensions.c + if [ -f .clean ]; then rm -f `cat .clean` .clean; fi diff --git a/configure.ac b/configure.ac index 11f792e..9f7be8b 100644 --- a/configure.ac +++ b/configure.ac @@ -27,7 +27,7 @@ AC_ARG_WITH(jim-ext, [ if test "x$withval" != "xno" ; then if test "x$withval" = "xall" ; then - jim_extensions="tcl6 glob array aio clock eventloop exec file posix regexp signal" + jim_extensions="package readdir glob array clock exec file posix regexp signal tcl6 eventloop aio" else jim_extensions="$withval" fi @@ -35,8 +35,10 @@ AC_ARG_WITH(jim-ext, ] ) AC_MSG_RESULT(enabling jim extensions: $jim_extensions) +AC_SUBST(JIM_EXTENSIONS,$jim_extensions) for i in $jim_extensions; do - AC_SUBST(JIM_EXTENSIONS,$jim_extensions) + dnl AC_DEFINE_UNQUOTED(with_jim_ext_$i) + EXTRA_CFLAGS="$EXTRA_CFLAGS -Dwith_jim_ext_$i" done AC_CHECK_FUNCS([ualarm],EXTRA_CFLAGS="$EXTRA_CFLAGS -DHAVE_UALARM") @@ -50,12 +50,6 @@ #include <arpa/inet.h> #include <netdb.h> -/* FIX!!! add #if's to make JIM_SUPPORT_EVENTLOOP enable/disable - * eventloop support compile time! */ -#ifndef JIM_SUPPORT_EVENTLOOP -#define JIM_SUPPORT_EVENTLOOP 1 -#endif - #include "jim.h" #include "jim-eventloop.h" @@ -116,6 +110,7 @@ static void JimAioDelProc(Jim_Interp *interp, void *privData) fclose(af->fp); if (!af->OpenFlags == AIO_FDOPEN) // fp = fdopen(fd) !! close(af->fd); +#ifdef with_jim_ext_eventloop if (af->rEvent) { // remove existing EventHandlers Jim_DeleteFileHandler(interp,af->fp); Jim_DecrRefCount(interp,af->rEvent); @@ -128,6 +123,7 @@ static void JimAioDelProc(Jim_Interp *interp, void *privData) Jim_DeleteFileHandler(interp,af->fp); Jim_DecrRefCount(interp,af->eEvent); } +#endif Jim_Free(af); } @@ -144,7 +140,9 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc, "gets", "read", "puts", "flush", "eof", "ndelay", +#ifdef with_jim_ext_eventloop "readable", "writable", "onexception", +#endif "accept", NULL }; @@ -153,7 +151,9 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc, OPT_GETS, OPT_READ, OPT_PUTS, OPT_FLUSH, OPT_EOF, OPT_NDELAY, +#ifdef with_jim_ext_eventloop OPT_READABLE, OPT_WRITABLE, OPT_EXCEPTION, +#endif OPT_ACCEPT, }; @@ -394,7 +394,9 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc, #else return JIM_ERR; #endif - } else if ( (option == OPT_READABLE) + } +#ifdef with_jim_ext_eventloop + else if ( (option == OPT_READABLE) || (option == OPT_WRITABLE) || (option == OPT_EXCEPTION) ) { @@ -450,7 +452,9 @@ static int JimAioHandlerCommand(Jim_Interp *interp, int argc, Jim_WrongNumArgs(interp, 2, argv, ""); return JIM_ERR; } - } else if (option == OPT_ACCEPT) { + } +#endif + else if (option == OPT_ACCEPT) { return JimAioAcceptHelper(interp,af); } return JIM_OK; @@ -653,7 +657,7 @@ static int JimAioSockCommand(Jim_Interp *interp, int argc, static int JimAioAcceptHelper(Jim_Interp *interp, AioFile *serv_af ) { int sock; - int addrlen = sizeof(struct sockaddr_in); + socklen_t addrlen = sizeof(struct sockaddr_in); AioFile *af; char buf[AIO_CMD_LEN]; long fileId; @@ -736,13 +736,14 @@ Jim_CreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, int **pid } if (pid == 0) { char errSpace[200]; + int rc; if ((inputId != -1 && dup2(inputId, 0) == -1) || (outputId != -1 && dup2(outputId, 1) == -1) || (errorId != -1 &&(dup2(errorId, 2) == -1))) { static const char err[] = "forked process couldn't set up input/output\n"; - write(errorId < 0 ? 2 : errorId, err, strlen(err)); + rc = write(errorId < 0 ? 2 : errorId, err, strlen(err)); _exit(1); } for (i = 3; (i <= outputId) || (i <= inputId) || (i <= errorId); i++) { @@ -750,7 +751,7 @@ Jim_CreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, int **pid } execvp(execName, &arg_array[firstArg]); sprintf(errSpace, "couldn't find \"%.150s\" to execute\n", arg_array[firstArg]); - write(2, errSpace, strlen(errSpace)); + rc = write(2, errSpace, strlen(errSpace)); _exit(1); } else { @@ -657,7 +657,10 @@ static int Jim_PwdCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const int cwd_len=2048; char *cwd=malloc(cwd_len); - getcwd(cwd, cwd_len); + + if (getcwd(cwd, cwd_len) != 0) { + return JIM_ERR; + } Jim_SetResultString(interp, cwd, -1); diff --git a/jim-package.c b/jim-package.c index 4474381..3c206df 100644 --- a/jim-package.c +++ b/jim-package.c @@ -75,7 +75,7 @@ static int JimLoadPackage(Jim_Interp *interp, const char *name, int flags) { Jim_Obj *libPathObjPtr; char **prefixes, *path; - int prefixc, i, retCode = JIM_OK; + int prefixc, i, retCode = JIM_ERR; libPathObjPtr = Jim_GetGlobalVariableStr(interp, "jim_libpath", JIM_NONE); if (libPathObjPtr == NULL) { @@ -105,13 +105,16 @@ static int JimLoadPackage(Jim_Interp *interp, const char *name, int flags) /* Try to load/source it */ if (p && strcmp(p, ".tcl") == 0) { retCode = Jim_EvalFile(interp, path); - } else { + } +#ifdef with_jim_ext_load + else { retCode = Jim_LoadLibrary(interp, path); } +#endif + Jim_Free(path); } else { retCode = JIM_ERR; } - Jim_Free(path); for (i = 0; i < prefixc; i++) Jim_Free(prefixes[i]); Jim_Free(prefixes); @@ -8468,7 +8468,9 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename) const int cwd_len=2048; char *cwd=malloc(cwd_len); Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); - getcwd( cwd, cwd_len ); + if (getcwd( cwd, cwd_len ) != 0) { + strcpy(cwd, "?"); + } Jim_AppendStrings(interp, Jim_GetResult(interp), "Error loading script \"", filename, "\"", " cwd: ", cwd, |