diff options
Diffstat (limited to 'dev-ada/gprbuild/files/gprbuild-22.0.0-2020.patch')
-rw-r--r-- | dev-ada/gprbuild/files/gprbuild-22.0.0-2020.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/dev-ada/gprbuild/files/gprbuild-22.0.0-2020.patch b/dev-ada/gprbuild/files/gprbuild-22.0.0-2020.patch new file mode 100644 index 000000000000..ba5c2f858de7 --- /dev/null +++ b/dev-ada/gprbuild/files/gprbuild-22.0.0-2020.patch @@ -0,0 +1,47 @@ +--- a/gpr/src/gpr_imports.c 2022-02-27 10:10:34.053638209 +0100 ++++ b/gpr/src/gpr_imports.c 2022-02-27 10:12:03.898276758 +0100 +@@ -114,6 +114,44 @@ + const char *__gnat_default_libgcc_subdir = "lib"; + #endif + ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <limits.h> ++#include <unistd.h> ++ ++ extern long long __gnat_file_time(char* name) ++ { ++ long long result; ++ ++ if (name == NULL) { ++ return LLONG_MIN; ++ } ++ /* Number of seconds between <Jan 1st 1970> and <Jan 1st 2150>. */ ++ static const long long ada_epoch_offset = (136 * 365 + 44 * 366) * 86400LL; ++ struct stat sb; ++ if (stat(name, &sb) != 0) { ++ return LLONG_MIN; ++ } ++ ++ // return (sb.st_mtim.tv_sec - ada_epoch_offset) * 1E9 ++ // + sb.st_mtim.tv_nsec; ++ // with check overflow below ++ ++ if (__builtin_ssubll_overflow(sb.st_mtim.tv_sec, ada_epoch_offset, &result)) { ++ return LLONG_MIN; ++ } ++ ++ if (__builtin_smulll_overflow(result, 1E9, &result)) { ++ return LLONG_MIN; ++ } ++ ++ if (__builtin_saddll_overflow(result, sb.st_mtim.tv_nsec, &result)) { ++ return LLONG_MIN; ++ } ++ ++ return result; ++ } ++ + #ifdef __cplusplus + } + #endif |