Magellan Linux

Contents of /trunk/cdparanoia/patches/cdparanoia-3.9.8-sgio-louder.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 144 - (show annotations) (download)
Tue May 8 20:06:05 2007 UTC (17 years ago) by niro
File size: 2281 byte(s)
-import

1 --- cdparanoia-III-alpha9.8/interface/scsi_interface.c.louder 2004-04-23 12:18:20.561275440 -0400
2 +++ cdparanoia-III-alpha9.8/interface/scsi_interface.c 2004-04-23 12:24:37.853918240 -0400
3 @@ -197,16 +197,41 @@
4 memset(hdr->dxferp, sgi->bytefill, sgi->dxferp_buffer_len);
5 memcpy(hdr->cmdp, cmdp, cmd_len);
6
7 - hdr->cmd_len = cmd_len;
8 + sgi->cmd_len = hdr->cmd_len = cmd_len;
9
10 sgi->in_size = in_size;
11 sgi->out_size = out_size;
12 }
13
14 +void print_cmd_error(cdrom_drive *d, char *direction, char *cmdp, int cmdlen) {
15 + unsigned char ebuf[1024], tmp[2];
16 + int x=0;
17 +
18 + sprintf(ebuf, "\nError %s command: ", direction);
19 + cdmessage(d, ebuf);
20 + tmp[1] = 0;
21 + while (x < cmdlen) {
22 + if (x % 8 == 0)
23 + cdmessage(d, " ");
24 + if (x % 16 == 0) {
25 + cdmessage(d, "\n");
26 + if (x+1 < cmdlen)
27 + cdmessage(d, "\t");
28 + }
29 + tmp[0] = cmdp[x];
30 + sprintf(ebuf, "%02x ", tmp[0]);
31 + cdmessage(d, ebuf);
32 + x++;
33 + }
34 + if (!(x % 16 == 0))
35 + cdmessage(d, "\n");
36 +}
37 +
38 static int sgio_handle_scsi_cmd(cdrom_drive *d) {
39 int status = 0;
40 struct sg_info *sgi = (struct sg_info *)d->sg;
41 struct sg_io_hdr *hdr = sgi->hdr;
42 + char ebuf[256];
43
44 if (sgi->in_size) {
45 hdr->dxfer_len = sgi->in_size;
46 @@ -217,8 +242,10 @@
47 if (status >= 0)
48 if (hdr->status)
49 status = check_sbp_error(hdr->sbp);
50 - if (status < 0)
51 + if (status < 0) {
52 + print_cmd_error(d, "writing", sgi->cmdp, sgi->cmd_len);
53 return TR_EWRITE;
54 + }
55 }
56 if (!sgi->in_size | sgi->out_size) {
57 hdr->dxfer_len = sgi->out_size;
58 @@ -226,14 +253,18 @@
59
60 errno = 0;
61 status = ioctl(d->cdda_fd, SG_IO, hdr);
62 - if (status < 0)
63 + if (status < 0) {
64 + print_cmd_error(d, "reading", hdr->cmdp, hdr->cmd_len);
65 return TR_EREAD;
66 + }
67 if (status >= 0)
68 if (hdr->status)
69 status = check_sbp_error(hdr->sbp);
70 }
71 - if (status)
72 + if (status) {
73 + print_cmd_error(d, "reading", hdr->cmdp, hdr->cmd_len);
74 return status;
75 + }
76
77 errno = 0;
78 return 0;
79 @@ -352,6 +383,7 @@
80 struct sg_header *hdr = (struct sg_header *)sgi->hdr;
81
82 sgi->cmdp = (char *)hdr + sizeof (struct sg_header);
83 + sgi->cmd_len = cmd_len;
84 memcpy(sgi->cmdp, cmdp, cmd_len);
85
86 sgi->dxferp = sgi->cmdp + cmd_len;