Um 14:42 Uhr am 24.09.20 schrieb Kern Sibbald:
> Unless there is some new major bug found, this will be the last of the
> 9.6.x releases. The next release major release (a really big one) is
> currently scheduled for December.
During compilation on 32bit Debian Sid with gcc (Debian 10.2.0-9) 10.2.0
the following happened:
fstype.c: In function 'bool fstype(FF_PKT*, char*, int)':
fstype.c:207:12: error: narrowing conversion of '4283649346' from 'unsigned
int' to 'int' [-Wnarrowing]
207 | case 0xFF534D42: fstype = "cifs"; break; /*
CIFS_MAGIC_NUMBER */
| ^~~~~~~~~~
fstype.c:216:12: error: narrowing conversion of '4187351113' from 'unsigned
int' to 'int' [-Wnarrowing]
216 | case 0xf995e849: fstype = "hpfs"; break; /*
HPFS_SUPER_MAGIC */
| ^~~~~~~~~~
fstype.c:217:12: error: narrowing conversion of '2508478710' from 'unsigned
int' to 'int' [-Wnarrowing]
217 | case 0x958458f6: fstype = "hugetlbfs"; break; /*
HUGETLBFS_MAGIC */
| ^~~~~~~~~~
fstype.c:234:12: error: narrowing conversion of '2768370933' from 'unsigned
int' to 'int' [-Wnarrowing]
234 | case 0xa501FCF5: fstype = "vxfs"; break;
| ^~~~~~~~~~
fstype.c:237:12: error: narrowing conversion of '2435016766' from 'unsigned
int' to 'int' [-Wnarrowing]
237 | case 0x9123683e: fstype = "btrfs"; break;
| ^~~~~~~~~~
make[3]: *** [Makefile:150: fstype.lo] Error 1
make[3]: *** Waiting for unfinished jobs....
make[3]: Leaving directory '/build/bacula-9.6.6/src/findlib'
The full build log is available at
https://salsa.debian.org/bacula-team/bacula/-/jobs/1023910
Applying the following change fixes this problem:
--- a/src/findlib/fstype.c
+++ b/src/findlib/fstype.c
@@ -188,7 +188,7 @@
*
* $ grep -r SUPER_MAGIC /usr/include/linux
*/
- switch (st.f_type) {
+ switch ((unsigned int)st.f_type) {
/* Known good values */
/* ext2, ext3, and ext4 have the same code */
case 0xef53: fstype = "ext2"; break; /*
EXT2_SUPER_MAGIC */
The documentation of statfs(2) says:
,----
| The __fsword_t type used for various fields in the statfs structure
| definition is a glibc internal type, not intended for public use. This
| leaves the programmer in a bit of a conundrum when trying to copy or
| compare these fields to local variables in a program. Using unsigned int
| for such variables suffices on most systems.
`----
Which explains why st.f_type is architecture dependent and fails on the
stricter GCC10.
Grüße,
Sven.
_______________________________________________
Bacula-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bacula-devel