summaryrefslogtreecommitdiff
path: root/ftparchive/multicompress.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-05-11 15:08:08 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2015-05-11 17:22:33 +0200
commit88593886a42025d51d76051da5929b044e42efee (patch)
tree6212ec08e3ac872573ca5faefb400a7914051bee /ftparchive/multicompress.cc
parent8d058ea53b18348f81229049a27d14282bd8d8c1 (diff)
rewrite all TFRewrite instances to use the new pkgTagSection::Write
While it is mostly busywork to rewrite all instances it actually fixes bugs as the data storage used by the new method is std::string rather than a char*, the later mostly created by c_str() from a std::string which the caller has to ensure keeps in scope – something apt-ftparchive actually didn't ensure and relied on copy-on-write behavior instead which c++11 forbids and hence the new default gcc abi doesn't use it.
Diffstat (limited to 'ftparchive/multicompress.cc')
-rw-r--r--ftparchive/multicompress.cc19
1 files changed, 8 insertions, 11 deletions
diff --git a/ftparchive/multicompress.cc b/ftparchive/multicompress.cc
index f35d5304a..08a3cff5a 100644
--- a/ftparchive/multicompress.cc
+++ b/ftparchive/multicompress.cc
@@ -46,7 +46,6 @@ MultiCompress::MultiCompress(string const &Output,string const &Compress,
{
Outputs = 0;
Outputter = -1;
- Input = 0;
UpdateMTime = 0;
/* Parse the compression string, a space separated lists of compresison
@@ -187,12 +186,11 @@ bool MultiCompress::Start()
};
close(Pipe[0]);
- Input = fdopen(Pipe[1],"w");
- if (Input == 0)
- return _error->Errno("fdopen",_("Failed to create FILE*"));
-
+ if (Input.OpenDescriptor(Pipe[1], FileFd::WriteOnly, true) == false)
+ return false;
+
if (Outputter == -1)
- return _error->Errno("fork",_("Failed to fork"));
+ return _error->Errno("fork",_("Failed to fork"));
return true;
}
/*}}}*/
@@ -201,11 +199,10 @@ bool MultiCompress::Start()
/* */
bool MultiCompress::Die()
{
- if (Input == 0)
+ if (Input.IsOpen() == false)
return true;
-
- fclose(Input);
- Input = 0;
+
+ Input.Close();
bool Res = ExecWait(Outputter,_("Compress child"),false);
Outputter = -1;
return Res;
@@ -217,7 +214,7 @@ bool MultiCompress::Die()
bool MultiCompress::Finalize(unsigned long long &OutSize)
{
OutSize = 0;
- if (Input == 0 || Die() == false)
+ if (Input.IsOpen() == false || Die() == false)
return false;
time_t Now;