uc-sdk
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cm3-checksum.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdint.h>
3 #include <stdlib.h>
4 
5 int main(int argc, char ** argv) {
6  FILE * f;
7  uint32_t v, c, checksum = 0;
8  int i;
9 
10  if (argc != 2) {
11  fprintf(stderr, "Usage: %s <file>\n", argv[0]);
12  exit(1);
13  }
14 
15  f = fopen(argv[1], "r+");
16 
17  if (!f) {
18  perror("Failed opening input file");
19  exit(1);
20  }
21 
22  for (i = 0; i < 7; i++) {
23  v = 0;
24  v >>= 8; c = fgetc(f); c <<= 24; v |= c;
25  v >>= 8; c = fgetc(f); c <<= 24; v |= c;
26  v >>= 8; c = fgetc(f); c <<= 24; v |= c;
27  v >>= 8; c = fgetc(f); c <<= 24; v |= c;
28 
29  checksum += v;
30  }
31 
32  v = -checksum;
33 
34  fseek(f, 0x1c, SEEK_SET);
35 
36  fputc(v & 0xff, f); v >>= 8;
37  fputc(v & 0xff, f); v >>= 8;
38  fputc(v & 0xff, f); v >>= 8;
39  fputc(v & 0xff, f); v >>= 8;
40 
41  fclose(f);
42 
43  return 0;
44 }