summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorvincentdarley <vincentdarley>2004-04-23 12:09:30 (GMT)
committervincentdarley <vincentdarley>2004-04-23 12:09:30 (GMT)
commit995406ac5bb7813c75343919fde68ba897545f06 (patch)
tree8a90a6e6222b9614f909ed276c67f3290879547c /generic
parent88bdeb9f3a0d24c6a2034eeddb37c8581b64823b (diff)
downloadtcl-995406ac5bb7813c75343919fde68ba897545f06.zip
tcl-995406ac5bb7813c75343919fde68ba897545f06.tar.gz
tcl-995406ac5bb7813c75343919fde68ba897545f06.tar.bz2
fix to two filesystem bugs: more consistent file separator proc and correct Tcl_FSJoinPath return values
Diffstat (limited to 'generic')
-rw-r--r--generic/tclIOUtil.c15
-rw-r--r--generic/tclPathObj.c12
2 files changed, 21 insertions, 6 deletions
diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c
index 325f017..f526d40 100644
--- a/generic/tclIOUtil.c
+++ b/generic/tclIOUtil.c
@@ -17,7 +17,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclIOUtil.c,v 1.100 2004/04/07 15:54:15 vincentdarley Exp $
+ * RCS: @(#) $Id: tclIOUtil.c,v 1.101 2004/04/23 12:09:37 vincentdarley Exp $
*/
#include "tclInt.h"
@@ -3357,7 +3357,9 @@ Tcl_FSSplitPath(pathPtr, lenPtr)
if (fsPtr->filesystemSeparatorProc != NULL) {
Tcl_Obj *sep = (*fsPtr->filesystemSeparatorProc)(pathPtr);
if (sep != NULL) {
+ Tcl_IncrRefCount(sep);
separator = Tcl_GetString(sep)[0];
+ Tcl_DecrRefCount(sep);
}
}
@@ -4261,7 +4263,8 @@ Tcl_FSFileSystemInfo(pathPtr)
* Results:
* A Tcl object, with a refCount of zero. If the caller
* needs to retain a reference to the object, it should
- * call Tcl_IncrRefCount.
+ * call Tcl_IncrRefCount, and should otherwise free the
+ * object.
*
* Side effects:
* The path object may be converted to a path type.
@@ -4279,9 +4282,13 @@ Tcl_FSPathSeparator(pathPtr)
}
if (fsPtr->filesystemSeparatorProc != NULL) {
return (*fsPtr->filesystemSeparatorProc)(pathPtr);
+ } else {
+ /*
+ * Allow filesystems not to provide a filesystemSeparatorProc
+ * if they wish to use the standard forward slash.
+ */
+ return Tcl_NewStringObj("/", 1);
}
-
- return NULL;
}
/*
diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c
index daa9297..bcb1500 100644
--- a/generic/tclPathObj.c
+++ b/generic/tclPathObj.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclPathObj.c,v 1.29 2004/04/06 22:25:54 dgp Exp $
+ * RCS: @(#) $Id: tclPathObj.c,v 1.30 2004/04/23 12:09:37 vincentdarley Exp $
*/
#include "tclInt.h"
@@ -672,7 +672,12 @@ GetExtension(pathPtr)
* Results:
* Returns object with refCount of zero, (or if non-zero, it has
* references elsewhere in Tcl). Either way, the caller must
- * increment its refCount before use.
+ * increment its refCount before use. Note that in the case where
+ * the caller has asked to join zero elements of the list, the
+ * return value will be an empty-string Tcl_Obj.
+ *
+ * If the given listObj was invalid, then the calling routine has
+ * a bug, and this function will just return NULL.
*
* Side effects:
* None.
@@ -918,6 +923,9 @@ Tcl_FSJoinPath(listObj, elements)
Tcl_SetObjLength(res, length);
}
}
+ if (res == NULL) {
+ res = Tcl_NewObj();
+ }
return res;
}