*/
-#include "scoped_temporary.h"
#include "compose.hpp"
-#include "exceptions.h"
#include "cross.h"
+#include "exceptions.h"
+#include "scoped_temporary.h"
#include "util.h"
+#include <dcp/file.h>
#include <curl/curl.h>
#include <zip.h>
#include <boost/optional.hpp>
using std::function;
using std::list;
using std::string;
-using boost::optional;
using boost::algorithm::trim;
+using boost::optional;
static size_t
auto const cr = curl_easy_perform (curl);
if (cr != CURLE_OK) {
- return list<string>();
+ return {};
}
list<string> result;
auto curl = curl_easy_init ();
curl_easy_setopt (curl, CURLOPT_URL, url.c_str());
- auto f = temp.open ("wb");
+ auto& f = temp.open ("wb");
curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, get_from_url_data);
- curl_easy_setopt (curl, CURLOPT_WRITEDATA, f);
+ curl_easy_setopt (curl, CURLOPT_WRITEDATA, f.get());
curl_easy_setopt (curl, CURLOPT_FTP_USE_EPSV, 0);
curl_easy_setopt (curl, CURLOPT_FTP_USE_EPRT, 0);
if (skip_pasv_ip) {
/* Maximum time is 20s */
curl_easy_setopt (curl, CURLOPT_TIMEOUT, 20);
- CURLcode const cr = curl_easy_perform (curl);
+ auto const cr = curl_easy_perform (curl);
- temp.close ();
+ f.close();
curl_easy_cleanup (curl);
if (cr != CURLE_OK) {
return String::compose (_("Download failed (%1 error %2)"), url, (int) cr);
}
- return optional<string>();
+ return {};
}
optional<string>
-get_from_url (string url, bool pasv, bool skip_pasv_ip, function<optional<string> (boost::filesystem::path)> load)
+get_from_url (string url, bool pasv, bool skip_pasv_ip, function<optional<string> (boost::filesystem::path, string)> load)
{
ScopedTemporary temp;
auto e = get_from_url (url, pasv, skip_pasv_ip, temp);
if (e) {
return e;
}
- return load (temp.file());
+ return load (temp.path(), url);
}
* @param load Function passed a (temporary) filesystem path of the unpacked file.
*/
optional<string>
-get_from_zip_url (string url, string file, bool pasv, bool skip_pasv_ip, function<optional<string> (boost::filesystem::path)> load)
+get_from_zip_url (string url, string file, bool pasv, bool skip_pasv_ip, function<optional<string> (boost::filesystem::path, string)> load)
{
/* Download the ZIP file to temp_zip */
ScopedTemporary temp_zip;
Centos 6, Centos 7, Debian 7 and Debian 8.
*/
- auto zip_file = fopen_boost (temp_zip.file (), "rb");
+ auto& zip_file = temp_zip.open("rb");
if (!zip_file) {
- return optional<string> (_("Could not open downloaded ZIP file"));
+ return string(_("Could not open downloaded ZIP file"));
}
- auto zip_source = zip_source_filep_create (zip_file, 0, -1, 0);
+ auto zip_source = zip_source_filep_create (zip_file.take(), 0, -1, 0);
if (!zip_source) {
- return optional<string> (_("Could not open downloaded ZIP file"));
+ return string(_("Could not open downloaded ZIP file"));
}
zip_error_t error;
struct zip_file* file_in_zip = zip_fopen (zip, file.c_str(), 0);
if (!file_in_zip) {
- return optional<string> (_("Unexpected ZIP file contents"));
+ return string(_("Unexpected ZIP file contents"));
}
ScopedTemporary temp_cert;
- auto f = temp_cert.open ("wb");
+ auto& f = temp_cert.open ("wb");
char buffer[4096];
while (true) {
int const N = zip_fread (file_in_zip, buffer, sizeof (buffer));
- checked_fwrite (buffer, N, f, temp_cert.file());
+ f.checked_write(buffer, N);
if (N < int (sizeof (buffer))) {
break;
}
}
zip_fclose (file_in_zip);
zip_close (zip);
- temp_cert.close ();
+ f.close ();
- return load (temp_cert.file());
+ return load (temp_cert.path(), url);
}