Migrate pfolder.c malloc/free to pmem_malloc/pmem_free

This commit is contained in:
Levi Neely 2026-03-08 17:04:39 +01:00
parent 115cbba660
commit f2c1ee615f
1 changed files with 31 additions and 30 deletions

View File

@ -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))