diff options
Diffstat (limited to 'diag/geodsp/mk-lba-img.c')
-rw-r--r-- | diag/geodsp/mk-lba-img.c | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/diag/geodsp/mk-lba-img.c b/diag/geodsp/mk-lba-img.c index 795de1a7..eb1c3393 100644 --- a/diag/geodsp/mk-lba-img.c +++ b/diag/geodsp/mk-lba-img.c @@ -24,16 +24,18 @@ #define NUM_SECT (256*63+1) #define BPS (512) -#define SECT_INT (512 / sizeof(int)) +#define SECT_INT (BPS / sizeof(unsigned int)) typedef unsigned char uint8_t; typedef unsigned int uint32_t; -const char DEF_FN[] = "lba.img"; +const char DEF_FN[] = "-"; int main(int argc, char *argv[]) { - int i, j, b[SECT_INT], rv = 0, one = 0; + int i, rv = 0, one = 0; + unsigned int lba, b[SECT_INT]; + int len; FILE *f; uint8_t tt = 0; const char *fn; @@ -53,23 +55,40 @@ int main(int argc, char *argv[]) fn = DEF_FN; } - f = fopen(fn, "w"); + if (!strcmp(fn, "-")) + f = stdout; + else + f = fopen(fn, "w"); - if (f) { - for (i = 0; i < NUM_SECT; i++) { - if (one) { - b[0] = i; - } else { - for (j = 0; j < (512 / sizeof(int)); j++) { - b[j] = i; - } - } - fwrite(b, 512, 1, f); + if (!f) { + fprintf(stderr, "%s: %s: unable to open for writing: %s\n", + argv[0], fn, strerror(errno)); + return 1; + } + + lba = 0; + while ((len = fread(b, 1, BPS, stdin))) { + if (len < BPS) + memset((char *)b + len, 0, BPS - len); + fwrite(b, 1, BPS, f); + lba++; + } + + memset(b, 0, sizeof b); + + while (lba < NUM_SECT) { + if (one) { + b[0] = lba; + } else { + for (i = 0; i < SECT_INT; i++) + b[i] = lba; } - fclose(f); - } else { - puts("Unable to open for writing"); - rv = 1; + fwrite(b, 1, BPS, f); + lba++; } + + if (f != stdout) + fclose(f); + return rv; } |