From 736277bc769b1b8409201c1a532de63fd2435f19 Mon Sep 17 00:00:00 2001 From: objnull Date: Sun, 8 Sep 2024 01:04:51 -0400 Subject: [PATCH] Fixed going from View to Create then crash --- build/data.bin | 1 - project/backend/manager.c | 6 +++ project/backend/manager.h | 1 + project/backend/ui.c | 85 +++++++++++++++++++++------------------ 4 files changed, 52 insertions(+), 41 deletions(-) delete mode 100644 build/data.bin diff --git a/build/data.bin b/build/data.bin deleted file mode 100644 index deac0b3..0000000 --- a/build/data.bin +++ /dev/null @@ -1 +0,0 @@ -Data: Q|A|S|0 diff --git a/project/backend/manager.c b/project/backend/manager.c index aa6a1df..bdae452 100644 --- a/project/backend/manager.c +++ b/project/backend/manager.c @@ -36,6 +36,9 @@ char** split_string(const char* str, char delimiter, int* count) { return result; } void string_append(char* first, const char* second) { + // Store first index + char* i_first = first; + // Get to the end of string 1 while (*first) { ++first; @@ -45,6 +48,9 @@ void string_append(char* first, const char* second) { while (*second) { *first++ = *second++; } + + // Reset index + first = i_first; } void manager_loadnames(Manager* manager){ // Loading the names of all passwords diff --git a/project/backend/manager.h b/project/backend/manager.h index a2208a4..70c93b4 100644 --- a/project/backend/manager.h +++ b/project/backend/manager.h @@ -12,6 +12,7 @@ // Structures typedef struct { Password* current; + Password* new; char** names; int count; diff --git a/project/backend/ui.c b/project/backend/ui.c index 41dc8b7..8818feb 100644 --- a/project/backend/ui.c +++ b/project/backend/ui.c @@ -229,46 +229,56 @@ void FP_Scene_Enter_Create(void* context) { // Reset page submenu_reset(app->submenu); - // Did we already start a password? - if (!app->manager->current) { - app->manager->current = malloc(sizeof(Password)); - } - // Checking if we typed something before if (app->temp) { - // Checking what we selected - switch (app->selection) { - case 0: // Name - // Does name already exist? - if (app->manager->current->name) { - free(app->manager->current->name); + // Boolean + bool is_field = true; + + // Checking if it's any of the following: + if (!strcmp(app->temp, "Username")) {is_field = false;} + if (!strcmp(app->temp, "Password")) {is_field = false;} + + // We're good! + if(is_field) { + // Did we already start a password? + if (!app->manager->new) { + app->manager->new = malloc(sizeof(Password)); } - // Copying it - app->manager->current->name = malloc(sizeof(char*)); - strcpy(app->manager->current->name, app->temp); + // Checking what we selected + switch (app->selection) { + case 0: // Name + // Does name already exist? + if (app->manager->new->name) { + free(app->manager->new->name); + } - break; - case 1: // Username - // Does user already exist? - if (app->manager->current->user) { - free(app->manager->current->user); + // Copying it + app->manager->new->name = malloc(sizeof(char*)); + strcpy(app->manager->new->name, app->temp); + + break; + case 1: // Username + // Does user already exist? + if (app->manager->new->user) { + free(app->manager->new->user); + } + + // Copying it + app->manager->new->user = malloc(sizeof(char*)); + strcpy(app->manager->new->user, app->temp); + break; + case 2: // Password + // Does phrase already exist? + if (app->manager->new->phrase) { + free(app->manager->new->phrase); + } + + // Copying it + app->manager->new->phrase = malloc(sizeof(char*)); + strcpy(app->manager->new->phrase, app->temp); + break; } - - // Copying it - app->manager->current->user = malloc(sizeof(char*)); - strcpy(app->manager->current->user, app->temp); - break; - case 2: // Password - // Does phrase already exist? - if (app->manager->current->phrase) { - free(app->manager->current->phrase); - } - - // Copying it - app->manager->current->phrase = malloc(sizeof(char*)); - strcpy(app->manager->current->phrase, app->temp); - break; } // Freeing temp @@ -518,12 +528,7 @@ bool FP_Scene_Event_Create(void* context, SceneManagerEvent event) { break; case FP_Scene_Create_Event_Done: // Save the password - manager_savepass(app->manager, app->manager->current); - - // Freeing temp string - if (app->temp) { - free(app->temp); - } + manager_savepass(app->manager, app->manager->new); // Reload manager manager_free(app->manager);