sss_iobuf.c revision 18e4fe9d836e8f7bee52724374ffc0011172329f
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch * @brief The iobuf structure that holds the data, its capacity and
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch * a pointer to the data.
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch * @see sss_iobuf_init_empty()
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch * @see sss_iobuf_init_readonly()
66134fbce11778241ca9f8458ee2a0488a05bde0Stephan Boschstruct sss_iobuf *sss_iobuf_init_empty(TALLOC_CTX *mem_ctx,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch iobuf = talloc_zero(mem_ctx, struct sss_iobuf);
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch buf = talloc_zero_array(iobuf, uint8_t, size);
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boschstruct sss_iobuf *sss_iobuf_init_readonly(TALLOC_CTX *mem_ctx,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch iobuf = sss_iobuf_init_empty(mem_ctx, size, size);
f883bf3eff62f5d27df5ee9ee664edc38a77937fStephan Boschsize_t sss_iobuf_get_len(struct sss_iobuf *iobuf)
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boschsize_t sss_iobuf_get_capacity(struct sss_iobuf *iobuf)
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boschsize_t sss_iobuf_get_size(struct sss_iobuf *iobuf)
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boschuint8_t *sss_iobuf_get_data(struct sss_iobuf *iobuf)
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boschstatic size_t iobuf_get_len(struct sss_iobuf *iobuf)
66134fbce11778241ca9f8458ee2a0488a05bde0Stephan Boschstatic errno_t ensure_bytes(struct sss_iobuf *iobuf,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch /* Enough space already */
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch /* Else, try to extend the iobuf */
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch /* We will never grow past capacity */
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch /* Double the size until we add at least nbytes, but stop if we double past capacity */
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch (newsize < wantsize) && (newsize < iobuf->capacity);
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch newdata = talloc_realloc(iobuf, iobuf->data, uint8_t, newsize);
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boschstatic inline uint8_t *iobuf_ptr(struct sss_iobuf *iobuf)
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boscherrno_t sss_iobuf_read(struct sss_iobuf *iobuf,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch safealign_memcpy(_buf, iobuf_ptr(iobuf), len, &iobuf->dp);
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boscherrno_t sss_iobuf_read_len(struct sss_iobuf *iobuf,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch ret = sss_iobuf_read(iobuf, len, _buf, &read_bytes);
66134fbce11778241ca9f8458ee2a0488a05bde0Stephan Boscherrno_t sss_iobuf_write_len(struct sss_iobuf *iobuf,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch safealign_memcpy(iobuf_ptr(iobuf), buf, len, &iobuf->dp);
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boscherrno_t sss_iobuf_read_uint32(struct sss_iobuf *iobuf,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch SAFEALIGN_COPY_UINT32_CHECK(_val, iobuf_ptr(iobuf),
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boscherrno_t sss_iobuf_read_int32(struct sss_iobuf *iobuf,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch SAFEALIGN_COPY_INT32_CHECK(_val, iobuf_ptr(iobuf),
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boscherrno_t sss_iobuf_write_uint32(struct sss_iobuf *iobuf,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch SAFEALIGN_SETMEM_UINT32(iobuf_ptr(iobuf), val, &iobuf->dp);
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boscherrno_t sss_iobuf_write_int32(struct sss_iobuf *iobuf,
66134fbce11778241ca9f8458ee2a0488a05bde0Stephan Bosch SAFEALIGN_SETMEM_INT32(iobuf_ptr(iobuf), val, &iobuf->dp);
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boscherrno_t sss_iobuf_read_stringz(struct sss_iobuf *iobuf,
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Bosch const char **_out)
66134fbce11778241ca9f8458ee2a0488a05bde0Stephan Bosch end = memchr(iobuf_ptr(iobuf), '\0', sss_iobuf_get_size(iobuf));
6ae6496c225238a2c55a8cd96744ad976c44a726Stephan Boscherrno_t sss_iobuf_write_stringz(struct sss_iobuf *iobuf,
66134fbce11778241ca9f8458ee2a0488a05bde0Stephan Bosch const char *str)