bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 'expr' problems with strcoll and POSIX (coreutils 5.0.1)


From: Jim Meyering
Subject: Re: 'expr' problems with strcoll and POSIX (coreutils 5.0.1)
Date: Fri, 18 Jul 2003 09:34:03 +0200

Paul Eggert <address@hidden> wrote:
> The letter from Andreas about 'uniq' prompted me to look for other
> instances of 'strcoll' in coreutils.  I found two problematic
> instances, both in expr.c.  One instance should be strcmp; the other
> instance should report an error if strcoll fails.  While looking at
> expr.c I noticed another problem with POSIX conformance: it doesn't
> distinguish between exit status 2 and 3 as POSIX 1003.1-2001 requires.
>
> Here is a proposed patch for both problems.
>
> diff -pru coreutils/ChangeLog coreutils-strcoll/ChangeLog
> --- coreutils/ChangeLog       Mon Jul 14 23:55:22 2003
> +++ coreutils-strcoll/ChangeLog       Thu Jul 17 14:47:27 2003
> @@ -1,3 +1,22 @@
> +2003-07-17  Paul Eggert  <address@hidden>
> +
> +     * src/expr.c: Include "exitfail.h", "quotearg.h".
> +     (EXPR_INVALID, EXPR_ERROR): New constants.
> +     (nomoreargs, null, toarith, nextarg): Return bool, not int.
> +     (syntax_error): New function, exiting with status 2.  Use it
> +     insteading of printing "syntax error" ourselves.
> +     (main): Initialize exit_failure to EXPR_ERROR.
> +     Exit with EXPR_INVALID on syntax error (too few arguments).
> +     (nextarg): Use strcmp, not strcoll; strcoll might return
> +     an undesirable 0, or might fail.
> +     (docolon, eval4, eval3): Exit with status 3 on invalid argument type
> +     or other such error.
> +     (eval2): Report an error if strcoll fails in a string comparison.
> +     * src/sort.c: Include "exitfail.h".
> +     (main): Set exit_failure, not xalloc_exit_failure and
> +     xmemcoll_exit_failure.
> +     * tests/expr/basic: Invalid value exits with status 3, not 2.

Thanks a lot!
I've applied nearly all of that.
The sole exception is this hunk:

> diff -pru coreutils/lib/xalloc.h coreutils-strcoll/lib/xalloc.h
> --- coreutils/lib/xalloc.h    Wed Jun 18 01:10:03 2003
> +++ coreutils-strcoll/lib/xalloc.h    Thu Jul 17 11:30:11 2003
...
> @@ -56,10 +53,10 @@ void *xcalloc (size_t n, size_t s);
>  void *xrealloc (void *p, size_t n);
>  char *xstrdup (const char *str);
>  
> -# define XMALLOC(Type, N_items) xmalloc (sizeof (Type) * (N_items))
> -# define XCALLOC(Type, N_items) xcalloc (sizeof (Type), (N_items))
> -# define XREALLOC(Ptr, Type, N_items) xrealloc ((Ptr), \
> -                                             sizeof (Type) * (N_items))
> +# define XMALLOC(Type, N_items) ((Type *) xmalloc (sizeof (Type) * 
> (N_items)))
> +# define XCALLOC(Type, N_items) ((Type *) xcalloc (sizeof (Type), (N_items)))
> +# define XREALLOC(Ptr, Type, N_items) \
> +  ((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_items)))
>  
>  /* Declare and alloc memory for VAR of type TYPE. */
>  # define NEW(Type, Var)  Type *(Var) = XMALLOC (Type, 1)

I suspect you did not mean to reintroduce those anachronistic casts.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]