On Tue, Aug 27, 2024 at 09:07:03PM +0000, bugzilla-daemon@xxxxxxxxxx wrote: > https://bugzilla.kernel.org/show_bug.cgi?id=219203 > > Bug ID: 219203 > Summary: xfsprogs-6.10.0: missing cast in > /usr/include/xfs/xfs_fs.h(xfs_getparents_next_rec) > causes error in C++ compilations > Product: File System > Version: 2.5 > Hardware: All > OS: Linux > Status: NEW > Severity: normal > Priority: P3 > Component: XFS > Assignee: filesystem_xfs@xxxxxxxxxxxxxxxxxxxxxx > Reporter: kernel@xxxxxxxxxxxxxxxxx > Regression: No > > C allows implicit casts from void* to any pointer type, but C++ does not. Thus, > when including <xfs/xfs_fs.h> in a C++ compilation unit, the compiler raises > this error: > > /usr/include/xfs/xfs_fs.h: In function 'xfs_getparents_rec* > xfs_getparents_next_rec(xfs_getparents*, xfs_getparents_rec*)': > /usr/include/xfs/xfs_fs.h:915:16: error: invalid conversion from 'void*' to > 'xfs_getparents_rec*' [-fpermissive] > 915 | return next; > | ^~~~ > | | > | void* > > > The return statement in xfs_getparents_next_rec() should have used an explicit > cast, as the return statement in xfs_getparents_first_rec() does. > > --- /usr/include/xfs/xfs_fs.h > +++ /usr/include/xfs/xfs_fs.h > @@ -912,7 +912,7 @@ > if (next >= end) > return NULL; > > - return next; > + return (struct xfs_getparents_rec *)next; > } We shouldn't be putting static inline code in xfs_fs.h. That header file is purely for kernel API definitions. Iterator helper functions aren't part of the kernel API definition - they should be in some other exported header file if they are needed at all. The helpers could be defined in the getparents man page in the example code that uses them rather than exposing the C code to the world... I note that we've recently added a static inline function type checking function to xfs_types.h rather than it being an external function declaration, so there's more than one header file that needs cleanup.... -Dave. -- Dave Chinner david@xxxxxxxxxxxxx