On 130314 10:53:59, Daniel P. Berrange wrote: > On Thu, Mar 14, 2013 at 12:55:15PM +0400, Dmitry Guryanov wrote: > > Add function virJSONValueFromStream, which reads data from > > a stream and passes it to json parser. When end of the object > > is reached, it returns this object. > > To avoid reading from the stream by single bytes it reads to > > a buffer (in a structure virJSONStreamParserState), which should > > be passed to a consequent call of this function. So if the end > > of one object and the beginning of the next object have been > > read by a single system call - virJSONValueFromStream handle > > it correctly. > > > > example of usage: > > > > virJSONValuePtr v; > > virJSONStreamParserState state; > > > > memset(&state, 0, sizeof(state)); > > > > while (1) { > > v = virJSONValueFromStream(mon->fd, &state); > > if (v == (void *)-1) > > /* error */ > > break; > > > > if (v == NULL) > > /* file descriptor has been closed */ > > break; > > > > /* handle object 'v' */ > > } > > > > I need such function for the parallels driver. It caches info > > about domains and needs some mechanism to update this cache. > > There is a "prlsrvctl monitor" command which waits for events > > forever and prints info about events to stdout in json format. > > So parallels driver could start separate thread which will > > read from prlsrvctl's stdout and update cache accordingly. > > > > There is the same task in qemu_monitor_json, but each json object > > is printed in a separate line there. It's not possible in my case, > > because some fields could have line endings. > > Even QEMU could output multi-line JSON if you set the 'pretty' flag, > so this would be useful for QEMU driver too at some point. > > > > > Signed-off-by: Dmitry Guryanov <dguryanov@xxxxxxxxxxxxx> > > --- > > src/util/virjson.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > > src/util/virjson.h | 8 ++++ > > 2 files changed, 118 insertions(+), 0 deletions(-) > > Since this is reasonably complex code can you also add > some more test cases to the tests/jsontest.c file to > cover this functionality. > Yes, I'll send test in a separate patch. > Daniel > -- > |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| > |: http://libvirt.org -o- http://virt-manager.org :| > |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| > |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- Dmitry Guryanov -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list