[PATCH] fixincludes: don't abort() on access failure [PR103306]

Jeff Law jeffreyalaw@gmail.com
Tue Nov 23 00:37:21 GMT 2021



On 11/18/2021 4:01 AM, Xi Ruoyao via Gcc-patches wrote:
> Some distro may ship dangling symlinks in include directories, triggers
> the access failure.  Skip it and continue to next header instead of
> being to panic.
>
> Restore to old behavior before r12-5234 but without resurrecting the
> problematic getcwd() call, by using the environment variable "INPUT"
> exported by fixinc.sh.
>
> Tested on x86_64-linux-gnu, with a dangling symlink in /usr/include.
>
> fixincludes/
>
> 	PR bootstrap/103306
> 	* fixincl.c (process): Don't call abort().
> ---
>   fixincludes/fixincl.c | 15 ++++++++++++---
>   1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/fixincludes/fixincl.c b/fixincludes/fixincl.c
> index a17b65866c3..81939ee5ffa 100644
> --- a/fixincludes/fixincl.c
> +++ b/fixincludes/fixincl.c
> @@ -1352,10 +1352,19 @@ process (void)
>   
>     if (access (pz_curr_file, R_OK) != 0)
>       {
> -      /* Some really strange error happened.  */
> -      fprintf (stderr, "Cannot access %s: %s\n", pz_curr_file,
> +      /* It may happens if for e. g. the distro ships some broken symlinks
> +       * in /usr/include.  */
> +
> +      /* "INPUT" is exported in fixinc.sh, which is the pwd where fixincl
> +       * runs.  It's used instead of getcwd to avoid allocating a buffer
> +       * with unknown length.  */
Formatting nits.  We don't use '*' at the start of comment lines. Drop 
the '*' like this

   /* blah blah blah
      more text.  */


> +      const char *cwd = getenv ("INPUT");
> +      if (!cwd)
> +	cwd = "the working directory";
> +
> +      fprintf (stderr, "Cannot access %s from %s: %s\n", pz_curr_file, cwd,
>   	       xstrerror (errno));
> -      abort ();
> +      return;
>       }
If INPUT is always exported, why not just print it? ie, would CWD after 
actually be NULL?

jeff


More information about the Gcc-patches mailing list