diff options
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp')
-rw-r--r-- | Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp deleted file mode 100644 index 55196c76ce8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/************************************************************************* -** SourceInput.cpp ** -** ** -** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** -** ** -** This program is free software; you can redistribute it and/or ** -** modify it under the terms of the GNU General Public License as ** -** published by the Free Software Foundation; either version 3 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 General Public License for more details. ** -** ** -** You should have received a copy of the GNU General Public License ** -** along with this program; if not, see <http://www.gnu.org/licenses/>. ** -*************************************************************************/ - -#include <fstream> -#include <iostream> -#include "FileSystem.hpp" -#include "Message.hpp" -#include "MessageException.hpp" -#include "SourceInput.hpp" -#include "utility.hpp" - -#ifdef _WIN32 -# include <fcntl.h> -# include <sys/stat.h> -# include <windows.h> -#else -# include <config.h> -# ifdef HAVE_UMASK -# include <sys/stat.h> -# endif -#endif - -#ifdef _MSC_VER -# include <io.h> -#else -# include <cstdlib> -# include <unistd.h> -#endif - -using namespace std; - -#ifdef _WIN32 -static int fdwrite (int fd, const char *buf, size_t len) {return _write(fd, buf, len);} -static int fdclose (int fd) {return _close(fd);} -#else -static int fdwrite (int fd, const char *buf, size_t len) {return write(fd, buf, len);} -static int fdclose (int fd) {return close(fd);} -#endif - - -/** Creates a new temporary file in the configured tmp folder. - * If the object already holds an opened temporary file, it's closed - * and removed before creating the new one. - * @return true on success */ -bool TemporaryFile::create () { - if (opened()) - close(); - _path = FileSystem::tmpdir(); -#ifndef _WIN32 - _path += "stdinXXXXXX"; -#ifdef HAVE_UMASK - mode_t mode_mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); // set file permissions to 0600 -#endif - _fd = mkstemp(&_path[0]); -#ifdef HAVE_UMASK - umask(mode_mask); -#endif -#else // !_WIN32 - char fname[MAX_PATH]; - std::replace(_path.begin(), _path.end(), '/', '\\'); - if (GetTempFileName(_path.c_str(), "stdin", 0, fname)) { - _fd = _open(fname, _O_CREAT | _O_WRONLY | _O_BINARY, _S_IWRITE); - _path = fname; - } -#endif - return opened(); -} - - -/** Writes a sequence of characters to the file. - * @param[in] buf buffer containing the characters to write - * @param[in] len number of characters to write - * @return true on success */ -bool TemporaryFile::write (const char *buf, size_t len) { - return opened() && fdwrite(_fd, buf, len) >= 0; -} - - -/** Closes and removes the temporary file. - * @return true on success */ -bool TemporaryFile::close () { - bool ok = true; - if (opened()) { - ok = (fdclose(_fd) >= 0); - FileSystem::remove(_path); - _fd = -1; - _path.clear(); - } - return ok; -} - -//////////////////////////////////////////////////////////////// - -istream& SourceInput::getInputStream (bool showMessages) { - if (!_ifs.is_open()) { - if (!_fname.empty()) - _ifs.open(_fname, ios::binary); - else { -#ifdef _WIN32 - if (_setmode(_fileno(stdin), _O_BINARY) == -1) - throw MessageException("can't open stdin in binary mode"); -#endif - if (!_tmpfile.create()) - throw MessageException("can't create temporary file for writing"); - if (showMessages) - Message::mstream() << "reading from " << getMessageFileName() << '\n'; - char buf[1024]; - while (cin) { - cin.read(buf, 1024); - size_t count = cin.gcount(); - if (!_tmpfile.write(buf, count)) - throw MessageException("failed to write data to temporary file"); - } - _ifs.open(_tmpfile.path(), ios::binary); - } - } - return _ifs; -} - - -string SourceInput::getFileName () const { - return _fname.empty() ? "stdin" : _fname; -} - - -string SourceInput::getMessageFileName () const { - return _fname.empty() ? "<stdin>" : _fname; -} - - -string SourceInput::getFilePath () const { - return _tmpfile.path().empty() ? _fname : _tmpfile.path(); -} |