[2799] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[PATCH 1/2] I/O errors on writing subscription file in :unsub are no longer clobbered by "No subscription present in..."

daemon@ATHENA.MIT.EDU (Jason Gross)
Wed Nov 17 02:19:07 2010

From: Jason Gross <jgross@MIT.EDU>
To: barnowl-dev@mit.edu
Date: Wed, 17 Nov 2010 02:18:47 -0500
In-Reply-To: <1289978328-29504-1-git-send-email-jgross@mit.edu>

owl_util_file_deleteline now returns -1 on error, and owl_zephyr_delsub
now checks linesdeleted == 0 before erroring with "No subscription
present in...".

Additionally, free(filename) corrected to owl_free(filename) in two
places.
---
 util.c   |   18 +++++++++---------
 zephyr.c |    2 +-
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/util.c b/util.c
index 6546c73..bc442cb 100644
--- a/util.c
+++ b/util.c
@@ -380,7 +380,7 @@ char *owl_util_stripnewlines(const char *in)
  * backup file containing the original contents.  The match is
  * case-insensitive.
  *
- * Returns the number of lines removed
+ * Returns the number of lines removed on success.  Returns -1 on failure.
  */
 int owl_util_file_deleteline(const char *filename, const char *line, int backup)
 {
@@ -392,21 +392,21 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
   if ((old = fopen(filename, "r")) == NULL) {
     owl_function_error("Cannot open %s (for reading): %s",
 		       filename, strerror(errno));
-    return 0;
+    return -1;
   }
 
   if (fstat(fileno(old), &st) != 0) {
     owl_function_error("Cannot stat %s: %s", filename, strerror(errno));
-    return 0;
+    return -1;
   }
 
   newfile = owl_sprintf("%s.new", filename);
   if ((new = fopen(newfile, "w")) == NULL) {
     owl_function_error("Cannot open %s (for writing): %s",
 		       filename, strerror(errno));
-    free(newfile);
+    owl_free(newfile);
     fclose(old);
-    return 0;
+    return -1;
   }
 
   if (fchmod(fileno(new), st.st_mode & 0777) != 0) {
@@ -414,9 +414,9 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
 		       filename, strerror(errno));
     unlink(newfile);
     fclose(new);
-    free(newfile);
+    owl_free(newfile);
     fclose(old);
-    return 0;
+    return -1;
   }
 
   while (owl_getline_chomp(&buf, old))
@@ -437,7 +437,7 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
       owl_free(backupfile);
       unlink(newfile);
       owl_free(newfile);
-      return 0;
+      return -1;
     }
     owl_free(backupfile);
   }
@@ -445,7 +445,7 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
   if (rename(newfile, filename) != 0) {
     owl_function_error("Cannot move %s to %s: %s",
 		       newfile, filename, strerror(errno));
-    numremoved = 0;
+    numremoved = -1;
   }
 
   unlink(newfile);
diff --git a/zephyr.c b/zephyr.c
index 7b67459..eb39065 100644
--- a/zephyr.c
+++ b/zephyr.c
@@ -1011,7 +1011,7 @@ void owl_zephyr_delsub(const char *filename, const char *class, const char *inst
   linesdeleted = owl_util_file_deleteline(subsfile, line, 1);
   if (linesdeleted > 0) {
     owl_function_makemsg("Subscription removed");
-  } else {
+  } else if (linesdeleted == 0) {
     owl_function_error("No subscription present in %s", subsfile);
   }
   owl_free(subsfile);
-- 
1.7.1


home help back first fref pref prev next nref lref last post