Re: [PATCH 4/6] udf: fix 3 signedness & 1 unitialized variable warnings

From: Jan Kara
Date: Mon Dec 17 2007 - 11:22:58 EST


> sparse generated:
> fs/udf/inode.c:324:41: warning: incorrect type in argument 4 (different signedness)
> fs/udf/inode.c:324:41: expected long *<noident>
> fs/udf/inode.c:324:41: got unsigned long *<noident>
>
> inode_getblk always set 4th argument to uint32_t value
> 3rd parameter of map_bh is sector_t (which is unsigned long or u64)
> so convert phys value to sector_t
>
> fs/udf/inode.c:1818:47: warning: incorrect type in argument 3 (different signedness)
> fs/udf/inode.c:1818:47: expected int *<noident>
> fs/udf/inode.c:1818:47: got unsigned int *<noident>
> fs/udf/inode.c:1826:46: warning: incorrect type in argument 3 (different signedness)
> fs/udf/inode.c:1826:46: expected int *<noident>
> fs/udf/inode.c:1826:46: got unsigned int *<noident>
>
> udf_get_filelongad and udf_get_shortad are called always for uint32_t
> values (struct extent_position->offset), so it's safe to convert offset
> parameter to uint32_t
>
> gcc warned:
> fs/udf/inode.c: In function 'udf_get_block':
> fs/udf/inode.c:299: warning: 'phys' may be used uninitialized in this function
> initialize it to 0 (if someday someone will break inode_getblk we will catch it immediately)
>
> Signed-off-by: Marcin Slusarz <marcin.slusarz@xxxxxxxxx>
> CC: Ben Fennema <bfennema@xxxxxxxxxxxxxxxxxxxxxx>
Acked-by: Jan Kara <jack@xxxxxxx>

Honza
> ---
> fs/udf/directory.c | 8 ++++----
> fs/udf/inode.c | 6 +++---
> fs/udf/udfdecl.h | 4 ++--
> 3 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/fs/udf/directory.c b/fs/udf/directory.c
> index ff8c08f..984e5dc 100644
> --- a/fs/udf/directory.c
> +++ b/fs/udf/directory.c
> @@ -271,7 +271,7 @@ static extent_ad *udf_get_fileextent(void *buffer, int bufsize, int *offset)
> }
> #endif
>
> -short_ad *udf_get_fileshortad(uint8_t *ptr, int maxoffset, int *offset,
> +short_ad *udf_get_fileshortad(uint8_t *ptr, int maxoffset, uint32_t *offset,
> int inc)
> {
> short_ad *sa;
> @@ -281,7 +281,7 @@ short_ad *udf_get_fileshortad(uint8_t *ptr, int maxoffset, int *offset,
> return NULL;
> }
>
> - if ((*offset < 0) || ((*offset + sizeof(short_ad)) > maxoffset))
> + if ((*offset + sizeof(short_ad)) > maxoffset)
> return NULL;
> else if ((sa = (short_ad *)ptr)->extLength == 0)
> return NULL;
> @@ -291,7 +291,7 @@ short_ad *udf_get_fileshortad(uint8_t *ptr, int maxoffset, int *offset,
> return sa;
> }
>
> -long_ad *udf_get_filelongad(uint8_t *ptr, int maxoffset, int *offset, int inc)
> +long_ad *udf_get_filelongad(uint8_t *ptr, int maxoffset, uint32_t *offset, int inc)
> {
> long_ad *la;
>
> @@ -300,7 +300,7 @@ long_ad *udf_get_filelongad(uint8_t *ptr, int maxoffset, int *offset, int inc)
> return NULL;
> }
>
> - if ((*offset < 0) || ((*offset + sizeof(long_ad)) > maxoffset))
> + if ((*offset + sizeof(long_ad)) > maxoffset)
> return NULL;
> else if ((la = (long_ad *)ptr)->extLength == 0)
> return NULL;
> diff --git a/fs/udf/inode.c b/fs/udf/inode.c
> index 6ff8151..1178ae0 100644
> --- a/fs/udf/inode.c
> +++ b/fs/udf/inode.c
> @@ -51,7 +51,7 @@ static int udf_update_inode(struct inode *, int);
> static void udf_fill_inode(struct inode *, struct buffer_head *);
> static int udf_alloc_i_data(struct inode *inode, size_t size);
> static struct buffer_head *inode_getblk(struct inode *, sector_t, int *,
> - long *, int *);
> + sector_t *, int *);
> static int8_t udf_insert_aext(struct inode *, struct extent_position,
> kernel_lb_addr, uint32_t);
> static void udf_split_extents(struct inode *, int *, int, int,
> @@ -296,7 +296,7 @@ static int udf_get_block(struct inode *inode, sector_t block,
> {
> int err, new;
> struct buffer_head *bh;
> - unsigned long phys;
> + sector_t phys = 0;
>
> if (!create) {
> phys = udf_block_map(inode, block);
> @@ -469,7 +469,7 @@ out:
> }
>
> static struct buffer_head *inode_getblk(struct inode *inode, sector_t block,
> - int *err, long *phys, int *new)
> + int *err, sector_t *phys, int *new)
> {
> static sector_t last_block;
> struct buffer_head *result = NULL;
> diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h
> index c8016cc..b17ca67 100644
> --- a/fs/udf/udfdecl.h
> +++ b/fs/udf/udfdecl.h
> @@ -185,8 +185,8 @@ extern struct fileIdentDesc *udf_fileident_read(struct inode *, loff_t *,
> sector_t *);
> extern struct fileIdentDesc *udf_get_fileident(void *buffer, int bufsize,
> int *offset);
> -extern long_ad *udf_get_filelongad(uint8_t *, int, int *, int);
> -extern short_ad *udf_get_fileshortad(uint8_t *, int, int *, int);
> +extern long_ad *udf_get_filelongad(uint8_t *, int, uint32_t *, int);
> +extern short_ad *udf_get_fileshortad(uint8_t *, int, uint32_t *, int);
>
> /* crc.c */
> extern uint16_t udf_crc(uint8_t *, uint32_t, uint16_t);
> --
> 1.5.3.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
Jan Kara <jack@xxxxxxx>
SuSE CR Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/