From: John Ericson <John.Ericson@Obsidian.Systems>

Now that `find_a_program` and `find_a_file` have been separated, we can
make a number of simplification in both of them. Most notably, we don't
need a mode parameter, because one is always doing `R_OK`, and the other
is always doing `X_OK`.

This change also proves that some of the code I removed from
`find_a_file` in the previous commit is actually dead.

gcc/ChangeLog:

        * gcc.cc (find_a_file): Remove mode parameter, because always
        R_OK. Skip suffix logic, because suffix is always empty in that
        case.
        (read_specs): Remove mode from find_a_file call.
        (find_a_program): Suffix is unconditional, inline mode constant.
        (end_going_arg): Remove mode from find_a_file call.
        (find_file): Remove mode from find_a_file call.
        (driver::set_up_specs): Remove mode from find_a_file call.
        (include_spec_function): Remove mode from find_a_file call.

Signed-off-by: John Ericson <g...@johnericson.me>
---
 gcc/gcc.cc | 58 +++++++++++++++++++-----------------------------------
 1 file changed, 20 insertions(+), 38 deletions(-)

diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index d034cd698ba..3f27c35708b 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -387,7 +387,7 @@ static void xputenv (const char *);
 static void putenv_from_prefixes (const struct path_prefix *, const char *,
                                  bool);
 static int access_check (const char *, int);
-static char *find_a_file (const struct path_prefix *, const char *, int, bool);
+static char *find_a_file (const struct path_prefix *, const char *, bool);
 static char *find_a_program (const char *);
 static void add_prefix (struct path_prefix *, const char *, const char *,
                        int, int, int);
@@ -2424,7 +2424,7 @@ read_specs (const char *filename, bool main_p, bool 
user_p)
                             "%td characters", p1 - buffer + 1);
 
              p[-2] = '\0';
-             new_filename = find_a_file (&startfile_prefixes, p1, R_OK, true);
+             new_filename = find_a_file (&startfile_prefixes, p1, true);
              read_specs (new_filename ? new_filename : p1, false, user_p);
              continue;
            }
@@ -2444,7 +2444,7 @@ read_specs (const char *filename, bool main_p, bool 
user_p)
                             "%td characters", p1 - buffer + 1);
 
              p[-2] = '\0';
-             new_filename = find_a_file (&startfile_prefixes, p1, R_OK, true);
+             new_filename = find_a_file (&startfile_prefixes, p1, true);
              if (new_filename)
                read_specs (new_filename, false, user_p);
              else if (verbose_flag)
@@ -3014,47 +3014,32 @@ access_check (const char *name, int mode)
    Return 0 if not found, otherwise return its name, allocated with malloc.  */
 
 static char *
