Follow-up Comment #5, bug #15235 (project findutils):
Your patch is not quite right:
+boolean
+looks_like_expression(const char *arg)
+{
+ switch (arg[0])
+ {
+ case '-':
+ if (arg[1]) /* "-foo" is an expression. */
+ return true;
+ else
+ return false; /* Just "-" is a filename. */
+ break;
Hmm, I thought that "-" starts with a '-', so it should be treated as an
invalid option, but I guess you are okay in saying that the POSIX wording of
"starts with" implies improper substring, therefore "-" is a filename since
it is an exact match rather than a prefix.
Which raises the question - if you treat "-" as a filename, is it the file
./-, or is it shorthand for stdin (on systems where stdin can be redirected
from a directory)?
+
+ /* According to the POSIX standard, we have to assume that a leading
')'
is a
+ * filename argument. Hence it does not matter if the ')' is
followed b
y any
+ * other characters.
+ */
+ case ')':
+ return false;
+
+ /* (, ) and ! are part of an expression,
+ * but (2, )3 and !foo are filenames.
+ */
+ case '!':
+ case '(':
+ case ',':
Wrong - you need to treat ',' like you did ')'; a leading comma is always
treated as a filename before the first expression is found.
+ if (arg[1])
+ return false;
+ else
+ return true;
+
+ default:
+ return false;
Why not combine the code for case ')': (and as I pointed out, case ',':),
with default:?
+ }
+}
Thanks for working on this.
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?func=detailitem&item_id=15235>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
_______________________________________________
Bug-findutils mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-findutils