You should have received a copy of the GNU General Public License along
with Bash; see the file COPYING. If not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+ Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
/* Define PATTERN_MATCHING to get the csh-like =~ and !~ pattern-matching
binary operators. */
# define STREQ(a, b) ((a)[0] == (b)[0] && strcmp (a, b) == 0)
#endif /* !STREQ */
-#if !defined (member)
-# define member(c, s) (int)((c) ? (char *)strchr ((s), (c)) : 0)
-#endif /* !member */
-
#if !defined (R_OK)
#define R_OK 4
#define W_OK 2
return (stat (pbuf, finfo));
#endif /* !HAVE_DEV_FD */
}
+#if !defined (HAVE_DEV_STDIN)
+ else if (STREQN (path, "/dev/std", 8))
+ {
+ if (STREQ (path+8, "in"))
+ return (fstat (0, finfo));
+ else if (STREQ (path+8, "out"))
+ return (fstat (1, finfo));
+ else if (STREQ (path+8, "err"))
+ return (fstat (2, finfo));
+ else
+ return (stat (path, finfo));
+ }
+#endif /* !HAVE_DEV_STDIN */
return (stat (path, finfo));
}
return (0);
}
- if (st.st_uid == current_user.euid) /* owner */
+ if (st.st_uid == current_user.euid) /* owner */
mode <<= 6;
else if (group_member (st.st_gid))
mode <<= 3;
advance (1);
value = expr ();
if (argv[pos] == 0)
- test_syntax_error ("`)' expected", (char *)NULL);
+ test_syntax_error ("`)' expected", (char *)NULL);
else if (argv[pos][0] != ')' || argv[pos][1])
test_syntax_error ("`)' expected, found %s", argv[pos]);
advance (0);
{
struct stat st1, st2;
- if (test_stat (s, &st1) < 0 || test_stat (t, &st2) < 0)
- return (FALSE);
+ if (test_stat (s, &st1) < 0)
+ {
+ st1.st_mtime = 0;
+ if (op == EF)
+ return (FALSE);
+ }
+ if (test_stat (t, &st2) < 0)
+ {
+ st2.st_mtime = 0;
+ if (op == EF)
+ return (FALSE);
+ }
+
switch (op)
{
case OT: return (st1.st_mtime < st2.st_mtime);
{
switch (op[1])
{
- case 'n': return (filecomp (arg1, arg2, NT)); /* -nt */
- case 'o': return (filecomp (arg1, arg2, OT)); /* -ot */
+ case 'n': return (filecomp (arg1, arg2, NT)); /* -nt */
+ case 'o': return (filecomp (arg1, arg2, OT)); /* -ot */
case 'l': return (arithcomp (arg1, arg2, LT, flags)); /* -lt */
case 'g': return (arithcomp (arg1, arg2, GT, flags)); /* -gt */
}
if (op[1] == 't')
{
advance (0);
- if (pos < argc && legal_number (argv[pos], &r))
+ if (pos < argc)
{
- advance (0);
- return (unary_test (op, argv[pos - 1]));
+ if (legal_number (argv[pos], &r))
+ {
+ advance (0);
+ return (unary_test (op, argv[pos - 1]));
+ }
+ else
+ return (FALSE);
}
else
return (unary_test (op, "1"));
return (0);
}
else
- return (0);
+ return (0);
}
}
else if (ANDOR (argv[pos+1]))
{
if (argv[pos+1][1] == 'a')
- value = ONE_ARG_TEST(argv[pos]) && ONE_ARG_TEST(argv[pos+2]);
+ value = ONE_ARG_TEST(argv[pos]) && ONE_ARG_TEST(argv[pos+2]);
else
- value = ONE_ARG_TEST(argv[pos]) || ONE_ARG_TEST(argv[pos+2]);
+ value = ONE_ARG_TEST(argv[pos]) || ONE_ARG_TEST(argv[pos+2]);
pos = argc;
}
else if (argv[pos][0] == '!' && argv[pos][1] == '\0')
{
--margc;
- if (margc < 2)
- test_exit (SHELL_BOOLEAN (FALSE));
-
if (margv[margc] && (margv[margc][0] != ']' || margv[margc][1]))
test_syntax_error ("missing `]'", (char *)NULL);
+
+ if (margc < 2)
+ test_exit (SHELL_BOOLEAN (FALSE));
}
argc = margc;