I was looking at xend_internal.c and wondered why sexpr_int's sexpr pointer wasn't const... surely, it *can't* modify that, I thought. So I made it const, and pulled the thread, which ended up making most of the sexpr* parameters in sexpr.[ch] const. I added the few inevitable casts, but imho, that cost is far outweighed by having accurate prototypes for all of these functions. Signed-off-by: Jim Meyering <meyering@xxxxxxxxxx> --- src/sexpr.c | 26 +++++++++++++------------- src/sexpr.h | 12 ++++++------ src/xend_internal.c | 18 ++++++++++-------- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/sexpr.c b/src/sexpr.c index f9e7226..b273117 100644 --- a/src/sexpr.c +++ b/src/sexpr.c @@ -150,15 +150,15 @@ sexpr_string(const char *str, ssize_t len) * Returns the resulting S-Expression pointer or NULL in case of error. */ struct sexpr * -sexpr_cons(struct sexpr *car, struct sexpr *cdr) +sexpr_cons(const struct sexpr *car, const struct sexpr *cdr) { struct sexpr *ret = sexpr_new(); if (ret == NULL) return ret; ret->kind = SEXPR_CONS; - ret->u.s.car = car; - ret->u.s.cdr = cdr; + ret->u.s.car = (struct sexpr *) car; + ret->u.s.cdr = (struct sexpr *) cdr; return ret; } @@ -171,14 +171,14 @@ sexpr_cons(struct sexpr *car, struct sexpr *cdr) * Internal operation appending a value at the end of an existing list */ static void -append(struct sexpr *lst, struct sexpr *value) +append(struct sexpr *lst, const struct sexpr *value) { while (lst->kind != SEXPR_NIL) { lst = lst->u.s.cdr; } lst->kind = SEXPR_CONS; - lst->u.s.car = value; + lst->u.s.car = (struct sexpr *) value; lst->u.s.cdr = sexpr_nil(); } @@ -191,7 +191,7 @@ append(struct sexpr *lst, struct sexpr *value) * Returns lst or NULL in case of error */ struct sexpr * -sexpr_append(struct sexpr *lst, struct sexpr *value) +sexpr_append(struct sexpr *lst, const struct sexpr *value) { if (lst == NULL) return (NULL); @@ -215,7 +215,7 @@ sexpr_append(struct sexpr *lst, struct sexpr *value) * 0 in case of error. */ size_t -sexpr2string(struct sexpr * sexpr, char *buffer, size_t n_buffer) +sexpr2string(const struct sexpr * sexpr, char *buffer, size_t n_buffer) { size_t ret = 0, tmp; @@ -415,7 +415,7 @@ string2sexpr(const char *buffer) * Returns the pointer to the sub expression or NULL if not found. */ static struct sexpr * -sexpr_lookup_key(struct sexpr *sexpr, const char *node) +sexpr_lookup_key(const struct sexpr *sexpr, const char *node) { char buffer[4096], *ptr, *token; @@ -436,7 +436,7 @@ sexpr_lookup_key(struct sexpr *sexpr, const char *node) } for (token = strsep(&ptr, "/"); token; token = strsep(&ptr, "/")) { - struct sexpr *i; + const struct sexpr *i; if (token == NULL) continue; @@ -464,7 +464,7 @@ sexpr_lookup_key(struct sexpr *sexpr, const char *node) return NULL; } - return sexpr; + return (struct sexpr *) sexpr; } /** @@ -478,7 +478,7 @@ sexpr_lookup_key(struct sexpr *sexpr, const char *node) * Returns the pointer to the sub expression or NULL if not found. */ struct sexpr * -sexpr_lookup(struct sexpr *sexpr, const char *node) +sexpr_lookup(const struct sexpr *sexpr, const char *node) { struct sexpr *s = sexpr_lookup_key(sexpr, node); @@ -528,7 +528,7 @@ sexpr_has(struct sexpr *sexpr, const char *node) * Returns the value of the node or NULL if not found. */ const char * -sexpr_node(struct sexpr *sexpr, const char *node) +sexpr_node(const struct sexpr *sexpr, const char *node) { struct sexpr *n = sexpr_lookup(sexpr, node); @@ -547,7 +547,7 @@ sexpr_node(struct sexpr *sexpr, const char *node) * Returns the value of the node or NULL if not found. */ const char * -sexpr_fmt_node(struct sexpr *sexpr, const char *fmt, ...) +sexpr_fmt_node(const struct sexpr *sexpr, const char *fmt, ...) { va_list ap; char node[4096]; diff --git a/src/sexpr.h b/src/sexpr.h index eb82479..0dd882d 100644 --- a/src/sexpr.h +++ b/src/sexpr.h @@ -35,20 +35,20 @@ struct sexpr { }; /* conversion to/from strings */ -size_t sexpr2string(struct sexpr *sexpr, char *buffer, size_t n_buffer); +size_t sexpr2string(const struct sexpr *sexpr, char *buffer, size_t n_buffer); struct sexpr *string2sexpr(const char *buffer); /* constructors and destructors */ struct sexpr *sexpr_nil(void); struct sexpr *sexpr_string(const char *str, ssize_t len); -struct sexpr *sexpr_cons(struct sexpr *car, struct sexpr *cdr); -struct sexpr *sexpr_append(struct sexpr *lst, struct sexpr *item); +struct sexpr *sexpr_cons(const struct sexpr *car, const struct sexpr *cdr); +struct sexpr *sexpr_append(struct sexpr *lst, const struct sexpr *item); void sexpr_free(struct sexpr *sexpr); /* lookup in S-Expressions */ -const char *sexpr_node(struct sexpr *sexpr, const char *node); -const char *sexpr_fmt_node(struct sexpr *sexpr, const char *fmt, ...) +const char *sexpr_node(const struct sexpr *sexpr, const char *node); +const char *sexpr_fmt_node(const struct sexpr *sexpr, const char *fmt, ...) ATTRIBUTE_FORMAT(printf,2,3); -struct sexpr *sexpr_lookup(struct sexpr *sexpr, const char *node); +struct sexpr *sexpr_lookup(const struct sexpr *sexpr, const char *node); int sexpr_has(struct sexpr *sexpr, const char *node); #endif diff --git a/src/xend_internal.c b/src/xend_internal.c index bff625b..f1389c8 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -730,7 +730,7 @@ sexpr_get(virConnectPtr xend, const char *fmt, ...) * Returns the value found or 0 if not found (but may not be an error) */ static int -sexpr_int(struct sexpr *sexpr, const char *name) +sexpr_int(const struct sexpr *sexpr, const char *name) { const char *value = sexpr_node(sexpr, name); @@ -751,7 +751,7 @@ sexpr_int(struct sexpr *sexpr, const char *name) * Returns the value found or 0 if not found (but may not be an error) */ static double -sexpr_float(struct sexpr *sexpr, const char *name) +sexpr_float(const struct sexpr *sexpr, const char *name) { const char *value = sexpr_node(sexpr, name); @@ -772,7 +772,7 @@ sexpr_float(struct sexpr *sexpr, const char *name) * Returns the value found or 0 if not found (but may not be an error) */ static uint64_t -sexpr_u64(struct sexpr *sexpr, const char *name) +sexpr_u64(const struct sexpr *sexpr, const char *name) { const char *value = sexpr_node(sexpr, name); @@ -794,7 +794,7 @@ sexpr_u64(struct sexpr *sexpr, const char *name) * Returns a -1 on error, 0 on success */ static int -sexpr_uuid(unsigned char *ptr, struct sexpr *node, const char *path) +sexpr_uuid(unsigned char *ptr, const struct sexpr *node, const char *path) { const char *r = sexpr_node(node, path); if (!r) @@ -1840,7 +1840,8 @@ xend_parse_domain_sexp(virConnectPtr conn, char *sexpr, int xendConfigVersion) { * Returns 0 in case of success, -1 in case of error */ static int -sexpr_to_xend_domain_info(virDomainPtr domain, struct sexpr *root, virDomainInfoPtr info) +sexpr_to_xend_domain_info(virDomainPtr domain, const struct sexpr *root, + virDomainInfoPtr info) { const char *flags; @@ -1889,7 +1890,7 @@ sexpr_to_xend_domain_info(virDomainPtr domain, struct sexpr *root, virDomainInfo * Returns 0 in case of success, -1 in case of error */ static int -sexpr_to_xend_node_info(struct sexpr *root, virNodeInfoPtr info) +sexpr_to_xend_node_info(const struct sexpr *root, virNodeInfoPtr info) { const char *machine; @@ -1939,7 +1940,8 @@ sexpr_to_xend_node_info(struct sexpr *root, virNodeInfoPtr info) * Returns 0 in case of success, -1 in case of error */ static int -sexpr_to_xend_topology_xml(virConnectPtr conn, struct sexpr *root, virBufferPtr xml) +sexpr_to_xend_topology_xml(virConnectPtr conn, const struct sexpr *root, + virBufferPtr xml) { const char *nodeToCpu; int numCells = 0; @@ -1992,7 +1994,7 @@ error: * Returns the domain pointer or NULL in case of error. */ static virDomainPtr -sexpr_to_domain(virConnectPtr conn, struct sexpr *root) +sexpr_to_domain(virConnectPtr conn, const struct sexpr *root) { virDomainPtr ret = NULL; unsigned char uuid[VIR_UUID_BUFLEN]; -- 1.5.4.rc3.14.g44397 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list