parlib: Add IOVEC helpers
[akaros.git] / user / parlib / include / parlib / iovec.h
1 /* Copyright (c) 2016 Google Inc
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Various iovec utility functions. */
6
7 #pragma once
8
9 #include <sys/uio.h>
10 #include <stdint.h>
11 #include <ros/common.h>
12
13 void iov_strip_bytes(struct iovec *iov, int iovcnt, size_t amt);
14 void iov_drop_trailing_bytes(struct iovec *iov, int iovcnt, size_t amt);
15 void iov_trim_len_to(struct iovec *iov, int iovcnt, size_t new_len);
16
17 bool iov_has_bytes(struct iovec *iov, int iovcnt, size_t amt);
18 size_t iov_get_len(struct iovec *iov, int iovcnt);
19 void iov_linearize(struct iovec *iov, int iovcnt, uint8_t *buf, size_t len);
20
21 void iov_set_byte(struct iovec *iov, int iovcnt, size_t idx, uint8_t val);
22 uint8_t iov_get_byte(struct iovec *iov, int iovcnt, size_t idx);
23 void iov_memcpy_from(struct iovec *iov, int iovcnt, size_t idx,
24                      void *to, size_t amt);
25 void iov_memcpy_to(struct iovec *iov, int iovcnt, size_t to,
26                    void *from, size_t amt);
27
28 uint16_t iov_get_be16(struct iovec *iov, int iovcnt, size_t idx);
29 uint16_t iov_get_be32(struct iovec *iov, int iovcnt, size_t idx);
30 void iov_put_be16(struct iovec *iov, int iovcnt, size_t idx, uint16_t val);
31 void iov_put_be32(struct iovec *iov, int iovcnt, size_t idx, uint32_t val);