Blame coreutils-8.17-cp-freememoryread.patch
|
Ondřej Vašík |
d3438c |
diff -urNp coreutils-8.17-orig/src/extent-scan.c coreutils-8.17/src/extent-scan.c
|
|
Ondřej Vašík |
d3438c |
--- coreutils-8.17-orig/src/extent-scan.c 2012-05-02 10:31:47.000000000 +0200
|
|
Ondřej Vašík |
d3438c |
+++ coreutils-8.17/src/extent-scan.c 2012-11-05 12:05:36.732370966 +0100
|
|
Ondřej Vašík |
d3438c |
@@ -89,7 +89,7 @@ extern bool
|
|
Ondřej Vašík |
d3438c |
extent_scan_read (struct extent_scan *scan)
|
|
Ondřej Vašík |
d3438c |
{
|
|
Ondřej Vašík |
d3438c |
unsigned int si = 0;
|
|
Ondřej Vašík |
d3438c |
- struct extent_info *last_ei IF_LINT ( = scan->ext_info);
|
|
Ondřej Vašík |
d3438c |
+ struct extent_info *last_ei = scan->ext_info;
|
|
Ondřej Vašík |
d3438c |
|
|
Ondřej Vašík |
d3438c |
while (true)
|
|
Ondřej Vašík |
d3438c |
{
|
|
Ondřej Vašík |
d3438c |
@@ -127,8 +127,14 @@ extent_scan_read (struct extent_scan *sc
|
|
Ondřej Vašík |
d3438c |
|
|
Ondřej Vašík |
d3438c |
assert (scan->ei_count <= SIZE_MAX - fiemap->fm_mapped_extents);
|
|
Ondřej Vašík |
d3438c |
scan->ei_count += fiemap->fm_mapped_extents;
|
|
Ondřej Vašík |
d3438c |
- scan->ext_info = xnrealloc (scan->ext_info, scan->ei_count,
|
|
Ondřej Vašík |
d3438c |
- sizeof (struct extent_info));
|
|
Ondřej Vašík |
d3438c |
+ {
|
|
Ondřej Vašík |
d3438c |
+ /* last_ei points into a buffer that may be freed via xnrealloc.
|
|
Ondřej Vašík |
d3438c |
+ Record its offset and adjust after allocation. */
|
|
Ondřej Vašík |
d3438c |
+ size_t prev_idx = last_ei - scan->ext_info;
|
|
Ondřej Vašík |
d3438c |
+ scan->ext_info = xnrealloc (scan->ext_info, scan->ei_count,
|
|
Ondřej Vašík |
d3438c |
+ sizeof (struct extent_info));
|
|
Ondřej Vašík |
d3438c |
+ last_ei = scan->ext_info + prev_idx;
|
|
Ondřej Vašík |
d3438c |
+ }
|
|
Ondřej Vašík |
d3438c |
|
|
Ondřej Vašík |
d3438c |
unsigned int i = 0;
|
|
Ondřej Vašík |
d3438c |
for (i = 0; i < fiemap->fm_mapped_extents; i++)
|