diff options
Diffstat (limited to 'lib/Output.cc')
-rw-r--r-- | lib/Output.cc | 328 |
1 files changed, 164 insertions, 164 deletions
diff --git a/lib/Output.cc b/lib/Output.cc index 8ae02b7..310ca79 100644 --- a/lib/Output.cc +++ b/lib/Output.cc @@ -1,164 +1,164 @@ -/*
- * Baltisot
- * Copyright (C) 1999-2003 Nicolas "Pixel" Noble
- *
- * 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 2 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/* $Id: Output.cc,v 1.21 2004-11-27 21:35:19 pixel Exp $ */
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#else
-#include <io.h>
-#endif
-#include <fcntl.h>
-#include "Output.h"
-#include "Exceptions.h"
-#include "gettext.h"
-
-#ifndef S_ISREG
-#define S_ISREG(x) 1
-#endif
-
-Output::Output(String no, int create, int trunc) throw (GeneralException) :
- Handle(no.strlen() ? wrapopen(no.to_charp(), create, trunc) : dup(1)),
- n(no) {
- if (GetHandle() < 0) {
- throw IOGeneral(String(_("Error opening file ")) + no + _(" for writing: ") + strerror(errno));
- }
-
- size = lseek(GetHandle(), 0, SEEK_END);
- lseek(GetHandle(), 0, SEEK_SET);
-
- struct stat s;
-
- fstat(GetHandle(), &s);
-
- date_modif = s.st_mtime;
-}
-
-int Output::wrapopen(const String & n, int create, int trunc) {
- hFile = 0;
-#ifndef _WIN32
- return open(n.to_charp(), (create ? O_CREAT : 0) |
- (trunc ? O_TRUNC : 0) | O_WRONLY, 00666);
-#else
-#ifdef NO_HFILE
- return _creat(n.to_charp(), _S_IREAD | _S_IWRITE);
-#else
- DWORD dwCreationDisposition;
- switch ((create ? 1 : 0) | (trunc ? 2 : 0)) {
- case 0: // no creation, no trunc
- dwCreationDisposition = OPEN_EXISTING;
- break;
- case 1: // creation, no trunc if existing
- dwCreationDisposition = OPEN_ALWAYS;
- break;
- case 2: // no creation, trunc of existing file
- dwCreationDisposition = TRUNCATE_EXISTING;
- break;
- case 3: // creation, truc if existing
- dwCreationDisposition = CREATE_ALWAYS;
- break;
- }
- hFile = CreateFile(
- n.to_charp(),
- GENERIC_WRITE,
- FILE_SHARE_READ,
- 0,
- dwCreationDisposition,
- FILE_ATTRIBUTE_ARCHIVE,
- 0);
- return _open_osfhandle((INT_PTR) hFile, O_WRONLY | O_BINARY);
-#endif
-#endif
-}
-
-Output::Output(const Output & o) : Handle(o), n(o.n) {
-}
-
-bool Output::CanWrite() const {
- return 1;
-}
-
-bool Output::CanRead() const {
- return 0;
-}
-
-bool Output::CanSeek() const {
- struct stat s;
-
- fstat(GetHandle(), &s);
-
- return S_ISREG(s.st_mode);
-}
-
-off_t Output::seek(off_t offset, int whence) throw (GeneralException) {
- if ((itell = lseek(GetHandle(), offset, whence)) < 0) {
- throw IOGeneral(String(_("Error seeking file ")) + n + _(": ") + strerror(errno));
- }
-#ifdef PARANOID_SEEK
- if (itell != lseek(GetHandle(), 0, SEEK_CUR)) {
- throw IOGeneral(String(_("Error seeking file ")) + n + _(": the position does not match"));
- }
-#endif
- return itell;
-}
-
-String Output::GetName() const {
- return n;
-}
-
-Stdout_t::Stdout_t() {}
-
-bool Stdout_t::CanSeek() const {
- return 0;
-}
-
-String Stdout_t::GetName() const {
- return "Stdout";
-}
-
-Stderr_t::Stderr_t() : Handle(dup(2)) {}
-
-bool Stderr_t::CanWrite() const {
- return 1;
-}
-
-bool Stderr_t::CanRead() const {
- return 0;
-}
-
-bool Stderr_t::CanSeek() const {
- return 0;
-}
-
-String Stderr_t::GetName() const {
- return "Stderr";
-}
-
-#ifdef HOOK_STDS
-Stdout_t Stdout;
-Stderr_t Stderr;
-#endif
+/* + * Baltisot + * Copyright (C) 1999-2003 Nicolas "Pixel" Noble + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: Output.cc,v 1.22 2004-11-27 21:46:04 pixel Exp $ */ + +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/stat.h> +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#else +#include <io.h> +#endif +#include <fcntl.h> +#include "Output.h" +#include "Exceptions.h" +#include "gettext.h" + +#ifndef S_ISREG +#define S_ISREG(x) 1 +#endif + +Output::Output(String no, int create, int trunc) throw (GeneralException) : + Handle(no.strlen() ? wrapopen(no.to_charp(), create, trunc) : dup(1)), + n(no) { + if (GetHandle() < 0) { + throw IOGeneral(String(_("Error opening file ")) + no + _(" for writing: ") + strerror(errno)); + } + + size = lseek(GetHandle(), 0, SEEK_END); + lseek(GetHandle(), 0, SEEK_SET); + + struct stat s; + + fstat(GetHandle(), &s); + + date_modif = s.st_mtime; +} + +int Output::wrapopen(const String & n, int create, int trunc) { + hFile = 0; +#ifndef _WIN32 + return open(n.to_charp(), (create ? O_CREAT : 0) | + (trunc ? O_TRUNC : 0) | O_WRONLY, 00666); +#else +#ifdef NO_HFILE + return _creat(n.to_charp(), _S_IREAD | _S_IWRITE); +#else + DWORD dwCreationDisposition; + switch ((create ? 1 : 0) | (trunc ? 2 : 0)) { + case 0: // no creation, no trunc + dwCreationDisposition = OPEN_EXISTING; + break; + case 1: // creation, no trunc if existing + dwCreationDisposition = OPEN_ALWAYS; + break; + case 2: // no creation, trunc of existing file + dwCreationDisposition = TRUNCATE_EXISTING; + break; + case 3: // creation, truc if existing + dwCreationDisposition = CREATE_ALWAYS; + break; + } + hFile = CreateFile( + n.to_charp(), + GENERIC_WRITE, + FILE_SHARE_READ, + 0, + dwCreationDisposition, + FILE_ATTRIBUTE_ARCHIVE, + 0); + return _open_osfhandle((INT_PTR) hFile, O_WRONLY | O_BINARY); +#endif +#endif +} + +Output::Output(const Output & o) : Handle(o), n(o.n) { +} + +bool Output::CanWrite() const { + return 1; +} + +bool Output::CanRead() const { + return 0; +} + +bool Output::CanSeek() const { + struct stat s; + + fstat(GetHandle(), &s); + + return S_ISREG(s.st_mode); +} + +off_t Output::seek(off_t offset, int whence) throw (GeneralException) { + if ((itell = lseek(GetHandle(), offset, whence)) < 0) { + throw IOGeneral(String(_("Error seeking file ")) + n + _(": ") + strerror(errno)); + } +#ifdef PARANOID_SEEK + if (itell != lseek(GetHandle(), 0, SEEK_CUR)) { + throw IOGeneral(String(_("Error seeking file ")) + n + _(": the position does not match")); + } +#endif + return itell; +} + +String Output::GetName() const { + return n; +} + +Stdout_t::Stdout_t() {} + +bool Stdout_t::CanSeek() const { + return 0; +} + +String Stdout_t::GetName() const { + return "Stdout"; +} + +Stderr_t::Stderr_t() : Handle(dup(2)) {} + +bool Stderr_t::CanWrite() const { + return 1; +} + +bool Stderr_t::CanRead() const { + return 0; +} + +bool Stderr_t::CanSeek() const { + return 0; +} + +String Stderr_t::GetName() const { + return "Stderr"; +} + +#ifdef HOOK_STDS +Stdout_t Stdout; +Stderr_t Stderr; +#endif |