[haiku-commits] r33534 - in haiku/trunk/src/tools: . fixup_amiga_boot_checksum

  • From: revol@xxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 11 Oct 2009 22:26:39 +0200 (CEST)

Author: mmu_man
Date: 2009-10-11 22:26:39 +0200 (Sun, 11 Oct 2009)
New Revision: 33534
Changeset: http://dev.haiku-os.org/changeset/33534/haiku

Added:
   haiku/trunk/src/tools/fixup_amiga_boot_checksum/
   haiku/trunk/src/tools/fixup_amiga_boot_checksum/Jamfile
   haiku/trunk/src/tools/fixup_amiga_boot_checksum/fixup_amiga_boot_checksum.c
Modified:
   haiku/trunk/src/tools/Jamfile
Log:
A tool to calculate Amiga bootsector checksums.


Modified: haiku/trunk/src/tools/Jamfile
===================================================================
--- haiku/trunk/src/tools/Jamfile       2009-10-11 20:25:45 UTC (rev 33533)
+++ haiku/trunk/src/tools/Jamfile       2009-10-11 20:26:39 UTC (rev 33534)
@@ -107,6 +107,7 @@
 SubInclude HAIKU_TOP src tools cppunit ;
 SubInclude HAIKU_TOP src tools docbook ;
 SubInclude HAIKU_TOP src tools elfsymbolpatcher ;
+SubInclude HAIKU_TOP src tools fixup_amiga_boot_checksum ;
 SubInclude HAIKU_TOP src tools fixup_tos_boot_checksum ;
 SubInclude HAIKU_TOP src tools fs_shell ;
 SubInclude HAIKU_TOP src tools gensyscalls ;

Added: haiku/trunk/src/tools/fixup_amiga_boot_checksum/Jamfile
===================================================================
--- haiku/trunk/src/tools/fixup_amiga_boot_checksum/Jamfile                     
        (rev 0)
+++ haiku/trunk/src/tools/fixup_amiga_boot_checksum/Jamfile     2009-10-11 
20:26:39 UTC (rev 33534)
@@ -0,0 +1,6 @@
+SubDir HAIKU_TOP src tools fixup_amiga_boot_checksum ;
+
+BuildPlatformMain <build>fixup_amiga_boot_checksum
+       : fixup_amiga_boot_checksum.c
+       :
+;

Added: 
haiku/trunk/src/tools/fixup_amiga_boot_checksum/fixup_amiga_boot_checksum.c
===================================================================
--- haiku/trunk/src/tools/fixup_amiga_boot_checksum/fixup_amiga_boot_checksum.c 
                        (rev 0)
+++ haiku/trunk/src/tools/fixup_amiga_boot_checksum/fixup_amiga_boot_checksum.c 
2009-10-11 20:26:39 UTC (rev 33534)
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <netinet/in.h>
+
+#define BB_SIZE (2*512)
+
+int main(int argc, char **argv)
+{
+       int fd, i;
+       uint32_t sum;
+       uint8_t bootblock[BB_SIZE];
+       uint32_t *p = (uint32_t *)bootblock;
+       fd = open(argv[1], O_RDWR);
+       if (fd < 0) {
+               return 1;
+       }
+       if (read(fd, bootblock, BB_SIZE) < BB_SIZE) {
+               perror("read");
+               return 1;
+       }
+       if (ntohl(p[0]) != 'DOS\0') {
+               fprintf(stderr, "bad bootblock signature!\n");
+               return 1;
+       }
+       p[1] = 0;
+       for (sum = 0, i = 0; i < (BB_SIZE)/sizeof(uint32_t); i++) {
+               uint32_t old = sum;
+               // big endian
+               sum += ntohl(*p++);
+               // overflow
+               if (sum < old)
+                       sum++;
+       }
+       fprintf(stderr, "checksum: %lu\n", sum);
+       // big endian
+       ((uint32_t *)bootblock)[1] = htonl(sum);
+       lseek(fd, 0LL, SEEK_SET);
+       write(fd, bootblock, BB_SIZE);
+       return 0;
+}


Other related posts:

  • » [haiku-commits] r33534 - in haiku/trunk/src/tools: . fixup_amiga_boot_checksum - revol