From 9e64d4521dbf5247580929eb0a00c9f83cd311f8 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Tue, 28 Sep 2010 07:47:28 +1000 Subject: Ensure that Tcl extensions can be built-in or external All C extensions must call Jim_PackageProvide() make-c-ext ensures that Tcl extensions call Jim_PackageProvide() if compiled in. Signed-off-by: Steve Bennett --- jim-aio.c | 3 +++ jim-array.c | 3 +++ jim-bio.c | 3 +++ jim-clock.c | 3 +++ jim-eventloop.c | 3 +++ jim-exec.c | 3 +++ jim-file.c | 3 +++ jim-posix.c | 3 +++ jim-readdir.c | 3 +++ jim-readline.c | 3 +++ jim-regexp.c | 3 +++ jim-sdl.c | 3 +++ jim-signal.c | 3 +++ jim-sqlite.c | 3 +++ jim-sqlite3.c | 3 +++ jim-syslog.c | 7 ++++++- make-c-ext.sh | 3 +++ tclcompat.tcl | 2 -- tree.tcl | 2 -- 19 files changed, 54 insertions(+), 5 deletions(-) diff --git a/jim-aio.c b/jim-aio.c index 6f08993..71e11cc 100644 --- a/jim-aio.c +++ b/jim-aio.c @@ -1277,6 +1277,9 @@ static void JimAioTclCompat(Jim_Interp *interp) int Jim_aioInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "aio", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "open", JimAioOpenCommand, NULL, NULL); #ifndef JIM_ANSIC Jim_CreateCommand(interp, "socket", JimAioSockCommand, NULL, NULL); diff --git a/jim-array.c b/jim-array.c index 26febb3..8ed0ea7 100644 --- a/jim-array.c +++ b/jim-array.c @@ -288,6 +288,9 @@ static const jim_subcmd_type array_command_table[] = { int Jim_arrayInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "array", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "array", Jim_SubCmdProc, (void *)array_command_table, NULL); return JIM_OK; } diff --git a/jim-bio.c b/jim-bio.c index f6e8b01..245374d 100644 --- a/jim-bio.c +++ b/jim-bio.c @@ -250,6 +250,9 @@ static const jim_subcmd_type bio_command_table[] = { int Jim_bioInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "bio", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "bio", Jim_SubCmdProc, (void *)bio_command_table, NULL); return JIM_OK; } diff --git a/jim-clock.c b/jim-clock.c index 46f1d39..a5b8d07 100644 --- a/jim-clock.c +++ b/jim-clock.c @@ -107,6 +107,9 @@ static const jim_subcmd_type clock_command_table[] = { int Jim_clockInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "clock", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "clock", Jim_SubCmdProc, (void *)clock_command_table, NULL); return JIM_OK; } diff --git a/jim-eventloop.c b/jim-eventloop.c index 3256536..0f3fa3e 100644 --- a/jim-eventloop.c +++ b/jim-eventloop.c @@ -713,6 +713,9 @@ int Jim_eventloopInit(Jim_Interp *interp) { Jim_EventLoop *eventLoop; + if (Jim_PackageProvide(interp, "eventloop", "1.0", JIM_ERRMSG)) + return JIM_ERR; + eventLoop = Jim_Alloc(sizeof(*eventLoop)); eventLoop->fileEventHead = NULL; eventLoop->timeEventHead = NULL; diff --git a/jim-exec.c b/jim-exec.c index 77e6afd..662d79c 100644 --- a/jim-exec.c +++ b/jim-exec.c @@ -1233,6 +1233,9 @@ static int Jim_ExecCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) int Jim_execInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "exec", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "exec", Jim_ExecCmd, NULL, NULL); return JIM_OK; } diff --git a/jim-file.c b/jim-file.c index 3632432..8c4450d 100644 --- a/jim-file.c +++ b/jim-file.c @@ -862,6 +862,9 @@ static int Jim_PwdCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) int Jim_fileInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "file", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "file", Jim_SubCmdProc, (void *)file_command_table, NULL); Jim_CreateCommand(interp, "pwd", Jim_PwdCmd, NULL, NULL); Jim_CreateCommand(interp, "cd", Jim_CdCmd, NULL, NULL); diff --git a/jim-posix.c b/jim-posix.c index 7fedf66..4658c51 100644 --- a/jim-posix.c +++ b/jim-posix.c @@ -215,6 +215,9 @@ static int Jim_PosixPidCommand(Jim_Interp *interp, int argc, Jim_Obj *const *arg int Jim_posixInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "posix", "1.0", JIM_ERRMSG)) + return JIM_ERR; + #ifdef HAVE_FORK Jim_CreateCommand(interp, "os.fork", Jim_PosixForkCommand, NULL, NULL); #endif diff --git a/jim-readdir.c b/jim-readdir.c index 3f49ed4..7341a69 100644 --- a/jim-readdir.c +++ b/jim-readdir.c @@ -113,6 +113,9 @@ int Jim_ReaddirCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) int Jim_readdirInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "readdir", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "readdir", Jim_ReaddirCmd, NULL, NULL); return JIM_OK; } diff --git a/jim-readline.c b/jim-readline.c index 0b59216..6ad3e41 100644 --- a/jim-readline.c +++ b/jim-readline.c @@ -52,6 +52,9 @@ static int JimRlAddHistoryCommand(Jim_Interp *interp, int argc, Jim_Obj *const * int Jim_readlineInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "readline", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "readline.readline", JimRlReadlineCommand, NULL, NULL); Jim_CreateCommand(interp, "readline.addhistory", JimRlAddHistoryCommand, NULL, NULL); return JIM_OK; diff --git a/jim-regexp.c b/jim-regexp.c index 8624710..77be9f7 100644 --- a/jim-regexp.c +++ b/jim-regexp.c @@ -509,6 +509,9 @@ int Jim_RegsubCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) int Jim_regexpInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "regexp", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "regexp", Jim_RegexpCmd, NULL, NULL); Jim_CreateCommand(interp, "regsub", Jim_RegsubCmd, NULL, NULL); return JIM_OK; diff --git a/jim-sdl.c b/jim-sdl.c index 9a902f9..8a3fbd5 100644 --- a/jim-sdl.c +++ b/jim-sdl.c @@ -221,6 +221,9 @@ static int JimSdlSurfaceCommand(Jim_Interp *interp, int argc, Jim_Obj *const *ar int Jim_sdlInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "sdl", "1.0", JIM_ERRMSG)) + return JIM_ERR; + if (SDL_Init(SDL_INIT_VIDEO) < 0) { JimSdlSetError(interp); return JIM_ERR; diff --git a/jim-signal.c b/jim-signal.c index e841d61..506c08a 100644 --- a/jim-signal.c +++ b/jim-signal.c @@ -491,6 +491,9 @@ static int Jim_KillCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) int Jim_signalInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "signal", "1.0", JIM_ERRMSG)) + return JIM_ERR; + /* Teach the jim core how to set a result from a sigmask */ interp->signal_set_result = signal_set_sigmask_result; diff --git a/jim-sqlite.c b/jim-sqlite.c index 075b325..08cdb67 100644 --- a/jim-sqlite.c +++ b/jim-sqlite.c @@ -261,6 +261,9 @@ static int JimSqliteOpenCommand(Jim_Interp *interp, int argc, Jim_Obj *const *ar int Jim_sqliteInit(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "sqlite", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "sqlite.open", JimSqliteOpenCommand, NULL, NULL); return JIM_OK; } diff --git a/jim-sqlite3.c b/jim-sqlite3.c index 8f603df..228e3bc 100644 --- a/jim-sqlite3.c +++ b/jim-sqlite3.c @@ -278,6 +278,9 @@ static int JimSqliteOpenCommand(Jim_Interp *interp, int argc, Jim_Obj *const *ar int Jim_sqlite3Init(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "sqlite3", "1.0", JIM_ERRMSG)) + return JIM_ERR; + Jim_CreateCommand(interp, "sqlite3.open", JimSqliteOpenCommand, NULL, NULL); return JIM_OK; } diff --git a/jim-syslog.c b/jim-syslog.c index 21c9eed..a128e63 100644 --- a/jim-syslog.c +++ b/jim-syslog.c @@ -170,7 +170,12 @@ int Jim_SyslogCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) int Jim_syslogInit(Jim_Interp *interp) { - SyslogInfo *info = Jim_Alloc(sizeof(*info)); + SyslogInfo *info; + + if (Jim_PackageProvide(interp, "syslog", "1.0", JIM_ERRMSG)) + return JIM_ERR; + + info = Jim_Alloc(sizeof(*info)); info->logOpened = 0; info->options = 0; diff --git a/make-c-ext.sh b/make-c-ext.sh index 05f30a5..c4415fa 100644 --- a/make-c-ext.sh +++ b/make-c-ext.sh @@ -11,6 +11,9 @@ cat < int Jim_${basename}Init(Jim_Interp *interp) { + if (Jim_PackageProvide(interp, "$basename", "1.0", JIM_ERRMSG)) + return JIM_ERR; + return Jim_Eval_Named(interp, EOF diff --git a/tclcompat.tcl b/tclcompat.tcl index d99e6ed..01db0cb 100644 --- a/tclcompat.tcl +++ b/tclcompat.tcl @@ -3,8 +3,6 @@ # Loads some Tcl-compatible features. # case, lassign, parray, errorInfo, ::tcl_platform, ::env -package provide tclcompat 1.0 - # Set up the ::env array set env [env] diff --git a/tree.tcl b/tree.tcl index fc61306..2fe5002 100644 --- a/tree.tcl +++ b/tree.tcl @@ -1,5 +1,3 @@ -package provide tree - # Conceptually compatible with tcllib ::struct::tree # but uses an object based interface. # To mimic tcllib, do: -- cgit v1.1