diff options
author | vincentdarley <vincentdarley> | 2004-04-23 12:09:30 (GMT) |
---|---|---|
committer | vincentdarley <vincentdarley> | 2004-04-23 12:09:30 (GMT) |
commit | 995406ac5bb7813c75343919fde68ba897545f06 (patch) | |
tree | 8a90a6e6222b9614f909ed276c67f3290879547c /generic | |
parent | 88bdeb9f3a0d24c6a2034eeddb37c8581b64823b (diff) | |
download | tcl-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.c | 15 | ||||
-rw-r--r-- | generic/tclPathObj.c | 12 |
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; } |