diff packages/redboot/current/src/fs/e2fs.c @ 2614:6cbecf3cc2e4

* src/fconfig.c, src/flash.c, src/io.c, src/load.c, src/main.c, src/xyzModem.c, include/redboot.h: more signed vs. unsigned char issues. * src/fs/e2fs.c (e2fs_mount): Avoid compiler strict aliasing problem. * include/fis.h (struct fis_image_desc): Make fis name be signed char to reduce warnings. * include/flash_config.h (struct _config): Make config_data be signed char to reduce warnings. * include/redboot.h: mon_write_char and mon_read_char_with_timeout take unsigned char, to reduce warnings. * src/parse.c: Add const to err_printf format. * src/fconfig.c: Many signed/unsigned warning cleanups. * src/io.c: Ditto. * src/xyzModem.c: Ditto. * src/load.c: Ditto. * src/flash.c: Ditto. * src/fconfig.c (flash_write_config): Warning cleanup. * src/net/net_io.c (do_ip_addr): Warning cleanup. * src/flash.c (fis_create): Warning cleanup. * include/net/net.h: Include redboot.h for tick functions. * include/net/net.h: Pull tick functions into redboot.h as they are used more widely than the net stack. * include/redboot.h: Declare tick functions. * src/main.c (cyg_start): Correctly compute workspace_end so it works even on high RAM values [bug #1000202]. Don't use workspace_end directly for context init - it gets modified. (do_go): Don't use workspace_end directly for context init - it gets modified.
author jlarmour
date Tue, 11 Nov 2008 04:32:10 +0000
parents 8285bebc3a89
children 74dbf4c3f2e1
line wrap: on
line diff
--- a/packages/redboot/current/src/fs/e2fs.c
+++ b/packages/redboot/current/src/fs/e2fs.c
@@ -10,6 +10,7 @@
 // This file is part of eCos, the Embedded Configurable Operating System.
 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
 // Copyright (C) 2003 Gary Thomas <gary@mind.be>
+// Copyright (C) 2008 eCosCentric Limited.
 //
 // eCos is free software; you can redistribute it and/or modify it under
 // the terms of the GNU General Public License as published by the Free
@@ -160,13 +161,16 @@ static int
 e2fs_mount(partition_t *part, e2fs_desc_t *e2fs)
 {
     int sb_block = 1;
-    cyg_uint32  sb_buf[E2FS_MIN_BLOCK_SIZE/sizeof(cyg_uint32)];
-    struct e2fs_super_block *sb = (struct e2fs_super_block *)sb_buf;
+    union {
+        cyg_uint32  sb_buf[E2FS_MIN_BLOCK_SIZE/sizeof(cyg_uint32)];
+        struct e2fs_super_block sbdata;
+    } sbdata_union;
+    struct e2fs_super_block *sb=&sbdata_union.sbdata;
 
     e2fs->part = part;
 
     if (!PARTITION_READ(part, sb_block*(E2FS_MIN_BLOCK_SIZE/SECTOR_SIZE),
-			(cyg_uint32 *)sb, E2FS_MIN_BLOCK_SIZE/SECTOR_SIZE))
+			&sbdata_union.sb_buf[0], E2FS_MIN_BLOCK_SIZE/SECTOR_SIZE))
 	return -1;
 
     if (SWAB_LE16(sb->magic) != E2FS_SUPER_MAGIC) {