diff options
| author | apnadkarni <apnmbx-wits@yahoo.com> | 2023-10-02 07:00:29 (GMT) |
|---|---|---|
| committer | apnadkarni <apnmbx-wits@yahoo.com> | 2023-10-02 07:00:29 (GMT) |
| commit | 02bbd733d87bbe0bd6531d084e299036724a4324 (patch) | |
| tree | c2c9e785bf661f92e57c126de7e6acbfad461dd3 /generic/tclIOUtil.c | |
| parent | ad821e2e9a781291b4975a0eb2e3087c58511622 (diff) | |
| parent | ec0c60f4713cafe1cf1ba58dbd2a1a562339f9e0 (diff) | |
| download | tcl-02bbd733d87bbe0bd6531d084e299036724a4324.zip tcl-02bbd733d87bbe0bd6531d084e299036724a4324.tar.gz tcl-02bbd733d87bbe0bd6531d084e299036724a4324.tar.bz2 | |
Merge 8.7 - Fix [02acab5aea], [d8a354f7d9], [62e5508ee], [4af110a6a1], [02acab5aea] - file ensemble bugs for zipfs
Diffstat (limited to 'generic/tclIOUtil.c')
| -rw-r--r-- | generic/tclIOUtil.c | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c index 306ba41..2785d70 100644 --- a/generic/tclIOUtil.c +++ b/generic/tclIOUtil.c @@ -2282,11 +2282,17 @@ Tcl_FSUtime( * times to use. Should not be modified. */ { const Tcl_Filesystem *fsPtr = Tcl_FSGetFileSystemForPath(pathPtr); + int err; - if (fsPtr != NULL && fsPtr->utimeProc != NULL) { - return fsPtr->utimeProc(pathPtr, tval); + if (fsPtr == NULL) { + err = ENOENT; + } else { + if (fsPtr->utimeProc != NULL) { + return fsPtr->utimeProc(pathPtr, tval); + } + err = ENOTSUP; } - /* TODO: set errno here? Tcl_SetErrno(ENOENT); */ + Tcl_SetErrno(err); return -1; } @@ -3732,8 +3738,13 @@ Tcl_FSLink( { const Tcl_Filesystem *fsPtr = Tcl_FSGetFileSystemForPath(pathPtr); - if (fsPtr != NULL && fsPtr->linkProc != NULL) { - return fsPtr->linkProc(pathPtr, toPtr, linkAction); + if (fsPtr) { + if (fsPtr->linkProc == NULL) { + Tcl_SetErrno(ENOTSUP); + return NULL; + } else { + return fsPtr->linkProc(pathPtr, toPtr, linkAction); + } } /* @@ -4304,11 +4315,17 @@ Tcl_FSDeleteFile( Tcl_Obj *pathPtr) /* Pathname of file to be removed (UTF-8). */ { const Tcl_Filesystem *fsPtr = Tcl_FSGetFileSystemForPath(pathPtr); - - if (fsPtr != NULL && fsPtr->deleteFileProc != NULL) { - return fsPtr->deleteFileProc(pathPtr); + int err; + + if (fsPtr == NULL) { + err = ENOENT; + } else { + if (fsPtr->deleteFileProc != NULL) { + return fsPtr->deleteFileProc(pathPtr); + } + err = ENOTSUP; } - Tcl_SetErrno(ENOENT); + Tcl_SetErrno(err); return -1; } @@ -4335,11 +4352,17 @@ Tcl_FSCreateDirectory( Tcl_Obj *pathPtr) /* Pathname of directory to create (UTF-8). */ { const Tcl_Filesystem *fsPtr = Tcl_FSGetFileSystemForPath(pathPtr); + int err; - if (fsPtr != NULL && fsPtr->createDirectoryProc != NULL) { - return fsPtr->createDirectoryProc(pathPtr); + if (fsPtr == NULL) { + err = ENOENT; + } else { + if (fsPtr->createDirectoryProc != NULL) { + return fsPtr->createDirectoryProc(pathPtr); + } + err = ENOTSUP; } - Tcl_SetErrno(ENOENT); + Tcl_SetErrno(err); return -1; } @@ -4420,10 +4443,14 @@ Tcl_FSRemoveDirectory( { const Tcl_Filesystem *fsPtr = Tcl_FSGetFileSystemForPath(pathPtr); - if (fsPtr == NULL || fsPtr->removeDirectoryProc == NULL) { + if (fsPtr == NULL) { Tcl_SetErrno(ENOENT); return -1; } + if (fsPtr->removeDirectoryProc == NULL) { + Tcl_SetErrno(ENOTSUP); + return -1; + } if (recursive) { Tcl_Obj *cwdPtr = Tcl_FSGetCwd(NULL); |
