12#if defined(OS_USE_OS_APP_CONFIG_H)
13#include <cmsis-plus/os-app-config.h>
33#pragma clang diagnostic ignored "-Wc++98-compat"
49 open (
const char* path,
int oflag, ...)
53 va_start (args, oflag);
54 io*
const ret =
vopen (path, oflag, args);
66 vopen (
const char* path,
int oflag, std::va_list args)
68#if defined(OS_TRACE_POSIX_IO_IO)
69 trace::printf (
"io::%s(\"%s\")\n", __func__, path ? path :
"");
94 int oret =
static_cast<device*
> (
io)->
vopen (path, oflag, args);
106 auto adjusted_path = path;
120 io = fs->vopen (adjusted_path, oflag, args);
132#if defined(OS_TRACE_POSIX_IO_IO)
143 type_ (static_cast<
type_t> (t))
145#if defined(OS_TRACE_POSIX_IO_IO)
154#if defined(OS_TRACE_POSIX_IO_IO)
166#if defined(OS_TRACE_POSIX_IO_IO)
170 if (!
impl ().do_is_opened ())
191#if defined(OS_TRACE_POSIX_IO_IO)
204#if defined(OS_TRACE_POSIX_IO_IO)
219#if defined(OS_TRACE_POSIX_IO_IO)
220 trace::printf (
"io::%s(0x0%X, %u) @%p\n", __func__, buf, nbyte,
this);
229 if (!
impl ().do_is_opened ())
235 if (!
impl ().do_is_connected ())
257 impl ().offset_ += ret;
260#if defined(OS_TRACE_POSIX_IO_IO)
261 trace::printf (
"io::%s(0x0%X, %u) @%p n=%d\n", __func__, buf, nbyte,
270#if defined(OS_TRACE_POSIX_IO_IO)
271 trace::printf (
"io::%s(0x0%X, %u) @%p\n", __func__, buf, nbyte,
this);
280 if (!
impl ().do_is_opened ())
286 if (!
impl ().do_is_connected ())
310 impl ().offset_ += ret;
313#if defined(OS_TRACE_POSIX_IO_IO)
314 trace::printf (
"io::%s(0x0%X, %u) @%p n=%d\n", __func__, buf, nbyte,
323#if defined(OS_TRACE_POSIX_IO_IO)
324 trace::printf (
"io::%s(0x0%X, %d) @%p\n", __func__, iov, iovcnt,
this);
339 if (!
impl ().do_is_opened ())
345 if (!
impl ().do_is_connected ())
357 impl ().offset_ += ret;
367 va_start (args, cmd);
368 int ret =
vfcntl (cmd, args);
374#pragma GCC diagnostic push
375#if defined(__clang__)
376#elif defined(__GNUC__)
377#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
382#if defined(OS_TRACE_POSIX_IO_IO)
386 if (!
impl ().do_is_opened ())
392 if (!
impl ().do_is_connected ())
403#pragma GCC diagnostic pop
418#if defined(OS_TRACE_POSIX_IO_IO)
428 if (!
impl ().do_is_opened ())
434 if (!
impl ().do_is_connected ())
449#if defined(OS_TRACE_POSIX_IO_IO)
450 trace::printf (
"io::%s(%d, %d) @%p\n", __func__, offset, whence,
this);
453 if (!
impl ().do_is_opened ())
469#if defined(OS_TRACE_POSIX_IO_IO)
476#if defined(OS_TRACE_POSIX_IO_IO)
487#pragma GCC diagnostic push
488#if defined(__clang__)
489#pragma clang diagnostic ignored "-Wunused-parameter"
490#elif defined(__GNUC__)
491#pragma GCC diagnostic ignored "-Wunused-parameter"
492#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
506#pragma GCC diagnostic push
507#if defined(__clang__)
508#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
510 const iovec* p = iov;
511 for (
int i = 0; i < iovcnt; ++i, ++p)
520#pragma GCC diagnostic pop
545#pragma GCC diagnostic pop
static value_type * identify_device(const char *path)
static int deallocate(file_descriptor_t fildes)
static int allocate(class io *io)
static file_system * identify_mounted(const char **path1, const char **path2=nullptr)
virtual bool do_is_connected(void)
virtual int do_close(void)=0
virtual ssize_t do_writev(const iovec *iov, int iovcnt)
virtual int do_vfcntl(int cmd, std::va_list args)
virtual int do_isatty(void)
virtual ssize_t do_write(const void *buf, std::size_t nbyte)=0
virtual void do_deallocate(void)
virtual ssize_t do_read(void *buf, std::size_t nbyte)=0
virtual int do_fstat(struct stat *buf)
virtual off_t do_lseek(off_t offset, int whence)=0
virtual ssize_t writev(const iovec *iov, int iovcnt)
file_descriptor_t file_descriptor(void) const
io(io_impl &impl, type t)
virtual off_t lseek(off_t offset, int whence)
io * alloc_file_descriptor(void)
io_impl & impl(void) const
virtual int fstat(struct stat *buf)
virtual ssize_t write(const void *buf, std::size_t nbyte)
void clear_file_descriptor(void)
virtual ssize_t read(void *buf, std::size_t nbyte)
virtual int vfcntl(int cmd, std::va_list args)
int printf(const char *format,...)
Write a formatted string to the trace device.
io * open(const char *path, int oflag,...)
io * vopen(const char *path, int oflag, std::va_list args)
int stat(const char *path, struct stat *buf)
constexpr file_descriptor_t no_file_descriptor