diff --git a/src/libs/tools.h b/src/libs/tools.h index ccb477b..c2b4416 100644 --- a/src/libs/tools.h +++ b/src/libs/tools.h @@ -39,6 +39,8 @@ #define A_REALLOC(_dest, _nmemb) assert((_dest = realloc(_dest, _nmemb * sizeof(*(_dest))))) #define MEMSET_ZERO(_obj) memset(&(_obj), 0, sizeof(_obj)) +#define A_ASPRINTF(_dest, _fmt, ...) assert(asprintf(&(_dest), _fmt, ##__VA_ARGS__) >= 0) + #define ARRAY_LEN(_array) (sizeof(_array) / sizeof(_array[0])) #define INLINE inline __attribute__((always_inline)) diff --git a/src/ustreamer/encoder.c b/src/ustreamer/encoder.c index f0d94a4..db90cd6 100644 --- a/src/ustreamer/encoder.c +++ b/src/ustreamer/encoder.c @@ -217,9 +217,7 @@ static void *_worker_job_init(worker_s *wr, void *v_enc) { A_CALLOC(job, 1); job->enc = (encoder_s *)v_enc; - const size_t dest_role_len = strlen(wr->name) + 16; - A_CALLOC(job->dest_role, dest_role_len); - snprintf(job->dest_role, dest_role_len, "%s_dest", wr->name); + A_ASPRINTF(job->dest_role, "%s_dest", wr->name); job->dest = frame_init(job->dest_role); return (void *)job; diff --git a/src/ustreamer/gpio/gpio.c b/src/ustreamer/gpio/gpio.c index 41adaab..6c26106 100644 --- a/src/ustreamer/gpio/gpio.c +++ b/src/ustreamer/gpio/gpio.c @@ -102,8 +102,7 @@ static void _gpio_output_init(gpio_output_s *output) { assert(gpio.chip); assert(output->line == NULL); - A_CALLOC(output->consumer, strlen(gpio.consumer_prefix) + strlen(output->role) + 16); - sprintf(output->consumer, "%s::%s", gpio.consumer_prefix, output->role); + A_ASPRINTF(output->consumer, "%s::%s", gpio.consumer_prefix, output->role); if (output->pin >= 0) { if ((output->line = gpiod_chip_get_line(gpio.chip, output->pin)) != NULL) { diff --git a/src/ustreamer/http/server.c b/src/ustreamer/http/server.c index f5b3a86..163b60f 100644 --- a/src/ustreamer/http/server.c +++ b/src/ustreamer/http/server.c @@ -145,16 +145,14 @@ int server_listen(server_s *server) { evhttp_set_timeout(RUN(http), server->timeout); if (server->user[0] != '\0') { - char *raw_token; char *encoded_token = NULL; - A_CALLOC(raw_token, strlen(server->user) + strlen(server->passwd) + 16); - sprintf(raw_token, "%s:%s", server->user, server->passwd); + char *raw_token; + A_ASPRINTF(raw_token, "%s:%s", server->user, server->passwd); base64_encode((uint8_t *)raw_token, strlen(raw_token), &encoded_token, NULL); free(raw_token); - A_CALLOC(RUN(auth_token), strlen(encoded_token) + 16); - sprintf(RUN(auth_token), "Basic %s", encoded_token); + A_ASPRINTF(RUN(auth_token), "Basic %s", encoded_token); free(encoded_token); LOG_INFO("Using HTTP basic auth"); @@ -857,10 +855,7 @@ static char *_http_get_client_hostport(struct evhttp_request *request) { } char *hostport; - size_t hostport_len = strlen(addr) + 64; - A_CALLOC(hostport, hostport_len); - - snprintf(hostport, hostport_len, "[%s]:%u", addr, port); + A_ASPRINTF(hostport, "[%s]:%u", addr, port); free(addr); return hostport; } diff --git a/src/ustreamer/http/static.c b/src/ustreamer/http/static.c index 9a83785..02ab601 100644 --- a/src/ustreamer/http/static.c +++ b/src/ustreamer/http/static.c @@ -32,7 +32,7 @@ char *find_static_file_path(const char *root_path, const char *request_path) { goto error; } - A_CALLOC(path, strlen(root_path) + strlen(simplified_path) + 16); + A_CALLOC(path, strlen(root_path) + strlen(simplified_path) + 16); // + reserved for /index.html sprintf(path, "%s/%s", root_path, simplified_path); struct stat st; diff --git a/src/ustreamer/workers.c b/src/ustreamer/workers.c index b618d49..dab87d0 100644 --- a/src/ustreamer/workers.c +++ b/src/ustreamer/workers.c @@ -49,14 +49,11 @@ workers_pool_s *workers_pool_init( A_MUTEX_INIT(&pool->free_workers_mutex); A_COND_INIT(&pool->free_workers_cond); - const size_t wr_name_len = strlen(wr_prefix) + 64; - for (unsigned number = 0; number < pool->n_workers; ++number) { # define WR(_next) pool->workers[number]._next WR(number) = number; - A_CALLOC(WR(name), wr_name_len); - snprintf(WR(name), wr_name_len, "%s-%u", wr_prefix, number); + A_ASPRINTF(WR(name), "%s-%u", wr_prefix, number); A_MUTEX_INIT(&WR(has_job_mutex)); atomic_init(&WR(has_job), false);