* m4/path.c (module_access): New. Check if name is a directory as
well.
(m4_path_search, m4_load_filename): Replace access() with
module_access().
---
 m4/path.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/m4/path.c b/m4/path.c
index 7243447..bc8b376 100644
--- a/m4/path.c
+++ b/m4/path.c
@@ -167,6 +167,15 @@ path_truncate (char *path)
 #  define path_truncate(path) (path)
 #endif
 
+static int
+module_access (const char *name, int mode)
+{
+  struct stat stat_buf;
+
+  return access (name, mode) == 0 &&
+         stat (name, &stat_buf) == 0 && !S_ISDIR (stat_buf.st_mode) ? 0 : -1;
+}
+
 
 
 /* Functions for normal input path search */
@@ -232,11 +241,11 @@ m4_path_search (m4 *context, const char *filename, const 
char **suffixes)
       for (i = 0; suffixes && suffixes[i]; ++i)
         {
           strcpy (filepath + mem, suffixes[i]);
-          if (access (filepath, R_OK) == 0)
+          if (module_access (filepath, R_OK) == 0)
            return filepath;
 
           /* If search fails, we'll use the error we got from the first
-            access (usually with no suffix).  */
+            module_access (usually with no suffix).  */
          if (i == 0)
            e = errno;
         }
@@ -257,7 +266,7 @@ m4_path_search (m4 *context, const char *filename, const 
char **suffixes)
       xfprintf (stderr, "path_search (%s) -- trying %s\n", filename, pathname);
 #endif
 
-      if (access (pathname, R_OK) == 0)
+      if (module_access (pathname, R_OK) == 0)
         {
           m4_debug_message (context, M4_DEBUG_TRACE_PATH,
                             _("path search for %s found %s"),
@@ -276,7 +285,7 @@ m4_path_search (m4 *context, const char *filename, const 
char **suffixes)
       for (i = 0; suffixes && suffixes[i]; ++i)
         {
           strcpy (filepath + mem, suffixes[i]);
-          if (access (filepath, R_OK) == 0)
+          if (module_access (filepath, R_OK) == 0)
             return filepath;
         }
       free (filepath);
@@ -329,7 +338,7 @@ m4_load_filename (m4 *context, const m4_call_info *caller,
 
   if (m4_get_posixly_correct_opt (context))
     {
-      if (access (filename, R_OK) == 0)
+      if (module_access (filename, R_OK) == 0)
         filepath = xstrdup (filename);
     }
   else
-- 
1.8.5.2


_______________________________________________
M4-patches mailing list
M4-patches@gnu.org
https://lists.gnu.org/mailman/listinfo/m4-patches

Reply via email to