[Bug 219203] xfsprogs-6.10.0: missing cast in /usr/include/xfs/xfs_fs.h(xfs_getparents_next_rec) causes error in C++ compilations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



https://bugzilla.kernel.org/show_bug.cgi?id=219203

--- Comment #1 from Dave Chinner (david@xxxxxxxxxxxxx) ---
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.

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux