[Gnucash-changes] r11903 - gnucash/trunk - Add a GError parameter
to the gnc_key_file_save_to_file() function.
David Hampton
hampton at cvs.gnucash.org
Thu Nov 10 22:07:00 EST 2005
Author: hampton
Date: 2005-11-10 22:06:58 -0500 (Thu, 10 Nov 2005)
New Revision: 11903
Modified:
gnucash/trunk/ChangeLog
gnucash/trunk/src/app-utils/gnc-exp-parser.c
gnucash/trunk/src/core-utils/gnc-gkeyfile-utils.c
gnucash/trunk/src/core-utils/gnc-gkeyfile-utils.h
Log:
Add a GError parameter to the gnc_key_file_save_to_file() function.
Check for an error condition on every system call.
Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog 2005-11-10 04:35:31 UTC (rev 11902)
+++ gnucash/trunk/ChangeLog 2005-11-11 03:06:58 UTC (rev 11903)
@@ -1,3 +1,10 @@
+2005-11-10 David Hampton <hampton at employees.org>
+
+ * src/core-utils/gnc-gkeyfile-utils.[ch]:
+ * src/app-utils/gnc-exp-parser.c: Add a GError parameter to the
+ gnc_key_file_save_to_file() function. Check for an error
+ condition on every system call.
+
2005-11-09 Scott Oonk <scott.oonk at gmail.com>
* src/register/register-gnome/gnucash-item-edit.c: Draw cursor at
Modified: gnucash/trunk/src/app-utils/gnc-exp-parser.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-exp-parser.c 2005-11-10 04:35:31 UTC (rev 11902)
+++ gnucash/trunk/src/app-utils/gnc-exp-parser.c 2005-11-11 03:06:58 UTC (rev 11903)
@@ -135,7 +135,7 @@
g_key_file_set_comment(key_file, GROUP_NAME, NULL,
_(" Variables are in the form 'name=value'"),
NULL);
- gnc_key_file_save_to_file(filename, key_file);
+ gnc_key_file_save_to_file(filename, key_file, NULL);
g_key_file_free(key_file);
g_free(filename);
Modified: gnucash/trunk/src/core-utils/gnc-gkeyfile-utils.c
===================================================================
--- gnucash/trunk/src/core-utils/gnc-gkeyfile-utils.c 2005-11-10 04:35:31 UTC (rev 11902)
+++ gnucash/trunk/src/core-utils/gnc-gkeyfile-utils.c 2005-11-11 03:06:58 UTC (rev 11903)
@@ -77,28 +77,68 @@
gboolean
gnc_key_file_save_to_file (const gchar *filename,
- GKeyFile *key_file)
+ GKeyFile *key_file,
+ GError **error)
{
gchar *contents;
gint fd;
extern int errno;
gint length;
+ ssize_t written;
gboolean success = TRUE;
+ g_return_val_if_fail(filename != NULL, FALSE);
+ g_return_val_if_fail(key_file != NULL, FALSE);
+ if (error)
+ g_return_val_if_fail(*error == NULL, FALSE);
+
contents = g_key_file_to_data(key_file, NULL, NULL);
length = strlen(contents);
- if (length) {
- fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);
- if (fd != -1) {
- write(fd, contents, length);
- close(fd);
+ fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);
+ if (fd == -1) {
+ if (error) {
+ *error = g_error_new(G_FILE_ERROR, g_file_error_from_errno(errno),
+ "Cannot open file %s: %s", filename,
+ strerror(errno));
} else {
- g_warning("Cannot open file %s: %s\n", filename, strerror(errno));
- success = FALSE;
+ g_critical("Cannot open file %s: %s\n", filename, strerror(errno));
}
- } else {
- unlink(filename);
+ g_free(contents);
+ return FALSE;
}
+
+ written = write(fd, contents, length);
+ if (written == -1 ) {
+ success = FALSE;
+ if (error) {
+ *error = g_error_new(G_FILE_ERROR, g_file_error_from_errno(errno),
+ "Cannot write to file %s: %s", filename,
+ strerror(errno));
+ } else {
+ g_critical("Cannot write to file %s: %s\n", filename, strerror(errno));
+ }
+ close(fd);
+ } else if (written != length) {
+ success = FALSE;
+ if (error) {
+ *error = g_error_new(G_FILE_ERROR, g_file_error_from_errno(errno),
+ "File %s truncated (provided %d, written %d)",
+ filename, length, written);
+ } else {
+ g_critical("File %s truncated (provided %d, written %d)",
+ filename, length, written);
+ }
+ /* Ignore any error */
+ close(fd);
+ } else if (close(fd) == -1) {
+ if (error) {
+ *error = g_error_new(G_FILE_ERROR, g_file_error_from_errno(errno),
+ "Close failed for file %s: %s", filename,
+ strerror(errno));
+ } else {
+ g_warning("Close failed for file %s: %s", filename, strerror(errno));
+ }
+ }
g_free(contents);
return success;
}
Modified: gnucash/trunk/src/core-utils/gnc-gkeyfile-utils.h
===================================================================
--- gnucash/trunk/src/core-utils/gnc-gkeyfile-utils.h 2005-11-10 04:35:31 UTC (rev 11902)
+++ gnucash/trunk/src/core-utils/gnc-gkeyfile-utils.h 2005-11-11 03:06:58 UTC (rev 11903)
@@ -72,7 +72,8 @@
* FALSE if there was an error.
*/
gboolean gnc_key_file_save_to_file (const gchar *file,
- GKeyFile *key_file);
+ GKeyFile *key_file,
+ GError **error);
#endif /* GNC_GKEYFILE_UTILS_H */
/** @} */
More information about the gnucash-changes
mailing list