Remove usage of MAX_PATH_CHARACTERS in saveini.c

This commit is contained in:
Thomas Bernard 2019-01-18 12:34:12 +01:00
parent 8f0d036fe1
commit efeaad5b73
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C

View File

@ -2,6 +2,7 @@
*/ */
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2019 Thomas Bernard
Copyright 2011 Pawel Góralski Copyright 2011 Pawel Góralski
Copyright 2008 Peter Gordon Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud Copyright 2008 Yves Rizoud
@ -425,7 +426,7 @@ static int Save_INI_set_values(FILE * old_file,FILE * new_file,char * buffer,con
*/ */
static void Save_INI_flush(FILE * old_file,FILE * new_file,char * buffer) static void Save_INI_flush(FILE * old_file,FILE * new_file,char * buffer)
{ {
while (fgets(buffer,1024,old_file)!=0) while (fgets(buffer,1024,old_file) != NULL)
fprintf(new_file,"%s",buffer); fprintf(new_file,"%s",buffer);
} }
@ -439,50 +440,53 @@ int Save_INI(const T_Config * conf)
FILE * new_file; FILE * new_file;
char * buffer; char * buffer;
int values[3]; int values[3];
char filename[MAX_PATH_CHARACTERS]; char * filename;
char temp_filename[MAX_PATH_CHARACTERS]; char * temp_filename = NULL;
int return_code; int return_code;
char ref_ini_file[MAX_PATH_CHARACTERS]; char * ref_ini_file;
int ini_file_exists; int ini_file_exists;
int index; int index;
// On alloue les zones de mémoire: // Open "clean" INI with defaults from gfx2def.ini
buffer=(char *)malloc(1024); ref_ini_file = Filepath_append_to_dir(Data_directory, INIDEF_FILENAME);
old_file = fopen(ref_ini_file, "r");
// On calcule les noms des fichiers qu'on manipule: if (old_file == 0)
strcpy(filename,Config_directory); {
strcat(filename,INI_FILENAME); free(ref_ini_file);
return ERROR_INI_MISSING;
}
free(ref_ini_file);
// On vérifie si le fichier INI existe // Check if the ini file already exists
filename = Filepath_append_to_dir(Config_directory, INI_FILENAME);
if ((ini_file_exists = File_exists(filename))) if ((ini_file_exists = File_exists(filename)))
{ {
strcpy(temp_filename,Config_directory); temp_filename = Filepath_append_to_dir(Config_directory, INISAVE_FILENAME);
strcat(temp_filename,INISAVE_FILENAME);
// Delete gfx2.$$$ // Delete gfx2.$$$
remove(temp_filename); remove(temp_filename);
// Rename current config file as gfx2.$$$ // Rename current config file as gfx2.$$$
if (rename(filename,temp_filename)!=0) if (rename(filename, temp_filename) != 0)
{ {
goto Erreur_ERREUR_SAUVEGARDE_INI; fclose(old_file);
free(filename);
free(temp_filename);
return ERROR_SAVING_INI;
} }
} }
// On récupère un fichier INI "propre" à partir de gfx2def.ini new_file = fopen(filename, "w");
strcpy(ref_ini_file,Data_directory); if (new_file == 0)
strcat(ref_ini_file,INIDEF_FILENAME);
old_file=fopen(ref_ini_file,"rb");
if (old_file==0)
{ {
fclose(old_file); fclose(old_file);
free(buffer); free(filename);
return ERROR_INI_MISSING; free(temp_filename);
}
new_file=fopen(filename,"wb");
if (new_file==0)
{
free(buffer);
return ERROR_SAVING_INI; return ERROR_SAVING_INI;
} }
free(filename);
// Allocate work memory buffer
buffer = (char *)malloc(1024);
if ((return_code=Save_INI_reach_group(old_file,new_file,buffer,"[MOUSE]"))) if ((return_code=Save_INI_reach_group(old_file,new_file,buffer,"[MOUSE]")))
goto Erreur_Retour; goto Erreur_Retour;
@ -766,28 +770,34 @@ int Save_INI(const T_Config * conf)
// Insert new values here // Insert new values here
Save_INI_flush(old_file,new_file,buffer); Save_INI_flush(old_file, new_file, buffer);
fclose(new_file); fclose(new_file);
fclose(old_file); fclose(old_file);
// On efface le fichier temporaire <=> Ancienne version du .INI // Remove temporary file <=> old version of .INI
if (ini_file_exists) if (ini_file_exists && temp_filename != NULL)
remove(temp_filename); remove(temp_filename);
free(temp_filename);
free(buffer); free(buffer);
return 0; return 0;
// Gestion des erreurs: // Error Handling
Erreur_Retour: Erreur_Retour:
fclose(new_file); fclose(new_file);
fclose(old_file); fclose(old_file);
free(buffer);
return return_code;
Erreur_ERREUR_SAUVEGARDE_INI: if (ini_file_exists && temp_filename != NULL)
{
free(buffer); // restore old file
return ERROR_SAVING_INI; filename = Filepath_append_to_dir(Config_directory, INI_FILENAME);
} remove(filename);
rename(temp_filename, filename);
free(filename);
}
free(buffer);
free(temp_filename);
return return_code;
}