diff --git a/inc/lektor/common.h b/inc/lektor/common.h index 5e80b94b9318a37eab2a06f13c07419cb824fdf7..4dad1e6224b2a1c17cc0135819d3c4bbffba1616 100644 --- a/inc/lektor/common.h +++ b/inc/lektor/common.h @@ -207,6 +207,12 @@ int safe_snprintf(char *dest, const size_t max_len, const char *format, ...); int safe_vsnprintf(char *dest, const size_t max_len, const char *format, va_list); char *safe_strncpy(char *dest, const char *src, size_t n); +/* Helpers for malloc functions. */ +#define LKT_ALLOC(___struct___) (___struct___ *)safe_malloc(sizeof(___struct___)) +#define LKT_ALLOC_STRUCT(___struct___) LKT_ALLOC(struct ___struct___) +#define LKT_ALLOC_ARRAY(___struct___, ___count___) (___struct___ *) safe_malloc(sizeof(___struct___) * (___count___)) +#define LKT_ALLOC_STRUCT_ARRAY(___struct___, ___count___) LKT_ALLOC_ARRAY(struct ___struct___, ___count___) + /* Iterate throught a string, copy each element in the dest string. The save ptr must contains a null integer. */ int iter_string(const char *str, const char *sep, char *dest, const size_t dest_len, size_t *save); diff --git a/inc/lektor/queue.h b/inc/lektor/queue.h index 0c03c075834e824ed60fd3fdc13f3df40c460c77..63342d02887d6494681f9c35ac8654019af69646 100644 --- a/inc/lektor/queue.h +++ b/inc/lektor/queue.h @@ -83,7 +83,7 @@ lkt_queue_new(struct queue *ret) pthread_mutex_t mxt = PTHREAD_MUTEX_INITIALIZER; struct queue _ret = { - .contents = safe_malloc(LKT_DEFAULT_LIST_SIZE * sizeof(lkt_event)), + .contents = LKT_ALLOC_ARRAY(lkt_event, LKT_DEFAULT_LIST_SIZE), .size = LKT_DEFAULT_LIST_SIZE, .last = 0, .available = 0, diff --git a/src/base/commands.c b/src/base/commands.c index ad5bfb3e3fc6583115b39de51c890171c0120509..a520b1a722baaf3585e43befcbd05079e2d7fb3e 100644 --- a/src/base/commands.c +++ b/src/base/commands.c @@ -25,7 +25,7 @@ command_restart(struct lkt_state *srv, size_t c, char UNUSED *__argv[LKT_MESSAGE env_set(LKT_ENV_RESTART, "1"); int len = long_length(LONG_MAX); if (len > 0) { - char *pos = safe_malloc(len * sizeof(char)); + char *pos = LKT_ALLOC_ARRAY(char, len); safe_snprintf(pos, len, "%d", sta.current); env_set(LKT_ENV_CURRENT, pos); free(pos); diff --git a/src/base/stack.c b/src/base/stack.c index 02123ebeed423c6778859cae3b2a659e5a6a3b6f..6071f0795612ec49d79627c223a9ed84aea863fc 100644 --- a/src/base/stack.c +++ b/src/base/stack.c @@ -9,7 +9,7 @@ stack_new(struct stack *ret) assert(ret); struct stack _ret = { - .contents = safe_malloc(LKT_DEFAULT_LIST_SIZE * sizeof(void *)), + .contents = LKT_ALLOC_ARRAY(volatile void *, LKT_DEFAULT_LIST_SIZE), .size = LKT_DEFAULT_LIST_SIZE, .len = 0, }; diff --git a/src/base/uri.c b/src/base/uri.c index e07866c9c0b624625c5baafa21f3a5f130728a7a..cc8b9b1543ce227d78e95487339d98d7a64318ac 100644 --- a/src/base/uri.c +++ b/src/base/uri.c @@ -93,7 +93,7 @@ lkt_uri_from_list(struct lkt_uri *ret, char **list) if ('\0' == *(char *)ret->value) return false; - char *buffer = (char *)safe_malloc(sizeof(char) * (strlen(ret->value) + 1)); + char *buffer = LKT_ALLOC_ARRAY(char, strlen(ret->value) + 1); strcpy(buffer, ret->value); for (i = 1; list[i]; ++i) { diff --git a/src/database/find.c b/src/database/find.c index 5d905a51d6f8b4786039401259d047eba8aaba1b..192b7c3dafd299c79db1d3600f126633c763bc46 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -77,7 +77,7 @@ database_search_new(struct lkt_state *srv, size_t c, int cont, function_ptr call { /* Minus 3 for control messages. If no server do it `X` by `X`. */ size_t msg_count = srv != NULL ? lkt_remaining_msg(srv, c) - 3 : LKT_DB_DEFAULT_ITERATION_MAX; - struct lkt_search *ret_ptr = safe_malloc(sizeof(struct lkt_search)); + struct lkt_search *ret_ptr = LKT_ALLOC_STRUCT(lkt_search); struct lkt_search ret = { .srv = srv, .c = c, @@ -95,7 +95,7 @@ database_search_new(struct lkt_state *srv, size_t c, int cont, function_ptr call struct lkt_search * database_search_new_from(struct lkt_search *from) { - struct lkt_search *ret_ptr = safe_malloc(sizeof(struct lkt_search)); + struct lkt_search *ret_ptr = LKT_ALLOC_STRUCT(lkt_search); memcpy(ret_ptr, from, sizeof(struct lkt_search)); ret_ptr->stmt = NULL; /* Omit that one, the returned search is not initialized. */ return ret_ptr; @@ -415,7 +415,7 @@ ___get_all_kara(lkt_db *db, int **ret_ids, size_t *ret_ids_len, const char *SQL_ } sqlite3_finalize(stmt); stmt = NULL; - *ret_ids = (int *)safe_malloc((*ret_ids_len) * sizeof(int)); + *ret_ids = LKT_ALLOC_ARRAY(int, *ret_ids_len); /* Get all the IDs */ SQLITE_PREPARE(db, stmt, SQL_DATA, error); diff --git a/src/database/open.c b/src/database/open.c index ff1be74c36cf8e9fc49819c815bc6bdf42aa2c59..1d99f29d3e36b9ed80ed6a4afef2cf64d5f8f811 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -72,7 +72,7 @@ ___inc(lkt_db *db, const char *name, bool check) db_stack_init = 1; } - struct named_db *item = safe_malloc(sizeof(struct stack)); + struct named_db *item = LKT_ALLOC_STRUCT(named_db); item->name = strdup(name); item->db = db; stack_push(&db_stack, item); diff --git a/src/database/update.c b/src/database/update.c index 09235c94716f76a475ea41112fa6b01b1c8072d4..79b6245076527b1f2791dff53d9e261b01daf889 100644 --- a/src/database/update.c +++ b/src/database/update.c @@ -257,7 +257,7 @@ database_deleted_kara(lkt_db *db, int **kara_id, size_t *len) static const char *SQL = "SELECT kara.id, file_path FROM kara WHERE kara.id NOT IN" "(SELECT kara_id FROM updates JOIN misc ON job = update_job);"; sqlite3_stmt *stmt = NULL; - *kara_id = (int *)safe_malloc(LKT_DEFAULT_LIST_SIZE * sizeof(int)); + *kara_id = LKT_ALLOC_ARRAY(int, LKT_DEFAULT_LIST_SIZE); *len = 0; RETURN_UNLESS(*kara_id, "Out of memory", NOTHING); SQLITE_PREPARE(db, stmt, SQL, out); diff --git a/src/main/server.c b/src/main/server.c index 9ccaa832c6bb8f33fe553d02f30cac8331e6096d..8eb87d838b1f409c31d1d84995f731a55e0e950b 100644 --- a/src/main/server.c +++ b/src/main/server.c @@ -96,8 +96,11 @@ main(int argc, char *argv[]) RETURN_UNLESS(setlocale(LC_CTYPE, ""), "Failed to set LC_CTYPE", 1); RETURN_UNLESS(setlocale(LC_NUMERIC, "C"), "Failed to set LC_NUMERIC for mpv", 1); - int autoclear, check_exclusive = 1, opt, dump_and_abort = 0; - char *conf_file = safe_malloc(PATH_MAX * sizeof(char)); + int autoclear; + int opt; + int check_exclusive = 1; + int dump_and_abort = 0; + char *conf_file = LKT_ALLOC_ARRAY(char, PATH_MAX); cmd_set_executable_name("lektord"); /* Check args */ diff --git a/src/mkv/utils.c b/src/mkv/utils.c index d998ddff196baad15381436e0adec706bddc9f43..904785e146308be11c18c0d10c35563f6d848a01 100644 --- a/src/mkv/utils.c +++ b/src/mkv/utils.c @@ -9,7 +9,7 @@ mdtcat(struct kara_metadata *mdt, char **ret) size_t size = strlen(mdt->song_name) + strlen(mdt->source_name) + strlen(mdt->category) + strlen(mdt->language) + strlen(mdt->author_name) + strlen(mdt->song_type) + /* Null byte */ 1 + /* Separators */ 12 + 5 + long_length(mdt->song_number); - *ret = safe_malloc(sizeof(char) * size); + *ret = LKT_ALLOC_ARRAY(char, size); safe_snprintf(*ret, size, "%s - %s / %s - %s%d - %s [%s]", mdt->category, mdt->language, mdt->source_name, mdt->song_type, mdt->song_number, mdt->song_name, mdt->author_name); } diff --git a/src/module/module_repo.c b/src/module/module_repo.c index d3276b6761e5bc01532fd998b62c45bf455c75be..7ad0de78626943f740d6dbb32e9993b69860712e 100644 --- a/src/module/module_repo.c +++ b/src/module/module_repo.c @@ -752,13 +752,13 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, lkt_db .queue = queue, .db = db, .updating = 0, - .name = safe_malloc(LKT_LINE_MAX * sizeof(char)), - .kara_dir = safe_malloc(PATH_MAX * sizeof(char)), - .get_id_json = safe_malloc(LKT_LINE_MAX * sizeof(char)), - .get_id_file = safe_malloc(LKT_LINE_MAX * sizeof(char)), - .get_fav_json = safe_malloc(LKT_LINE_MAX * sizeof(char)), - .get_all_json = safe_malloc(LKT_LINE_MAX * sizeof(char)), - .base_url = safe_malloc(LKT_LINE_MAX * sizeof(char)), + .name = LKT_ALLOC_ARRAY(char, LKT_LINE_MAX), + .kara_dir = LKT_ALLOC_ARRAY(char, PATH_MAX), + .get_id_json = LKT_ALLOC_ARRAY(char, LKT_LINE_MAX), + .get_id_file = LKT_ALLOC_ARRAY(char, LKT_LINE_MAX), + .get_fav_json = LKT_ALLOC_ARRAY(char, LKT_LINE_MAX), + .get_all_json = LKT_ALLOC_ARRAY(char, LKT_LINE_MAX), + .base_url = LKT_ALLOC_ARRAY(char, LKT_LINE_MAX), .craft_filename = obfuscate ? ___craft_filename_obfuscate : ___craft_filename_non_obfuscate, }; @@ -806,7 +806,7 @@ mod_new(va_list *va) LOG_ERROR("REPO", "Can't init two times the module"); return 1; } - *repo = safe_malloc(sizeof(struct module_repo_internal)); + *repo = LKT_ALLOC_STRUCT(module_repo_internal); bool ret = module_repo_new(*repo, queue, db); lkt_queue_make_available(queue, LKT_EVENT_DB_UPDATING); diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c index 91aa7c164b273abefeb644ce850d0a2ebd1f9957..9330844ee6019dc1c9ea5eb7eb30508de2a04acb 100644 --- a/src/module/module_sdl2.c +++ b/src/module/module_sdl2.c @@ -480,7 +480,7 @@ module_sdl2_new(struct module_sdl2_window **win, struct queue *queue, lkt_db *db (*win)->set_seek = -1; /* Start the SDL thread */ - arg = safe_malloc(sizeof(struct poller_thread_arg)); + arg = LKT_ALLOC_STRUCT(poller_thread_arg); RETURN_UNLESS(arg, "Out of memory", false); arg->args = *win; RETURN_IF(poller_new(&(*win)->self, sdl_thread__, arg), "Failed to launch the SDL thread", false); diff --git a/src/module/thread.h b/src/module/thread.h index 4a7129555050cd15b9713bda796231b06430d41b..5c2907b52ac2cad54985f10b8b7385c07074016c 100644 --- a/src/module/thread.h +++ b/src/module/thread.h @@ -54,7 +54,7 @@ poller_new(struct poller_thread *th, void *(*func)(struct poller_thread_arg *), struct ___poller_thread_args *__args; *th = th_; - __args = safe_malloc(sizeof(struct ___poller_thread_args)); + __args = LKT_ALLOC_STRUCT(___poller_thread_args); __args->start = func; __args->arg = args; __args->arg->self = th; diff --git a/src/module/worker.c b/src/module/worker.c index 509f6a7964c695b2df5e1e2eb7b164e99eab4c34..2c248723c29cb81c704e6d37d2e03fbfeb650866 100644 --- a/src/module/worker.c +++ b/src/module/worker.c @@ -73,9 +73,9 @@ worker_pool_new(struct worker_pool *ret, size_t init_size, size_t thread_count) if (!thread_count) thread_count = get_nprocs_conf(); struct worker_pool __ret = { - .functions = safe_malloc(sizeof(worker_function) * init_size), - .args = safe_malloc(sizeof(void *) * init_size), - .threads = safe_malloc(sizeof(pthread_t) * thread_count), + .functions = LKT_ALLOC_ARRAY(worker_function, init_size), + .args = LKT_ALLOC_ARRAY(volatile void *, init_size), + .threads = LKT_ALLOC_ARRAY(pthread_t, thread_count), .size = init_size, .thread_size = thread_count, .len = 0u, diff --git a/src/net/listen.c b/src/net/listen.c index 2b36e961be829e751e84d47db52a2c6f24491933..4e2ec3ed63611ec1fa51ee2fa1e8bf839cf25d51 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -45,7 +45,7 @@ static struct cmd_trie_node *cmd_trie_root = NULL; PRIVATE_FUNCTION struct cmd_trie_node * cmd_trie_new(void) { - struct cmd_trie_node *ret = safe_malloc(sizeof(struct cmd_trie_node)); + struct cmd_trie_node *ret = LKT_ALLOC_STRUCT(cmd_trie_node); for (size_t i = 0; i < CHARS_MAX; ++i) { ret->children[i] = NULL; @@ -1007,7 +1007,7 @@ redo: // clang-format off switch (evt.type) { __CASE(PLAY_POS, { - string = safe_malloc(BUFFER_MAX * sizeof(char)); + string = LKT_ALLOC_ARRAY(char, BUFFER_MAX); safe_snprintf(string, BUFFER_MAX, "%ld", (size_t)evt.attr); command_play(srv, &string); free(string); @@ -1026,7 +1026,7 @@ redo: __CASE(PROP_TIME, database_config_queue(srv->db, "elapsed", (size_t)evt.attr)) __CASE(SKIP_CURRENT, { - string = safe_malloc(PATH_MAX * sizeof(char)); + string = LKT_ALLOC_ARRAY(char, PATH_MAX); database_queue_skip_current(srv->db, string); MOD_CALL(srv->window_mod, "load", string); free(string); @@ -1161,8 +1161,8 @@ lkt_listen(struct lkt_state *srv) assert(database_config_get(srv->db, "server", "max_clients", &fds_max_config)); srv->fds_max = fds_max_config; - srv->fds = safe_malloc(srv->fds_max * sizeof(struct pollfd)); - srv->clients = safe_malloc(srv->fds_max * sizeof(struct lkt_client)); + srv->fds = LKT_ALLOC_STRUCT_ARRAY(pollfd, srv->fds_max); + srv->clients = LKT_ALLOC_STRUCT_ARRAY(lkt_client, srv->fds_max); LOG_INFO("INIT", "Register signal handlers for signals..."); srv->__signal_INT = __lkt_handle_INT; diff --git a/src/net/message.c b/src/net/message.c index ccceb0d9dec33581f4b5b8c542ff02253b6c46da..ebc5ea826f49514d260b183758ef0920628a0a2e 100644 --- a/src/net/message.c +++ b/src/net/message.c @@ -12,7 +12,7 @@ struct lkt_message { struct lkt_message * lkt_message_new(void) { - struct lkt_message *res = safe_malloc(sizeof(struct lkt_message)); + struct lkt_message *res = LKT_ALLOC_STRUCT(lkt_message); res->ref_count = 1; *(res->data) = 0; res->data_len = 0;