Version v0.2.87 - Fix default pad preferences to store full file paths instead of relative paths
This commit is contained in:
2
TODO.md
2
TODO.md
@@ -22,3 +22,5 @@ Or, better yet, assume the offset is a very large size, and use the pad itself t
|
||||
## Setup for multiple USB drives
|
||||
|
||||
|
||||
## Change back in pad menu to exit
|
||||
|
||||
|
||||
93
otp.c
93
otp.c
@@ -2668,8 +2668,21 @@ int load_preferences(void) {
|
||||
|
||||
while ((entry = readdir(dir)) != NULL && !found_pad) {
|
||||
if (strstr(entry->d_name, ".pad") && strlen(entry->d_name) == 68) {
|
||||
// Found a pad file - construct full path
|
||||
// Found a pad file - construct full absolute path
|
||||
char absolute_path[1024];
|
||||
if (current_pads_dir[0] == '/') {
|
||||
// Already absolute path
|
||||
snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s", current_pads_dir, entry->d_name);
|
||||
} else {
|
||||
// Relative path - make it absolute
|
||||
char current_dir[512];
|
||||
if (getcwd(current_dir, sizeof(current_dir))) {
|
||||
snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s/%s", current_dir, current_pads_dir, entry->d_name);
|
||||
} else {
|
||||
// Fallback to relative path
|
||||
snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s", current_pads_dir, entry->d_name);
|
||||
}
|
||||
}
|
||||
strncpy(default_pad_path, first_pad_path, sizeof(default_pad_path) - 1);
|
||||
default_pad_path[sizeof(default_pad_path) - 1] = '\0';
|
||||
found_pad = 1;
|
||||
@@ -2783,7 +2796,29 @@ char* get_default_pad_path(void) {
|
||||
}
|
||||
|
||||
int set_default_pad_path(const char* pad_path) {
|
||||
return set_preference("default_pad", pad_path);
|
||||
if (!pad_path) {
|
||||
return set_preference("default_pad", NULL);
|
||||
}
|
||||
|
||||
// Ensure we store the full absolute path
|
||||
char absolute_path[1024];
|
||||
if (pad_path[0] == '/') {
|
||||
// Already absolute path
|
||||
strncpy(absolute_path, pad_path, sizeof(absolute_path) - 1);
|
||||
absolute_path[sizeof(absolute_path) - 1] = '\0';
|
||||
} else {
|
||||
// Relative path - make it absolute
|
||||
char current_dir[512];
|
||||
if (getcwd(current_dir, sizeof(current_dir))) {
|
||||
snprintf(absolute_path, sizeof(absolute_path), "%s/%s", current_dir, pad_path);
|
||||
} else {
|
||||
// Fallback to using the path as-is if getcwd fails
|
||||
strncpy(absolute_path, pad_path, sizeof(absolute_path) - 1);
|
||||
absolute_path[sizeof(absolute_path) - 1] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
return set_preference("default_pad", absolute_path);
|
||||
}
|
||||
|
||||
// OTP thumb drive detection function implementation
|
||||
@@ -3602,6 +3637,7 @@ int handle_pads_menu(void) {
|
||||
|
||||
printf("\nActions:\n");
|
||||
printf(" \033[4mG\033[0menerate new pad\n");
|
||||
printf(" \033[4mS\033[0met default pad\n");
|
||||
printf(" \033[4mB\033[0mack to main menu\n");
|
||||
printf("\nSelect pad (by prefix) or action: ");
|
||||
|
||||
@@ -3620,6 +3656,59 @@ int handle_pads_menu(void) {
|
||||
return handle_pads_menu();
|
||||
}
|
||||
return result;
|
||||
} else if (toupper(input[0]) == 'S') {
|
||||
// Set default pad
|
||||
printf("\nSelect pad to set as default (by prefix): ");
|
||||
char pad_input[MAX_HASH_LENGTH];
|
||||
if (!fgets(pad_input, sizeof(pad_input), stdin)) {
|
||||
printf("Error: Failed to read input\n");
|
||||
return 1;
|
||||
}
|
||||
pad_input[strcspn(pad_input, "\n")] = 0;
|
||||
|
||||
// Find matching pad by prefix using the same logic as pad selection
|
||||
int matched_pad = -1;
|
||||
int match_count = 0;
|
||||
|
||||
for (int i = 0; i < pad_count; i++) {
|
||||
if (strncmp(pad_input, pads[i].chksum, strlen(pad_input)) == 0) {
|
||||
matched_pad = i;
|
||||
match_count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (match_count == 0) {
|
||||
printf("No pad found matching prefix '%s'\n", pad_input);
|
||||
return handle_pads_menu();
|
||||
} else if (match_count > 1) {
|
||||
printf("Ambiguous prefix. Multiple matches found.\n");
|
||||
return handle_pads_menu();
|
||||
}
|
||||
|
||||
// Construct the full absolute pad path and set as default
|
||||
char new_default_path[1024];
|
||||
if (current_pads_dir[0] == '/') {
|
||||
// Already absolute path
|
||||
snprintf(new_default_path, sizeof(new_default_path), "%s/%s.pad", current_pads_dir, pads[matched_pad].chksum);
|
||||
} else {
|
||||
// Relative path - make it absolute
|
||||
char current_dir[512];
|
||||
if (getcwd(current_dir, sizeof(current_dir))) {
|
||||
snprintf(new_default_path, sizeof(new_default_path), "%s/%s/%s.pad", current_dir, current_pads_dir, pads[matched_pad].chksum);
|
||||
} else {
|
||||
// Fallback to relative path
|
||||
snprintf(new_default_path, sizeof(new_default_path), "%s/%s.pad", current_pads_dir, pads[matched_pad].chksum);
|
||||
}
|
||||
}
|
||||
|
||||
if (set_default_pad_path(new_default_path) == 0) {
|
||||
printf("Default pad set to: %.16s...\n", pads[matched_pad].chksum);
|
||||
printf("Full path: %s\n", new_default_path);
|
||||
} else {
|
||||
printf("Error: Failed to update default pad preference\n");
|
||||
}
|
||||
|
||||
return handle_pads_menu();
|
||||
} else if (toupper(input[0]) == 'B') {
|
||||
return 0; // Back to main menu
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user