From e4c088190eb2cff5bd1f5e1a915d1064b2ae5371 Mon Sep 17 00:00:00 2001 From: jay Date: Sat, 31 Mar 2007 18:55:02 +0000 Subject: [PATCH] Issue clearer find error messages when predicate is invalid versus argument is invalid/missing --- ChangeLog | 10 ++++++++++ depcomp | 33 +++++++++++++++++++-------------- find/tree.c | 25 ++++++++++++++++--------- import-gnulib.config | 2 +- 4 files changed, 46 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index acad991..210ba2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-03-31 James Youngman + + * find/tree.c (build_expression_tree): Issue more specific error + messages; distinguish the case where the predicate is invalid from + the cases where a required argument is missing, and a supplied + argument is invalid. + + * import-gnulib.config (gnulib_version): Update to 2007-03-30 + version of gnulib. + 2007-03-28 James Youngman * find/defs.h (set_stat_placeholders): utility function for diff --git a/depcomp b/depcomp index ca5ea4e..e5f9736 100755 --- a/depcomp +++ b/depcomp @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2006-10-15.18 +scriptversion=2007-03-29.01 -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software # Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -215,34 +215,39 @@ aix) # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u "$@" -M fi stat=$? - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" - fi - if test $stat -eq 0; then : else - rm -f "$tmpdepfile" + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done if test -f "$tmpdepfile"; then - outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile diff --git a/find/tree.c b/find/tree.c index 2c2e0c1..8482cac 100644 --- a/find/tree.c +++ b/find/tree.c @@ -1337,19 +1337,26 @@ build_expression_tree(int argc, char *argv[], int end_of_leading_options) oldi = i; if (!(*(parse_entry->parser_func)) (parse_entry, argv, &i)) { - if (oldi == i) + if (argv[i]) { - error (1, 0, _("invalid predicate `%s'"), - predicate_name); + if ( (ARG_SPECIAL_PARSE == parse_entry->type) && (i == oldi) ) + { + /* The special parse function spat out the + * predicate. It must be invalid, or not tasty. + */ + error (1, 0, _("invalid predicate `%s'"), + argv[i], predicate_name); + } + else + { + error (1, 0, _("invalid argument `%s' to `%s'"), + argv[i], predicate_name); + } } else { - if (argv[i] == NULL) - /* Command line option requires an argument */ - error (1, 0, _("missing argument to `%s'"), predicate_name); - else - error (1, 0, _("invalid argument `%s' to `%s'"), - argv[i], predicate_name); + /* Command line option requires an argument */ + error (1, 0, _("missing argument to `%s'"), predicate_name); } } else diff --git a/import-gnulib.config b/import-gnulib.config index ee16ca3..be594cd 100644 --- a/import-gnulib.config +++ b/import-gnulib.config @@ -1,5 +1,5 @@ # What version of gnulib to use? -gnulib_version="2007-03-29" +gnulib_version="2007-03-30" destdir="gnulib" -- 2.11.4.GIT