diff options
| author | 2025-06-23 15:16:00 -0400 | |
|---|---|---|
| committer | 2025-06-23 15:16:00 -0400 | |
| commit | 3ea974dd51b1f01483bad6a4d115189928bbf4db (patch) | |
| tree | f541bfbf312b4d43a22b8f3944fb38664852870c | |
| parent | fc8df3fe9cd15fe7b0b86c6584e0b3fb487d6886 (diff) | |
| download | libnaunet-3ea974dd51b1f01483bad6a4d115189928bbf4db.tar.gz libnaunet-3ea974dd51b1f01483bad6a4d115189928bbf4db.tar.bz2 libnaunet-3ea974dd51b1f01483bad6a4d115189928bbf4db.zip | |
Buffer API refactor, C++ compat
- Add common_close() to tests.
Signed-off-by: Andrew Opalach <andrew@akon.city>
| -rw-r--r-- | src/common.c | 7 | ||||
| -rw-r--r-- | src/curl/http.c | 4 | ||||
| -rw-r--r-- | src/packet_stream.c | 2 | ||||
| -rw-r--r-- | src/util/buffer.c | 59 | ||||
| -rw-r--r-- | src/util/buffer.h | 21 | ||||
| -rw-r--r-- | src/util/file/util.c | 2 | ||||
| -rw-r--r-- | src/util/packet.c | 16 | ||||
| -rw-r--r-- | src/util/packet.h | 2 | ||||
| -rw-r--r-- | subprojects/libalabaster.wrap | 2 | ||||
| -rw-r--r-- | tests/condition_variable.c | 4 | ||||
| -rw-r--r-- | tests/fs_event_local.c | 4 | ||||
| -rw-r--r-- | tests/loop_sleep.c | 4 | ||||
| -rw-r--r-- | tests/misc_file.c | 4 | ||||
| -rw-r--r-- | tests/stdin_lines.c | 4 | ||||
| -rw-r--r-- | tests/timer_loop.c | 4 | ||||
| -rw-r--r-- | tests/timer_thread.c | 4 |
16 files changed, 80 insertions, 63 deletions
diff --git a/src/common.c b/src/common.c index 1d4e3be..797090d 100644 --- a/src/common.c +++ b/src/common.c @@ -105,9 +105,10 @@ void nn_common_close(void) size_t current; size_t peak; size_t total; - al_malloc_stats(¤t, &peak, &total); - al_printf("malloc stats, current: %.2fKB, peak: %.2fKB, total: %.2fKB.\n", - current / 1024.f, peak / 1024.f, total / 1024.f); + size_t ops; + al_malloc_stats(¤t, &peak, &total, &ops); + al_printf("malloc stats, current: %.2fKB, peak: %.2fKB, total: %.2fKB, ops: %zu.\n", + current / 1024.f, peak / 1024.f, total / 1024.f, ops); nn_mutex_destroy(&malloc_mutex); #endif } diff --git a/src/curl/http.c b/src/curl/http.c index cfb8a18..364b32e 100644 --- a/src/curl/http.c +++ b/src/curl/http.c @@ -132,7 +132,7 @@ static void request_callback(void *userdata, u8 op, u8 *buf, void *opaque) switch (op) { case NNWT_HTTP_READ: { size_t n = *(size_t *)opaque; - size_t size = nn_buffer_get_size(&request->payload); + size_t size = request->payload.size; if (request->pointer + n > size) { n = size - request->pointer; } @@ -217,7 +217,7 @@ bool nn_http_request(struct nn_http_request *request, u8 method, struct nn_event curl->loop = loop; request->http.callback = request_callback; request->http.userdata = request; - long payload = (long)nn_buffer_get_size(&request->payload); + long payload = (long)request->payload.size; if (payload > 0) { curl_easy_setopt(curl->handle, CURLOPT_POSTFIELDSIZE, payload); } diff --git a/src/packet_stream.c b/src/packet_stream.c index 271898a..cca1b0f 100644 --- a/src/packet_stream.c +++ b/src/packet_stream.c @@ -115,7 +115,7 @@ static void stream_read_callback(struct ev_loop *loop, ev_io *w, s32 revents) if (!stream->in.have_header && stream->in.index >= NNWT_PACKET_HEADER_LENGTH) { stream->in.have_header = true; size = nn_packet_get_size(stream->in.packet); - nn_buffer_set_size(buffer, size); + buffer->size = size; nn_buffer_ensure_space(buffer, size); } diff --git a/src/util/buffer.c b/src/util/buffer.c index 071d8bf..4c8b3c2 100644 --- a/src/util/buffer.c +++ b/src/util/buffer.c @@ -5,59 +5,54 @@ #define NNWT_BUFFER_SIZE KB(1) #define NNWT_BUFFER_GROW ((size_t)al_grow_step) -void nn_buffer_ensure_space(struct nn_buffer *buf, size_t size) +void nn_buffer_init(struct nn_buffer *buffer) { - if (size > buf->alloc) { - buf->alloc = (size < NNWT_BUFFER_SIZE) ? NNWT_BUFFER_SIZE : - (size + NNWT_BUFFER_GROW) & ~NNWT_BUFFER_GROW; - buf->data = (u8 *)(buf->data ? al_realloc(buf->data, buf->alloc) : al_malloc(buf->alloc)); - } -} - -void nn_buffer_init(struct nn_buffer *buf) -{ - buf->size = 0; - buf->alloc = 0; - buf->data = NULL; + buffer->size = 0; + buffer->alloc = 0; + buffer->data = NULL; } -size_t nn_buffer_get_size(struct nn_buffer *buf) +void nn_buffer_ensure_space(struct nn_buffer *buffer, size_t size) { - return buf->size; + al_assert(size > 0); + if (size > buffer->alloc) { + buffer->alloc = (size <= NNWT_BUFFER_SIZE) ? NNWT_BUFFER_SIZE : + (size + NNWT_BUFFER_GROW) & ~NNWT_BUFFER_GROW; + buffer->data = (u8 *)al_realloc(buffer->data, buffer->alloc); + } } -void nn_buffer_set_size(struct nn_buffer *buf, size_t size) +void nn_buffer_shrink_to_size(struct nn_buffer *buffer) { - buf->size = size; + buffer->alloc = 0; + nn_buffer_ensure_space(buffer, buffer->size); } -void nn_buffer_write(struct nn_buffer *buf, void *data, size_t index, size_t size) +void nn_buffer_write(struct nn_buffer *buffer, void *data, size_t index, size_t size) { size_t reach = index + size; - nn_buffer_ensure_space(buf, reach); - if (reach > buf->size) { - buf->size = reach; - } - al_memcpy(&buf->data[index], data, size); + nn_buffer_ensure_space(buffer, reach); + if (reach > buffer->size) buffer->size = reach; + al_memcpy(&buffer->data[index], data, size); } -void nn_buffer_append(struct nn_buffer *buf, void *data, size_t size) +void nn_buffer_append(struct nn_buffer *buffer, void *data, size_t size) { - nn_buffer_write(buf, data, buf->size, size); + nn_buffer_write(buffer, data, buffer->size, size); } -u8 *nn_buffer_get_ptr(struct nn_buffer *buf, size_t index) +u8 *nn_buffer_get_ptr(struct nn_buffer *buffer, size_t index) { - return buf->data + index; + return buffer->data + index; } -void nn_buffer_read(struct nn_buffer *buf, void *ptr, size_t index, size_t size) +void nn_buffer_read(struct nn_buffer *buffer, void *ptr, size_t index, size_t size) { - al_assert(index + size <= buf->size); - al_memcpy(ptr, &buf->data[index], size); + al_assert(index + size <= buffer->size); + al_memcpy(ptr, &buffer->data[index], size); } -void nn_buffer_free(struct nn_buffer *buf) +void nn_buffer_free(struct nn_buffer *buffer) { - if (buf->data && buf->alloc > 0) al_free(buf->data); + if (buffer->alloc) al_free(buffer->data); } diff --git a/src/util/buffer.h b/src/util/buffer.h index 9b254d4..19bc400 100644 --- a/src/util/buffer.h +++ b/src/util/buffer.h @@ -10,15 +10,14 @@ struct nn_buffer { }; // A pun+dereference breaks on 32bit Android but isn't warned about by -Wstrict-aliasing=3. -#define NNWT_BUFFER_READ_TYPE(buf, index, type, r) \ - al_memcpy((void *)&(r), (void *)nn_buffer_get_ptr(buf, index), sizeof(type)) +#define NNWT_BUFFER_READ_TYPE(buffer, index, type, r) \ + al_memcpy((void *)&(r), (void *)nn_buffer_get_ptr(buffer, index), sizeof(type)) -void nn_buffer_init(struct nn_buffer *buf); -void nn_buffer_ensure_space(struct nn_buffer *buf, size_t size); -size_t nn_buffer_get_size(struct nn_buffer *buf); -void nn_buffer_set_size(struct nn_buffer *buf, size_t size); -void nn_buffer_write(struct nn_buffer *buf, void *data, size_t index, size_t size); -void nn_buffer_append(struct nn_buffer *buf, void *data, size_t size); -u8 *nn_buffer_get_ptr(struct nn_buffer *buf, size_t index); -void nn_buffer_read(struct nn_buffer *buf, void *ptr, size_t index, size_t size); -void nn_buffer_free(struct nn_buffer *buf); +void nn_buffer_init(struct nn_buffer *buffer); +void nn_buffer_ensure_space(struct nn_buffer *buffer, size_t size); +void nn_buffer_shrink_to_size(struct nn_buffer *buffer); +void nn_buffer_write(struct nn_buffer *buffer, void *data, size_t index, size_t size); +void nn_buffer_append(struct nn_buffer *buffer, void *data, size_t size); +u8 *nn_buffer_get_ptr(struct nn_buffer *buffer, size_t index); +void nn_buffer_read(struct nn_buffer *buffer, void *ptr, size_t index, size_t size); +void nn_buffer_free(struct nn_buffer *buffer); diff --git a/src/util/file/util.c b/src/util/file/util.c index cf2d31c..a2201a7 100644 --- a/src/util/file/util.c +++ b/src/util/file/util.c @@ -15,7 +15,7 @@ s32 nn_file_read_as_str(struct nn_file *file, str *out) s32 nn_file_read_as_c_str(struct nn_file *file, char **out) { size_t size = file->size; - *out = al_malloc(size + 1); + *out = (char *)al_malloc(size + 1); if (!nn_file_read(file, (void *)*out, size)) { al_free(*out); return -1; diff --git a/src/util/packet.c b/src/util/packet.c index fe20b58..d7df1da 100644 --- a/src/util/packet.c +++ b/src/util/packet.c @@ -2,7 +2,7 @@ struct nn_packet *nn_packet_create(void) { - struct nn_packet *packet = (struct nn_packet *)al_malloc(sizeof(struct nn_packet)); + struct nn_packet *packet = al_alloc_object(struct nn_packet); nn_buffer_init(&packet->buffer); nn_packet_reset(packet); return packet; @@ -10,9 +10,11 @@ struct nn_packet *nn_packet_create(void) struct nn_packet *nn_packet_clone(struct nn_packet *packet) { + al_assert(packet->buffer.alloc >= NNWT_PACKET_HEADER_LENGTH); struct nn_packet *c = nn_packet_create(); - nn_buffer_ensure_space(&c->buffer, packet->buffer.size); - al_memcpy(nn_buffer_get_ptr(&c->buffer, 0), nn_buffer_get_ptr(&packet->buffer, 0), packet->buffer.size); + u32 size = nn_packet_get_size(packet); + nn_buffer_ensure_space(&c->buffer, size); + al_memcpy(nn_buffer_get_ptr(&c->buffer, 0), nn_buffer_get_ptr(&packet->buffer, 0), size); c->windex = packet->windex; c->rindex = packet->rindex; c->opaque = packet->opaque; @@ -36,7 +38,13 @@ u32 nn_packet_get_u32(struct nn_packet *packet, u32 index) void nn_packet_write_size(struct nn_packet *packet) { - nn_buffer_write(&packet->buffer, &packet->windex, 0, sizeof(u32)); + struct nn_buffer *buffer = &packet->buffer; + al_assert(buffer->alloc >= packet->windex); + buffer->size = packet->windex; + if (buffer->size < buffer->alloc / 2) { + nn_buffer_shrink_to_size(buffer); + } + nn_buffer_write(buffer, &packet->windex, 0, sizeof(u32)); } u32 nn_packet_get_size(struct nn_packet *packet) diff --git a/src/util/packet.h b/src/util/packet.h index 7183837..a2837f1 100644 --- a/src/util/packet.h +++ b/src/util/packet.h @@ -29,7 +29,7 @@ struct nn_packet { (p)->rindex += (u32)sizeof(type) #define NNWT_PACKET_READ_DATA(p, length, r) \ - r = (void *)nn_buffer_get_ptr(&(p)->buffer, (p)->rindex); \ + r = (__typeof__(r))nn_buffer_get_ptr(&(p)->buffer, (p)->rindex); \ (p)->rindex += (u32)length struct nn_packet *nn_packet_create(void); diff --git a/subprojects/libalabaster.wrap b/subprojects/libalabaster.wrap index 81771ed..9a9cfc1 100644 --- a/subprojects/libalabaster.wrap +++ b/subprojects/libalabaster.wrap @@ -1,4 +1,4 @@ [wrap-git] url = https://git.akon.city/libalabaster -revision = b403770e7eb6e0a5a8ca14a24f91dbf214ffe917 +revision = 0470ca3416388e7e58b64f63bfe505d454f150b9 depth = 1 diff --git a/tests/condition_variable.c b/tests/condition_variable.c index 6bc5435..7313784 100644 --- a/tests/condition_variable.c +++ b/tests/condition_variable.c @@ -19,7 +19,7 @@ static nn_thread_result NNWT_THREADCALL test_thread(void *userdata) s32 main(void) { - if (!nn_common_init()) return EXIT_FAILURE; + if (!nn_common_init(NULL)) return EXIT_FAILURE; nn_mutex_init(&mutex); nn_cond_init(&cond); @@ -35,5 +35,7 @@ s32 main(void) nn_thread_join(&thread); + nn_common_close(); + return EXIT_SUCCESS; } diff --git a/tests/fs_event_local.c b/tests/fs_event_local.c index cded733..89aa282 100644 --- a/tests/fs_event_local.c +++ b/tests/fs_event_local.c @@ -18,7 +18,7 @@ static void fs_event_callback(void *userdata, struct inotify_event *event) s32 main(void) { - if (!nn_common_init()) return EXIT_FAILURE; + if (!nn_common_init(NULL)) return EXIT_FAILURE; nn_event_loop_init(&loop); @@ -33,5 +33,7 @@ s32 main(void) nn_event_loop_run(&loop); + nn_common_close(); + return EXIT_SUCCESS; } diff --git a/tests/loop_sleep.c b/tests/loop_sleep.c index 0fe16fd..03deb53 100644 --- a/tests/loop_sleep.c +++ b/tests/loop_sleep.c @@ -30,7 +30,7 @@ static void timer_callback(void *userdata, struct nn_timer *timer) s32 main(void) { - if (!nn_common_init()) return EXIT_FAILURE; + if (!nn_common_init(NULL)) return EXIT_FAILURE; nn_event_loop_init(&loop); @@ -43,5 +43,7 @@ s32 main(void) nn_event_loop_run(&loop); + nn_common_close(); + return EXIT_SUCCESS; } diff --git a/tests/misc_file.c b/tests/misc_file.c index efbd833..f2b5af6 100644 --- a/tests/misc_file.c +++ b/tests/misc_file.c @@ -3,7 +3,7 @@ s32 main(s32 argc, char *argv[]) { - if (!nn_common_init()) return EXIT_FAILURE; + if (!nn_common_init(NULL)) return EXIT_FAILURE; if (argc < 2) { al_printf("No argument\n"); @@ -16,5 +16,7 @@ s32 main(s32 argc, char *argv[]) al_printf("File does not exist.\n"); } + nn_common_close(); + return EXIT_SUCCESS; } diff --git a/tests/stdin_lines.c b/tests/stdin_lines.c index e032a54..19a3da9 100644 --- a/tests/stdin_lines.c +++ b/tests/stdin_lines.c @@ -14,7 +14,7 @@ static u8 line_callback(void *userdata, str *line) s32 main(void) { - if (!nn_common_init()) return EXIT_FAILURE; + if (!nn_common_init(NULL)) return EXIT_FAILURE; nn_event_loop_init(&loop); @@ -27,5 +27,7 @@ s32 main(void) nn_event_loop_run(&loop); nn_event_loop_destroy(&loop); + nn_common_close(); + return EXIT_SUCCESS; } diff --git a/tests/timer_loop.c b/tests/timer_loop.c index 5b9aab8..a9ce283 100644 --- a/tests/timer_loop.c +++ b/tests/timer_loop.c @@ -25,7 +25,7 @@ static void timer_callback(void *userdata, struct nn_timer *timer) s32 main(void) { - if (!nn_common_init()) return EXIT_FAILURE; + if (!nn_common_init(NULL)) return EXIT_FAILURE; nn_event_loop_init(&loop); @@ -37,5 +37,7 @@ s32 main(void) nn_event_loop_run(&loop); nn_event_loop_destroy(&loop); + nn_common_close(); + return EXIT_SUCCESS; } diff --git a/tests/timer_thread.c b/tests/timer_thread.c index 3f68ae4..8ffbbc2 100644 --- a/tests/timer_thread.c +++ b/tests/timer_thread.c @@ -24,10 +24,12 @@ static nn_thread_result NNWT_THREADCALL test_thread(void *userdata) s32 main(void) { - if (!nn_common_init()) return EXIT_FAILURE; + if (!nn_common_init(NULL)) return EXIT_FAILURE; nn_thread_create(&thread, test_thread, NULL); nn_thread_join(&thread); + nn_common_close(); + return EXIT_SUCCESS; } |