version 1.5, 2015/12/11 04:21:12 |
version 1.6, 2016/01/12 23:42:54 |
|
|
void |
void |
sshbuf_init(struct sshbuf *ret) |
sshbuf_init(struct sshbuf *ret) |
{ |
{ |
bzero(ret, sizeof(*ret)); |
explicit_bzero(ret, sizeof(*ret)); |
ret->alloc = SSHBUF_SIZE_INIT; |
ret->alloc = SSHBUF_SIZE_INIT; |
ret->max_size = SSHBUF_SIZE_MAX; |
ret->max_size = SSHBUF_SIZE_MAX; |
ret->readonly = 0; |
ret->readonly = 0; |
|
|
explicit_bzero(buf->d, buf->alloc); |
explicit_bzero(buf->d, buf->alloc); |
free(buf->d); |
free(buf->d); |
} |
} |
bzero(buf, sizeof(*buf)); |
explicit_bzero(buf, sizeof(*buf)); |
if (!dont_free) |
if (!dont_free) |
free(buf); |
free(buf); |
} |
} |
|
|
return; |
return; |
} |
} |
if (sshbuf_check_sanity(buf) == 0) |
if (sshbuf_check_sanity(buf) == 0) |
bzero(buf->d, buf->alloc); |
explicit_bzero(buf->d, buf->alloc); |
buf->off = buf->size = 0; |
buf->off = buf->size = 0; |
if (buf->alloc != SSHBUF_SIZE_INIT) { |
if (buf->alloc != SSHBUF_SIZE_INIT) { |
if ((d = realloc(buf->d, SSHBUF_SIZE_INIT)) != NULL) { |
if ((d = realloc(buf->d, SSHBUF_SIZE_INIT)) != NULL) { |
|
|
rlen = roundup(buf->size, SSHBUF_SIZE_INC); |
rlen = roundup(buf->size, SSHBUF_SIZE_INC); |
if (rlen > max_size) |
if (rlen > max_size) |
rlen = max_size; |
rlen = max_size; |
bzero(buf->d + buf->size, buf->alloc - buf->size); |
explicit_bzero(buf->d + buf->size, buf->alloc - buf->size); |
SSHBUF_DBG(("new alloc = %zu", rlen)); |
SSHBUF_DBG(("new alloc = %zu", rlen)); |
if ((dp = realloc(buf->d, rlen)) == NULL) |
if ((dp = realloc(buf->d, rlen)) == NULL) |
return SSH_ERR_ALLOC_FAIL; |
return SSH_ERR_ALLOC_FAIL; |