diff --git a/project/backend/manager.c b/project/backend/manager.c index fa5977f..33c8602 100644 --- a/project/backend/manager.c +++ b/project/backend/manager.c @@ -104,16 +104,21 @@ void manager_savepass(Password* pass) { // Our resulting string char* result = store_load("Data"); + // Storing important bits from password + const char* name = pass->name; + const char* user = pass->user; + const char* phrase = pass->phrase; + + // Freeing password + pass_free(pass); + // Is the result empty? if(!result) { - // Free prior result - free(result); - // Allocating result FuriString* n_result = furi_string_alloc(); // Setting stuff - furi_string_printf(n_result, "%s|%s|%s|0", pass->name, pass->user, pass->phrase); + furi_string_printf(n_result, "%s|%s|%s|0", name, user, phrase); // Saving the data char* data = malloc(sizeof(char)); @@ -123,19 +128,12 @@ void manager_savepass(Password* pass) { // Cleanup furi_string_free(n_result); free(data); - free(pass); } else { - // Our new stuff - FuriString* new_addon = furi_string_alloc(); - - // Adding the Name - furi_string_printf(new_addon, "|%s|%s|%s|0", pass->name, pass->user, pass->phrase); - // New result FuriString* new_result = furi_string_alloc(); // Appending addon to result - furi_string_printf(new_result, "%s%s", result, furi_string_get_cstr(new_addon)); + furi_string_printf(new_result, "%s|%s|%s|%s|0", result, name, user, phrase); // Saving the data char* data = malloc(sizeof(char)); @@ -143,11 +141,9 @@ void manager_savepass(Password* pass) { store_save("Data", data); // Cleanup - furi_string_free(new_addon); furi_string_free(new_result); free(result); free(data); - free(pass); } } void manager_loadpass(Manager* manager, char* name) { diff --git a/project/ui/scenes/create.c b/project/ui/scenes/create.c index 0c0012b..8f9ad36 100644 --- a/project/ui/scenes/create.c +++ b/project/ui/scenes/create.c @@ -28,7 +28,7 @@ void FP_Scene_Enter_Create(void* context) { if (app->keyboard) { // Did we already start a password? if (!app->manager->new) { - app->manager->new = malloc(sizeof(Password)); + app->manager->new = pass_init("", "", "", 0); } // Checking what we selected @@ -37,10 +37,10 @@ void FP_Scene_Enter_Create(void* context) { // Does name already exist? if (app->manager->new->name) { free(app->manager->new->name); + app->manager->new->name = malloc(sizeof(char*)); } // Copying it - app->manager->new->name = malloc(sizeof(char*)); strcpy(app->manager->new->name, app->keyboard); break; @@ -48,20 +48,20 @@ void FP_Scene_Enter_Create(void* context) { // Does user already exist? if (app->manager->new->user) { free(app->manager->new->user); + app->manager->new->user = malloc(sizeof(char*)); } // Copying it - app->manager->new->user = malloc(sizeof(char*)); strcpy(app->manager->new->user, app->keyboard); break; case 2: // Password // Does phrase already exist? if (app->manager->new->phrase) { free(app->manager->new->phrase); + app->manager->new->phrase = malloc(sizeof(char*)); } // Copying it - app->manager->new->phrase = malloc(sizeof(char*)); strcpy(app->manager->new->phrase, app->keyboard); break; }