From b1a912a8a6ff472a49b2e0a09cfd433adfc2cb24 Mon Sep 17 00:00:00 2001 From: Benji Dial Date: Sat, 18 May 2024 21:53:38 -0400 Subject: reorganization, cross compiler --- euler/source/io/fclose.cpp | 10 +++++++++ euler/source/io/fopen.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++ euler/source/io/fread.cpp | 9 ++++++++ 3 files changed, 73 insertions(+) create mode 100644 euler/source/io/fclose.cpp create mode 100644 euler/source/io/fopen.cpp create mode 100644 euler/source/io/fread.cpp (limited to 'euler/source/io') diff --git a/euler/source/io/fclose.cpp b/euler/source/io/fclose.cpp new file mode 100644 index 0000000..6f43f85 --- /dev/null +++ b/euler/source/io/fclose.cpp @@ -0,0 +1,10 @@ +#include + +namespace std { + + int fclose(FILE *stream) { + delete stream; + return 0; + } + +} diff --git a/euler/source/io/fopen.cpp b/euler/source/io/fopen.cpp new file mode 100644 index 0000000..8d47bf0 --- /dev/null +++ b/euler/source/io/fopen.cpp @@ -0,0 +1,54 @@ +#include +#include +#include + +namespace std { + + FILE *fopen(const char *filename, const char *mode) { + + bool read = false; + bool write = false; + bool append = false; + bool extended = false; + bool create = false; + + for (const char *p = mode; *p; ++p) + switch (*p) { + case 'r': + read = true; + continue; + case 'w': + write = true; + continue; + case 'a': + append = true; + continue; + case '+': + extended = true; + continue; + case 'x': + create = true; + continue; + default: + continue; + } + + __euler_stream_handle handle; + __euler_stream_result res = __euler_open_file( + filename, strlen(filename), handle, write || append, create); + + if (res != __EULER_SR_SUCCESS) + return 0; + + euler::file_stream *f = new euler::file_stream(handle, read || extended, + write || extended, write && !append, append); + + if (f->good) + return f; + + delete f; + return 0; + + } + +} diff --git a/euler/source/io/fread.cpp b/euler/source/io/fread.cpp new file mode 100644 index 0000000..e2d05b6 --- /dev/null +++ b/euler/source/io/fread.cpp @@ -0,0 +1,9 @@ +#include + +namespace std { + + size_t fread(void *buffer, size_t size, size_t count, FILE *stream) { + return stream->try_read(buffer, size * count) ? count : 0; + } + +} -- cgit v1.2.3