Re: [PATCH] xfs_db: fix complaints about unsigned char casting

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

 



Thank you for your detailed explanation!

Thanks,
Alan

> 2023年3月18日 上午4:29,Darrick J. Wong <djwong@xxxxxxxxxx> 写道:
> 
> On Fri, Mar 17, 2023 at 06:43:40PM +0800, Alan Huang wrote:
>> Is there any reason keep these definition with different types?  Question from a newbie...
> 
> Probably not, but char* handling in C is a mess if you don't specify
> signedness -- on some arches gcc interprets "char" as "signed char", and
> on others it uses "unsigned char".  The C library string functions all
> operate on "char *", so if you start changing types you quickly end up
> in compiler warning hell over that.
> 
> libxfs seems to use "unsigned char*" and "uint8_t *".  I don't know if
> that was just an SGI thing, or merely a quirk of the codebase?  The
> Linux VFS code all take "char *", though as of 6.2 the makefiles force
> those to unsigned everywhere.  As far as directory entry and extended
> attribute names go, all eight bits are allowed.
> 
> UTF8 encoding uses the upper bit of a char, which means that we really
> want unsigned to avoid problems with sign extension when computing
> hashes and things like that, because emoji and kanji characters are in
> use around the world.
> 
> IOWS: it's a giant auditing headache to research what parts use the type
> declarations they do, figure out what subtleties go with them, and
> decide on appropriate fixes.  And in the end... the system still behaves
> the same way it did.
> 
> --D
> 
>> Thanks,
>> Alan
>> 
>>> 2023年3月17日 下午6:25,Carlos Maiolino <cem@xxxxxxxxxx> 写道:
>>> 
>>> On Tue, Mar 14, 2023 at 06:01:10PM -0700, Darrick J. Wong wrote:
>>>> From: Darrick J. Wong <djwong@xxxxxxxxxx>
>>>> 
>>>> Make the warnings about signed/unsigned char pointer casting go away.
>>>> For printing dirent names it doesn't matter at all.
>>>> 
>>>> Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>
>>> 
>>> Looks good, will test.
>>> 
>>> Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
>>> 
>>>> ---
>>>> db/namei.c |    4 ++--
>>>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>>> 
>>>> diff --git a/db/namei.c b/db/namei.c
>>>> index 00e8c8dc6d5..063721ca98f 100644
>>>> --- a/db/namei.c
>>>> +++ b/db/namei.c
>>>> @@ -98,7 +98,7 @@ path_navigate(
>>>> 
>>>> 	for (i = 0; i < dirpath->depth; i++) {
>>>> 		struct xfs_name	xname = {
>>>> -			.name	= dirpath->path[i],
>>>> +			.name	= (unsigned char *)dirpath->path[i],
>>>> 			.len	= strlen(dirpath->path[i]),
>>>> 		};
>>>> 
>>>> @@ -250,7 +250,7 @@ dir_emit(
>>>> 	uint8_t			dtype)
>>>> {
>>>> 	char			*display_name;
>>>> -	struct xfs_name		xname = { .name = name };
>>>> +	struct xfs_name		xname = { .name = (unsigned char *)name };
>>>> 	const char		*dstr = get_dstr(mp, dtype);
>>>> 	xfs_dahash_t		hash;
>>>> 	bool			good;
>>> 
>>> -- 
>>> Carlos Maiolino
>> 





[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