]> git.saurik.com Git - apt.git/blobdiff - methods/rred.cc
abort connection on '.' target replies in SRV
[apt.git] / methods / rred.cc
index 678509844ddb8fad162c609d71714f01265dd2d4..958933a07b50631ebbdd27d2ebce93bf896885b8 100644 (file)
@@ -335,7 +335,7 @@ class Patch {
    FileChanges filechanges;
    MemBlock add_text;
 
-   static bool retry_fwrite(char *b, size_t l, FileFd &f, Hashes * const start_hash, Hashes * const end_hash = nullptr)
+   static bool retry_fwrite(char *b, size_t l, FileFd &f, Hashes * const start_hash, Hashes * const end_hash = nullptr) APT_NONNULL(1)
    {
       if (f.Write(b, l) == false)
         return false;
@@ -385,8 +385,8 @@ class Patch {
       }
    }
 
-   static void dump_mem(FileFd &o, char *p, size_t s, Hashes *hash) {
-      retry_fwrite(p, s, o, hash);
+   static void dump_mem(FileFd &o, char *p, size_t s, Hashes *hash) APT_NONNULL(2) {
+      retry_fwrite(p, s, o, nullptr, hash);
    }
 
    public:
@@ -538,7 +538,8 @@ class Patch {
       for (ch = filechanges.begin(); ch != filechanges.end(); ++ch) {
         dump_lines(out, in, ch->offset, start_hash, end_hash);
         skip_lines(in, ch->del_cnt, start_hash);
-        dump_mem(out, ch->add, ch->add_len, end_hash);
+        if (ch->add_len != 0)
+           dump_mem(out, ch->add, ch->add_len, end_hash);
       }
       dump_rest(out, in, start_hash, end_hash);
       out.Flush();
@@ -572,7 +573,7 @@ class RredMethod : public aptMethod {
 
    protected:
       virtual bool URIAcquire(std::string const &Message, FetchItem *Itm) APT_OVERRIDE {
-        Debug = _config->FindB("Debug::pkgAcquire::RRed", false);
+        Debug = DebugEnabled();
         URI Get = Itm->Uri;
         std::string Path = Get.Host + Get.Path; // rred:/path - no host
 
@@ -664,7 +665,7 @@ class RredMethod : public aptMethod {
            std::cerr << "FAILED to open inp " << Path << std::endl;
            return _error->Error("Failed to open inp %s", Path.c_str());
         }
-        if (out.Open(Itm->DestFile, FileFd::WriteOnly | FileFd::Create | FileFd::BufferedWrite, FileFd::Extension) == false)
+        if (out.Open(Itm->DestFile, FileFd::WriteOnly | FileFd::Create | FileFd::Empty | FileFd::BufferedWrite, FileFd::Extension) == false)
         {
            std::cerr << "FAILED to open out " << Itm->DestFile << std::endl;
            return _error->Error("Failed to open out %s", Itm->DestFile.c_str());
@@ -762,7 +763,7 @@ int main(int argc, char **argv)
       FileFd out, inp;
       std::cerr << "Patching " << argv[2] << " into " << argv[3] << "\n";
       inp.Open(argv[2], FileFd::ReadOnly,FileFd::Extension);
-      out.Open(argv[3], FileFd::WriteOnly | FileFd::Create | FileFd::BufferedWrite, FileFd::Extension);
+      out.Open(argv[3], FileFd::WriteOnly | FileFd::Create | FileFd::Empty | FileFd::BufferedWrite, FileFd::Extension);
       patch.apply_against_file(out, inp);
       out.Close();
    } else if (just_diff) {