Aaron Durbin wrote:
> This one's for Ron.

En guard!

$ wc -c -l spd.*
  81 1462 spd.c
 100 1629 spd.go
$ 


//Peter
#include <stdio.h>
#include <string.h>
#include <errno.h>

static unsigned char spd[256];

int readhex(const char *filename) {
        int pos = 0, i, end;
        unsigned int n;
        char buf[128], *hex;
        FILE *f = fopen(filename, "r");

        if (!f) {
                fprintf(stderr, "%s: fopen(%s): %s\n", __func__, filename, 
strerror(errno));
                return 0;
        }

        memset(spd, 0, sizeof spd);

        while (pos < sizeof spd && fgets(buf, sizeof buf, f)) {
                hex = strtok(buf, ":");
                hex = strtok(NULL, ":");

                for (i = 0; i < 16; i++) {
                        if (sscanf(hex, " %02x%n", &n, &end) < 1)
                                goto done;

                        spd[pos++] = n;
                        hex += end;
                }
        }

done:
        fclose(f);
        return pos;
}

int writebin(const char *filename) {
        FILE *f = fopen(filename, "wb");
        size_t n;

        if (!f) {
                fprintf(stderr, "%s: fopen(%s): %s\n", __func__, filename, 
strerror(errno));
                return 0;
        }

        n = fwrite(spd, 1, sizeof spd, f);

        fclose(f);

        if (n != sizeof spd) {
                if (ferror(f))
                        fprintf(stderr, "%s: fwrite: %s\n", __func__, 
strerror(errno));
                else
                        fprintf(stderr, "%s: Short write! Got %zd, want 
%zd.\n", __func__, n, sizeof spd);

                return 0;
        }

        return 1;
}

int main(int argc, char *argv[]) {

        if (argc < 3) {
                fprintf(stderr, "syntax: %s input output\n", argv[0]);
                return 1;
        }

        if (!readhex(argv[1])) {
                fprintf(stderr, "Unable to read hex data from %s\n", argv[1]);
                return 1;
        }

        if (!writebin(argv[2])) {
                fprintf(stderr, "Unable to write binary data to %s\n", argv[2]);
                return 1;
        }

        return 0;
}
-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to