0003-time64-Only-getrlimit-setrlimit-if-they-exist.patch 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. From b8b6f6ce49bac68e1e953dafde8421f8e33d656b Mon Sep 17 00:00:00 2001
  2. From: Stefan O'Rear <sorear@fastmail.com>
  3. Date: Thu, 3 Sep 2020 03:31:05 -0400
  4. Subject: [PATCH 03/15] time64: Only getrlimit/setrlimit if they exist
  5. riscv32 and future architectures only provide prlimit64.
  6. ---
  7. src/misc/getrlimit.c | 6 +++++-
  8. src/misc/setrlimit.c | 6 +++++-
  9. 2 files changed, 10 insertions(+), 2 deletions(-)
  10. diff --git a/src/misc/getrlimit.c b/src/misc/getrlimit.c
  11. index 2ab2f0f4..bf676307 100644
  12. --- a/src/misc/getrlimit.c
  13. +++ b/src/misc/getrlimit.c
  14. @@ -6,12 +6,13 @@
  15. int getrlimit(int resource, struct rlimit *rlim)
  16. {
  17. - unsigned long k_rlim[2];
  18. int ret = syscall(SYS_prlimit64, 0, resource, 0, rlim);
  19. if (!ret) {
  20. FIX(rlim->rlim_cur);
  21. FIX(rlim->rlim_max);
  22. }
  23. +#ifdef SYS_getrlimit
  24. + unsigned long k_rlim[2];
  25. if (!ret || errno != ENOSYS)
  26. return ret;
  27. if (syscall(SYS_getrlimit, resource, k_rlim) < 0)
  28. @@ -21,6 +22,9 @@ int getrlimit(int resource, struct rlimit *rlim)
  29. FIX(rlim->rlim_cur);
  30. FIX(rlim->rlim_max);
  31. return 0;
  32. +#else
  33. + return ret;
  34. +#endif
  35. }
  36. weak_alias(getrlimit, getrlimit64);
  37. diff --git a/src/misc/setrlimit.c b/src/misc/setrlimit.c
  38. index 7a66ab29..62eba5f3 100644
  39. --- a/src/misc/setrlimit.c
  40. +++ b/src/misc/setrlimit.c
  41. @@ -8,7 +8,6 @@
  42. static int __setrlimit(int resource, const struct rlimit *rlim)
  43. {
  44. - unsigned long k_rlim[2];
  45. struct rlimit tmp;
  46. if (SYSCALL_RLIM_INFINITY != RLIM_INFINITY) {
  47. tmp = *rlim;
  48. @@ -17,10 +16,15 @@ static int __setrlimit(int resource, const struct rlimit *rlim)
  49. rlim = &tmp;
  50. }
  51. int ret = __syscall(SYS_prlimit64, 0, resource, rlim, 0);
  52. +#ifdef SYS_setrlimit
  53. + unsigned long k_rlim[2];
  54. if (ret != -ENOSYS) return ret;
  55. k_rlim[0] = MIN(rlim->rlim_cur, MIN(-1UL, SYSCALL_RLIM_INFINITY));
  56. k_rlim[1] = MIN(rlim->rlim_max, MIN(-1UL, SYSCALL_RLIM_INFINITY));
  57. return __syscall(SYS_setrlimit, resource, k_rlim);
  58. +#else
  59. + return ret;
  60. +#endif
  61. }
  62. struct ctx {
  63. --
  64. 2.28.0