diff mbox

Btrfs-progs: fix some build warnings on 32bit platform

Message ID 1406393395-4317-1-git-send-email-wangshilong1991@gmail.com (mailing list archive)
State Accepted
Headers show

Commit Message

Wang Shilong July 26, 2014, 4:49 p.m. UTC
Fix following build warnings on 32bit platform:

...
utils.c:1708:3: warning: left shift count >= width of
type [enabled by default]
   if (x << i & (1UL << 63))
   ^
qgroup-verify.c:393:9: warning: cast to pointer from integer
of different size [-Wint-to-pointer-cast]
  return (struct tree_block *)unode->aux;
         ^
qgroup-verify.c:407:38: warning: cast from pointer to integer
of different size [-Wpointer-to-int-cast]
   if (ulist_add(tree_blocks, bytenr, (unsigned long long)block, 0) >= 0)
                                      ^
cmds-restore.c:120:4: warning: format %lu expects argument of type
long unsigned int, but argument 3 has type size_t [-Wformat=]
    fprintf(stderr, "bad compress length %lu\n", in_len);
...

BTW, this patch also switches other castings with new helpers.

Signed-off-by: Wang Shilong <wangshilong1991@gmail.com>
---
 cmds-inspect.c  | 4 ++--
 cmds-restore.c  | 2 +-
 extent-tree.c   | 3 +--
 kerncompat.h    | 4 ++++
 qgroup-verify.c | 4 ++--
 utils.c         | 2 +-
 6 files changed, 11 insertions(+), 8 deletions(-)

Comments

David Sterba July 29, 2014, 1:48 p.m. UTC | #1
On Sun, Jul 27, 2014 at 12:49:55AM +0800, Wang Shilong wrote:
> cmds-restore.c:120:4: warning: format %lu expects argument of type
> long unsigned int, but argument 3 has type size_t [-Wformat=]
>     fprintf(stderr, "bad compress length %lu\n", in_len);

