From 7af770dfa72eaca512b658b3ed702ad27c491e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig=20Bj=C3=B8rlykke?= Date: Wed, 21 Jun 2017 16:50:03 -0400 Subject: wsutil: Return error from profile_write_info_file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I1d91cef01ced6cceaa75d1618ffcb59eae5b8e6f Reviewed-on: https://code.wireshark.org/review/22325 Petri-Dish: Stig Bjørlykke Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- wsutil/filesystem.c | 26 +++++++++++++++++++++----- wsutil/filesystem.h | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) (limited to 'wsutil') diff --git a/wsutil/filesystem.c b/wsutil/filesystem.c index 28f68eac33..efdfa7f779 100644 --- a/wsutil/filesystem.c +++ b/wsutil/filesystem.c @@ -1244,25 +1244,39 @@ compare_filename(gconstpointer dissector_a, gconstpointer dissector_b) return strcmp((const char*)dissector_a, (const char*)dissector_b); } -void -profile_write_info_file(void) +gboolean +profile_write_info_file(gchar **pf_dir_path_return) { gchar *profile_dir, *info_file, *filename; GList *files, *file; - ssize_t nwritten = 0; + ssize_t filename_len; int fd; profile_dir = get_profiles_dir(); info_file = g_strdup_printf("%s%s%s", profile_dir, G_DIR_SEPARATOR_S, PROFILES_INFO_NAME); fd = ws_open(info_file, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); + if (fd < 0) { + g_free (profile_dir); + *pf_dir_path_return = info_file; + return FALSE; + } files = g_hash_table_get_keys(profile_files); files = g_list_sort(files, compare_filename); file = g_list_first(files); while (file) { filename = (gchar *)file->data; - nwritten += ws_write(fd, filename, (unsigned int)strlen(filename)); - nwritten += ws_write(fd, "\n", 1); + filename_len = strlen(filename); + if ((ws_write(fd, filename, filename_len) != filename_len) || + (ws_write(fd, "\n", 1) != 1)) + { + ws_close(fd); + g_list_free(files); + g_free (profile_dir); + + *pf_dir_path_return = info_file; + return FALSE; + } file = g_list_next(file); } g_list_free(files); @@ -1270,6 +1284,8 @@ profile_write_info_file(void) ws_close(fd); g_free(info_file); g_free(profile_dir); + + return TRUE; } /* diff --git a/wsutil/filesystem.h b/wsutil/filesystem.h index 8b2d9faf54..c28e0a48db 100644 --- a/wsutil/filesystem.h +++ b/wsutil/filesystem.h @@ -145,7 +145,7 @@ WS_DLL_PUBLIC void profile_store_persconffiles(gboolean store); /* * Store a list of all personal config files which belongs in a profile. */ -WS_DLL_PUBLIC void profile_write_info_file(void); +WS_DLL_PUBLIC gboolean profile_write_info_file(gchar **pf_dir_path_return); /* * Check if given configuration profile exists. -- cgit v1.2.1