From: Johannes Berg > Sent: 05 May 2022 21:13 > On Thu, 2022-05-05 at 13:08 -0700, Keith Packard wrote: > > > > I bet you've already considered the simpler form: > > > > struct something *instance = mem_to_flex_dup(byte_array, count, GFP_KERNEL); > > if (IS_ERR(instance)) > > return PTR_ERR(instance); > > > > Sadly, this doesn't work in any way because mem_to_flex_dup() needs to > know at least the type, hence passing 'instance', which is simpler than > passing 'struct something'. You can use: struct something *instance; mem_to_flex_dup(instance, byte_array, count, GFP_KERNEL); if (IS_ERR(instance)) return PTR_ERR(instance); and have mem_to_flex_dup() (which must be a #define) update 'instance'. (You can require &instance - and just precede all the uses with an extra '*' to make it more obvious the variable is updated. But there is little point requiring it be NULL.) If you really want to define the variable mid-block you can use: mem_to_flex_dup(struct something *, instance, byte_array, count, GFP_KERNEL); but I really hate having declarations anywhere other than the top of a function because it makes them hard for the 'mk1 eyeball' to spot. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)