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;
|
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);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user