diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2011-03-10 15:45:47 +0100 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2011-03-10 15:45:47 +0100 |
commit | 67da93c38eb3904b36537e025e2f63f77d830e20 (patch) | |
tree | 8ff57ccafb2f471fc97f97bfe8f0da11ca1eb7b1 /methods/rred.cc | |
parent | c9952021ba65db0581f6053cd6d6e8bf7d563e8f (diff) | |
parent | a75b8cfeb6d7e2468b19534d5b5872c3885f0e1c (diff) |
merged from debian-sid
Diffstat (limited to 'methods/rred.cc')
-rw-r--r-- | methods/rred.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/methods/rred.cc b/methods/rred.cc index 1a18a381c..849973e1a 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -252,13 +252,20 @@ struct EdCommand { /*{{{*/ RredMethod::State RredMethod::patchMMap(FileFd &Patch, FileFd &From, /*{{{*/ FileFd &out_file, Hashes *hash) const { #ifdef _POSIX_MAPPED_FILES - MMap ed_cmds(Patch, MMap::ReadOnly); + MMap ed_cmds(MMap::ReadOnly); if (Patch.gzFd() != NULL) { unsigned long mapSize = Patch.Size(); - DynamicMMap dyn(0, mapSize, 0); - gzread(Patch.gzFd(), dyn.Data(), mapSize); - ed_cmds = dyn; - } + DynamicMMap* dyn = new DynamicMMap(0, mapSize, 0); + if (dyn->validData() == false) { + delete dyn; + return MMAP_FAILED; + } + dyn->AddSize(mapSize); + gzread(Patch.gzFd(), dyn->Data(), mapSize); + ed_cmds = *dyn; + } else + ed_cmds = MMap(Patch, MMap::ReadOnly); + MMap in_file(From, MMap::ReadOnly); if (ed_cmds.Size() == 0 || in_file.Size() == 0) |