Unverified Commit adf5ce0e authored by Dennis Jenkins's avatar Dennis Jenkins Committed by GitHub

Merge pull request #349 from knowledge4igor/fix_issue_346

Fix issue #346
parents b88af74d 9b4744c6
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <sstream> #include <sstream>
#include <algorithm> #include <algorithm>
#include <memory> #include <memory>
#include <string>
#include <sys/timerfd.h> #include <sys/timerfd.h>
...@@ -443,7 +444,7 @@ class ResponseWriter : public Response { ...@@ -443,7 +444,7 @@ class ResponseWriter : public Response {
public: public:
static constexpr size_t DefaultStreamSize = 512; static constexpr size_t DefaultStreamSize = 512;
friend Async::Promise<ssize_t> serveFile(ResponseWriter&, const char *, const Mime::MediaType&); friend Async::Promise<ssize_t> serveFile(ResponseWriter&, const std::string&, const Mime::MediaType&);
friend class Handler; friend class Handler;
friend class Timeout; friend class Timeout;
...@@ -602,7 +603,7 @@ private: ...@@ -602,7 +603,7 @@ private:
}; };
Async::Promise<ssize_t> serveFile( Async::Promise<ssize_t> serveFile(
ResponseWriter& response, const char *fileName, ResponseWriter& response, const std::string& fileName,
const Mime::MediaType& contentType = Mime::MediaType()); const Mime::MediaType& contentType = Mime::MediaType());
namespace Private { namespace Private {
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <vector> #include <vector>
#include <limits> #include <limits>
#include <iostream> #include <iostream>
#include <string>
#include <pistache/os.h> #include <pistache/os.h>
...@@ -158,7 +159,6 @@ struct FileBuffer { ...@@ -158,7 +159,6 @@ struct FileBuffer {
, size_() , size_()
{ } { }
FileBuffer(const char* fileName);
FileBuffer(const std::string& fileName); FileBuffer(const std::string& fileName);
std::string fileName() const { return fileName_; } std::string fileName() const { return fileName_; }
...@@ -166,7 +166,6 @@ struct FileBuffer { ...@@ -166,7 +166,6 @@ struct FileBuffer {
size_t size() const { return size_; } size_t size() const { return size_; }
private: private:
void init(const char* fileName);
std::string fileName_; std::string fileName_;
Fd fd_; Fd fd_;
size_t size_; size_t size_;
......
...@@ -461,14 +461,14 @@ Swagger::install(Rest::Router& router) { ...@@ -461,14 +461,14 @@ Swagger::install(Rest::Router& router) {
response.send(Http::Code::Moved_Permanently); response.send(Http::Code::Moved_Permanently);
} else { } else {
auto index = uiDir.join("index.html"); auto index = uiDir.join("index.html");
Http::serveFile(response, index.c_str()); Http::serveFile(response, index);
} }
return Route::Result::Ok; return Route::Result::Ok;
} }
else if (ui.isPrefix(req)) { else if (ui.isPrefix(req)) {
auto file = ui.stripPrefix(req); auto file = ui.stripPrefix(req);
auto path = uiDir.join(file); auto path = uiDir.join(file);
Http::serveFile(response, path.c_str()); Http::serveFile(response, path);
return Route::Result::Ok; return Route::Result::Ok;
} }
......
...@@ -681,11 +681,11 @@ ResponseWriter::putOnWire(const char* data, size_t len) ...@@ -681,11 +681,11 @@ ResponseWriter::putOnWire(const char* data, size_t len)
} }
Async::Promise<ssize_t> Async::Promise<ssize_t>
serveFile(ResponseWriter& response, const char* fileName, const Mime::MediaType& contentType) serveFile(ResponseWriter& response, const std::string& fileName, const Mime::MediaType& contentType)
{ {
struct stat sb; struct stat sb;
int fd = open(fileName, O_RDONLY); int fd = open(fileName.c_str(), O_RDONLY);
if (fd == -1) { if (fd == -1) {
std::string str_error(strerror(errno)); std::string str_error(strerror(errno));
if(errno == ENOENT) { if(errno == ENOENT) {
...@@ -731,7 +731,7 @@ serveFile(ResponseWriter& response, const char* fileName, const Mime::MediaType& ...@@ -731,7 +731,7 @@ serveFile(ResponseWriter& response, const char* fileName, const Mime::MediaType&
if (contentType.isValid()) { if (contentType.isValid()) {
setContentType(contentType); setContentType(contentType);
} else { } else {
auto mime = Mime::MediaType::fromFile(fileName); auto mime = Mime::MediaType::fromFile(fileName.c_str());
if (mime.isValid()) if (mime.isValid())
setContentType(mime); setContentType(mime);
} }
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <iostream> #include <iostream>
#include <algorithm> #include <algorithm>
#include <string>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
...@@ -15,25 +16,15 @@ ...@@ -15,25 +16,15 @@
namespace Pistache { namespace Pistache {
FileBuffer::FileBuffer(const char* fileName)
: fileName_(fileName)
{
init(fileName);
}
FileBuffer::FileBuffer(const std::string& fileName) FileBuffer::FileBuffer(const std::string& fileName)
: fileName_(fileName) : fileName_(fileName)
{ {
init(fileName.c_str()); if (fileName.empty()) {
} throw std::runtime_error("Empty fileName");
void
FileBuffer::init(const char* fileName)
{
if (!fileName) {
throw std::runtime_error("Missing fileName");
} }
int fd = open(fileName, O_RDONLY);
int fd = open(fileName.c_str(), O_RDONLY);
if (fd == -1) { if (fd == -1) {
throw std::runtime_error("Could not open file"); throw std::runtime_error("Could not open file");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment