Committed: [PATCH v2] fixincludes: don't abort() on access failure [PR103306]
Xi Ruoyao
xry111@mengyan1223.wang
Tue Nov 23 19:35:28 GMT 2021
Committed as r12-5477.
On Tue, 2021-11-23 at 23:39 +0800, Xi Ruoyao via Gcc-patches wrote:
> [v2: format fix]
>
> 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 intentionally
> injected into /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..92909baf85f 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. */
> + 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;
> }
>
> pz_curr_data = load_file (pz_curr_file);
--
Xi Ruoyao <xry111@mengyan1223.wang>
School of Aerospace Science and Technology, Xidian University
More information about the Gcc-patches
mailing list