On Fri, Oct 02, 2020 at 04:26:48PM +0200, Christian Schoenebeck wrote: > On Freitag, 2. Oktober 2020 13:51:54 CEST Christian Schoenebeck wrote: > > This patch introduces 9pfs test cases using the 9pfs 'local' > > filesystem driver which reads/writes/creates/deletes real files > > and directories. > > > > In this initial version, there is only one local test which actually > > only checks if the 9pfs 'local' device was created successfully. > > > > Before the 9pfs 'local' tests are run, a test directory 'qtest-9p-local' > > is created (with world rwx permissions) under the current working > > directory. At this point that test directory is not auto deleted yet. > > > > Signed-off-by: Christian Schoenebeck <qemu_...@crudebyte.com> > > --- > > tests/qtest/libqos/virtio-9p.c | 100 +++++++++++++++++++++++++++++++++ > > tests/qtest/libqos/virtio-9p.h | 5 ++ > > tests/qtest/virtio-9p-test.c | 44 ++++++++++----- > > 3 files changed, 135 insertions(+), 14 deletions(-) > > > > diff --git a/tests/qtest/libqos/virtio-9p.c b/tests/qtest/libqos/virtio-9p.c > > index 2e300063e3..86e40e5d56 100644 > > --- a/tests/qtest/libqos/virtio-9p.c > > +++ b/tests/qtest/libqos/virtio-9p.c > > @@ -24,6 +24,63 @@ > > #include "qgraph.h" > > > > static QGuestAllocator *alloc; > > +static char *local_test_path; > > + > > +static char *strpr(const char* format, ...) GCC_FMT_ATTR(1, 2); > > + > > +/* Concatenates the passed 2 pathes. Returned result must be freed. */ > > +static char *concat_path(const char* a, const char* b) > > +{ > > + const int len = strlen(a) + strlen("/") + strlen(b); > > + char *path = g_malloc0(len + 1); > > + snprintf(path, len + 1, "%s/%s", a, b); > > + g_assert(strlen(path) == len); > > + return path; > > +} > > Ok, but maybe I could make that concat_path() function wrap g_strconcat().
Or even one of g_build_path or g_build_filename may be useful > > +/* > > + * Lazy sprintf() implementation which auto allocates buffer. Returned > > result + * must be freed. > > + */ > > +static char *strpr(const char* format, ...) > > +{ > > + va_list argp; > > + > > + va_start(argp, format); > > + const int sz = vsnprintf(NULL, 0, format, argp) + 1; > > + va_end(argp); > > + > > + g_assert(sz > 0); > > + char *s = g_malloc0(sz); > > + > > + va_start(argp, format); > > + const int len = vsnprintf(s, sz, format, argp); > > + va_end(argp); > > + > > + g_assert(len + 1 == sz); > > + return s; > > +} > > And this strpr() function entirely be replaced by g_strdup_printf(). Yep, its preferrable to use g_strdup_printf instead of manually allocating. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|