io: allow mutable memory for mapped_file
This commit is contained in:
parent
5c862400a4
commit
f46c090c72
25
io.cpp
25
io.cpp
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with libgim. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Copyright 2010-2012 Danny Robson <danny@nerdcruft.net>
|
||||
* Copyright 2010-2014 Danny Robson <danny@nerdcruft.net>
|
||||
*/
|
||||
|
||||
#include "io.hpp"
|
||||
@ -182,18 +182,8 @@ util::set_cwd (const boost::filesystem::path &path) {
|
||||
#include <sys/mman.h>
|
||||
|
||||
|
||||
mapped_file::mapped_file (const char *_path):
|
||||
m_fd (open (_path, O_RDONLY))
|
||||
{ load_fd (); }
|
||||
|
||||
|
||||
mapped_file::mapped_file (const std::string &_path):
|
||||
m_fd (open (_path.c_str (), O_RDONLY))
|
||||
{ load_fd (); }
|
||||
|
||||
|
||||
mapped_file::mapped_file (const boost::filesystem::path &_path):
|
||||
m_fd (open (_path.native ().c_str (), O_RDONLY))
|
||||
m_fd (open (_path.native ().c_str (), O_RDWR))
|
||||
{ load_fd (); }
|
||||
|
||||
|
||||
@ -210,7 +200,7 @@ mapped_file::load_fd (void) {
|
||||
throw errno_error ();
|
||||
|
||||
m_size = (size_t)meta.st_size;
|
||||
m_data = (uint8_t *)mmap (NULL, m_size, PROT_READ, MAP_PRIVATE, m_fd, 0);
|
||||
m_data = (uint8_t *)mmap (NULL, m_size, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd, 0);
|
||||
if (m_data == MAP_FAILED)
|
||||
throw errno_error ();
|
||||
}
|
||||
@ -225,6 +215,15 @@ mapped_file::size (void) const {
|
||||
}
|
||||
|
||||
|
||||
uint8_t*
|
||||
mapped_file::data (void) {
|
||||
CHECK (m_size > 0);
|
||||
CHECK (m_data != NULL);
|
||||
|
||||
return m_data;
|
||||
}
|
||||
|
||||
|
||||
const uint8_t*
|
||||
mapped_file::data (void) const {
|
||||
CHECK (m_size > 0);
|
||||
|
9
io.hpp
9
io.hpp
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with libgim. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Copyright 2010-2012 Danny Robson <danny@nerdcruft.net>
|
||||
* Copyright 2010-2014 Danny Robson <danny@nerdcruft.net>
|
||||
*/
|
||||
|
||||
#ifndef __UTIL_IO_HPP
|
||||
@ -114,16 +114,15 @@ namespace util {
|
||||
void load_fd (void);
|
||||
|
||||
public:
|
||||
mapped_file (const char *path);
|
||||
mapped_file (const std::string &path);
|
||||
mapped_file (const boost::filesystem::path &path);
|
||||
|
||||
mapped_file (const mapped_file &rhs);
|
||||
mapped_file& operator =(const mapped_file &rhs);
|
||||
mapped_file (const mapped_file&) = delete;
|
||||
mapped_file& operator= (const mapped_file&) = delete;
|
||||
|
||||
~mapped_file ();
|
||||
|
||||
const uint8_t* data (void) const;
|
||||
uint8_t* data (void);
|
||||
size_t size (void) const;
|
||||
};
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user