summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Src/cond.c6
-rw-r--r--Test/C02cond.ztst7
3 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 04732bc06..89d29e708 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-04-17 Peter Stephenson <pws@csr.com>
+
+ * Alexandre Duret-Lutz: 16930: Src/cond.c, Test/C02cond.ztst:
+ Careful with long filenames in internal condition test; fix block
+ file test for `-f'.
+
2002-04-17 Sven Wischnowsky <wischnow@zsh.org>
* 16998: Src/Zle/computil.c: make compvalues unquote the string
diff --git a/Src/cond.c b/Src/cond.c
index b34a14be1..4a4dc24ed 100644
--- a/Src/cond.c
+++ b/Src/cond.c
@@ -324,6 +324,8 @@ static struct stat st;
static struct stat *
getstat(char *s)
{
+ char *us;
+
/* /dev/fd/n refers to the open file descriptor n. We always use fstat *
* in this case since on Solaris /dev/fd/n is a device special file */
if (!strncmp(s, "/dev/fd/", 8)) {
@@ -332,7 +334,9 @@ getstat(char *s)
return &st;
}
- if (stat(unmeta(s), &st))
+ if (!(us = unmeta(s)))
+ return NULL;
+ if (stat(us, &st))
return NULL;
return &st;
}
diff --git a/Test/C02cond.ztst b/Test/C02cond.ztst
index eafda1b5c..6c6aea4f6 100644
--- a/Test/C02cond.ztst
+++ b/Test/C02cond.ztst
@@ -52,7 +52,12 @@
[[ -e zerolength && ! -e nonexistent ]]
0:-e cond
- [[ -f zerolength && ! -f cond && ! -f $char && ! -f $block && ! -f . ]]
+ if [[ -n $block ]]; then
+ [[ -f zerolength && ! -f cond && ! -f $char && ! -f $block[(f)1] && ! -f . ]]
+ else
+ print -u8 'Warning: Not testing [[ -f blockdevice ]] (no devices found)'
+ [[ -f zerolength && ! -f cond && ! -f $char && ! -f . ]]
+ fi
0:-f cond
[[ -g modish && ! -g zerolength ]]