-find_a_file (const struct path_prefix *pprefix, const char *name, int mode,
+find_a_file (const struct path_prefix *pprefix, const char *name,
             bool do_multi)
 {
   /* Find the filename in question (special case for absolute paths).  */
 
   if (IS_ABSOLUTE_PATH (name))
     {
-      if (access (name, mode) == 0)
+      if (access (name, R_OK) == 0)
        return xstrdup (name);
 
       return NULL;
     }
 
-  const char *suffix = (mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "";
   const int name_len = strlen (name);
-  const int suffix_len = strlen (suffix);
 
 
   /* Callback appends the file name to the directory path.  If the
      resulting file exists in the right mode, return the full pathname
      to the file.  */
   return for_each_path (pprefix, do_multi,
-                       name_len + suffix_len,
+                       name_len,
                        [=](char *path) -> char*
     {
-      size_t len = strlen (path);
+      memcpy (path + strlen (path), name, name_len + 1);
 
-      memcpy (path + len, name, name_len);
-      len += name_len;
-
-      /* Some systems have a suffix for executable files.
-        So try appending that first.  */
-      if (suffix_len)
-       {
-         memcpy (path + len, suffix, suffix_len + 1);
-         if (access_check (path, mode) == 0)
-           return path;
-       }
-
-      path[len] = '\0';
-      if (access_check (path, mode) == 0)
+      if (access_check (path, R_OK) == 0)
        return path;
 
       return NULL;
@@ -3084,23 +3069,20 @@ find_a_program (const char *name)
     return xstrdup (DEFAULT_DSYMUTIL);
 #endif
 
-  int mode = X_OK;
-
   /* Find the filename in question (special case for absolute paths).  */
 
   if (IS_ABSOLUTE_PATH (name))
     {
-      if (access (name, mode) == 0)
+      if (access (name, X_OK) == 0)
        return xstrdup (name);
 
       return NULL;
     }
 
-  const char *suffix = (mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "";
+  const char *suffix = HOST_EXECUTABLE_SUFFIX;
   const int name_len = strlen (name);
   const int suffix_len = strlen (suffix);
 
-
   /* Callback appends the file name to the directory path.  If the
      resulting file exists in the right mode, return the full pathname
      to the file.  */
@@ -3118,12 +3100,12 @@ find_a_program (const char *name)
       if (suffix_len)
        {
          memcpy (path + len, suffix, suffix_len + 1);
-         if (access_check (path, mode) == 0)
+         if (access_check (path, X_OK) == 0)
            return path;
        }
 
       path[len] = '\0';
-      if (access_check (path, mode) == 0)
+      if (access_check (path, X_OK) == 0)
        return path;
 
       return NULL;
@@ -5774,7 +5756,7 @@ end_going_arg (void)
        string = find_file (string);
       if (this_is_linker_script)
        {
-         char * full_script_path = find_a_file (&startfile_prefixes, string, 
R_OK, true);
+         char * full_script_path = find_a_file (&startfile_prefixes, string, 
true);
 
          if (full_script_path == NULL)
            {
@@ -8080,7 +8062,7 @@ out:
 static const char *
 find_file (const char *name)
 {
-  char *newname = find_a_file (&startfile_prefixes, name, R_OK, true);
+  char *newname = find_a_file (&startfile_prefixes, name, true);
   return newname ? newname : name;
 }
 
@@ -8506,7 +8488,7 @@ driver::set_up_specs () const
                           accel_dir_suffix, dir_separator_str, NULL);
   just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
 
-  specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, true);
+  specs_file = find_a_file (&startfile_prefixes, "specs", true);
   /* Read the specs file unless it is a default one.  */
   if (specs_file != 0 && strcmp (specs_file, "specs"))
     read_specs (specs_file, true, false);
@@ -8650,7 +8632,7 @@ driver::set_up_specs () const
   for (struct user_specs *uptr = user_specs_head; uptr; uptr = uptr->next)
     {
       char *filename = find_a_file (&startfile_prefixes, uptr->filename,
-                                   R_OK, true);
+                                   true);
       read_specs (filename ? filename : uptr->filename, false, true);
     }
 
@@ -9275,7 +9257,7 @@ driver::maybe_run_linker (const char *argv0) const
 #endif
            {
              char *temp_spec = find_a_file (&exec_prefixes,
-                                            LTOPLUGINSONAME, R_OK,
+                                            LTOPLUGINSONAME,
                                             false);
              if (!temp_spec)
                fatal_error (input_location,
@@ -10762,7 +10744,7 @@ include_spec_function (int argc, const char **argv)
   if (argc != 1)
     abort ();
 
-  file = find_a_file (&startfile_prefixes, argv[0], R_OK, true);
+  file = find_a_file (&startfile_prefixes, argv[0], true);
   read_specs (file ? file : argv[0], false, false);
 
   return NULL;
@@ -11199,12 +11181,12 @@ find_fortran_preinclude_file (int argc, const char 
**argv)
                             NULL, 0, 0, 0);
 #endif
 
-  const char *path = find_a_file (&include_prefixes, argv[1], R_OK, false);
+  const char *path = find_a_file (&include_prefixes, argv[1], false);
   if (path != NULL)
     result = concat (argv[0], path, NULL);
   else
     {
-      path = find_a_file (&prefixes, argv[1], R_OK, false);
+      path = find_a_file (&prefixes, argv[1], false);
       if (path != NULL)
        result = concat (argv[0], path, NULL);
     }
-- 
2.49.0

Reply via email to