Remove usage of MAX_PATH_CHARACTERS in filesel.c
This commit is contained in:
parent
c85a703aa0
commit
e0401e8205
@ -301,12 +301,14 @@ char * Format_filename(const char * fname, word max_length, int type)
|
||||
int pos_last_dot;
|
||||
#ifdef ENABLE_FILENAMES_ICONV
|
||||
/* convert file name from UTF8 to ANSI */
|
||||
char converted_fname[MAX_PATH_CHARACTERS];
|
||||
char * converted_fname = NULL;
|
||||
{
|
||||
char * input = (char *)fname;
|
||||
size_t inbytesleft = strlen(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)
|
||||
{
|
||||
*output = '\0';
|
||||
@ -371,6 +373,9 @@ char * Format_filename(const char * fname, word max_length, int type)
|
||||
result[other_cursor]=fname[c];
|
||||
}
|
||||
}
|
||||
#ifdef ENABLE_FILENAMES_ICONV
|
||||
free(converted_fname);
|
||||
#endif
|
||||
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)
|
||||
{
|
||||
char old_filename[MAX_PATH_CHARACTERS];
|
||||
char old_filename[256];
|
||||
|
||||
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
|
||||
//un bouton enclenchant Load ou Save juste après.
|
||||
byte initial_back_color; // preview destroys it (how nice)
|
||||
char save_filename[MAX_PATH_CHARACTERS];
|
||||
word save_filename_unicode[MAX_PATH_CHARACTERS];
|
||||
char save_filename[256];
|
||||
word save_filename_unicode[256];
|
||||
char initial_comment[COMMENT_SIZE+1];
|
||||
short window_shortcut;
|
||||
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
|
||||
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 :
|
||||
// in, this case, clear the filename
|
||||
if (Filelist.Nb_elements>0)
|
||||
@ -2070,24 +2075,31 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
|
||||
#endif
|
||||
{
|
||||
#if defined(WIN32)
|
||||
WCHAR temp_str[MAX_PATH_CHARACTERS];
|
||||
if (GetShortPathNameW((WCHAR *)filename_unicode, temp_str, MAX_PATH_CHARACTERS) == 0)
|
||||
DWORD short_len;
|
||||
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
|
||||
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] = '\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)
|
||||
/* convert back from UTF16 to UTF8 */
|
||||
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)
|
||||
{
|
||||
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__)
|
||||
static char path[1024]={0};
|
||||
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
|
||||
if (strcmp(directory_to_change_to,PARENT_DIR) != 0)
|
||||
{
|
||||
strcpy(previous_directory,PARENT_DIR);
|
||||
previous_directory = strdup(PARENT_DIR);
|
||||
}
|
||||
else
|
||||
{
|
||||
Extract_filename(previous_directory, Selector->Directory);
|
||||
previous_directory = Extract_filename(NULL, 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
|
||||
pos = Find_file_in_fileselector(&Filelist, previous_directory);
|
||||
strcpy(Selector_filename, previous_directory);
|
||||
free(previous_directory);
|
||||
if (!Get_Unicode_Filename(Selector_filename_unicode, Selector_filename, "."))
|
||||
Selector_filename_unicode[0] = 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
|
||||
{
|
||||
char warn_msg[MAX_PATH_CHARACTERS];
|
||||
char * current_dir;
|
||||
Display_cursor();
|
||||
snprintf(warn_msg, sizeof(warn_msg), "cannot chdir to \"%s\" !", directory_to_change_to);
|
||||
Warning(warn_msg);
|
||||
GFX2_Log(GFX2_WARNING, "cannot chdir to \"%s\" !", directory_to_change_to);
|
||||
current_dir = Get_current_directory(NULL, NULL, 0);
|
||||
GFX2_Log(GFX2_WARNING, "Current directory is \"%s\"", current_dir);
|
||||
free(current_dir);
|
||||
// restore Selector_filename
|
||||
strncpy(Selector_filename, save_filename, sizeof(Selector_filename));
|
||||
Error(0);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user