Subversion Repositories ngs

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #define _CRT_NONSTDC_NO_DEPRECATE
  3. #include <stdio.h>
  4. #include <io.h>
  5. #include <fcntl.h>
  6. #include <sys/stat.h>
  7. typedef unsigned int u32;
  8. typedef unsigned char u8;
  9.  
  10. static u8 buf[0x1000];
  11.  
  12. int main(int argc, char *argv[])
  13. {
  14.     u32 cs32 = 0;
  15.  
  16.     if(argc < 2)
  17.     {
  18.         puts("usage: csum32 input.bin");
  19.         return -1;
  20.     }
  21.  
  22.     int fi = open(argv[1], O_RDONLY | O_BINARY);
  23.     int len = filelength(fi);
  24.     int n = len / sizeof(buf);
  25.     int m = len % sizeof(buf);
  26.     for(int i = 0; i < n; i++)
  27.     {
  28.         if(read(fi, buf, sizeof(buf)) < 0)
  29.         {
  30.             puts("error reading input file");
  31.             close(fi);
  32.             return -1;
  33.         }
  34.         for(int i = 0; i < sizeof(buf); i++)
  35.             cs32 += buf[i];
  36.     }
  37.  
  38.     if(m)
  39.     {
  40.         if(read(fi, buf, m) < 0)
  41.         {
  42.             puts("error reading input file");
  43.             close(fi);
  44.             return -1;
  45.         }
  46.         for(int i = 0; i < m; i++)
  47.             cs32 += buf[i];
  48.     }
  49.     close(fi);
  50.  
  51.     int fo = open("csum32.bin", O_CREAT | O_TRUNC | O_WRONLY | O_BINARY, S_IREAD | S_IWRITE);
  52.     if(write(fo, &cs32, 4) < 0)
  53.         puts("error writing output file");
  54.     close(fo);
  55.     return 0;
  56. }
  57.