Remove usage of MAX_PATH_CHARACTERS in filesel.c

This commit is contained in:
Thomas Bernard 2019-02-18 16:10:08 +01:00
parent c85a703aa0
commit e0401e8205
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C

View File

@ -301,12 +301,14 @@ char * Format_filename(const char * fname, word max_length, int type)
int pos_last_dot; int pos_last_dot;
#ifdef ENABLE_FILENAMES_ICONV #ifdef ENABLE_FILENAMES_ICONV
/* convert file name from UTF8 to ANSI */ /* convert file name from UTF8 to ANSI */
char converted_fname[MAX_PATH_CHARACTERS]; char * converted_fname = NULL;
{ {
char * input = (char *)fname; char * input = (char *)fname;
size_t inbytesleft = strlen(fname); size_t inbytesleft = strlen(fname);
char * output = converted_fname; char * output = converted_fname;
size_t outbytesleft = sizeof(converted_fname)-1; size_t outbytesleft = inbytesleft;
converted_fname = malloc(outbytesleft + 1);
output = converted_fname;
if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0)
{ {
*output = '\0'; *output = '\0';
@ -371,6 +373,9 @@ char * Format_filename(const char * fname, word max_length, int type)
result[other_cursor]=fname[c]; result[other_cursor]=fname[c];
} }
} }
#ifdef ENABLE_FILENAMES_ICONV
free(converted_fname);
#endif
return result; return result;
} }
@ -1431,7 +1436,7 @@ static void Reload_list_of_files(byte filter, T_Scroller_button * button)
void Scroll_fileselector(T_Scroller_button * file_scroller) void Scroll_fileselector(T_Scroller_button * file_scroller)
{ {
char old_filename[MAX_PATH_CHARACTERS]; char old_filename[256];
strcpy(old_filename,Selector_filename); strcpy(old_filename,Selector_filename);
@ -1656,8 +1661,8 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
byte has_clicked_ok=0;// Indique si on a clické sur Load ou Save ou sur byte has_clicked_ok=0;// Indique si on a clické sur Load ou Save ou sur
//un bouton enclenchant Load ou Save juste après. //un bouton enclenchant Load ou Save juste après.
byte initial_back_color; // preview destroys it (how nice) byte initial_back_color; // preview destroys it (how nice)
char save_filename[MAX_PATH_CHARACTERS]; char save_filename[256];
word save_filename_unicode[MAX_PATH_CHARACTERS]; word save_filename_unicode[256];
char initial_comment[COMMENT_SIZE+1]; char initial_comment[COMMENT_SIZE+1];
short window_shortcut; short window_shortcut;
const char * directory_to_change_to = NULL; const char * directory_to_change_to = NULL;
@ -2034,7 +2039,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
// Save the filename // Save the filename
strcpy(save_filename, Selector_filename); strcpy(save_filename, Selector_filename);
Unicode_strlcpy(save_filename_unicode, Selector_filename_unicode, MAX_PATH_CHARACTERS); Unicode_strlcpy(save_filename_unicode, Selector_filename_unicode, 256);
// Check if the selected entry is a drive/directory : // Check if the selected entry is a drive/directory :
// in, this case, clear the filename // in, this case, clear the filename
if (Filelist.Nb_elements>0) if (Filelist.Nb_elements>0)
@ -2070,24 +2075,31 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
#endif #endif
{ {
#if defined(WIN32) #if defined(WIN32)
WCHAR temp_str[MAX_PATH_CHARACTERS]; DWORD short_len;
if (GetShortPathNameW((WCHAR *)filename_unicode, temp_str, MAX_PATH_CHARACTERS) == 0) short_len = GetShortPathNameW((WCHAR *)filename_unicode, NULL, 0);
if (short_len > 0)
{
WCHAR * temp_str = (WCHAR *)malloc(short_len * sizeof(WCHAR));
short_len = GetShortPathNameW((WCHAR *)filename_unicode, temp_str, short_len);
if (short_len > 0)
{
DWORD i;
for (i = 0; i < short_len && temp_str[i] != 0; i++)
filename_ansi[i] = temp_str[i];
filename_ansi[i] = '\0';
}
free(temp_str);
}
if (short_len == 0)
{ {
// generate a temporary ansi name // generate a temporary ansi name
int i; int i;
for (i = 0; i < MAX_PATH_CHARACTERS - 1 && filename_unicode[i] != 0; i++) for (i = 0; i < sizeof(filename_ansi) - 1 && filename_unicode[i] != 0; i++)
{ {
filename_ansi[i] = (filename_unicode[i] < 256) ? (byte)filename_unicode[i] : '_'; filename_ansi[i] = (filename_unicode[i] < 256) ? (byte)filename_unicode[i] : '_';
} }
filename_ansi[i] = '\0'; filename_ansi[i] = '\0';
} }
else
{
int i;
for (i = 0; i < MAX_PATH_CHARACTERS - 1 && temp_str[i] != 0; i++)
filename_ansi[i] = temp_str[i];
filename_ansi[i] = '\0';
}
#elif defined(ENABLE_FILENAMES_ICONV) #elif defined(ENABLE_FILENAMES_ICONV)
/* convert back from UTF16 to UTF8 */ /* convert back from UTF16 to UTF8 */
char * input = (char *)filename_unicode; char * input = (char *)filename_unicode;
@ -2413,7 +2425,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
if (Change_directory(directory_to_change_to) == 0) if (Change_directory(directory_to_change_to) == 0)
{ {
short pos; short pos;
char previous_directory[MAX_PATH_CHARACTERS]; // Répertoire d'où l'on vient après un CHDIR char * previous_directory; // Directory when we are coming from
#if defined (__MINT__) #if defined (__MINT__)
static char path[1024]={0}; static char path[1024]={0};
char currentDrive='A'; char currentDrive='A';
@ -2422,11 +2434,11 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
// save the previous current directory // save the previous current directory
if (strcmp(directory_to_change_to,PARENT_DIR) != 0) if (strcmp(directory_to_change_to,PARENT_DIR) != 0)
{ {
strcpy(previous_directory,PARENT_DIR); previous_directory = strdup(PARENT_DIR);
} }
else else
{ {
Extract_filename(previous_directory, Selector->Directory); previous_directory = Extract_filename(NULL, Selector->Directory);
} }
free(Selector->Directory); free(Selector->Directory);
@ -2438,6 +2450,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
// Set the fileselector bar on the directory we're coming from // Set the fileselector bar on the directory we're coming from
pos = Find_file_in_fileselector(&Filelist, previous_directory); pos = Find_file_in_fileselector(&Filelist, previous_directory);
strcpy(Selector_filename, previous_directory); strcpy(Selector_filename, previous_directory);
free(previous_directory);
if (!Get_Unicode_Filename(Selector_filename_unicode, Selector_filename, ".")) if (!Get_Unicode_Filename(Selector_filename_unicode, Selector_filename, "."))
Selector_filename_unicode[0] = 0; Selector_filename_unicode[0] = 0;
Highlight_file((pos >= 0) ? pos : 0); Highlight_file((pos >= 0) ? pos : 0);
@ -2451,10 +2464,12 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
} }
else else
{ {
char warn_msg[MAX_PATH_CHARACTERS]; char * current_dir;
Display_cursor(); Display_cursor();
snprintf(warn_msg, sizeof(warn_msg), "cannot chdir to \"%s\" !", directory_to_change_to); GFX2_Log(GFX2_WARNING, "cannot chdir to \"%s\" !", directory_to_change_to);
Warning(warn_msg); current_dir = Get_current_directory(NULL, NULL, 0);
GFX2_Log(GFX2_WARNING, "Current directory is \"%s\"", current_dir);
free(current_dir);
// restore Selector_filename // restore Selector_filename
strncpy(Selector_filename, save_filename, sizeof(Selector_filename)); strncpy(Selector_filename, save_filename, sizeof(Selector_filename));
Error(0); Error(0);