[augeas-devel] [PATCH 1 of 2] Store system errors

David Lutterkort dlutter at redhat.com
Thu Jul 24 16:54:34 UTC 2008


1 file changed, 16 insertions(+), 4 deletions(-)
src/transform.c |   20 ++++++++++++++++----


# HG changeset patch
# User David Lutterkort <dlutter at redhat.com>
# Date 1216918426 25200
# Node ID c6e4a3bef32dd9d4c04cc45bb69e757bad0d720a
# Parent  ca7f3d8c1c51bf449bfdbcde5a1557fd2d5b429b
Store system errors

When encountering system errors while reading or writing a file, extract
the full error message corresponding to errno and store it in error/message

diff -r ca7f3d8c1c51 -r c6e4a3bef32d src/transform.c
--- a/src/transform.c	Wed Jul 23 16:49:30 2008 +0200
+++ b/src/transform.c	Thu Jul 24 09:53:46 2008 -0700
@@ -192,7 +192,8 @@
  */
 static int store_error(struct augeas *aug,
                        const char *filename, const char *path,
-                       const char *status, const struct lns_error *err) {
+                       const char *status, int errnum,
+                       const struct lns_error *err) {
     char *ep = err_path(filename);
     size_t ep_len;
     int r;
@@ -241,6 +242,14 @@
             if (r < 0)
                 goto done;
             r = aug_set(aug, ep, err->message);
+            if (r < 0)
+                goto done;
+        } else if (errnum != 0) {
+            const char *msg = strerror(errnum);
+            r = pathjoin(&ep, 1, err_msg_node);
+            if (r < 0)
+                goto done;
+            r = aug_set(aug, ep, msg);
             if (r < 0)
                 goto done;
         }
@@ -347,7 +356,8 @@
 
     result = 0;
  done:
-    store_error(aug, filename + strlen(aug->root) - 1, path, err_status, err);
+    store_error(aug, filename + strlen(aug->root) - 1, path, err_status,
+                errno, err);
     free_lns_error(err);
     free(path);
     free_tree(tree);
@@ -416,8 +426,10 @@
     // to be able to write augnew, but we have no idea what permissions
     // etc. they should get. Just the process default ?
     fp = fopen(augnew, "w");
-    if (fp == NULL)
+    if (fp == NULL) {
+        err_status = "open_augnew";
         goto done;
+    }
 
     if (tree != NULL)
         lns_put(fp, xform->lens, tree->children, text, &err);
@@ -461,13 +473,13 @@
     result = 0;
 
  done:
+    store_error(aug, filename, path, err_status, errno, err);
     lens_release(xform->lens);
     free(text);
     free(augnew);
     free(augorig);
     free(augorig_canon);
     free(augsave);
-    store_error(aug, filename, path, err_status, err);
     free_lns_error(err);
 
     if (fp != NULL)




More information about the augeas-devel mailing list