T_IO_Context Original_file_name and Original_file_directory are now dynamically allocated

This commit is contained in:
Thomas Bernard 2019-02-18 09:08:47 +01:00
parent 11ddd669b3
commit 9886872c8a
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C
3 changed files with 22 additions and 30 deletions

View File

@ -4473,28 +4473,19 @@ void Load_GIF(T_IO_Context * context)
else if (!memcmp(aeb,"GFX2PATH\x00\x00\x00",0x0B))
{
// Original file path
if (context->Original_file_name && context->Original_file_directory)
Read_byte(GIF_file,&size_to_read);
if (!File_error && size_to_read > 0)
{
Read_byte(GIF_file,&size_to_read);
if (!File_error && size_to_read)
free(context->Original_file_directory);
context->Original_file_directory = malloc(size_to_read);
Read_bytes(GIF_file, context->Original_file_directory, size_to_read);
Read_byte(GIF_file, &size_to_read);
if (!File_error && size_to_read > 0)
{
Read_bytes(GIF_file,context->Original_file_directory, size_to_read);
Read_byte(GIF_file,&size_to_read);
if (!File_error && size_to_read)
{
Read_bytes(GIF_file,context->Original_file_name, size_to_read);
Read_byte(GIF_file,&size_to_read); // Normally 0
}
}
}
else
{
// Nothing to do, just skip sub-block
Read_byte(GIF_file,&size_to_read);
while (size_to_read!=0 && !File_error)
{
fseek(GIF_file,size_to_read,SEEK_CUR);
Read_byte(GIF_file,&size_to_read);
free(context->Original_file_name);
context->Original_file_name = malloc(size_to_read);
Read_bytes(GIF_file, context->Original_file_name, size_to_read);
Read_byte(GIF_file, &size_to_read); // Normally 0
}
}
}

View File

@ -827,11 +827,13 @@ void Load_image(T_IO_Context *context)
free(Main.backups->Pages->File_directory);
free(Main.backups->Pages->Filename_unicode);
Main.backups->Pages->Filename_unicode = NULL;
if (context->Original_file_name && context->Original_file_name[0]
&& context->Original_file_directory && context->Original_file_directory[0])
if (context->Original_file_name != NULL
&& context->Original_file_directory != NULL)
{
Main.backups->Pages->Filename = strdup(context->Original_file_name); /// @todo steal buffer !
Main.backups->Pages->File_directory = strdup(context->Original_file_directory);
Main.backups->Pages->Filename = context->Original_file_name; // steal buffer !
context->Original_file_name = NULL;
Main.backups->Pages->File_directory = context->Original_file_directory; // steal heap buffer
context->Original_file_directory = NULL;
}
else
{
@ -1736,6 +1738,8 @@ void Destroy_context(T_IO_Context *context)
free(context->File_name);
free(context->File_name_unicode);
free(context->File_directory);
free(context->Original_file_directory);
free(context->Original_file_name);
memset(context, 0, sizeof(T_IO_Context));
}
@ -2006,13 +2010,9 @@ byte Process_backups(T_String_list **list)
{
// Load this file
T_IO_Context context;
char file_name[MAX_PATH_CHARACTERS]="";
char file_directory[MAX_PATH_CHARACTERS]="";
Init_context_backup_image(&context, files_vector[i], Config_directory);
// Provide buffers to read original location
context.Original_file_name = file_name;
context.Original_file_directory = file_directory;
Load_image(&context);
Main.image_is_modified=1;
Destroy_context(&context);
@ -2126,8 +2126,8 @@ void Rotate_safety_backups(void)
Init_context_backup_image(&context, file_name, Config_directory);
context.Format=FORMAT_GIF;
// Provide original file data, to store as a GIF Application Extension
context.Original_file_name = Main.backups->Pages->Filename;
context.Original_file_directory = Main.backups->Pages->File_directory;
context.Original_file_name = strdup(Main.backups->Pages->Filename);
context.Original_file_directory = strdup(Main.backups->Pages->File_directory);
Save_image(&context);
Destroy_context(&context);

View File

@ -36,6 +36,7 @@
#if _MSC_VER < 1900
#define snprintf _snprintf
#endif
#define strdup _strdup
#endif
#include <zlib.h>