0001-big-files-support.patch 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. diff --git a/thirdparty/libbacktrace/read.c b/thirdparty/libbacktrace/read.c
  2. index 7af66602fd..a7e937667c 100644
  3. --- a/thirdparty/libbacktrace/read.c
  4. +++ b/thirdparty/libbacktrace/read.c
  5. @@ -52,14 +52,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
  6. {
  7. uint64_t got;
  8. ssize_t r;
  9. -
  10. - if ((uint64_t) (size_t) size != size)
  11. - {
  12. - error_callback (data, "file size too large", 0);
  13. - return 0;
  14. - }
  15. -
  16. - if (lseek (descriptor, offset, SEEK_SET) < 0)
  17. + if (_lseeki64 (descriptor, offset, SEEK_SET) < 0)
  18. {
  19. error_callback (data, "lseek", errno);
  20. return 0;
  21. @@ -72,9 +65,13 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
  22. view->len = size;
  23. got = 0;
  24. + void *ptr = view->base;
  25. while (got < size)
  26. {
  27. - r = read (descriptor, view->base, size - got);
  28. + uint64_t sz = size - got;
  29. + if (sz > INT_MAX)
  30. + sz = INT_MAX;
  31. + r = _read (descriptor, ptr, sz);
  32. if (r < 0)
  33. {
  34. error_callback (data, "read", errno);
  35. @@ -84,6 +81,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
  36. if (r == 0)
  37. break;
  38. got += (uint64_t) r;
  39. + ptr += r;
  40. }
  41. if (got < size)