diff --git a/pclsync/pfolder.c b/pclsync/pfolder.c index 6f8e920..55f8c37 100644 --- a/pclsync/pfolder.c +++ b/pclsync/pfolder.c @@ -41,6 +41,7 @@ #include "pfsfolder.h" #include "plibs.h" #include "plist.h" +#include "pmem.h" #include "pnetlibs.h" #include "ppathstatus.h" #include "prun.h" @@ -197,9 +198,9 @@ psync_folderid_t pfolder_id_create(const char *path) { ->num; if (papi_find_result2(bres, "created", PARAM_BOOL)->num) pdiff_wake(); - free(bres); + pmem_free(PMEM_SUBSYS_OTHER, bres); } else { - free(bres); + pmem_free(PMEM_SUBSYS_OTHER, bres); psync_process_api_error(result); if (psync_handle_api_result(result) == PSYNC_NET_TEMPFAIL) goto errnet; @@ -227,7 +228,7 @@ static void psync_free_string_list(psync_list *lst) { static string_list *str_to_list_element(const char *str, size_t len) { string_list *le; - le = (string_list *)malloc(sizeof(string_list) + len + 1); + le = (string_list *)pmem_malloc(PMEM_SUBSYS_OTHER, sizeof(string_list) + len + 1); le->str = (char *)(le + 1); le->len = len; memcpy(le->str, str, len + 1); @@ -242,7 +243,7 @@ static int psync_add_path_to_list(psync_list *lst, psync_folderid_t folderid) { size_t len; while (1) { if (folderid == 0) { - e = (string_list *)malloc(sizeof(string_list)); + e = (string_list *)pmem_malloc(PMEM_SUBSYS_OTHER, sizeof(string_list)); e->str = (char *)e; e->len = 0; psync_list_add_head(lst, &e->list); @@ -270,18 +271,18 @@ static string_list *str_list_decode(psync_folderid_t folderid, string_list *e) { char *fn; dec = pcryptofolder_flddecoder_get(folderid); if (psync_crypto_is_error(dec)) { - free(e); + pmem_free(PMEM_SUBSYS_OTHER, e); pdbg_logf(D_WARNING, "got error %d getting decoder for folderid %lu", psync_crypto_to_error(dec), (unsigned long)folderid); return NULL; } fn = pcryptofolder_flddecode_filename(dec, e->str); pcryptofolder_flddecoder_release(folderid, dec); - free(e); + pmem_free(PMEM_SUBSYS_OTHER, e); if (pdbg_unlikely(!fn)) return NULL; e = str_to_list_element(fn, strlen(fn)); - free(fn); + pmem_free(PMEM_SUBSYS_OTHER, fn); return e; } @@ -299,7 +300,7 @@ static int psync_add_path_to_list_decode(psync_list *lst, if (folderid == 0) { if (e) psync_list_add_head(lst, &e->list); - e = (string_list *)malloc(sizeof(string_list)); + e = (string_list *)pmem_malloc(PMEM_SUBSYS_OTHER, sizeof(string_list)); e->str = (char *)e; e->len = 0; psync_list_add_head(lst, &e->list); @@ -345,7 +346,7 @@ char *psync_join_string_list(const char *sep, psync_list *lst, size_t *retlen) { if (unlikely(!cnt)) return putil_strdup(""); seplen = strlen(sep); - ret = str = malloc(slen + cnt * seplen + 1); + ret = str = pmem_malloc(PMEM_SUBSYS_OTHER, slen + cnt * seplen + 1); psync_list_for_each_element(e, lst, string_list, list) { memcpy(str, e->str, e->len); str += e->len; @@ -374,7 +375,7 @@ char *pfolder_path(psync_folderid_t folderid, size_t *retlen) { ret = psync_join_string_list("/", &folderlist, retlen); psync_free_string_list(&folderlist); if (!ret[0]) { - free(ret); + pmem_free(PMEM_SUBSYS_OTHER, ret); ret = putil_strdup("/"); if (retlen) *retlen = 1; @@ -396,7 +397,7 @@ char *pfolder_path_sep(psync_folderid_t folderid, const char *sep, ret = psync_join_string_list(sep, &folderlist, retlen); psync_free_string_list(&folderlist); if (!ret[0]) { - free(ret); + pmem_free(PMEM_SUBSYS_OTHER, ret); ret = putil_strdup(sep); if (retlen) *retlen = 1; @@ -544,10 +545,10 @@ char *pfolder_lpath_lfile(psync_fileid_t localfileid, static folder_list *folder_list_init() { folder_list *list; - list = (folder_list *)malloc(sizeof(folder_list)); + list = (folder_list *)pmem_malloc(PMEM_SUBSYS_OTHER, sizeof(folder_list)); list->entries = - (pentry_t *)malloc(sizeof(pentry_t) * INITIAL_ENTRY_CNT); - list->namebuff = (char *)malloc(INITIAL_NAME_BUFF); + (pentry_t *)pmem_malloc_array(PMEM_SUBSYS_OTHER, INITIAL_ENTRY_CNT, sizeof(pentry_t)); + list->namebuff = (char *)pmem_malloc(PMEM_SUBSYS_OTHER, INITIAL_NAME_BUFF); list->nameoff = 0; list->namealloc = INITIAL_NAME_BUFF; list->entriescnt = 0; @@ -572,9 +573,9 @@ static void folder_list_add(folder_list *list, pentry_t *entry) { } static void folder_list_free(folder_list *list) { - free(list->entries); - free(list->namebuff); - free(list); + pmem_free(PMEM_SUBSYS_OTHER, list->entries); + pmem_free(PMEM_SUBSYS_OTHER, list->namebuff); + pmem_free(PMEM_SUBSYS_OTHER, list); } static pfolder_list_t *folder_list_finalize(folder_list *list) { @@ -585,7 +586,7 @@ static pfolder_list_t *folder_list_finalize(folder_list *list) { (unsigned)(offsetof(pfolder_list_t, entries) + sizeof(pentry_t) * list->entriescnt + list->nameoff), (unsigned)list->nameoff); - ret = (pfolder_list_t *)malloc(offsetof(pfolder_list_t, entries) + + ret = (pfolder_list_t *)pmem_malloc(PMEM_SUBSYS_OTHER, offsetof(pfolder_list_t, entries) + sizeof(pentry_t) * list->entriescnt + list->nameoff); name = ((char *)ret) + offsetof(pfolder_list_t, entries) + @@ -731,7 +732,7 @@ pentry_t *pfolder_stat(const char *remotepath) { if (remotepath[0] != '/') return NULL; if (remotepath[1] == 0) { - ret = malloc(sizeof(pentry_t)); + ret = pmem_malloc(PMEM_SUBSYS_OTHER, sizeof(pentry_t)); ret->name = "/"; ret->namelen = 1; ret->isfolder = 1; @@ -746,11 +747,11 @@ pentry_t *pfolder_stat(const char *remotepath) { if (len == 0) folderid = 0; else { - cremotepath = malloc(sizeof(char) * (len + 1)); + cremotepath = pmem_malloc(PMEM_SUBSYS_OTHER, sizeof(char) * (len + 1)); memcpy(cremotepath, remotepath, len + 1); cremotepath[len] = 0; folderid = pfolder_id(cremotepath); - free(cremotepath); + pmem_free(PMEM_SUBSYS_OTHER, cremotepath); if (folderid == PSYNC_INVALID_FOLDERID) return NULL; } @@ -761,7 +762,7 @@ pentry_t *pfolder_stat(const char *remotepath) { psql_bind_uint(res, 1, folderid); psql_bind_lstr(res, 2, remotepath + len, olen); if ((row = psql_fetch_int(res))) { - ret = (pentry_t *)malloc(sizeof(pentry_t) + olen + 1); + ret = (pentry_t *)pmem_malloc(PMEM_SUBSYS_OTHER, sizeof(pentry_t) + olen + 1); ret->folder.folderid = row[0]; ret->folder.cansyncup = ((row[1] & PSYNC_PERM_WRITE) == PSYNC_PERM_WRITE); ret->folder.cansyncdown = ((row[1] & PSYNC_PERM_READ) == PSYNC_PERM_READ); @@ -780,7 +781,7 @@ pentry_t *pfolder_stat(const char *remotepath) { psql_bind_uint(res, 1, folderid); psql_bind_lstr(res, 2, remotepath + len, olen); if ((row = psql_fetch_int(res))) { - ret = (pentry_t *)malloc(sizeof(pentry_t) + olen + 1); + ret = (pentry_t *)pmem_malloc(PMEM_SUBSYS_OTHER, sizeof(pentry_t) + olen + 1); ret->file.fileid = row[0]; ret->file.size = row[1]; ret->name = (char *)(ret + 1); @@ -842,7 +843,7 @@ psync_folder_list_t *pfolder_sync_folders(char *syncTypes) { } cstr = psync_get_lstring(row[2], &l); l++; - str = (char *)malloc(l); + str = (char *)pmem_malloc(PMEM_SUBSYS_OTHER, l); memcpy(str, cstr, l); strlens += l; @@ -866,14 +867,14 @@ psync_folder_list_t *pfolder_sync_folders(char *syncTypes) { psql_free(res); l = offsetof(psync_folder_list_t, folders) + sizeof(psync_folder_t) * lastfolder; - ret = (psync_folder_list_t *)malloc(l + strlens); + ret = (psync_folder_list_t *)pmem_malloc(PMEM_SUBSYS_OTHER, l + strlens); str = ((char *)ret) + l; ret->foldercnt = lastfolder; for (i = 0; i < lastfolder; i++) { l = folders[i].locallen; memcpy(str, folders[i].localpath, l); - free(folders[i].localpath); + pmem_free(PMEM_SUBSYS_OTHER, folders[i].localpath); strncpy(ret->folders[i].localpath, str, sizeof(ret->folders[i].localpath) - 1); ret->folders[i].localpath[sizeof(ret->folders[i].localpath) - 1] = '\0'; @@ -893,7 +894,7 @@ psync_folder_list_t *pfolder_sync_folders(char *syncTypes) { l = folders[i].remotelen; memcpy(str, folders[i].remotepath, l); - free(folders[i].remotepath); + pmem_free(PMEM_SUBSYS_OTHER, folders[i].remotepath); strncpy(ret->folders[i].remotepath, str, sizeof(ret->folders[i].remotepath) - 1); ret->folders[i].remotepath[sizeof(ret->folders[i].remotepath) - 1] = '\0'; @@ -916,7 +917,7 @@ psync_folder_list_t *pfolder_sync_folders(char *syncTypes) { ret->folders[i].synctype = folders[i].synctype; } - free(folders); + pmem_free(PMEM_SUBSYS_OTHER, folders); return ret; } @@ -951,10 +952,10 @@ psync_syncid_t pfolder_add_sync(const char *localpath, psync_folderid_t folderid if (!memcmp(syncmp, localpath, len) && (localpath[len] == 0 || localpath[len] == '/' || localpath[len] == '\\')) { - free(syncmp); + pmem_free(PMEM_SUBSYS_OTHER, syncmp); return_isyncid(PERROR_LOCAL_IS_ON_PDRIVE); } - free(syncmp); + pmem_free(PMEM_SUBSYS_OTHER, syncmp); } res = psql_query("SELECT localpath FROM syncfolder"); if (pdbg_unlikely(!res))