From 0a75d5461f1acc6efb7265407c3d8be8be67f3dc Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 11 Apr 2019 22:49:52 +0100 Subject: [PATCH] Pass full database filename to FindIncredimailVersion Also use a case-insensitive compare to check its name, since this is Win32 land. --- Source/increadimail_convert.h | 2 +- Source/incredimail_convert.c | 12 ++++++------ Source/winmain.cpp | 13 +++---------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/Source/increadimail_convert.h b/Source/increadimail_convert.h index 4dce66a..83e3dee 100644 --- a/Source/increadimail_convert.h +++ b/Source/increadimail_convert.h @@ -133,7 +133,7 @@ extern "C" { // //*************************************************************************** - enum INCREDIMAIL_VERSIONS FindIncredimailVersion(char *file_or_directory); + enum INCREDIMAIL_VERSIONS FindIncredimailVersion(const char *file_or_directory); //*************************************************************************** // INPUTS: // diff --git a/Source/incredimail_convert.c b/Source/incredimail_convert.c index f1ee22c..77a6e0b 100644 --- a/Source/incredimail_convert.c +++ b/Source/incredimail_convert.c @@ -498,14 +498,14 @@ static int testimdb(const char* filename) { } -static int endswith(const char *s, const char *suffix) { +static int endswith_case_insensitive(const char *s, const char *suffix) { size_t suffix_len = strlen(suffix); size_t s_len = strlen(s); - return s_len >= suffix_len && !strcmp(s + (s_len - suffix_len), suffix); + return s_len >= suffix_len && !stricmp(s + (s_len - suffix_len), suffix); } -enum INCREDIMAIL_VERSIONS FindIncredimailVersion(char *file_or_directory) { +enum INCREDIMAIL_VERSIONS FindIncredimailVersion(const char *file_or_directory) { char temp_path[MAX_CHAR]; enum INCREDIMAIL_VERSIONS ret = INCREDIMAIL_VERSION_UNKNOWN; WIN32_FIND_DATA FindFileData; @@ -519,11 +519,11 @@ enum INCREDIMAIL_VERSIONS FindIncredimailVersion(char *file_or_directory) { const char *im2_mbox_suffix = "\\containers.db"; const char *im2_maildir_suffix = "\\messageStore.db"; - if (endswith(file_or_directory, xe_suffix)) + if (endswith_case_insensitive(file_or_directory, xe_suffix)) return INCREDIMAIL_XE; - else if (endswith(file_or_directory, im2_mbox_suffix) && testimdb(file_or_directory)) + else if (endswith_case_insensitive(file_or_directory, im2_mbox_suffix) && testimdb(file_or_directory)) return INCREDIMAIL_2; - else if (endswith(file_or_directory, im2_maildir_suffix) && testimdb(file_or_directory)) + else if (endswith_case_insensitive(file_or_directory, im2_maildir_suffix) && testimdb(file_or_directory)) return INCREDIMAIL_2_MAILDIR; // Otherwise try searching a directory: diff --git a/Source/winmain.cpp b/Source/winmain.cpp index 4b65d80..a5f7a77 100644 --- a/Source/winmain.cpp +++ b/Source/winmain.cpp @@ -267,9 +267,7 @@ HANDLE hFind; openfile.lpstrFilter = filter; if( GetOpenFileName( &openfile ) == TRUE ) { - // get the directory (reuse varible im_header_filename) - strncpy_s( im_header_filename, MAX_CHAR , im_database_filename, strlen( im_database_filename ) - strlen( openfile.lpstrFileTitle ) ); - enum INCREDIMAIL_VERSIONS version = FindIncredimailVersion(im_header_filename); + enum INCREDIMAIL_VERSIONS version = FindIncredimailVersion(im_database_filename); if(version == INCREDIMAIL_XE) { strncpy_s( im_header_filename, MAX_CHAR ,im_database_filename, strlen( im_database_filename ) - 3 ); strcat_s( im_header_filename, MAX_CHAR, "imh" ); @@ -464,11 +462,8 @@ enum INCREDIMAIL_VERSIONS incredimail_version; SendDlgItemMessage( global_hwnd, IDC_PROGRESS1, PBM_SETPOS, 0, 0 ); // reset the progress bar to 0% - pdest = strrchr( im_database_filename, '\\' ); - strncpy_s( temp_path, MAX_CHAR, im_database_filename, strlen( im_database_filename ) - strlen( pdest ) ); - // get incredimail version - incredimail_version = FindIncredimailVersion( temp_path ); + incredimail_version = FindIncredimailVersion( im_database_filename ); if( incredimail_version == INCREDIMAIL_XE ) { // get the header filename strncpy_s( im_header_filename, MAX_CHAR, im_database_filename, strlen( im_database_filename ) - 3 ); @@ -788,9 +783,7 @@ enum INCREDIMAIL_VERSIONS incredimail_version; SetDlgItemText( global_hwnd, IDC_OVERALL_PERCENT, debug_str ); // get incredimail version - pdest = strrchr( im_database_filename, '\\' ); - strncpy_s( temp_path, sizeof(temp_path), im_database_filename, strlen( im_database_filename ) - strlen( pdest ) ); - incredimail_version = FindIncredimailVersion( temp_path ); + incredimail_version = FindIncredimailVersion( im_database_filename ); if (incredimail_version == INCREDIMAIL_VERSION_UNKNOWN) { char msg[CHAR_MAX]; sprintf_s(msg, CHAR_MAX, "Directory %s doesn't match a known Incredimail version", temp_path);