Re: [PATCH 1/2] xfs_db: add a directory path lookup command

Eric Sandeen
2020-11-15T16:30:15Z

On 10/26/20 6:32 PM, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> Add a command to xfs_db so that we can navigate to inodes by path.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>

...

> +/* Path lookup */
> +
> +/* Key for looking up metadata inodes. */
> +struct dirpath {
> + /* Array of string pointers. */
> + char **path;
> +
> + /* Number of strings in path. */
> + unsigned int depth;
> +};

This generates warnings for me in gcc-4.8.5 (hah, I know) as well as
gcc-9.

namei.c:101:12: warning: pointer targets in initialization of ‘const unsigned char *’ from ‘char *’ differ in signedness [-Wpointer-sign]

due to the "unsigned char *" type from:

commit e2bcd936eb95d0019ca5e05f9fdd27e770ddded1
Author: Dave Chinner <david@fromorbit.com>
Date: Wed Jan 20 10:44:58 2010 +1100

xfs: directory names are unsigned

Convert the struct xfs_name to use unsigned chars for the name
strings to match both what is stored on disk (__uint8_t) and what
the VFS expects (unsigned char).

Signed-off-by: Dave Chinner <david@fromorbit.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>

so maybe just cast to shut it up?
diff --git a/db/namei.c b/db/namei.c
index 4b467ff8..a902f302 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]),
};

@@ -253,7 +253,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;