mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-30 09:49:26 +00:00
fix linphonerc renaming for windows
This commit is contained in:
parent
e7b469eded
commit
d184192b9f
1 changed files with 35 additions and 14 deletions
|
|
@ -49,7 +49,9 @@
|
|||
#include <libgen.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef WIN32
|
||||
#define RENAME_REQUIRES_NONEXISTENT_NEW_PATH 1
|
||||
#endif
|
||||
|
||||
#define lp_new0(type,n) (type*)calloc(sizeof(type),n)
|
||||
|
||||
|
|
@ -351,22 +353,33 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa
|
|||
ms_message("Using (r/w) config information from %s", config_filename);
|
||||
lpconfig->filename=ortp_strdup(config_filename);
|
||||
lpconfig->tmpfilename=ortp_strdup_printf("%s.tmp",config_filename);
|
||||
lpconfig->file=fopen(config_filename,"r+");
|
||||
|
||||
#if !defined(WIN32)
|
||||
{
|
||||
struct stat fileStat;
|
||||
if ((stat(config_filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) {
|
||||
/* make existing configuration files non-group/world-accessible */
|
||||
if (chmod(config_filename, S_IRUSR | S_IWUSR) == -1) {
|
||||
ms_warning("unable to correct permissions on "
|
||||
"configuration file: %s", strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /*WIN32*/
|
||||
/*open with r+ to check if we can write on it later*/
|
||||
lpconfig->file=fopen(lpconfig->filename,"r+");
|
||||
#ifdef RENAME_REQUIRES_NONEXISTENT_NEW_PATH
|
||||
if (lpconfig->file==NULL){
|
||||
lpconfig->file=fopen(lpconfig->tmpfilename,"r+");
|
||||
if (lpconfig->file){
|
||||
ms_warning("Could not open %s but %s works, app may have crashed during last sync.",lpconfig->filename,lpconfig->tmpfilename);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (lpconfig->file!=NULL){
|
||||
lp_config_parse(lpconfig,lpconfig->file);
|
||||
fclose(lpconfig->file);
|
||||
#if !defined(WIN32)
|
||||
{
|
||||
struct stat fileStat;
|
||||
if ((stat(config_filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) {
|
||||
/* make existing configuration files non-group/world-accessible */
|
||||
if (chmod(config_filename, S_IRUSR | S_IWUSR) == -1) {
|
||||
ms_warning("unable to correct permissions on "
|
||||
"configuration file: %s", strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /*WIN32*/
|
||||
|
||||
lpconfig->file=NULL;
|
||||
lpconfig->modified=0;
|
||||
}
|
||||
|
|
@ -398,6 +411,7 @@ void lp_item_set_value(LpItem *item, const char *value){
|
|||
|
||||
static void _lp_config_destroy(LpConfig *lpconfig){
|
||||
if (lpconfig->filename!=NULL) ortp_free(lpconfig->filename);
|
||||
if (lpconfig->tmpfilename) ortp_free(lpconfig->tmpfilename);
|
||||
ms_list_for_each(lpconfig->sections,(void (*)(void*))lp_section_destroy);
|
||||
ms_list_free(lpconfig->sections);
|
||||
free(lpconfig);
|
||||
|
|
@ -593,6 +607,13 @@ int lp_config_sync(LpConfig *lpconfig){
|
|||
}
|
||||
ms_list_for_each2(lpconfig->sections,(void (*)(void *,void*))lp_section_write,(void *)file);
|
||||
fclose(file);
|
||||
#ifdef RENAME_REQUIRES_NONEXISTENT_NEW_PATH
|
||||
/* On windows, rename() does not accept that the newpath is an existing file, while it is accepted on Unix.
|
||||
* As a result, we are forced to first delete the linphonerc file, and then rename.*/
|
||||
if (remove(lpconfig->filename)!=0){
|
||||
ms_error("Cannot remove %s: %s",lpconfig->filename, strerror(errno));
|
||||
}
|
||||
#endif
|
||||
if (rename(lpconfig->tmpfilename,lpconfig->filename)!=0){
|
||||
ms_error("Cannot rename %s into %s: %s",lpconfig->tmpfilename,lpconfig->filename,strerror(errno));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue