/* ----------------------------------------------------------------------- * * * Copyright 2010 Gene Cumm * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, Inc., 53 Temple Place Ste 330, * Boston MA 02111-1307, USA; either version 2 of the License, or * (at your option) any later version; incorporated herein by reference. * * ----------------------------------------------------------------------- */ /* * mk-lba-img.c * * Makes an image that contains the LBA in every *word of every sector */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #define NUM_SECT (256*63+1) #define BPS (512) #define SECT_INT (BPS / sizeof(unsigned int)) typedef unsigned char uint8_t; typedef unsigned int uint32_t; const char DEF_FN[] = "-"; int main(int argc, char *argv[]) { int i, rv = 0, one = 0; unsigned int lba, b[SECT_INT]; int len; FILE *f; uint8_t tt = 0; const char *fn; if (argc >= 2) { if (argc >= 3) { if (strcasecmp("-1", argv[1]) == 0) { fn = argv[2]; one = 1; } else { fn = argv[1]; } } else { fn = argv[1]; } } else { fn = DEF_FN; } if (!strcmp(fn, "-")) f = stdout; else f = fopen(fn, "w"); 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; } fwrite(b, 1, BPS, f); lba++; } if (f != stdout) fclose(f); return rv; }