[*] Address *some* build issues under Linux. Interim port progress

This commit is contained in:
Reece Wilson 2022-04-04 08:53:34 +01:00
parent 62e3490d9f
commit 5a96a71949
6 changed files with 88 additions and 39 deletions

View File

@ -90,7 +90,6 @@ namespace Aurora::Memory
} }
this->base = temp; this->base = temp;
this->length = this->length;
this->allocSize = this->length; this->allocSize = this->length;
} }

View File

@ -7,6 +7,11 @@
***/ ***/
#pragma once #pragma once
#if defined(AURORA_COMPILER_CLANG)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch"
#endif
namespace Aurora::Memory namespace Aurora::Memory
{ {
bool ByteBuffer::WriteString(const AuString &string, EStringType type, Locale::ECodePage codepage) bool ByteBuffer::WriteString(const AuString &string, EStringType type, Locale::ECodePage codepage)
@ -134,4 +139,8 @@ namespace Aurora::Memory
// TODO: ... // TODO: ...
return {}; return {};
} }
} }
#if defined(AURORA_COMPILER_CLANG)
#pragma GCC diagnostic pop
#endif

View File

@ -8,7 +8,14 @@
#pragma once #pragma once
#include <Source/RuntimeInternal.hpp> #include <Source/RuntimeInternal.hpp>
#include "Debug.hpp" #include "Debug.hpp"
#include <DbgHelp.h>
#if defined(AURORA_IS_MODERNNT_DERIVED)
#include <DbgHelp.h>
#endif
#if defined(AURORA_COMPILER_CLANG)
#include <cxxabi.h>
#endif
namespace Aurora::Debug namespace Aurora::Debug
{ {

View File

@ -1,3 +1,10 @@
/***
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: FileStream.Unix.cpp
Date: 2021-6-12
Author: Reece
***/
#define _FILE_OFFSET_BITS 64 #define _FILE_OFFSET_BITS 64
#define _LARGEFILE64_SOURCE #define _LARGEFILE64_SOURCE
@ -34,8 +41,7 @@ namespace Aurora::IO::FS
if (ret < 0) if (ret < 0)
{ {
LogWarn("PosixLseek63 IO Error %i", ret); SysPushErrorIO("PosixLseek63 IO Error: %i", ret);
SysPushErrorIO("PosixLseek63: %i", ret);
return false; return false;
} }
@ -84,8 +90,7 @@ namespace Aurora::IO::FS
if (ret < 0) if (ret < 0)
{ {
LogWarn("PosixRead IO Error %i", ret); SysPushErrorIO("PosixRead IO Error: %i", ret);
SysPushErrorIO("PosixRead: %i", ret);
return false; return false;
} }
@ -103,8 +108,7 @@ namespace Aurora::IO::FS
if (ret < 0) if (ret < 0)
{ {
LogWarn("PosixWrite IO Error %i", ret); SysPushErrorIO("PosixWrite IO Error: %i", ret);
SysPushErrorIO("PosixWrite: %i", ret);
return false; return false;
} }
@ -122,52 +126,64 @@ namespace Aurora::IO::FS
Close(); Close();
} }
void PosixFileStream::Init(int handle, const AuString &path) bool PosixFileStream::Init(int handle, const AuString &path)
{ {
handle_ = handle; AuCtorCode_t code;
path_ = path;
this->handle_ = handle;
this->path_ = AuTryConstruct<AuString>(code, path);
if (!code)
{
return false;
}
return true;
} }
// TODO: spinlock
AuUInt64 PosixFileStream::GetOffset() AuUInt64 PosixFileStream::GetOffset()
{ {
if (handle_ == -1) AU_LOCK_GUARD(this->spinlock_);
if (this->handle_ == -1)
{ {
SysPushErrorUninitialized(); SysPushErrorUninitialized();
return 0; return 0;
} }
return PosixGetOffset(handle_); return PosixGetOffset(this->handle_);
} }
// ...
bool PosixFileStream::SetOffset(AuUInt64 offset) bool PosixFileStream::SetOffset(AuUInt64 offset)
{ {
if (handle_ == -1) AU_LOCK_GUARD(this->spinlock_);
if (this->handle_ == -1)
{ {
SysPushErrorUninitialized(); SysPushErrorUninitialized();
return 0; return 0;
} }
return PosixSetOffset(handle_, offset); return PosixSetOffset(this->handle_, offset);
} }
// ...
AuUInt64 PosixFileStream::GetLength() AuUInt64 PosixFileStream::GetLength()
{ {
if (handle_ == -1) AU_LOCK_GUARD(this->spinlock_);
if (this->handle_ == -1)
{ {
SysPushErrorUninitialized(); SysPushErrorUninitialized();
return 0; return 0;
} }
return PosixGetLength(handle_); return PosixGetLength(this->handle_);
} }
// ...
bool PosixFileStream::Read(const Memory::MemoryViewStreamWrite &parameters) bool PosixFileStream::Read(const Memory::MemoryViewStreamWrite &parameters)
{ {
if (handle_ == -1) AU_LOCK_GUARD(this->spinlock_);
if (this->handle_ == -1)
{ {
SysPushErrorUninitialized(); SysPushErrorUninitialized();
return 0; return 0;
@ -179,7 +195,7 @@ namespace Aurora::IO::FS
{ {
AuUInt32 read; AuUInt32 read;
int blockSize = std::min(kFileCopyBlock, length); int blockSize = AuMin(kFileCopyBlock, length);
if (!PosixRead(handle_, &reinterpret_cast<char *>(parameters.ptr)[offset], blockSize, &read)) if (!PosixRead(handle_, &reinterpret_cast<char *>(parameters.ptr)[offset], blockSize, &read))
{ {
@ -205,24 +221,25 @@ namespace Aurora::IO::FS
return true; return true;
} }
// ...
bool PosixFileStream::Write(const Memory::MemoryViewStreamRead &parameters) bool PosixFileStream::Write(const Memory::MemoryViewStreamRead &parameters)
{ {
if (handle_ == -1) AU_LOCK_GUARD(this->spinlock_);
if (this->handle_ == -1)
{ {
SysPushErrorUninitialized(); SysPushErrorUninitialized();
return 0; return 0;
} }
auto length = parameters.length; AuUInt length = parameters.length;
AuUInt offset {0}; AuUInt offset {0};
while (length) while (length)
{ {
AuUInt32 written; AuUInt32 written;
int blockSize = std::min(kFileCopyBlock, length); int blockSize = AuMin(AuUInt(kFileCopyBlock), length);
if (!PosixWrite(handle_, &reinterpret_cast<const char *>(parameters.ptr)[offset], blockSize, &written)) if (!PosixWrite(this->handle_, &reinterpret_cast<const char *>(parameters.ptr)[offset], blockSize, &written))
{ {
SysPushErrorNested("File Error: {}", path_); SysPushErrorNested("File Error: {}", path_);
return false; return false;
@ -230,7 +247,6 @@ namespace Aurora::IO::FS
if (written != blockSize) if (written != blockSize)
{ {
SysPushErrorIO();
SysPushErrorNested("File Error: {}", path_); SysPushErrorNested("File Error: {}", path_);
break; break;
} }
@ -252,20 +268,30 @@ namespace Aurora::IO::FS
{ {
int handle; int handle;
if ((handle = std::exchange(handle_, -1)) != -1) if ((handle = std::exchange(this->handle_, -1)) != -1)
{ {
::close(handle); ::close(handle);
} }
if (AuExchange(this->bMadeTemporary, false))
{
::unlink(this->path_.c_str());
}
} }
void PosixFileStream::Flush() void PosixFileStream::Flush()
{ {
fsync(handle_); ::fsync(this->handle_);
} }
void PosixFileStream::WriteEoS() void PosixFileStream::WriteEoS()
{ {
ftruncate(handle_, GetOffset()); ::ftruncate(this->handle_, GetOffset());
}
void PosixFileStream::MakeTemporary()
{
this->bMadeTemporary = true;
} }
static IFileStream *OpenNew(const AuString &path, bool read) static IFileStream *OpenNew(const AuString &path, bool read)
@ -281,7 +307,6 @@ namespace Aurora::IO::FS
if (fileHandle < 0) if (fileHandle < 0)
{ {
LogWarn("Couldn't open file: {}", path);
SysPushErrorIO("Couldn't open file: {}", path); SysPushErrorIO("Couldn't open file: {}", path);
return nullptr; return nullptr;
} }
@ -289,11 +314,16 @@ namespace Aurora::IO::FS
auto stream = _new PosixFileStream(); auto stream = _new PosixFileStream();
if (!stream) if (!stream)
{ {
close(fileHandle); ::close(fileHandle);
return nullptr;
}
if (!stream->Init(fileHandle, pathex))
{
delete stream;
return nullptr; return nullptr;
} }
stream->Init(fileHandle, pathex);
return stream; return stream;
} }

View File

@ -1,7 +1,7 @@
/*** /***
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: FileStream.Win32.hpp File: FileStream.Unix.hpp
Date: 2021-6-12 Date: 2021-6-12
Author: Reece Author: Reece
***/ ***/
@ -16,7 +16,7 @@ namespace Aurora::IO::FS
public: public:
~PosixFileStream(); ~PosixFileStream();
void Init(int handle, const AuString &path); bool Init(int handle, const AuString &path);
AuUInt64 GetOffset() override; AuUInt64 GetOffset() override;
bool SetOffset(AuUInt64 offset) override; bool SetOffset(AuUInt64 offset) override;
@ -26,11 +26,14 @@ namespace Aurora::IO::FS
void Close() override; void Close() override;
void Flush() override; void Flush() override;
void WriteEoS() override; void WriteEoS() override;
void MakeTemporary() override;
private: private:
int handle_ = -1; int handle_ = -1;
AuString path_; AuString path_;
AuThreadPrimitives::SpinLock spinlock_;
bool bMadeTemporary {};
}; };
} }
#endif #endif

View File

@ -44,6 +44,7 @@
#endif #endif
#include <pthread.h> #include <pthread.h>
#include <semaphore.h>
#include <signal.h> #include <signal.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>