summaryrefslogtreecommitdiff
path: root/src/client/filecache.cpp
diff options
context:
space:
mode:
authorQuentin Bazin <quent42340@gmail.com>2018-11-28 20:01:49 +0100
committerSmallJoker <SmallJoker@users.noreply.github.com>2018-11-28 20:01:49 +0100
commit5f1cd555cd9d1c64426e173b30b5b792d211c835 (patch)
tree2c8508467d3bf28d549cce2d25144fa8ef42beae /src/client/filecache.cpp
parentddd9317b733857630499972179caebc236b4d991 (diff)
downloadminetest-5f1cd555cd9d1c64426e173b30b5b792d211c835.tar.gz
minetest-5f1cd555cd9d1c64426e173b30b5b792d211c835.tar.bz2
minetest-5f1cd555cd9d1c64426e173b30b5b792d211c835.zip
Move client-specific files to 'src/client' (#7902)
Update Android.mk Remove 'src/client' from include_directories
Diffstat (limited to 'src/client/filecache.cpp')
-rw-r--r--src/client/filecache.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/client/filecache.cpp b/src/client/filecache.cpp
new file mode 100644
index 000000000..3d1b302a8
--- /dev/null
+++ b/src/client/filecache.cpp
@@ -0,0 +1,89 @@
+/*
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013 Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "filecache.h"
+
+#include "network/networkprotocol.h"
+#include "log.h"
+#include "filesys.h"
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <cstdlib>
+
+bool FileCache::loadByPath(const std::string &path, std::ostream &os)
+{
+ std::ifstream fis(path.c_str(), std::ios_base::binary);
+
+ if(!fis.good()){
+ verbosestream<<"FileCache: File not found in cache: "
+ <<path<<std::endl;
+ return false;
+ }
+
+ bool bad = false;
+ for(;;){
+ char buf[1024];
+ fis.read(buf, 1024);
+ std::streamsize len = fis.gcount();
+ os.write(buf, len);
+ if(fis.eof())
+ break;
+ if(!fis.good()){
+ bad = true;
+ break;
+ }
+ }
+ if(bad){
+ errorstream<<"FileCache: Failed to read file from cache: \""
+ <<path<<"\""<<std::endl;
+ }
+
+ return !bad;
+}
+
+bool FileCache::updateByPath(const std::string &path, const std::string &data)
+{
+ std::ofstream file(path.c_str(), std::ios_base::binary |
+ std::ios_base::trunc);
+
+ if(!file.good())
+ {
+ errorstream<<"FileCache: Can't write to file at "
+ <<path<<std::endl;
+ return false;
+ }
+
+ file.write(data.c_str(), data.length());
+ file.close();
+
+ return !file.fail();
+}
+
+bool FileCache::update(const std::string &name, const std::string &data)
+{
+ std::string path = m_dir + DIR_DELIM + name;
+ return updateByPath(path, data);
+}
+bool FileCache::load(const std::string &name, std::ostream &os)
+{
+ std::string path = m_dir + DIR_DELIM + name;
+ return loadByPath(path, os);
+}