> --- a/cmds-restore.c
> +++ b/cmds-restore.c
> @@ -117,7 +117,7 @@ static int decompress_lzo(unsigned char *inbuf, char *outbuf, u64 compress_len,
>  		in_len = read_compress_length(inbuf);
>  
>  		if ((tot_in + LZO_LEN + in_len) > tot_len) {
> -			fprintf(stderr, "bad compress length %lu\n", in_len);
> +			fprintf(stderr, "bad compress length %u\n", in_len);

in_len is size_t, this prints a warning on 64bit. Let's make it %lu and
cas to unsigned long (fixed locally, no need to resend), we'er not using
the 'z' size_t modifier for printf anywhere.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Wang Shilong July 29, 2014, 1:56 p.m. UTC | #2
Hi David?

> On Sun, Jul 27, 2014 at 12:49:55AM +0800, Wang Shilong wrote:
>> cmds-restore.c:120:4: warning: format %lu expects argument of type
>> long unsigned int, but argument 3 has type size_t [-Wformat=]
>>    fprintf(stderr, "bad compress length %lu\n", in_len);
> 
>> --- a/cmds-restore.c
>> +++ b/cmds-restore.c
>> @@ -117,7 +117,7 @@ static int decompress_lzo(unsigned char *inbuf, char *outbuf, u64 compress_len,
>> 		in_len = read_compress_length(inbuf);
>> 
>> 		if ((tot_in + LZO_LEN + in_len) > tot_len) {
>> -			fprintf(stderr, "bad compress length %lu\n", in_len);
>> +			fprintf(stderr, "bad compress length %u\n", in_len);
> 
> in_len is size_t, this prints a warning on 64bit. Let's make it %lu and
> cas to unsigned long (fixed locally, no need to resend), we'er not using
> the 'z' size_t modifier for printf anywhere.


I am sorry that i forgot to test the patch on 64bit.  As i have left current
company, i could not setup a 64 bit machine until next week.

So i will appreciate it if you could fix this when merging or wait
until next week once i got a 64bit machine.


Thanks,
Wang--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Sterba July 29, 2014, 1:58 p.m. UTC | #3
On Tue, Jul 29, 2014 at 09:56:46PM +0800, Wang Shilong wrote:
> Hi David?
> 
> > On Sun, Jul 27, 2014 at 12:49:55AM +0800, Wang Shilong wrote:
> >> cmds-restore.c:120:4: warning: format %lu expects argument of type
> >> long unsigned int, but argument 3 has type size_t [-Wformat=]
> >>    fprintf(stderr, "bad compress length %lu\n", in_len);
> > 
> >> --- a/cmds-restore.c
> >> +++ b/cmds-restore.c
> >> @@ -117,7 +117,7 @@ static int decompress_lzo(unsigned char *inbuf, char *outbuf, u64 compress_len,
> >> 		in_len = read_compress_length(inbuf);
> >> 
> >> 		if ((tot_in + LZO_LEN + in_len) > tot_len) {
> >> -			fprintf(stderr, "bad compress length %lu\n", in_len);
> >> +			fprintf(stderr, "bad compress length %u\n", in_len);
> > 
> > in_len is size_t, this prints a warning on 64bit. Let's make it %lu and
> > cas to unsigned long (fixed locally, no need to resend), we'er not using
> > the 'z' size_t modifier for printf anywhere.
> 
> 
> I am sorry that i forgot to test the patch on 64bit.  As i have left current
> company, i could not setup a 64 bit machine until next week.
> 
> So i will appreciate it if you could fix this when merging or wait
> until next week once i got a 64bit machine.

No problem, already fixed.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/cmds-inspect.c b/cmds-inspect.c
index cd9d2c6..c6c17a5 100644
--- a/cmds-inspect.c
+++ b/cmds-inspect.c
@@ -49,7 +49,7 @@  static int __ino_to_path_fd(u64 inum, int fd, int verbose, const char *prepend)
 	memset(fspath, 0, sizeof(*fspath));
 	ipa.inum = inum;
 	ipa.size = 4096;
-	ipa.fspath = (uintptr_t)fspath;
+	ipa.fspath = ptr_to_u64(fspath);
 
 	ret = ioctl(fd, BTRFS_IOC_INO_PATHS, &ipa);
 	if (ret) {
@@ -185,7 +185,7 @@  static int cmd_logical_resolve(int argc, char **argv)
 	memset(inodes, 0, sizeof(*inodes));
 	loi.logical = arg_strtou64(argv[optind]);
 	loi.size = size;
-	loi.inodes = (uintptr_t)inodes;
+	loi.inodes = ptr_to_u64(inodes);
 
 	fd = open_file_or_dir(argv[optind+1], &dirstream);
 	if (fd < 0) {
diff --git a/cmds-restore.c b/cmds-restore.c
index 3465f84..abd9773 100644
--- a/cmds-restore.c
+++ b/cmds-restore.c
@@ -117,7 +117,7 @@  static int decompress_lzo(unsigned char *inbuf, char *outbuf, u64 compress_len,
 		in_len = read_compress_length(inbuf);
 
 		if ((tot_in + LZO_LEN + in_len) > tot_len) {
-			fprintf(stderr, "bad compress length %lu\n", in_len);
+			fprintf(stderr, "bad compress length %u\n", in_len);
 			return -1;
 		}
 
diff --git a/extent-tree.c b/extent-tree.c
index 7979457..c46c92b 100644
--- a/extent-tree.c
+++ b/extent-tree.c
@@ -3090,8 +3090,7 @@  int btrfs_free_block_groups(struct btrfs_fs_info *info)
 			break;
 		ret = get_state_private(&info->block_group_cache, start, &ptr);
 		if (!ret) {
-			cache = (struct btrfs_block_group_cache *)
-					(uintptr_t)ptr;
+			cache = u64_to_ptr(ptr);
 			if (cache->free_space_ctl) {
 				btrfs_remove_free_space_cache(cache);
 				kfree(cache->free_space_ctl);
diff --git a/kerncompat.h b/kerncompat.h
index 652275e..bb03194 100644
--- a/kerncompat.h
+++ b/kerncompat.h
@@ -28,6 +28,10 @@ 
 #include <assert.h>
 #include <stddef.h>
 #include <linux/types.h>
+#include <stdint.h>
+
+#define ptr_to_u64(x)	((u64)(uintptr_t)x)
+#define u64_to_ptr(x)	((void *)(uintptr_t)x)
 
 #ifndef READ
 #define READ 0
diff --git a/qgroup-verify.c b/qgroup-verify.c
index 2e1716d..a5bd4f8 100644
--- a/qgroup-verify.c
+++ b/qgroup-verify.c
@@ -390,7 +390,7 @@  static u64 resolve_one_root(u64 bytenr)
 
 static inline struct tree_block *unode_tree_block(struct ulist_node *unode)
 {
-	return (struct tree_block *)unode->aux;
+	return u64_to_ptr(unode->aux);
 }
 static inline u64 unode_bytenr(struct ulist_node *unode)
 {
@@ -404,7 +404,7 @@  static int alloc_tree_block(u64 bytenr, u64 num_bytes, int level)
 	if (block) {
 		block->num_bytes = num_bytes;
 		block->level = level;
-		if (ulist_add(tree_blocks, bytenr, (unsigned long long)block, 0) >= 0)
+		if (ulist_add(tree_blocks, bytenr, ptr_to_u64(block), 0) >= 0)
 			return 0;
 		free(block);
 	}
diff --git a/utils.c b/utils.c
index 11250d9..241e5ff 100644
--- a/utils.c
+++ b/utils.c
@@ -1705,7 +1705,7 @@  static int fls64(u64 x)
 	int i;
 
 	for (i = 0; i <64; i++)
-		if (x << i & (1UL << 63))
+		if (x << i & (1ULL << 63))
 			return 64 - i;
 	return 64 - i;
 }