[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