verify_mode_1_encoder.c
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:1k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* test program for the sector formatting library */
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6. #include "ecc.h"
  7. int main(int argc, char *argv[])
  8. {
  9. int fin;
  10. unsigned int sector = 0;
  11. unsigned int verified = 0;
  12. int address;
  13. if (argc < 2) {
  14. fprintf(stderr, "Usage: %s 2352-byte-sector-filen", argv[0]);
  15. return 0;
  16. }
  17. if (argv[1][0] == '-') {
  18. fin = STDIN_FILENO;
  19. } else {
  20. fin = open(argv[1], O_RDONLY);
  21. }
  22. if (fin == -1) {
  23. perror("");
  24. fprintf(stderr, "could not open file %s for reading.n",argv[1]);
  25. exit(1);
  26. }
  27. address = 150;
  28. for (; 1; sector++) {
  29. unsigned char inbuf[2448];
  30. unsigned char inbuf_copy[2448];
  31. int have_read;
  32. /* get one original sector */
  33. have_read = 0;
  34. while (2352 != have_read) {
  35. int retval;
  36. retval = read(fin, inbuf+have_read, 2352-have_read);
  37. if (retval < 0) exit(0);
  38. if (retval == 0)
  39. exit(0);
  40. have_read += retval;
  41. }
  42.         /* make a copy to work on */
  43. memcpy(inbuf_copy, inbuf, 2352);
  44. /* clear fields,  which shall be built */
  45. memset(inbuf_copy, 0, 16);
  46. memset(inbuf_copy+16+2048, 0, 4 + 8 + 276);
  47. /* build fields */
  48. do_encode_L2(inbuf_copy, MODE_1, address++);
  49. /* check fields */
  50. if (memcmp(inbuf_copy, inbuf, 2352) != 0) {
  51. fprintf(stderr, "difference at sector %un", sector);
  52. } else verified++;
  53. printf("%dr", sector);
  54. fflush(stdout);
  55. }
  56. fprintf(stderr, "%u sectors, %u verified okn", sector, verified);
  57. close(fin);
  58. return 0;
  59. }