Sfoglia il codice sorgente

Add writeOptionLine() to format 1 line of option name/value pair

Tatsuhiro Tsujikawa 12 anni fa
parent
commit
9b99875478
1 ha cambiato i file con 26 aggiunte e 36 eliminazioni
  1. 26 36
      src/SessionSerializer.cc

+ 26 - 36
src/SessionSerializer.cc

@@ -90,6 +90,21 @@ bool SessionSerializer::save(const std::string& filename) const
   return File(tempFilename).renameTo(filename);
 }
 
+namespace {
+// Write 1 line of option name/value pair. This function returns true
+// if it succeeds, or false.
+bool writeOptionLine(BufferedFile& fp, const Pref* pref,
+                     const std::string& val)
+{
+  size_t prefLen = strlen(pref->k);
+  return fp.write(" ", 1) == 1 &&
+    fp.write(pref->k, prefLen) == prefLen &&
+    fp.write("=", 1) == 1 &&
+    fp.write(val.c_str(), val.size()) == val.size() &&
+    fp.write("\n", 1) == 1;
+}
+} // namespace
+
 namespace {
 bool writeOption(BufferedFile& fp, const SharedHandle<Option>& op)
 {
@@ -105,36 +120,12 @@ bool writeOption(BufferedFile& fp, const SharedHandle<Option>& op)
                     false, false);
         for(std::vector<std::string>::const_iterator j = v.begin(),
               eoj = v.end(); j != eoj; ++j) {
-          if (fp.write(" ", 1) != 1) {
-            return false;
-          }
-          if (fp.write(pref->k) == 0) {
-            return false;
-          }
-          if (fp.write("=", 1) != 1) {
-            return false;
-          }
-          if (!j->empty() && fp.write(j->c_str()) == 0) {
-            return false;
-          }
-          if (fp.write("\n", 1) != 1) {
+          if(!writeOptionLine(fp, pref, *j)) {
             return false;
           }
         }
       } else {
-        if (fp.write(" ", 1) != 1) {
-          return false;
-        }
-        if (fp.write(pref->k) == 0) {
-          return false;
-        }
-        if (fp.write("=", 1) != 1) {
-          return false;
-        }
-        if (fp.write(op->get(pref).c_str()) == 0) {
-          return false;
-        }
-        if (fp.write("\n", 1) != 1) {
+        if(!writeOptionLine(fp, pref, op->get(pref))) {
           return false;
         }
       }
@@ -189,17 +180,15 @@ bool writeDownloadResult
     }
     for(std::vector<std::string>::const_iterator i = uris.begin(),
           eoi = uris.end(); i != eoi; ++i) {
-      if (fp.write(i->c_str()) == 0 || fp.write("\t", 1) != 1) {
+      if (fp.write((*i).c_str(), (*i).size()) != (*i).size() ||
+          fp.write("\t", 1) != 1) {
         return false;
       }
     }
-    if(fp.write("\n gid=", 6) != 6) {
+    if(fp.write("\n", 1) != 1) {
       return false;
     }
-    if(fp.write(dr->gid->toHex().c_str()) == 0) {
-       return false;
-    }
-    if(fp.write("\n", 1) != 1) {
+    if(!writeOptionLine(fp, PREF_GID, dr->gid->toHex())) {
       return false;
     }
   } else {
@@ -207,12 +196,14 @@ bool writeDownloadResult
       return true;
     } else {
       metainfoCache.insert(mi->getGID());
-      if (fp.write(mi->getUri().c_str()) == 0 || fp.write("\n", 1) != 1) {
+      if (fp.write(mi->getUri().c_str(),
+                   mi->getUri().size()) != mi->getUri().size() ||
+          fp.write("\n", 1) != 1) {
         return false;
       }
       // For downloads generated by metadata (e.g., BitTorrent,
       // Metalink), save gid of Metadata download.
-      if (fp.write(" gid=", 5) != 5 || fp.write(GroupId::toHex(mi->getGID()).c_str()) == 0 || fp.write("\n", 1) != 1) {
+      if(!writeOptionLine(fp, PREF_GID, GroupId::toHex(mi->getGID()))) {
         return false;
       }
     }
@@ -281,8 +272,7 @@ bool SessionSerializer::save(BufferedFile& fp) const
       // PREF_PAUSE was removed from option, so save it here looking
       // property separately.
       if(rg->isPauseRequested()) {
-        if (fp.write(" ", 1) != 1 || fp.write(PREF_PAUSE->k) == 0 ||
-            fp.write("=true\n", 6) != 6) {
+        if(!writeOptionLine(fp, PREF_PAUSE, A2_V_TRUE)) {
           return false;
         }
       }