diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2017-06-21 16:50:03 -0400 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2017-06-22 02:41:59 +0000 |
commit | 7af770dfa72eaca512b658b3ed702ad27c491e91 (patch) | |
tree | fdf9c30af8d68efdcd0337f33e26d4cb27f40b59 /wsutil/filesystem.c | |
parent | a9c2697714b8053b2cd9b1e1e0f07baf9d345c1f (diff) |
wsutil: Return error from profile_write_info_file
Change-Id: I1d91cef01ced6cceaa75d1618ffcb59eae5b8e6f
Reviewed-on: https://code.wireshark.org/review/22325
Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'wsutil/filesystem.c')
-rw-r--r-- | wsutil/filesystem.c | 26 |
1 files changed, 21 insertions, 5 deletions
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; } /* |