Move functions used in only one source to the file where they are used and make them static.
Remove some prototypes from headers which are no longer in use. Signed-off-by: Juergen Gross <jgr...@suse.com> --- tools/xenstore/include/xenstore_lib.h | 15 ----- tools/xenstore/xenstore_client.c | 117 ++++++++++++++++++++++++++++++++++ tools/xenstore/xenstored_core.c | 55 +++++----------- tools/xenstore/xenstored_core.h | 14 ---- tools/xenstore/xenstored_watch.c | 27 ++++++++ tools/xenstore/xenstored_watch.h | 2 - tools/xenstore/xs_lib.c | 112 -------------------------------- 7 files changed, 159 insertions(+), 183 deletions(-) diff --git a/tools/xenstore/include/xenstore_lib.h b/tools/xenstore/include/xenstore_lib.h index 0ffbae9..866261d 100644 --- a/tools/xenstore/include/xenstore_lib.h +++ b/tools/xenstore/include/xenstore_lib.h @@ -76,19 +76,4 @@ bool xs_perm_to_string(const struct xs_permissions *perm, /* Given a string and a length, count how many strings (nul terms). */ unsigned int xs_count_strings(const char *strings, unsigned int len); -/* Sanitising (quoting) possibly-binary strings. */ -struct expanding_buffer { - char *buf; - int avail; -}; - -/* Ensure that given expanding buffer has at least min_avail characters. */ -char *expanding_buffer_ensure(struct expanding_buffer *, int min_avail); - -/* sanitise_value() may return NULL if malloc fails. */ -char *sanitise_value(struct expanding_buffer *, const char *val, unsigned len); - -/* *out_len_r on entry is ignored; out must be at least strlen(in)+1 bytes. */ -void unsanitise_value(char *out, unsigned *out_len_r, const char *in); - #endif /* XENSTORE_LIB_H */ diff --git a/tools/xenstore/xenstore_client.c b/tools/xenstore/xenstore_client.c index 3d14d37..dfa75a7 100644 --- a/tools/xenstore/xenstore_client.c +++ b/tools/xenstore/xenstore_client.c @@ -10,6 +10,7 @@ #include <err.h> #include <errno.h> +#include <assert.h> #include <fcntl.h> #include <getopt.h> #include <stdarg.h> @@ -38,12 +39,128 @@ enum mode { MODE_watch, }; +/* Sanitising (quoting) possibly-binary strings. */ +struct expanding_buffer { + char *buf; + int avail; +}; + static char *output_buf = NULL; static int output_pos = 0; static struct expanding_buffer ebuf; static int output_size = 0; +static char *expanding_buffer_ensure(struct expanding_buffer *ebuf, int min_avail) +{ + int want; + char *got; + + if (ebuf->avail >= min_avail) + return ebuf->buf; + + if (min_avail >= INT_MAX/3) + return 0; + + want = ebuf->avail + min_avail + 10; + got = realloc(ebuf->buf, want); + if (!got) + return 0; + + ebuf->buf = got; + ebuf->avail = want; + return ebuf->buf; +} + +static char *sanitise_value(struct expanding_buffer *ebuf, + const char *val, unsigned len) +{ + int used, remain, c; + unsigned char *ip; + +#define ADD(c) (ebuf->buf[used++] = (c)) +#define ADDF(f,c) (used += sprintf(ebuf->buf+used, (f), (c))) + + assert(len < INT_MAX/5); + + ip = (unsigned char *)val; + used = 0; + remain = len; + + if (!expanding_buffer_ensure(ebuf, remain + 1)) + return NULL; + + while (remain-- > 0) { + c= *ip++; + + if (c >= ' ' && c <= '~' && c != '\\') { + ADD(c); + continue; + } + + if (!expanding_buffer_ensure(ebuf, used + remain + 5)) + /* for "<used>\\nnn<remain>\0" */ + return 0; + + ADD('\\'); + switch (c) { + case '\t': ADD('t'); break; + case '\n': ADD('n'); break; + case '\r': ADD('r'); break; + case '\\': ADD('\\'); break; + default: + if (c < 010) ADDF("%03o", c); + else ADDF("x%02x", c); + } + } + + ADD(0); + assert(used <= ebuf->avail); + return ebuf->buf; + +#undef ADD +#undef ADDF +} + +static void unsanitise_value(char *out, unsigned *out_len_r, const char *in) +{ + const char *ip; + char *op; + unsigned c; + int n; + + for (ip = in, op = out; (c = *ip++); *op++ = c) { + if (c == '\\') { + c = *ip++; + +#define GETF(f) do { \ + n = 0; \ + sscanf(ip, f "%n", &c, &n); \ + ip += n; \ + } while (0) + + switch (c) { + case 't': c= '\t'; break; + case 'n': c= '\n'; break; + case 'r': c= '\r'; break; + case '\\': c= '\\'; break; + case 'x': GETF("%2x"); break; + case '0': case '4': + case '1': case '5': + case '2': case '6': + case '3': case '7': --ip; GETF("%3o"); break; + case 0: --ip; break; + default:; + } +#undef GETF + } + } + + *op = 0; + + if (out_len_r) + *out_len_r = op - out; +} static void output(const char *fmt, ...) { va_list ap; diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index f5ec585..3faab6e 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -365,22 +365,6 @@ static void initialize_fds(int sock, int *p_sock_pollfd_idx, } } -/* Is child a subnode of parent, or equal? */ -bool is_child(const char *child, const char *parent) -{ - unsigned int len = strlen(parent); - - /* / should really be "" for this algorithm to work, but that's a - * usability nightmare. */ - if (streq(parent, "/")) - return true; - - if (strncmp(child, parent, len) != 0) - return false; - - return child[len] == '/' || child[len] == '\0'; -} - /* * If it fails, returns NULL and sets errno. * Temporary memory allocations will be done with ctx. @@ -638,6 +622,21 @@ unsigned int get_strings(struct buffered_data *data, return i; } +static void send_error(struct connection *conn, int error) +{ + unsigned int i; + + for (i = 0; error != xsd_errors[i].errnum; i++) { + if (i == ARRAY_SIZE(xsd_errors) - 1) { + eprintf("xenstored: error %i untranslatable", error); + i = 0; /* EINVAL */ + break; + } + } + send_reply(conn, XS_ERROR, xsd_errors[i].errstring, + strlen(xsd_errors[i].errstring) + 1); +} + void send_reply(struct connection *conn, enum xsd_sockmsg_type type, const void *data, unsigned int len) { @@ -675,21 +674,6 @@ void send_ack(struct connection *conn, enum xsd_sockmsg_type type) send_reply(conn, type, "OK", sizeof("OK")); } -void send_error(struct connection *conn, int error) -{ - unsigned int i; - - for (i = 0; error != xsd_errors[i].errnum; i++) { - if (i == ARRAY_SIZE(xsd_errors) - 1) { - eprintf("xenstored: error %i untranslatable", error); - i = 0; /* EINVAL */ - break; - } - } - send_reply(conn, XS_ERROR, xsd_errors[i].errstring, - strlen(xsd_errors[i].errstring) + 1); -} - static bool valid_chars(const char *node) { /* Nodes can have lots of crap. */ @@ -761,15 +745,6 @@ char *canonicalize(struct connection *conn, const char *node) return (char *)node; } -bool check_event_node(const char *node) -{ - if (!node || !strstarts(node, "@")) { - errno = EINVAL; - return false; - } - return true; -} - static int send_directory(struct connection *conn, struct buffered_data *in) { struct node *node; diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h index 089625f..3872dab 100644 --- a/tools/xenstore/xenstored_core.h +++ b/tools/xenstore/xenstored_core.h @@ -132,24 +132,15 @@ const char *onearg(struct buffered_data *in); unsigned int get_strings(struct buffered_data *data, char *vec[], unsigned int num); -/* Is child node a child or equal to parent node? */ -bool is_child(const char *child, const char *parent); - void send_reply(struct connection *conn, enum xsd_sockmsg_type type, const void *data, unsigned int len); /* Some routines (write, mkdir, etc) just need a non-error return */ void send_ack(struct connection *conn, enum xsd_sockmsg_type type); -/* Send an error: error is usually "errno". */ -void send_error(struct connection *conn, int error); - /* Canonicalize this path if possible. */ char *canonicalize(struct connection *conn, const char *node); -/* Check if node is an event node. */ -bool check_event_node(const char *node); - /* Get this node, checking we have permissions. */ struct node *get_node(struct connection *conn, const void *ctx, @@ -159,9 +150,6 @@ struct node *get_node(struct connection *conn, /* Get TDB context for this connection */ TDB_CONTEXT *tdb_context(struct connection *conn); -/* Destructor for tdbs: required for transaction code */ -int destroy_tdb(void *_tdb); - /* Replace the tdb: required for transaction code */ bool replace_tdb(const char *newname, TDB_CONTEXT *newtdb); @@ -174,11 +162,9 @@ bool is_valid_nodename(const char *node); /* Tracing infrastructure. */ void trace_create(const void *data, const char *type); void trace_destroy(const void *data, const char *type); -void trace_watch_timeout(const struct connection *conn, const char *node, const char *token); void trace(const char *fmt, ...); void dtrace_io(const struct connection *conn, const struct buffered_data *data, int out); -extern int event_fd; extern int dom0_domid; extern int dom0_event; extern int priv_domid; diff --git a/tools/xenstore/xenstored_watch.c b/tools/xenstore/xenstored_watch.c index 8cfc5b0..e1146ed 100644 --- a/tools/xenstore/xenstored_watch.c +++ b/tools/xenstore/xenstored_watch.c @@ -47,6 +47,33 @@ struct watch char *node; }; +static bool check_event_node(const char *node) +{ + if (!node || !strstarts(node, "@")) { + errno = EINVAL; + return false; + } + return true; +} + +/* Is child a subnode of parent, or equal? */ +static bool is_child(const char *child, const char *parent) +{ + unsigned int len = strlen(parent); + + /* + * / should really be "" for this algorithm to work, but that's a + * usability nightmare. + */ + if (streq(parent, "/")) + return true; + + if (strncmp(child, parent, len) != 0) + return false; + + return child[len] == '/' || child[len] == '\0'; +} + /* * Send a watch event. * Temporary memory allocations are done with ctx. diff --git a/tools/xenstore/xenstored_watch.h b/tools/xenstore/xenstored_watch.h index 546a5c3..c72ea6a 100644 --- a/tools/xenstore/xenstored_watch.h +++ b/tools/xenstore/xenstored_watch.h @@ -28,8 +28,6 @@ int do_unwatch(struct connection *conn, struct buffered_data *in); void fire_watches(struct connection *conn, void *tmp, const char *name, bool recurse); -void dump_watches(struct connection *conn); - void conn_delete_all_watches(struct connection *conn); #endif /* _XENSTORED_WATCH_H */ diff --git a/tools/xenstore/xs_lib.c b/tools/xenstore/xs_lib.c index 6568e82..5ef3d6d 100644 --- a/tools/xenstore/xs_lib.c +++ b/tools/xenstore/xs_lib.c @@ -21,7 +21,6 @@ #include <string.h> #include <stdlib.h> #include <errno.h> -#include <assert.h> #include "xenstore_lib.h" /* Common routines for the Xen store daemon and client library. */ @@ -184,114 +183,3 @@ unsigned int xs_count_strings(const char *strings, unsigned int len) return num; } - -char *expanding_buffer_ensure(struct expanding_buffer *ebuf, int min_avail) -{ - int want; - char *got; - - if (ebuf->avail >= min_avail) - return ebuf->buf; - - if (min_avail >= INT_MAX/3) - return 0; - - want = ebuf->avail + min_avail + 10; - got = realloc(ebuf->buf, want); - if (!got) - return 0; - - ebuf->buf = got; - ebuf->avail = want; - return ebuf->buf; -} - -char *sanitise_value(struct expanding_buffer *ebuf, - const char *val, unsigned len) -{ - int used, remain, c; - unsigned char *ip; - -#define ADD(c) (ebuf->buf[used++] = (c)) -#define ADDF(f,c) (used += sprintf(ebuf->buf+used, (f), (c))) - - assert(len < INT_MAX/5); - - ip = (unsigned char *)val; - used = 0; - remain = len; - - if (!expanding_buffer_ensure(ebuf, remain + 1)) - return NULL; - - while (remain-- > 0) { - c= *ip++; - - if (c >= ' ' && c <= '~' && c != '\\') { - ADD(c); - continue; - } - - if (!expanding_buffer_ensure(ebuf, used + remain + 5)) - /* for "<used>\\nnn<remain>\0" */ - return 0; - - ADD('\\'); - switch (c) { - case '\t': ADD('t'); break; - case '\n': ADD('n'); break; - case '\r': ADD('r'); break; - case '\\': ADD('\\'); break; - default: - if (c < 010) ADDF("%03o", c); - else ADDF("x%02x", c); - } - } - - ADD(0); - assert(used <= ebuf->avail); - return ebuf->buf; - -#undef ADD -#undef ADDF -} - -void unsanitise_value(char *out, unsigned *out_len_r, const char *in) -{ - const char *ip; - char *op; - unsigned c; - int n; - - for (ip = in, op = out; (c = *ip++); *op++ = c) { - if (c == '\\') { - c = *ip++; - -#define GETF(f) do { \ - n = 0; \ - sscanf(ip, f "%n", &c, &n); \ - ip += n; \ - } while (0) - - switch (c) { - case 't': c= '\t'; break; - case 'n': c= '\n'; break; - case 'r': c= '\r'; break; - case '\\': c= '\\'; break; - case 'x': GETF("%2x"); break; - case '0': case '4': - case '1': case '5': - case '2': case '6': - case '3': case '7': --ip; GETF("%3o"); break; - case 0: --ip; break; - default:; - } -#undef GETF - } - } - - *op = 0; - - if (out_len_r) - *out_len_r = op - out; -} -- 2.6.6 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel