Annotation of /trunk/linterm_tools/fw_builder/bundle-tools/fwcs.c
Parent Directory | Revision Log
Revision 658 -
(hide annotations)
(download)
Mon Jan 14 16:57:24 2008 UTC (16 years, 4 months ago) by niro
File MIME type: text/plain
File size: 1513 byte(s)
Mon Jan 14 16:57:24 2008 UTC (16 years, 4 months ago) by niro
File MIME type: text/plain
File size: 1513 byte(s)
initial import
1 | niro | 658 | /* |
2 | A small tool to calculate Wyse WinTerm firmware image checksums | ||
3 | Copyright (C) 2005 Wilmer van der Gaast <wilmer@gaast.net> | ||
4 | |||
5 | This program is free software; you can redistribute it and/or | ||
6 | modify it under the terms of the second version of the GNU | ||
7 | General Public License as published by the Free Software | ||
8 | Foundation. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program; if not, write to the Free Software | ||
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
18 | */ | ||
19 | |||
20 | #include <sys/types.h> | ||
21 | #include <sys/stat.h> | ||
22 | #include <fcntl.h> | ||
23 | #include <unistd.h> | ||
24 | #include <stdio.h> | ||
25 | |||
26 | #if BYTE_ORDER == BIG_ENDIAN | ||
27 | #define cvt32(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24)) | ||
28 | #else | ||
29 | #define cvt32(x) (x) | ||
30 | #endif | ||
31 | |||
32 | int main( int argc, char *argv[] ) | ||
33 | { | ||
34 | unsigned int checksum = 0xFFFE1000; | ||
35 | unsigned int tmp; | ||
36 | int fd; | ||
37 | |||
38 | if( argc < 2 ) | ||
39 | { | ||
40 | fprintf( stderr, "Invalid number of arguments!\n" ); | ||
41 | return( 1 ); | ||
42 | } | ||
43 | |||
44 | fd = open( argv[1], O_RDONLY ); | ||
45 | if( fd < 0 ) | ||
46 | { | ||
47 | perror( "open" ); | ||
48 | return( 1 ); | ||
49 | } | ||
50 | |||
51 | while( read( fd, &tmp, 4 ) > 0 ) | ||
52 | { | ||
53 | checksum -= cvt32( tmp ); | ||
54 | tmp = 0; | ||
55 | } | ||
56 | |||
57 | printf( "%08x\n", checksum ); | ||
58 | |||
59 | return( 0 ); | ||
60 | } |