On Fri, Dec 11, 2020 at 3:24 AM Peter Krempa <pkre...@redhat.com> wrote:

> On Thu, Dec 10, 2020 at 14:00:07 -0600, Ryan Gahagan wrote:
> > +    virJSONValuePtr server = virJSONValueObjectGetObject(json,
> "server");
> > +    int gotUID = virJSONValueObjectGetNumberInt(json, "user", (int
> *)(&src->nfs_uid));
>
> You should not typecast the pointers here since it's not guaranteed that
> the uid_t/gid_t type is the same as an integer. Additionally storing
> this only in the nfs_uid field will actually not show up in the VM xml
> once parsed. You actually need to populate the string variants with the
> uid number with + prepended so that the XML conversion works.


The reason we use this hacky integer pointer cast is because the
virJSONValueObjectGetNumberInt method expects an int * as its thir
parameter, and when we tried to use &src->nfs_uid or gid directly we got a
compile error for type mismatch. This cast was the only way we could find
to work around this easily other than changing the _virStorageSource
parameters to be explicit int type, but then the virGetUserID and GroupID
methods cause the opposite type mismatch error because they return uid_t
and gid_t values. How should we actually get these numbers out if not for
this cast?

Reply via email to