On Mon, 18 Sep 2017 23:43:17 +0300 Jan Dakinevich <jan.dakinev...@gmail.com> wrote:
> --- > Greg, > > What do you think about this way? I couldn't reproduce the issue with the symbolic link... can you provide your QEMU command line and the mount options of the 9p filesystem ? Anyway, I had the very same patch in mind because only v9fs_stat() needs the basename actually and it shouldn't be open-coded in stat_to_v9stat(). Please resend with proper changelog and Signed-off-by and I'll gladly take it. Cheers, -- Greg > --- > hw/9pfs/9p.c | 18 +++++++----------- > 1 file changed, 7 insertions(+), 11 deletions(-) > > diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c > index d152f5c..4697c00 100644 > --- a/hw/9pfs/9p.c > +++ b/hw/9pfs/9p.c > @@ -826,11 +826,11 @@ static uint32_t stat_to_v9mode(const struct stat *stbuf) > } > > static int coroutine_fn stat_to_v9stat(V9fsPDU *pdu, V9fsPath *name, > + const char *basename, > const struct stat *stbuf, > V9fsStat *v9stat) > { > int err; > - const char *str; > > memset(v9stat, 0, sizeof(*v9stat)); > > @@ -864,14 +864,7 @@ static int coroutine_fn stat_to_v9stat(V9fsPDU *pdu, > V9fsPath *name, > "HARDLINKCOUNT", (unsigned long)stbuf->st_nlink); > } > > - str = strrchr(name->data, '/'); > - if (str) { > - str += 1; > - } else { > - str = name->data; > - } > - > - v9fs_string_sprintf(&v9stat->name, "%s", str); > + v9fs_string_sprintf(&v9stat->name, "%s", basename); > > v9stat->size = 61 + > v9fs_string_size(&v9stat->name) + > @@ -1080,6 +1073,7 @@ static void coroutine_fn v9fs_stat(void *opaque) > struct stat stbuf; > V9fsFidState *fidp; > V9fsPDU *pdu = opaque; > + char *basename; > > err = pdu_unmarshal(pdu, offset, "d", &fid); > if (err < 0) { > @@ -1096,7 +1090,9 @@ static void coroutine_fn v9fs_stat(void *opaque) > if (err < 0) { > goto out; > } > - err = stat_to_v9stat(pdu, &fidp->path, &stbuf, &v9stat); > + basename = g_path_get_basename(fidp->path.data); > + err = stat_to_v9stat(pdu, &fidp->path, basename, &stbuf, &v9stat); > + g_free(basename); > if (err < 0) { > goto out; > } > @@ -1772,7 +1768,7 @@ static int coroutine_fn > v9fs_do_readdir_with_stat(V9fsPDU *pdu, > if (err < 0) { > break; > } > - err = stat_to_v9stat(pdu, &path, &stbuf, &v9stat); > + err = stat_to_v9stat(pdu, &path, dent->d_name, &stbuf, &v9stat); > if (err < 0) { > break; > } -- Gregory Kurz kurzg...@fr.ibm.com gk...@linux.vnet.ibm.com Software Engineer @ IBM/LTC http://www.ibm.com Tel 33-5-6218-1607 "Anarchy is about taking complete responsibility for yourself." Alan Moore.