-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathoutfile.cpp
More file actions
54 lines (47 loc) · 1.61 KB
/
outfile.cpp
File metadata and controls
54 lines (47 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// *************************************************************************
// This file is part of AcidMUD by Steaphan Greene
//
// Copyright 1999-2022 Steaphan Greene <steaphan@gmail.com>
//
// AcidMUD 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.
//
// AcidMUD 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 AcidMUD (see the file named "COPYING");
// If not, see <http://www.gnu.org/licenses/>.
//
// *************************************************************************
#include <cstdio>
#include <fcntl.h>
#include <unistd.h>
#include "outfile.hpp"
outfile::outfile(const std::u8string_view& filename) {
std::filesystem::path path(filename);
fd = ::open(path.c_str(), O_WRONLY | O_CREAT | O_EXCL | O_CLOEXEC, S_IRUSR | S_IWUSR);
if (fd < 0) {
::perror("outfile::init() open()");
} else {
buffer.reserve(65536);
}
}
void outfile::append(const std::u8string_view& mes) {
buffer += mes;
while (buffer.length() > 4096) {
::write(fd, buffer.data(), 4096);
buffer = buffer.substr(4096);
}
}
outfile::operator bool() const {
return (fd >= 0);
}
outfile::~outfile() {
::write(fd, buffer.data(), buffer.length());
::close(fd);
}