xref: /openbsd-src/gnu/llvm/lldb/source/Core/StreamFile.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1dda28197Spatrick //===-- StreamFile.cpp ----------------------------------------------------===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9061da546Spatrick #include "lldb/Core/StreamFile.h"
10061da546Spatrick #include "lldb/Host/FileSystem.h"
11*f6aab3d8Srobert #include "lldb/Utility/LLDBLog.h"
12061da546Spatrick #include "lldb/Utility/Log.h"
13061da546Spatrick 
14be691f3bSpatrick #include <cstdio>
15061da546Spatrick 
16061da546Spatrick using namespace lldb;
17061da546Spatrick using namespace lldb_private;
18061da546Spatrick 
StreamFile(uint32_t flags,uint32_t addr_size,ByteOrder byte_order)19061da546Spatrick StreamFile::StreamFile(uint32_t flags, uint32_t addr_size, ByteOrder byte_order)
20061da546Spatrick     : Stream(flags, addr_size, byte_order) {
21061da546Spatrick   m_file_sp = std::make_shared<File>();
22061da546Spatrick }
23061da546Spatrick 
StreamFile(int fd,bool transfer_ownership)24061da546Spatrick StreamFile::StreamFile(int fd, bool transfer_ownership) : Stream() {
25*f6aab3d8Srobert   m_file_sp = std::make_shared<NativeFile>(fd, File::eOpenOptionWriteOnly,
26*f6aab3d8Srobert                                            transfer_ownership);
27061da546Spatrick }
28061da546Spatrick 
StreamFile(FILE * fh,bool transfer_ownership)29061da546Spatrick StreamFile::StreamFile(FILE *fh, bool transfer_ownership) : Stream() {
30061da546Spatrick   m_file_sp = std::make_shared<NativeFile>(fh, transfer_ownership);
31061da546Spatrick }
32061da546Spatrick 
StreamFile(const char * path,File::OpenOptions options,uint32_t permissions)33061da546Spatrick StreamFile::StreamFile(const char *path, File::OpenOptions options,
34061da546Spatrick                        uint32_t permissions)
35061da546Spatrick     : Stream() {
36061da546Spatrick   auto file = FileSystem::Instance().Open(FileSpec(path), options, permissions);
37061da546Spatrick   if (file)
38061da546Spatrick     m_file_sp = std::move(file.get());
39061da546Spatrick   else {
40061da546Spatrick     // TODO refactor this so the error gets popagated up instead of logged here.
41*f6aab3d8Srobert     LLDB_LOG_ERROR(GetLog(LLDBLog::Host), file.takeError(),
42061da546Spatrick                    "Cannot open {1}: {0}", path);
43061da546Spatrick     m_file_sp = std::make_shared<File>();
44061da546Spatrick   }
45061da546Spatrick }
46061da546Spatrick 
47be691f3bSpatrick StreamFile::~StreamFile() = default;
48061da546Spatrick 
Flush()49061da546Spatrick void StreamFile::Flush() { m_file_sp->Flush(); }
50061da546Spatrick 
WriteImpl(const void * s,size_t length)51061da546Spatrick size_t StreamFile::WriteImpl(const void *s, size_t length) {
52061da546Spatrick   m_file_sp->Write(s, length);
53061da546Spatrick   return length;
54061da546Spatrick }
55