Hi, Jan, Volodymyr.
c. re-allocate struct with flexible buffer.
option c. is about structures like this:
struct arrlen
{
size_t len;
int data[1];
};
This is Oleksandr's case.
So for option a. we can use _xreallocate(ptr, size, align)
For option b. we can use xrealloc_array(_ptr, _type, _num)
And for option c. I propose to implement the following macro:
#define realloc_flex_struct(_ptr, _type, _field,
_len) \
((_type *)_xrealloc(_ptr, offsetof(_type, _field[_len]) ,
__alignof__(_type)))
It can be used in the following way:
newptr = realloc_flex_struct(ptr, struct arrlen, newsize);
As you can see, this approach is type-safe and covers Oleksanrd's case.
This looks fine to me, but then wants to be accompanied by a
similar xmalloc_flex_struct(), which could be used right away
to replace a number of open-coded instances of the above.
Thank you Volodymyr for the idea. Looks like we can get a type-safe
approach which looks suitable for my particular case.
So, I need to focus on the proper implementation of non type-safe
(_xrealloc) variant in the first place taking into the account Jan's
comments. Then I will be back to the suggested type-safe marco
(realloc_flex_struct).
There's one more thing for the re-alloc case though (besides
cosmetic aspects): The incoming pointer should also be verified
to be of correct type.
Jan, how this could be technically implemented, or are these any
existing examples in Xen?
Jan
--
Regards,
Oleksandr Tyshchenko
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel