]> git.sur5r.net Git - cc65/commitdiff
dont use that silly buffer
authormrdudz <mrdudz@users.noreply.github.com>
Sun, 29 Nov 2015 20:15:10 +0000 (21:15 +0100)
committermrdudz <mrdudz@users.noreply.github.com>
Sun, 29 Nov 2015 20:15:10 +0000 (21:15 +0100)
util/gamate/gamate-fixcart.c

index e3883246136d1e97f6e0ac0a0ccec544531f89fb..ba09ac083afe7b005aabca18561c019aaff830dc 100644 (file)
@@ -2,28 +2,36 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-unsigned char buffer[512 * 1024];
-unsigned len;
-FILE *in, *out;
-int n, i;
+FILE *in;
+unsigned int n, i, c;
+
+void usage(char *arg)
+{
+    printf("usage: %s [file]\n", arg);
+    exit(-1);
+}
 
 int main(int argc, char *argv[]) {
-    if (argc < 3) {
+    if (argc < 2) {
+        usage(argv[0]);
         exit(-1);
     }
-    in = fopen(argv[1], "rb");
-    out = fopen(argv[2], "wb");
-    if (!in || !out) {
+
+    if (!(in = fopen(argv[1], "r+b"))) {
+        fprintf(stderr, "couldnt open: '%s'\n", argv[1]);
         exit(-1);
     }
-    len = fread(buffer, 1, 512 * 1024, in);
-    n = 0; for (i = 0x1000; i < 0x2000; i++) {
-        n += buffer[i];
+    /* read 0x1000 bytes from 0x7000-0x7fff (offset 0x1000) */
+    fseek(in, 0x1000, SEEK_SET);
+    n = 0; for (i = 0; i < 0x1000; i++) {
+        c =  fgetc(in);
+        n += c;
     }
-    buffer[0] = n & 0xff;
-    buffer[1] = (n >> 8) & 0xff;
-    fwrite(buffer, 1, len, out);
+    /* write checksum to header */
+    fseek(in, 0, SEEK_SET);
+    fputc(n & 0xff, in);
+    fputc((n >> 8) & 0xff, in);
+
     fclose(in);
-    fclose(out);
     return (0);
 }