Fix filebackup when saving.
It was the wrong filename that was backuped when using "Save As". Now it is the filename selected.
This commit is contained in:
		
							parent
							
								
									187c7d53e3
								
							
						
					
					
						commit
						c8bc04e413
					
				@ -3415,25 +3415,24 @@ void Button_Reload(int btn)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void Backup_filename(const char * fname, char * backup_name)
 | 
			
		||||
static void Backup_existing_file(const char * filename)
 | 
			
		||||
{
 | 
			
		||||
  char new_filename[MAX_PATH_CHARACTERS]; // full filename of the backup file
 | 
			
		||||
  char * p;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  strcpy(backup_name,fname);
 | 
			
		||||
  for (i=strlen(fname)-strlen(Main.backups->Pages->Filename); backup_name[i]!='.' && backup_name[i]!='\0'; i++);
 | 
			
		||||
  backup_name[i+1]='\0';
 | 
			
		||||
  strcat(backup_name,"BAK");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void Backup_existing_file(void)
 | 
			
		||||
{
 | 
			
		||||
  char filename[MAX_PATH_CHARACTERS]; // Nom complet du fichier
 | 
			
		||||
  char new_filename[MAX_PATH_CHARACTERS]; // Nom complet du fichier backup
 | 
			
		||||
 | 
			
		||||
  Get_full_filename(filename, Main.backups->Pages->Filename, Main.backups->Pages->File_directory);
 | 
			
		||||
  // Calcul du nom complet du fichier backup
 | 
			
		||||
  Backup_filename(filename,new_filename);
 | 
			
		||||
  strncpy(new_filename, filename, sizeof(new_filename));
 | 
			
		||||
  new_filename[sizeof(new_filename) - 1] = '\0';
 | 
			
		||||
  p = Find_last_separator(new_filename);  // pointer to the filename part (after directory)
 | 
			
		||||
  if (p == NULL)
 | 
			
		||||
    p = new_filename;
 | 
			
		||||
  else
 | 
			
		||||
    p++;
 | 
			
		||||
  i = Position_last_dot(p);
 | 
			
		||||
  if (i >= 0)
 | 
			
		||||
    strcpy(p + i + 1, "BAK");
 | 
			
		||||
  else
 | 
			
		||||
    strcat(p, ".BAK");
 | 
			
		||||
 | 
			
		||||
  File_error=0;
 | 
			
		||||
 | 
			
		||||
@ -3512,7 +3511,9 @@ void Save_picture(enum CONTEXT_TYPE type)
 | 
			
		||||
    confirm=Confirmation_box("Erase old file ?");
 | 
			
		||||
    if (confirm && (Config.Backup))
 | 
			
		||||
    {
 | 
			
		||||
      Backup_existing_file();
 | 
			
		||||
      char full_filename[MAX_PATH_CHARACTERS];
 | 
			
		||||
      Get_full_filename(full_filename, filename, directory);
 | 
			
		||||
      Backup_existing_file(full_filename);
 | 
			
		||||
      if (File_error)
 | 
			
		||||
      {
 | 
			
		||||
        confirm=0;
 | 
			
		||||
@ -3578,7 +3579,7 @@ void Button_Autosave(int btn)
 | 
			
		||||
  if ( (!file_already_exists) || Confirmation_box("Erase old file ?") )
 | 
			
		||||
  {
 | 
			
		||||
    if ((file_already_exists) && (Config.Backup))
 | 
			
		||||
      Backup_existing_file();
 | 
			
		||||
      Backup_existing_file(filename);
 | 
			
		||||
    else
 | 
			
		||||
      File_error=0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -226,28 +226,6 @@ void Free_fileselector_list(T_Fileselector *list)
 | 
			
		||||
  Recount_files(list);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int Position_last_dot(const char * fname)
 | 
			
		||||
{
 | 
			
		||||
  int pos_last_dot = -1;
 | 
			
		||||
  int c = 0;
 | 
			
		||||
 | 
			
		||||
  for (c = 0; fname[c]!='\0'; c++)
 | 
			
		||||
    if (fname[c]=='.')
 | 
			
		||||
      pos_last_dot = c;
 | 
			
		||||
  return pos_last_dot;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int Position_last_dot_unicode(const word * fname)
 | 
			
		||||
{
 | 
			
		||||
  int pos_last_dot = -1;
 | 
			
		||||
  int c = 0;
 | 
			
		||||
 | 
			
		||||
  for (c = 0; fname[c]!='\0'; c++)
 | 
			
		||||
    if (fname[c]=='.')
 | 
			
		||||
      pos_last_dot = c;
 | 
			
		||||
  return pos_last_dot;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
word * Format_filename_unicode(const word * fname, word max_length, int type)
 | 
			
		||||
{
 | 
			
		||||
  static word result[40];
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										22
									
								
								src/io.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								src/io.c
									
									
									
									
									
								
							@ -292,6 +292,28 @@ void Append_path(char *path, const char *filename, char *reverse_path)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int Position_last_dot(const char * fname)
 | 
			
		||||
{
 | 
			
		||||
  int pos_last_dot = -1;
 | 
			
		||||
  int c = 0;
 | 
			
		||||
 | 
			
		||||
  for (c = 0; fname[c] != '\0'; c++)
 | 
			
		||||
    if (fname[c] == '.')
 | 
			
		||||
      pos_last_dot = c;
 | 
			
		||||
  return pos_last_dot;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int Position_last_dot_unicode(const word * fname)
 | 
			
		||||
{
 | 
			
		||||
  int pos_last_dot = -1;
 | 
			
		||||
  int c = 0;
 | 
			
		||||
 | 
			
		||||
  for (c = 0; fname[c] != '\0'; c++)
 | 
			
		||||
    if (fname[c] == '.')
 | 
			
		||||
      pos_last_dot = c;
 | 
			
		||||
  return pos_last_dot;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int File_exists(const char * fname)
 | 
			
		||||
//   Détermine si un file passé en paramètre existe ou non dans le
 | 
			
		||||
// répertoire courant.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								src/io.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								src/io.h
									
									
									
									
									
								
							@ -83,6 +83,12 @@ char * Find_last_separator(const char * str);
 | 
			
		||||
  #define PATH_SEPARATOR "/"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/// finds the rightmost '.' character in fullname. Used to find file extension. returns -1 if not found
 | 
			
		||||
int Position_last_dot(const char * fname);
 | 
			
		||||
 | 
			
		||||
/// finds the rightmost '.' character in fullname. Used to find file extension. returns -1 if not found
 | 
			
		||||
int Position_last_dot_unicode(const word * fname);
 | 
			
		||||
 | 
			
		||||
/// Size of a file, in bytes. Returns 0 in case of error.
 | 
			
		||||
unsigned long File_length(const char *fname);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user