mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-28 12:30:58 +00:00
Add align to struct mg_iobuf
This commit is contained in:
1 parent
a468f58128
commit
17e2fdd4cb
12 files changed
+92
-74
No files matched your search
+11
-9
@@ -10,8 +10,13 @@ static void zeromem(volatile unsigned char *buf, size_t len) {
|
||||
}
|
||||
}
|
||||
|
||||
static size_t roundup(size_t size, size_t align) {
|
||||
return align == 0 ? size : (size + align - 1) / align * align;
|
||||
}
|
||||
|
||||
int mg_iobuf_resize(struct mg_iobuf *io, size_t new_size) {
|
||||
int ok = 1;
|
||||
new_size = roundup(new_size, io->align);
|
||||
if (new_size == 0) {
|
||||
zeromem(io->buf, io->size);
|
||||
free(io->buf);
|
||||
@@ -36,21 +41,18 @@ int mg_iobuf_resize(struct mg_iobuf *io, size_t new_size) {
|
||||
return ok;
|
||||
}
|
||||
|
||||
int mg_iobuf_init(struct mg_iobuf *io, size_t size) {
|
||||
int mg_iobuf_init(struct mg_iobuf *io, size_t size, size_t align) {
|
||||
io->buf = NULL;
|
||||
io->align = align;
|
||||
io->size = io->len = 0;
|
||||
return mg_iobuf_resize(io, size);
|
||||
}
|
||||
|
||||
size_t mg_iobuf_add(struct mg_iobuf *io, size_t ofs, const void *buf,
|
||||
size_t len, size_t chunk_size) {
|
||||
size_t new_size = io->len + len;
|
||||
if (new_size > io->size) {
|
||||
new_size += chunk_size; // Make sure that io->size
|
||||
new_size -= new_size % chunk_size; // is aligned by chunk_size boundary
|
||||
mg_iobuf_resize(io, new_size); // Attempt to realloc
|
||||
if (new_size != io->size) len = 0; // Realloc failure, append nothing
|
||||
}
|
||||
size_t len) {
|
||||
size_t new_size = roundup(io->len + len, io->align);
|
||||
mg_iobuf_resize(io, new_size); // Attempt to resize
|
||||
if (new_size != io->size) len = 0; // Resize failure, append nothing
|
||||
if (ofs < io->len) memmove(io->buf + ofs + len, io->buf + ofs, io->len - ofs);
|
||||
if (buf != NULL) memmove(io->buf + ofs, buf, len);
|
||||
if (ofs > io->len) io->len += ofs - io->len;
|
||||
|
||||
Reference in new issue
Block a user