On 06/13/2011 09:39 PM, Michael Williams wrote: > Modify virFileReadAll to check for redirected stdin input when > no file is specified. This means that not every file argument > needs to be required. > > Signed-off-by: Michael Williams <mspacex@xxxxxxxxx> > --- > src/util/util.c | 10 +++++- > tools/virsh.c | 99 > +++++++++++++++++++++++++++++++++++-------------------- > 2 files changed, 72 insertions(+), 37 deletions(-) > > diff --git a/src/util/util.c b/src/util/util.c > index 554d68e..84b3ae5 100644 > --- a/src/util/util.c > +++ b/src/util/util.c > @@ -445,7 +445,15 @@ int virFileReadAll(const char *path, int maxlen, > char **buf) > { > int fd; > - if (strcmp(path,"-") == 0) > + if (!path) { Your mailer uses odd spacing. > + if (isatty(fileno(stdin))) { Same comments about using STDIN_FILENO. I'm debating whether this line belongs here, or whether it belongs better in virsh.c. That is, I don't know whether this is a virsh-specific feature, or whether all of the libvirt library should behave like this. I'm also wondering if the tty check is correct; it seems like: 'virsh define' should be able to read from stdin (it is a batch run rather than interactive, but has just one command, so it is okay if that command consumes stdin); whereas: 'virsh' followed by 'define' must not consume stdin, whether or not stdin is a tty (that is, interactive mode must explicitly request "-" as the filename) and: 'virsh "define; list"' should not consume stdin (batch mode with more than one command, and the first command should not need to look ahead to see whether subsequent commands might want to use stdin). I'm not even sure if stdin being a tty is the right check. > + virReportSystemError(EINVAL, "%s", _("Missing <file> > argument")); > + return -1; > + } else > + path = "-"; > + } > + > + if (strcmp(path,"-") == 0) fd = fileno(stdin); Formatting - this should be two lines. > @@ -1323,8 +1325,10 @@ cmdDefine(vshControl *ctl, const vshCmd *cmd) > if (!vshConnectionUsability(ctl, ctl->conn)) > return false; > - if (vshCommandOptString(cmd, "file", &from) <= 0) > + if (vshCommandOptString(cmd, "file", &from) < 0) { > + vshError(ctl, "%s", _("malformed xml argument")); Not quite the right message; "malformed xml" implies that the file existed and was read but could not be parsed. Really, the error here is that someone called --file '' (that is, the empty string), so a better error is "empty xml argument". But overall, the idea is quite nice. -- Eric Blake eblake@xxxxxxxxxx +1-801-349-2682 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list