Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: tail-dropping in files module mkdir
- X-seq: zsh-workers 12533
- From: Clint Adams <schizo@xxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: PATCH: tail-dropping in files module mkdir
- Date: Fri, 4 Aug 2000 10:53:23 -0400
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
This should let mkdir work a little better.
In addition to the -p problem, I think that zpathmax needs to
be modified to do one of the following:
a) return the number from pathconf() so that it can be compared
with strlen of the full pathname with tail
b) take aforementioned strlen as an argument
BTW, I think pathconf does the "errno unchanged" bit because of
some prohibition of the library settings errno to 0 or setting
errno on success.
Index: Src/Modules/files.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Modules/files.c,v
retrieving revision 1.4
diff -u -r1.4 files.c
--- Src/Modules/files.c 2000/08/04 07:09:46 1.4
+++ Src/Modules/files.c 2000/08/04 14:43:36
@@ -71,6 +71,7 @@
mode_t oumask = umask(0);
mode_t mode = 0777 & ~oumask;
int err = 0;
+ char *head;
umask(oumask);
if(ops['m']) {
@@ -91,8 +92,19 @@
while(ptr > *args + (**args == '/') && *--ptr == '/')
*ptr = 0;
- if(zpathmax(unmeta(*args)) < 0) {
- zwarnnam(nam, "%s: %e", *args, errno);
+
+/* Drop the tail so that pathconf receives a potentially valid pathname */
+ head = (char *) ztrdup(*args);
+ if ((ptr = strrchr(head, '/')))
+ *ptr = 0;
+ else {
+/* Relative to current directory */
+ *head = '.';
+ *(head + 1) = '\0';
+ }
+
+ if(zpathmax(unmeta(head)) < 0) {
+ zwarnnam(nam, "%s: %e", head, errno);
err = 1;
continue;
}
@@ -121,6 +133,8 @@
}
} else
err |= domkdir(nam, *args, mode, 0);
+
+ free(head);
}
return err;
}
Messages sorted by:
Reverse Date,
Date,
Thread,
Author