summaryrefslogtreecommitdiffstats
path: root/generic/tclIOUtil.c
diff options
context:
space:
mode:
authorapnadkarni <apnmbx-wits@yahoo.com>2023-10-02 07:00:29 (GMT)
committerapnadkarni <apnmbx-wits@yahoo.com>2023-10-02 07:00:29 (GMT)
commit02bbd733d87bbe0bd6531d084e299036724a4324 (patch)
treec2c9e785bf661f92e57c126de7e6acbfad461dd3 /generic/tclIOUtil.c
parentad821e2e9a781291b4975a0eb2e3087c58511622 (diff)
parentec0c60f4713cafe1cf1ba58dbd2a1a562339f9e0 (diff)
downloadtcl-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.c53
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);