summaryrefslogtreecommitdiffstats
path: root/generic/tclCmdMZ.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2016-11-28 13:17:47 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2016-11-28 13:17:47 (GMT)
commite506fbc42c805d0a6dfe2982a6169a0397aeddad (patch)
tree90bcfac74be46fac31536713178714d03a6dd38f /generic/tclCmdMZ.c
parentfabd3e7dc8882faee98b35feb738939c197e23b5 (diff)
downloadtcl-e506fbc42c805d0a6dfe2982a6169a0397aeddad.zip
tcl-e506fbc42c805d0a6dfe2982a6169a0397aeddad.tar.gz
tcl-e506fbc42c805d0a6dfe2982a6169a0397aeddad.tar.bz2
Complete implementation, tests and documentation
Diffstat (limited to 'generic/tclCmdMZ.c')
-rw-r--r--generic/tclCmdMZ.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index ed3d9a5..7f2a2f3 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -989,8 +989,11 @@ TclNRSourceObjCmd(
{
const char *encodingName = NULL;
Tcl_Obj *fileName;
+ int result;
+ void **pkgFiles = NULL;
+ void *names = NULL;
- if (objc != 2 && objc !=4) {
+ if (objc < 2 || objc > 4) {
Tcl_WrongNumArgs(interp, 1, objv, "?-encoding name? fileName");
return TCL_ERROR;
}
@@ -1008,8 +1011,28 @@ TclNRSourceObjCmd(
return TCL_ERROR;
}
encodingName = TclGetString(objv[2]);
+ } else if (objc == 3) {
+ static const char *const nopkgoptions[] = {
+ "-nopkg", NULL
+ };
+ int index;
+
+ if (TCL_ERROR == Tcl_GetIndexFromObj(interp, objv[1], nopkgoptions,
+ "option", TCL_EXACT, &index)) {
+ return TCL_ERROR;
+ }
+ pkgFiles = Tcl_GetAssocData(interp, "tclPkgFiles", NULL);
+ /* Make sure that during the following TclNREvalFile no filenames
+ * are recorded for inclusion in the "package files" command */
+ names = *pkgFiles;
+ *pkgFiles = NULL;
}
- return TclNREvalFile(interp, fileName, encodingName);
+ result = TclNREvalFile(interp, fileName, encodingName);
+ if (pkgFiles) {
+ /* restore "tclPkgFiles" assocdata to how it was. */
+ *pkgFiles = names;
+ }
+ return result;
}
/*