summaryrefslogtreecommitdiff
path: root/zenxml/io.h
diff options
context:
space:
mode:
Diffstat (limited to 'zenxml/io.h')
-rw-r--r--zenxml/io.h125
1 files changed, 0 insertions, 125 deletions
diff --git a/zenxml/io.h b/zenxml/io.h
deleted file mode 100644
index 596d7acf..00000000
--- a/zenxml/io.h
+++ /dev/null
@@ -1,125 +0,0 @@
-// **************************************************************************
-// * This file is part of the zen::Xml project. It is distributed under the *
-// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *
-// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
-// **************************************************************************
-
-#ifndef ZEN_XML_IO_HEADER_8917640501480763248343343
-#define ZEN_XML_IO_HEADER_8917640501480763248343343
-
-#include <cstdio>
-#include <cerrno>
-#include <zen/scope_guard.h>
-#include <zen/utf.h>
-#include "error.h"
-
-namespace zen
-{
-/**
-\file
-\brief Save and load byte streams from files
-*/
-
-#if !defined(ZEN_WIN) && !defined(ZEN_LINUX) && !defined(ZEN_MAC)
-#error Please specify your platform: #define ZEN_WIN, ZEN_LINUX or ZEN_MAC
-#endif
-
-
-///Exception thrown due to failed file I/O
-struct XmlFileError : public XmlError
-{
- typedef int ErrorCode;
-
- explicit XmlFileError(ErrorCode ec) : lastError(ec) {}
- ///Native error code: errno
- ErrorCode lastError;
-};
-
-
-#ifdef ZEN_WIN
-namespace implemenation //sad but true
-{
-template <class String> inline
-FILE* fopen(const String& filename, const wchar_t* mode)
-{
-#ifdef _MSC_VER
- FILE* handle = nullptr;
- errno_t rv = ::_wfopen_s(&handle, utfCvrtTo<std::wstring>(filename).c_str(), mode); //more secure?
- (void)rv;
- return handle;
-#else
- return ::_wfopen(utfCvrtTo<std::wstring>(filename).c_str(), mode);
-#endif
-}
-}
-#endif
-
-
-///Save byte stream to a file
-/**
-\tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...
-\param stream Input byte stream
-\param filename Output file name
-\throw XmlFileError
-*/
-template <class String>
-void saveStream(const std::string& stream, const String& filename) //throw XmlFileError
-{
-#ifdef ZEN_WIN
- FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L"wb");
-#else
- FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), "w");
-#endif
- if (handle == nullptr)
- throw XmlFileError(errno);
- ZEN_ON_SCOPE_EXIT(::fclose(handle));
-
- const size_t bytesWritten = ::fwrite(stream.c_str(), 1, stream.size(), handle);
- if (::ferror(handle) != 0)
- throw XmlFileError(errno);
-
- (void)bytesWritten;
- assert(bytesWritten == stream.size());
-}
-
-
-///Load byte stream from a file
-/**
-\tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...
-\param filename Input file name
-\return Output byte stream
-\throw XmlFileError
-*/
-template <class String>
-std::string loadStream(const String& filename) //throw XmlFileError
-{
-#ifdef ZEN_WIN
- FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L"rb");
-#else
- FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), "r");
-#endif
- if (handle == nullptr)
- throw XmlFileError(errno);
- ZEN_ON_SCOPE_EXIT(::fclose(handle));
-
- std::string stream;
- const size_t blockSize = 64 * 1024;
- do
- {
- stream.resize(stream.size() + blockSize); //let's pray std::string implements exponential growth!
-
- const size_t bytesRead = ::fread(&*(stream.begin() + stream.size() - blockSize), 1, blockSize, handle);
- if (::ferror(handle))
- throw XmlFileError(errno);
- if (bytesRead > blockSize)
- throw XmlFileError(0);
- if (bytesRead < blockSize)
- stream.resize(stream.size() - (blockSize - bytesRead)); //caveat: unsigned arithmetics
- }
- while (!::feof(handle));
-
- return stream;
-}
-}
-
-#endif //ZEN_XML_IO_HEADER_8917640501480763248343343
bgstack15