From 96e042ea32c2b4d997a0502fd0d5e69848690c77 Mon Sep 17 00:00:00 2001
From: Thorsten Glaser <tg@mirbsd.de>
Date: Sun, 3 Jan 2010 16:00:02 +0000
Subject: fix compiler warnings
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

 - fdisk.c: passing … from incompatible pointer type
 - lib/scheme/icside.c: dereferencing … does break strict-aliasing rules
   XXX there might be an endianness issue left from the original code
 - lib/scheme/pcbios.c: array subscript is above array bounds
 - lib/scheme/pcbios.c: use of uninitialised value

Bug-Debian: 563522
---
 fdisk.c             |    2 +-
 lib/scheme/icside.c |    5 ++++-
 lib/scheme/pcbios.c |    7 ++++++-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/fdisk.c b/fdisk.c
index 95c5830..1a81f72 100644
--- a/fdisk.c
+++ b/fdisk.c
@@ -859,7 +859,7 @@ int main(int argc, char *argv[])
 
 	case mode_list:
 		if (optind < argc)
-			ret = print_part_tables(argc - optind, argv + optind);
+			ret = print_part_tables(argc - optind, (const char **)argv + optind);
 		else
 			ret = print_part_tables(NR_DEVICES, part_devs);
 		break;
diff --git a/lib/scheme/icside.c b/lib/scheme/icside.c
index 88766d4..f2b20ab 100644
--- a/lib/scheme/icside.c
+++ b/lib/scheme/icside.c
@@ -193,6 +193,7 @@ icside_writeinfo(part_t *part)
 {
   icside_pe_t sector;
   u_int part_no, ret = 0;
+  unsigned long csum;
 
   dbg_printf("icside_writeinfo()");
   dbg_level_up();
@@ -234,7 +235,9 @@ icside_writeinfo(part_t *part)
         assert(0);
       }
     }
-  *(unsigned long *)&sector.sector[508] = icside_checksum(sector.sector);
+  /* XXX possible endianness issue */
+  csum = icside_checksum(sector.sector);
+  memcpy(&sector.sector[508], &csum, sizeof(csum));
 
 #ifdef ICSIDE_DUMP
   dbg_memdump(sector.sector, ICSIDE_SECTOR_SIZE);
diff --git a/lib/scheme/pcbios.c b/lib/scheme/pcbios.c
index c9da581..a612bc6 100644
--- a/lib/scheme/pcbios.c
+++ b/lib/scheme/pcbios.c
@@ -217,7 +217,12 @@ pcbios_readinfo(part_t *part)
 
     p = part->data.pcbios.pcboot_sector + 0x1be;
 
+#if 0
     if (valid && chs.cylinder == 0) {
+    /* } chs is uninitialised here */
+#else
+    if (valid) {
+#endif
       /*
        * Attempt to calculate the size of one track
        *  track_size = (start_log / (cyl * head) - sector
@@ -572,7 +577,7 @@ pcbios_nexttype(part_t *part, u_int parn, ptyp_t current, int dir)
       if (types[i] == current)
         break;
 
-    if (types[i] == current) {
+    if (i < NR_TYPES && types[i] == current) {
       i += dir;
 
       if (i < 0)
