aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/adaint.c
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2011-08-02 17:25:25 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2011-08-02 17:25:25 +0200
commit052e0603b1b8a2dbbcee2261642764fcea84fe51 (patch)
treeffce63d4e87a8d73bf0ba2edf33ccda1cdab0cd0 /gcc/ada/adaint.c
parent4fbad0ba4c093d5653e70679aba43193a20881e5 (diff)
downloadgcc-052e0603b1b8a2dbbcee2261642764fcea84fe51.zip
gcc-052e0603b1b8a2dbbcee2261642764fcea84fe51.tar.gz
gcc-052e0603b1b8a2dbbcee2261642764fcea84fe51.tar.bz2
[multiple changes]
2011-08-02 Robert Dewar <dewar@adacore.com> * exp_ch9.adb, exp_sel.adb, restrict.ads, exp_disp.adb, erroutc.ads, exp_ch3.adb: Minor reformatting. 2011-08-02 Emmanuel Briot <briot@adacore.com> * adaint.c (__gnat_locate_exec_on_path): only returns executable files, not any regular file. (__gnat_locate_file_with_predicate): new subprogram. 2011-08-02 Yannick Moy <moy@adacore.com> * sinfo.adb, sinfo.ads: Restrict the use of flags Has_Dynamic_Length_Check and Has_Dynamic_Range_Check to expression nodes, plus N_Subtype_Declaration for the 2nd one. From-SVN: r177180
Diffstat (limited to 'gcc/ada/adaint.c')
-rw-r--r--gcc/ada/adaint.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index fd305e6..446f500 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -2700,10 +2700,11 @@ __gnat_os_exit (int status)
exit (status);
}
-/* Locate a regular file, give a Path value. */
+/* Locate file on path, that matches a predicate */
char *
-__gnat_locate_regular_file (char *file_name, char *path_val)
+__gnat_locate_file_with_predicate
+ (char *file_name, char *path_val, int (*predicate)(char*))
{
char *ptr;
char *file_path = (char *) alloca (strlen (file_name) + 1);
@@ -2733,7 +2734,7 @@ __gnat_locate_regular_file (char *file_name, char *path_val)
if (absolute)
{
- if (__gnat_is_regular_file (file_path))
+ if (predicate (file_path))
return xstrdup (file_path);
return 0;
@@ -2746,7 +2747,7 @@ __gnat_locate_regular_file (char *file_name, char *path_val)
if (*ptr != 0)
{
- if (__gnat_is_regular_file (file_name))
+ if (predicate (file_name))
return xstrdup (file_name);
}
@@ -2787,7 +2788,7 @@ __gnat_locate_regular_file (char *file_name, char *path_val)
strcpy (++ptr, file_name);
- if (__gnat_is_regular_file (file_path))
+ if (predicate (file_path))
return xstrdup (file_path);
if (*path_val == 0)
@@ -2802,6 +2803,24 @@ __gnat_locate_regular_file (char *file_name, char *path_val)
return 0;
}
+/* Locate an executable file, give a Path value. */
+
+char *
+__gnat_locate_executable_file (char *file_name, char *path_val)
+{
+ return __gnat_locate_file_with_predicate
+ (file_name, path_val, &__gnat_is_executable_file);
+}
+
+/* Locate a regular file, give a Path value. */
+
+char *
+__gnat_locate_regular_file (char *file_name, char *path_val)
+{
+ return __gnat_locate_file_with_predicate
+ (file_name, path_val, &__gnat_is_regular_file);
+}
+
/* Locate an executable given a Path argument. This routine is only used by
gnatbl and should not be used otherwise. Use locate_exec_on_path
instead. */
@@ -2818,14 +2837,14 @@ __gnat_locate_exec (char *exec_name, char *path_val)
strcpy (full_exec_name, exec_name);
strcat (full_exec_name, HOST_EXECUTABLE_SUFFIX);
- ptr = __gnat_locate_regular_file (full_exec_name, path_val);
+ ptr = __gnat_locate_executable_file (full_exec_name, path_val);
if (ptr == 0)
- return __gnat_locate_regular_file (exec_name, path_val);
+ return __gnat_locate_executable_file (exec_name, path_val);
return ptr;
}
else
- return __gnat_locate_regular_file (exec_name, path_val);
+ return __gnat_locate_executable_file (exec_name, path_val);
}
/* Locate an executable using the Systems default PATH. */