From 02cae56912301b19c936a0155a8e11391eac2da9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sat, 24 Jul 2010 16:10:55 +0300 Subject: [PATCH] SaveConfigFile: correctly an error on I/O failure --- src/config/file.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/config/file.c b/src/config/file.c index 0582483146..0d3f6b6afb 100644 --- a/src/config/file.c +++ b/src/config/file.c @@ -437,7 +437,7 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name, if( config_PrepareDir( p_this ) ) { msg_Err( p_this, "no configuration directory" ); - goto error; + return -1; } file = config_OpenConfigFile( p_this ); @@ -557,6 +557,7 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name, file = fdopen (fd, "wt"); if (file == NULL) { + msg_Err (p_this, "cannot create configuration file: %m"); vlc_rwlock_unlock (&config_lock); close (fd); vlc_mutex_unlock (&lock); @@ -704,6 +705,14 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name, * Flush to disk and replace atomically */ fflush (file); /* Flush from run-time */ + if (ferror (file)) + { + vlc_unlink (temporary); + vlc_mutex_unlock (&lock); + msg_Err (p_this, "cannot write configuration file"); + clearerr (file); + goto error; + } #ifndef WIN32 #ifdef __APPLE__ fsync (fd); /* Flush from OS */ -- 2.39.2