Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/libbacktrace/patches/0001-big-files-support.patch
9904 views
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
24
got = 0;
25
+ void *ptr = view->base;
26
while (got < size)
27
{
28
- r = read (descriptor, view->base, size - got);
29
+ uint64_t sz = size - got;
30
+ if (sz > INT_MAX)
31
+ sz = INT_MAX;
32
+ r = _read (descriptor, ptr, sz);
33
if (r < 0)
34
{
35
error_callback (data, "read", errno);
36
@@ -84,6 +81,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor,
37
if (r == 0)
38
break;
39
got += (uint64_t) r;
40
+ ptr += r;
41
}
42
43
if (got < size)
44
45