diff --git a/CMakeLists.txt b/CMakeLists.txt index 956cdc0..c806aaa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,10 @@ cmake_minimum_required(VERSION 3.13) project(gemhadar LANGUAGES C) +add_subdirectory(lib) + add_executable(gemhadar "main.c" ) set_property(TARGET gemhadar PROPERTY C_STANDARD 11) +target_link_libraries(gemhadar gemhadar_lib) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 0000000..aafe8a4 --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(gemhadar_lib + "fd_io.c" +) +target_include_directories(gemhadar_lib PUBLIC "include") +set_property(TARGET gemhadar_lib PROPERTY C_STANDARD 11) diff --git a/lib/fd_io.c b/lib/fd_io.c new file mode 100644 index 0000000..16d05f3 --- /dev/null +++ b/lib/fd_io.c @@ -0,0 +1,25 @@ +#include "io_abs.h" + +#include + +static ssize_t fd_reader_read(void *ctx, uint8_t *buf, size_t len) +{ + return read((intptr_t)ctx, buf, len); +} + +void fd_reader(int fd, struct io_reader *reader_out) +{ + reader_out->ctx = (void *)(intptr_t)fd; + reader_out->read = fd_reader_read; +} + +static ssize_t fd_writer_write(void *ctx, const uint8_t *buf, size_t len) +{ + return write((intptr_t)ctx, buf, len); +} + +void fd_writer(int fd, struct io_writer *writer_out) +{ + writer_out->ctx = (void *)(intptr_t)fd; + writer_out->write = fd_writer_write; +} diff --git a/lib/include/fd_io.h b/lib/include/fd_io.h new file mode 100644 index 0000000..1a3c26f --- /dev/null +++ b/lib/include/fd_io.h @@ -0,0 +1,9 @@ +#ifndef FD_IO_H +#define FD_IO_H + +#include "io_abs.h" + +void fd_reader(int fd, struct io_reader *reader_out); +void fd_writer(int fd, struct io_writer *writer_out); + +#endif diff --git a/lib/include/io_abs.h b/lib/include/io_abs.h new file mode 100644 index 0000000..d1b4e0f --- /dev/null +++ b/lib/include/io_abs.h @@ -0,0 +1,17 @@ +#ifndef IO_ABS_H +#define IO_ABS_H + +#include +#include + +struct io_reader { + void *ctx; + ssize_t (*read)(void *ctx, uint8_t *buf, size_t len); +}; + +struct io_writer { + void *ctx; + ssize_t (*write)(void *ctx, const uint8_t *buf, size_t len); +}; + +#endif