xfs_io: fix gcc-7 related printf warnings
PATCH 1/1 xfs_io: fix gcc-7 related printf warnings
From: Dave Chinner <[email protected]>
New compiler, new checks, new warnings.
Fix the new [-Wformat-truncation=] warnings that io/fsmap.c is throwing w/ gcc-7.2 because "%lld..%lld" requires a buffer 40 characters long, not 32.
--- io/fsmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
io/fsmap.c +2 -2
@@ -184,8 +184,8 @@ dump_map_verbose(off64_t agoff, bperag;int foff_w, boff_w, aoff_w, tot_w, agno_w, own_w;int nr_w, dev_w; -char rbuf[32 ], bbuf[32 ], abuf[32 ], obuf[32 ]; -char nbuf[32 ], dbuf[32 ], gbuf[32 ]; +char rbuf[40 ], bbuf[40 ], abuf[40 ], obuf[40 ]; +char nbuf[40 ], dbuf[40 ], gbuf[40 ];char owner[OWNER_BUF_SZ ];int sunit, swidth;int flg =0 ;
Signature · 1 line
2.15.0
Quoted 9 lines · Dave Chinner
From: Dave Chinner <[email protected]>
New compiler, new checks, new warnings.
Fix the new [-Wformat-truncation=] warnings that
io/fsmap.cis throwing w/ gcc-7.2 because "%lld..%lld" requires a buffer 40 characters long, not 32.Signed-off-by Dave Chinner <[email protected]>
2^63 is 19 chars, yup.
Quoted 20 lines
--- io/fsmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)io/fsmap.c +2
-2@@ -184,8 +184,8 @@ dump_map_verbose(off64_t agoff, bperag;int foff_w, boff_w, aoff_w, tot_w, agno_w, own_w;int nr_w, dev_w; -char rbuf[32 ], bbuf[32 ], abuf[32 ], obuf[32 ]; -char nbuf[32 ], dbuf[32 ], gbuf[32 ]; +char rbuf[40 ], bbuf[40 ], abuf[40 ], obuf[40 ]; +char nbuf[40 ], dbuf[40 ], gbuf[40 ];char owner[OWNER_BUF_SZ ];int sunit, swidth;int flg =0 ;
Quoted 19 lines · Eric Sandeen
Quoted 9 lines · Dave Chinner
From: Dave Chinner <[email protected]>
New compiler, new checks, new warnings.
Fix the new [-Wformat-truncation=] warnings that
io/fsmap.cis throwing w/ gcc-7.2 because "%lld..%lld" requires a buffer 40 characters long, not 32.Signed-off-by Dave Chinner <[email protected]>2^63 is 19 chars, yup.
Reviewed-by Eric Sandeen <[email protected]>Quoted 4 lines
--- io/fsmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Quoted 12 lines
io/fsmap.c dump_map_verbose( · line 188
Quoted 12 lines
io/fsmap.c +2
-2@@ -184,8 +184,8 @@ dump_map_verbose(off64_t agoff, bperag;int foff_w, boff_w, aoff_w, tot_w, agno_w, own_w;int nr_w, dev_w; -char rbuf[32 ], bbuf[32 ], abuf[32 ], obuf[32 ]; -char nbuf[32 ], dbuf[32 ], gbuf[32 ]; +char rbuf[40 ], bbuf[40 ], abuf[40 ], obuf[40 ]; +char nbuf[40 ], dbuf[40 ], gbuf[40 ];
Waitaminute. The longest format string is bbuf, which gets "[%lld..%lld]:". The longest number %lld can print is "-9223372036854775807" which requires 20 bytes. Therefore, bbuf needs 1 + 20 + 2 + 20 + 2 + 1 == 46 bytes, not 40. rbuf and abuf have similar problems, though I guess a 48-byte string will work for all.
Granted, it's snprintf so it'll just truncate the second number if it has to, but seeing as this came from a gcc warning:
"fsmap.c:228:3: note: ‘snprintf’ output between 8 and 40 bytes into a destination of size 32"
So am I just bad at math, or is gcc wrong here?
--D
Quoted 8 lines
io/fsmap.c dump_map_verbose( · line 191
Quoted 4 lines
io/fsmap.c +0
-0char owner[OWNER_BUF_SZ ];int sunit, swidth;int flg =0 ;--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Darrick J. Wong
Reviewed-byQuoted 39 lines · Darrick J. Wong
Quoted 19 lines · Eric Sandeen
Quoted 9 lines · Dave Chinner
From: Dave Chinner <[email protected]>
New compiler, new checks, new warnings.
Fix the new [-Wformat-truncation=] warnings that
io/fsmap.cis throwing w/ gcc-7.2 because "%lld..%lld" requires a buffer 40 characters long, not 32.Signed-off-by Dave Chinner <[email protected]>2^63 is 19 chars, yup.
Reviewed-by Eric Sandeen <[email protected]>Quoted 4 lines
--- io/fsmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)Quoted 12 lines
io/fsmap.c dump_map_verbose( · line 188
Quoted 12 lines
io/fsmap.c +2
-2@@ -184,8 +184,8 @@ dump_map_verbose(off64_t agoff, bperag;int foff_w, boff_w, aoff_w, tot_w, agno_w, own_w;int nr_w, dev_w; -char rbuf[32 ], bbuf[32 ], abuf[32 ], obuf[32 ]; -char nbuf[32 ], dbuf[32 ], gbuf[32 ]; +char rbuf[40 ], bbuf[40 ], abuf[40 ], obuf[40 ]; +char nbuf[40 ], dbuf[40 ], gbuf[40 ];Waitaminute. The longest format string is bbuf, which gets "[%lld..%lld]:". The longest number %lld can print is "-9223372036854775807" which requires 20 bytes. Therefore, bbuf needs 1 + 20 + 2 + 20 + 2 + 1 == 46 bytes, not 40. rbuf and abuf have similar problems, though I guess a 48-byte string will work for all.
Quoted 7 lines
Granted, it's snprintf so it'll just truncate the second number if it has to, but seeing as this came from a gcc warning:
"fsmap.c:228:3: note: ‘snprintf’ output between 8 and 40 bytes into a destination of size 32"
So am I just bad at math, or is gcc wrong here?
Ah, dchinner points out on irc that gcc knows we (>> 9) the numbers before printing them so the maximum value is 36028797018963967, so 40 bytes works.
gcc: 1, maintainer: 0
Looks ok,
--D
Quoted 14 lines
--D
Quoted 8 lines
io/fsmap.c dump_map_verbose( · line 191
Quoted 4 lines
io/fsmap.c +0
-0char owner[OWNER_BUF_SZ ];int sunit, swidth;int flg =0 ;--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html