X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/1924be129eb7428284dc7aa35972d047c68cf85d..2853201580944cb4e5a2a8a810e800e89e9a0475:/methods/rred.cc?ds=sidebyside diff --git a/methods/rred.cc b/methods/rred.cc index 80f8746c7..79ab8cb52 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -491,7 +491,11 @@ class Patch { for (ch = filechanges.rbegin(); ch != filechanges.rend(); ++ch) { std::list::reverse_iterator mg_i, mg_e = ch; while (ch->del_cnt == 0 && ch->offset == 0) + { ++ch; + if (unlikely(ch == filechanges.rend())) + return; + } line -= ch->del_cnt; std::string buf; if (ch->add_cnt > 0) { @@ -656,6 +660,11 @@ class RredMethod : public aptMethod { out.Close(); inp.Close(); + if (_error->PendingError() == true) { + std::cerr << "FAILED to read or write files" << std::endl; + return false; + } + if (Debug == true) { std::clog << "rred: finished file patching of " << Path << "." << std::endl; } @@ -663,7 +672,7 @@ class RredMethod : public aptMethod { struct stat bufbase, bufpatch; if (stat(Path.c_str(), &bufbase) != 0 || stat(patch_name.c_str(), &bufpatch) != 0) - return _error->Errno("stat", _("Failed to stat")); + return _error->Errno("stat", _("Failed to stat %s"), Path.c_str()); struct timeval times[2]; times[0].tv_sec = bufbase.st_atime; @@ -673,7 +682,7 @@ class RredMethod : public aptMethod { return _error->Errno("utimes",_("Failed to set modification time")); if (stat(Itm->DestFile.c_str(), &bufbase) != 0) - return _error->Errno("stat", _("Failed to stat")); + return _error->Errno("stat", _("Failed to stat %s"), Itm->DestFile.c_str()); Res.LastModified = bufbase.st_mtime; Res.Size = bufbase.st_size; @@ -684,7 +693,7 @@ class RredMethod : public aptMethod { } public: - RredMethod() : aptMethod("rred", "2.0",SingleInstance | SendConfig), Debug(false) {} + RredMethod() : aptMethod("rred", "2.0", SendConfig), Debug(false) {} }; int main(int argc, char **argv)