summaryrefslogtreecommitdiffstats
path: root/generic/tclCmdAH.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclCmdAH.c')
-rw-r--r--generic/tclCmdAH.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c
index 3b9e5ba..a63d9d5 100644
--- a/generic/tclCmdAH.c
+++ b/generic/tclCmdAH.c
@@ -283,7 +283,12 @@ Tcl_CdObjCmd(
if (Tcl_FSConvertToPathType(interp, dir) != TCL_OK) {
result = TCL_ERROR;
} else {
- result = Tcl_FSChdir(dir);
+ Tcl_DString ds;
+ result = Tcl_UtfToExternalDStringEx(NULL, TCLFSENCODING, TclGetString(dir), -1, 0, &ds, NULL);
+ Tcl_DStringFree(&ds);
+ if (result == TCL_OK) {
+ result = Tcl_FSChdir(dir);
+ }
if (result != TCL_OK) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"couldn't change working directory to \"%s\": %s",
@@ -434,7 +439,7 @@ EncodingConvertParseOptions (
Tcl_Encoding encoding;
Tcl_Obj *dataObj;
Tcl_Obj *failVarObj;
- int profile = TCL_ENCODING_PROFILE_TCL8;
+ int profile = TCL_ENCODING_PROFILE_STRICT;
/*
* Possible combinations:
@@ -2234,10 +2239,16 @@ CheckAccess(
* access(). */
{
int value;
+ Tcl_DString ds;
if (Tcl_FSConvertToPathType(interp, pathPtr) != TCL_OK) {
value = 0;
+ } else if (Tcl_UtfToExternalDStringEx(NULL, TCLFSENCODING, TclGetString(pathPtr),
+ TCL_INDEX_NONE, 0, &ds, NULL) != TCL_OK) {
+ value = 0;
+ Tcl_DStringFree(&ds);
} else {
+ Tcl_DStringFree(&ds);
value = (Tcl_FSAccess(pathPtr, mode) == 0);
}
Tcl_SetObjResult(interp, Tcl_NewBooleanObj(value));
@@ -2275,12 +2286,19 @@ GetStatBuf(
* calling (*statProc)(). */
{
int status;
+ Tcl_DString ds;
if (Tcl_FSConvertToPathType(interp, pathPtr) != TCL_OK) {
return TCL_ERROR;
}
- status = statProc(pathPtr, statPtr);
+ if (Tcl_UtfToExternalDStringEx(NULL, TCLFSENCODING, TclGetString(pathPtr),
+ TCL_INDEX_NONE, 0, &ds, NULL) != TCL_OK) {
+ status = -1;
+ } else {
+ status = statProc(pathPtr, statPtr);
+ }
+ Tcl_DStringFree(&ds);
if (status < 0) {
if (interp != NULL) {