summaryrefslogtreecommitdiffstats
path: root/ffi/include
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2018-02-28 12:05:06 +0100
committerJustus Winter <justus@sequoia-pgp.org>2018-02-28 18:27:14 +0100
commit7df799b20555785c6591e824c967898f4683a644 (patch)
treee2a5585e471129bbb82fbecab366f9dee9a1b87b /ffi/include
parent02b0ae4af0462d4576133254ae3dbe510e9cd6d7 (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.h69
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