[augeas-devel] augeas: master - * src/transform.c (err_set): new function
David Lutterkort
lutter at fedoraproject.org
Fri Mar 20 23:17:07 UTC 2009
Gitweb: http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=e1492ae6fd84ec9f5d9525ac273150bb2b9de07c
Commit: e1492ae6fd84ec9f5d9525ac273150bb2b9de07c
Parent: 3e77df1886de7a8250a7d8cebb95fc883e9a9ced
Author: David Lutterkort <lutter at redhat.com>
AuthorDate: Fri Mar 20 14:13:47 2009 -0700
Committer: David Lutterkort <lutter at redhat.com>
CommitterDate: Fri Mar 20 14:13:47 2009 -0700
* src/transform.c (err_set): new function
---
src/transform.c | 88 +++++++++++++++++++++++++++---------------------------
1 files changed, 44 insertions(+), 44 deletions(-)
diff --git a/src/transform.c b/src/transform.c
index 155a7af..ded64aa 100644
--- a/src/transform.c
+++ b/src/transform.c
@@ -58,15 +58,15 @@ static const int glob_flags = GLOB_NOSORT;
* error/path: path to tree node where error occurred (for put errors)
* error/message : human-readable error message
*/
-static const char *const path_node = "/path";
-static const char *const info_node = "/lens/info";
-static const char *const id_node = "/lens/id";
+static const char *const s_path = "path";
+static const char *const s_lens = "lens";
+static const char *const s_info = "info";
+static const char *const s_id = "id";
-static const char *const err_node = "/error";
-/* These are all put underneath "/error" */
-static const char *const err_pos_node = "/pos";
-static const char *const err_path_node = "/path";
-static const char *const err_msg_node = "/message";
+static const char *const s_error = "error";
+/* These are all put underneath "error" */
+static const char *const s_pos = "pos";
+static const char *const s_message = "message";
/*
* Filters
@@ -201,12 +201,39 @@ void free_transform(struct transform *xform) {
static char *err_path(const char *filename) {
char *result = NULL;
if (filename == NULL)
- pathjoin(&result, 2, AUGEAS_META_FILES, err_node);
+ pathjoin(&result, 2, AUGEAS_META_FILES, s_error);
else
- pathjoin(&result, 3, AUGEAS_META_FILES, filename, err_node);
+ pathjoin(&result, 3, AUGEAS_META_FILES, filename, s_error);
return result;
}
+ATTRIBUTE_FORMAT(printf, 4, 5)
+static int err_set(struct augeas *aug, char **ep, const char *sub,
+ const char *format, ...) {
+ int r;
+ va_list ap;
+ size_t ep_len = strlen(*ep);
+ char *value = NULL;
+
+ r = pathjoin(ep, 1, sub);
+ if (r < 0)
+ goto error;
+
+ va_start(ap, format);
+ r = vasprintf(&value, format, ap);
+ va_end(ap);
+ if (r < 0) {
+ value = NULL;
+ goto error;
+ }
+
+ r = aug_set(aug, *ep, value);
+ error:
+ free(value);
+ (*ep)[ep_len] = '\0';
+ return (r < 0) ? -1 : 0;
+}
+
/* Record an error in the tree. The error will show up underneath
* /augeas/FILENAME/error. PATH is the path to the toplevel node in the
* tree where the lens application happened. When STATUS is NULL, just
@@ -217,13 +244,11 @@ static int store_error(struct augeas *aug,
const char *status, int errnum,
const struct lns_error *err) {
char *ep = err_path(filename);
- size_t ep_len;
int r;
int result = -1;
if (ep == NULL)
return -1;
- ep_len = strlen(ep);
aug_rm(aug, ep);
if (status != NULL) {
@@ -233,45 +258,20 @@ static int store_error(struct augeas *aug,
if (err != NULL) {
if (err->pos > 0) {
- char *pos;
-
- r = pathjoin(&ep, 1, err_pos_node);
- if (r < 0)
- goto done;
- r = asprintf(&pos, "%d", err->pos);
- if (r < 0)
- goto done;
- r = aug_set(aug, ep, pos);
- FREE(pos);
+ r = err_set(aug, &ep, s_pos, "%d", err->pos);
if (r < 0)
goto done;
} else {
- char *p;
-
- r = pathjoin(&ep, 1, err_path_node);
- if (r < 0)
- goto done;
- r = asprintf(&p, "%s%s", path, err->path);
- if (r < 0)
- goto done;
- r = aug_set(aug, ep, p);
- FREE(p);
+ r = err_set(aug, &ep, s_path, "%s%s", path, err->path);
if (r < 0)
goto done;
}
- ep[ep_len] = '\0';
- r = pathjoin(&ep, 1, err_msg_node);
- if (r < 0)
- goto done;
- r = aug_set(aug, ep, err->message);
+ r = err_set(aug, &ep, s_message, "%s", 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);
+ r = err_set(aug, &ep, s_message, "%s", msg);
if (r < 0)
goto done;
}
@@ -296,7 +296,7 @@ static int add_load_info(struct augeas *aug, const char *filename,
goto done;
end = strlen(p);
- r = pathjoin(&p, 1, path_node);
+ r = pathjoin(&p, 1, s_path);
if (r < 0)
goto done;
@@ -305,7 +305,7 @@ static int add_load_info(struct augeas *aug, const char *filename,
goto done;
p[end] = '\0';
- r = pathjoin(&p, 1, info_node);
+ r = pathjoin(&p, 2, s_lens, s_info);
if (r < 0)
goto done;
@@ -318,7 +318,7 @@ static int add_load_info(struct augeas *aug, const char *filename,
goto done;
p[end] = '\0';
- r = pathjoin(&p, 1, id_node);
+ r = pathjoin(&p, 2, s_lens, s_id);
if (r < 0)
goto done;
More information about the augeas-devel
mailing list