diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2018-02-28 12:05:06 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2018-02-28 18:27:14 +0100 |
commit | 7df799b20555785c6591e824c967898f4683a644 (patch) | |
tree | e2a5585e471129bbb82fbecab366f9dee9a1b87b /ffi/include | |
parent | 02b0ae4af0462d4576133254ae3dbe510e9cd6d7 (diff) |
ffi: Create glue for readers and writers.
- Add support for generic readers (i.e. implementations of
std::io::Read) and writers.
- Implemented constructors allow creating both readers and writers
by opening a file, using an existing file descriptor, or by
backing it with a provided buffer.
Diffstat (limited to 'ffi/include')
-rw-r--r-- | ffi/include/sequoia/core.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/ffi/include/sequoia/core.h b/ffi/include/sequoia/core.h index 6f091dbf..fb775926 100644 --- a/ffi/include/sequoia/core.h +++ b/ffi/include/sequoia/core.h @@ -4,6 +4,7 @@ #include <stddef.h> #include <stdint.h> #include <limits.h> +#include <unistd.h> /* sequoia::Context. */ @@ -220,4 +221,72 @@ void sq_config_ipc_policy(sq_config_t cfg, sq_ipc_policy_t policy); /*/ void sq_config_ephemeral(sq_config_t cfg); + +/* Reader and writer. */ + +/*/ +/// A generic reader. +/*/ +typedef struct sq_reader *sq_reader_t; + +/*/ +/// Opens a file returning a reader. +/*/ +sq_reader_t sq_reader_from_file (sq_context_t ctx, const char *filename); + +/*/ +/// Opens a file descriptor returning a reader. +/*/ +sq_reader_t sq_reader_from_fd (int fd); + +/*/ +/// Creates a reader from a buffer. +/*/ +sq_reader_t sq_reader_from_bytes (const uint8_t *buf, size_t len); + +/*/ +/// Frees a reader. +/*/ +void sq_reader_free (sq_reader_t reader); + +/*/ +/// Reads up to `len` bytes into `buf`. +/*/ +ssize_t sq_reader_read (sq_context_t ctx, sq_reader_t reader, + uint8_t *buf, size_t len); + +/*/ +/// A generic writer. +/*/ +typedef struct sq_writer *sq_writer_t; + +/*/ +/// Opens a file returning a writer. +/// +/// The file will be created if it does not exist, or be truncated +/// otherwise. If you need more control, use `sq_writer_from_fd`. +/*/ +sq_writer_t sq_writer_from_file (sq_context_t ctx, const char *filename); + +/*/ +/// Opens a file descriptor returning a writer. +/*/ +sq_writer_t sq_writer_from_fd (int fd); + +/*/ +/// Creates a writer from a buffer. +/*/ +sq_writer_t sq_writer_from_bytes (uint8_t *buf, size_t len); + +/*/ +/// Frees a writer. +/*/ +void sq_writer_free (sq_writer_t writer); + +/*/ +/// Writes up to `len` bytes into `buf`. +/*/ +ssize_t sq_writer_write (sq_context_t ctx, sq_writer_t writer, + const uint8_t *buf, size_t len); + #endif |