diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-02 17:25:25 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-02 17:25:25 +0200 |
commit | 052e0603b1b8a2dbbcee2261642764fcea84fe51 (patch) | |
tree | ffce63d4e87a8d73bf0ba2edf33ccda1cdab0cd0 /gcc/ada/adaint.c | |
parent | 4fbad0ba4c093d5653e70679aba43193a20881e5 (diff) | |
download | gcc-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.c | 35 |
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. */ |