amiga-fdisk: ftbfs with GCC-14

"Christian T. Steigies" <[email protected]>
Newsgroups gmane.linux.debian.ports.68k
Message-ID <[email protected]>
Hi,
I need to fix this bug if we want to have amiga-fdisk in trixie:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1074807

The attached patch fixes the error and removes one of the warnings, I assume
that this is the correct solution?


There are a couple more warnings which will probably become errors in one of
the next gcc releases (We are at version 14?  The last GCC version I
remember using was something like 2.9, and I still have 2.6.3 on 10 floppy
disks somewhere...). I am not sure how to get rid of those warnings.


gcc -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/home/cts/salsa/amiga-fdisk=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -DUSE_READLINE=yes -I./include -Wdate-time -D_FORTIFY_SOURCE=2  -c -o amigastuff.o amigastuff.c
amigastuff.c: In function ‘rigiddisk_reorg’:
amigastuff.c:859:20: warning: pointer targets in assignment from ‘LONG *’ {aka ‘long int *’} to ‘ULONG *’ {aka ‘long unsigned int *’} differ in signedness [-Wpointer-sign]
  859 |                 crk=&(FSHB(curr)->fhb_SegListBlocks);
      |                    ^
gcc -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/home/cts/salsa/amiga-fdisk=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -DUSE_READLINE=yes -I./include -Wdate-time -D_FORTIFY_SOURCE=2  -c -o fdisk.o fdisk.c
fdisk.c: In function ‘atonum’:
fdisk.c:85:33: warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 3 has type ‘int *’ [-Wformat=]
   85 |                 sscanf(s + 2, "%x", &n);
      |                                ~^   ~~
      |                                 |   |
      |                                 |   int *
      |                                 unsigned int *
      |                                %x
fdisk.c:87:33: warning: format ‘%o’ expects argument of type ‘unsigned int *’, but argument 3 has type ‘int *’ [-Wformat=]
   87 |                 sscanf(s + 1, "%o", &n);
      |                                ~^   ~~
      |                                 |   |
      |                                 |   int *
      |                                 unsigned int *
      |                                %o

I tried defining n in fdisk.c as unsigned int but this caused even more
warnings in other places.  Do I have to cast the arguments in sscanf to
unsigned int?  It wants "unsigned int *", is it as simple as this or is
there a better solution?

--- a/fdisk.c
+++ b/fdisk.c
@@ -82,9 +82,9 @@
 
        /* 0x is hex, 0 is octal, everything else is decimal. */
        if (strncmp(s, "0x", 2) == 0 || strncmp(s, "0X", 2) == 0)
-               sscanf(s + 2, "%x", &n);
+               sscanf(s + 2, "%x", (unsigned int *) &n);
        else if (s[0] == '0' && s[1])
-               sscanf(s + 1, "%o", &n);
+               sscanf(s + 1, "%o", (unsigned int *) &n);
        else {
                d=s;
                while (d[0]!=0) {



thanks,
Christian
gcc14 (text/plain, 522 B)
--- a/amigastuff.c
+++ b/amigastuff.c
@@ -66,7 +66,7 @@
 
 int rigiddisk_new(int first);
 
-char *get_block(block)
+char *get_block(int block)
 {
 	/* This is a true quickhack. Whenn we are in list only
 	 * mode, we may not have swap and so we may not be able
@@ -81,9 +81,10 @@
 	if (list_only)
 	{
 		if ((l=open(disk_device,O_RDONLY))<0) {
-			if (get_dev)
+			if (get_dev) {
 				fprintf (stderr,"Cannot open device %s\n",disk_device);
 				return NULL;
+			}
 		}
 
 		if (lseek(l,(block*SECTOR_SIZE),SEEK_SET)<0) {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.