On Tue, May 09, 2023 at 02:28:40PM +0200, Laszlo Ersek wrote: > On 5/9/23 11:51, Richard W.M. Jones wrote: > > eg. { '\r', '\n' } -> { '\\', 'n', '\\', 'r' } > > --- > > common/utils/utils.h | 1 + > > common/utils/quote.c | 58 ++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 59 insertions(+) > > > > diff --git a/common/utils/utils.h b/common/utils/utils.h > > index 42288a5cd..1e6d8972b 100644 > > --- a/common/utils/utils.h > > +++ b/common/utils/utils.h > > @@ -35,6 +35,7 @@ > > > > extern void shell_quote (const char *str, FILE *fp); > > extern void uri_quote (const char *str, FILE *fp); > > +extern void c_string_quote (const char *str, FILE *fp); > > extern int exit_status_to_nbd_error (int status, const char *cmd); > > extern int set_cloexec (int fd); > > extern int set_nonblock (int fd); > > diff --git a/common/utils/quote.c b/common/utils/quote.c > > index 863e08a8e..877035387 100644 > > --- a/common/utils/quote.c > > +++ b/common/utils/quote.c > > @@ -37,6 +37,9 @@ > > #include <string.h> > > #include <unistd.h> > > > > +#include "ascii-ctype.h" > > +#include "hexdigit.h" > > + > > /* Print str to fp, shell quoting if necessary. This comes from > > * libguestfs, but was written by me so I'm relicensing it to a BSD > > * license for nbdkit. > > @@ -98,3 +101,58 @@ uri_quote (const char *str, FILE *fp) > > fprintf (fp, "%%%02X", str[i] & 0xff); > > } > > } > > + > > +/* Print str to fp, quoting in a way similar to C strings, for example > > + * '\n' -> "\n". > > + * > > + * Note that we do not emit quotes around the string, and double > > + * quotes within the string are not escaped. > > + */ > > +void > > +c_string_quote (const char *str, FILE *fp) > > +{ > > + size_t i; > > + char c; > > + > > + for (i = 0; c = str[i], c != '\0'; ++i) { > > For the controlling expression, do we like > > (c = str[i]) != '\0' > > more?
I think they're both a bit awkward :-/ > Another question regarding brace style: > > > > + if (ascii_isprint (c)) > > + fputc (c, fp); > > + else { > > + switch (c) { > > + case '\a': > > + fputc ('\\', fp); > > + fputc ('a', fp); > > + break; > > + case '\b': > > + fputc ('\\', fp); > > + fputc ('b', fp); > > + break; > > + case '\f': > > + fputc ('\\', fp); > > + fputc ('f', fp); > > + break; > > + case '\n': > > + fputc ('\\', fp); > > + fputc ('n', fp); > > + break; > > + case '\r': > > + fputc ('\\', fp); > > + fputc ('r', fp); > > + break; > > + case '\t': > > + fputc ('\\', fp); > > + fputc ('t', fp); > > + break; > > + case '\v': > > + fputc ('\\', fp); > > + fputc ('v', fp); > > + break; > > + default: > > + fputc ('\\', fp); > > + fputc ('x', fp); > > + fputc (hexchar (c >> 4), fp); > > + fputc (hexchar (c), fp); > > + } > > + } > > + } > > In theory, we don't have to use any brace characters here except within > the "switch" statement -- the "for" and "else" parts don't need braces. > libnbd / nbdkit usually (?) forbids using braces unless we *must* > braces. But this looks like an exception. What's the rule? > > (Sorry if I asked the same question before -- I don't remember exactly, > but I might have. It just doesn't congeal into a consistent rule for me.) I don't think there's really a hard rule, whatever makes the code clearer I guess ... > Looks OK otherwise of course. > > Thanks! > Laszlo Thanks, Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs