Subject: Re: bug#7201: unportable integer expression in src/install.c

From: Jim Meyering <[email-masked]>
Date: Tue, 12 Oct 2010 21:57:33 +0200

Paul Eggert wrote:
> Solaris 10 cc issues this warning:
>
> "install.c", line 189: warning: initializer does not fit or is out of range: -61952
>
> and indeed the code in question relies on undefined
> behavior, as it shoehorns what may be a large negative
> number into a small int variable.  Here's a patch
> to src/install.c.  Maybe you should remove the "const"
> while you're at it, as it's not that helpful here?
>
> --- src/install.c~  2010-09-27 23:00:50.000000000 -0700
> +++ src/install.c   2010-10-12 12:35:30.277787068 -0700
> @@ -186,8 +186,8 @@ have_same_content (int a_fd, int b_fd)
>  static bool
>  extra_mode (mode_t input)
>  {
> -  const mode_t mask = ~S_IRWXUGO & ~S_IFMT;
> -  return !! (input & mask);
> +  const mode_t mask = S_IRWXUGO | S_IFMT;
> +  return !! (input & ~ mask);

Thanks!  That looks sufficiently safe.
You're welcome to commit/push that.
Or I will do it for you tomorrow.