Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37513012
en ru br
Репозитории ALT
S:10.2-alt6
5.1: 10.2-alt1
4.1: IIIa9.8-alt4
4.0: IIIa9.8-alt4
3.0: IIIa9.8-alt3
www.altlinux.org/Changes

Группа :: Звук
Пакет: cdparanoia

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: cdparanoia-III-alpha9.8.louder.patch
Скачать


--- cdparanoia-III-alpha9.8/interface/scsi_interface.c.louder	2004-04-23 12:18:20.561275440 -0400
+++ cdparanoia-III-alpha9.8/interface/scsi_interface.c	2004-04-23 12:24:37.853918240 -0400
@@ -197,16 +197,41 @@
   memset(hdr->dxferp, sgi->bytefill, sgi->dxferp_buffer_len);
   memcpy(hdr->cmdp, cmdp, cmd_len);
 
-  hdr->cmd_len = cmd_len;
+  sgi->cmd_len = hdr->cmd_len = cmd_len;
 
   sgi->in_size = in_size;
   sgi->out_size = out_size;
 }
 
+void print_cmd_error(cdrom_drive *d, char *direction, char *cmdp, int cmdlen) {
+  unsigned char ebuf[1024], tmp[2];
+  int x=0;
+
+  sprintf(ebuf, "\nError %s command: ", direction);
+  cdmessage(d, ebuf);
+  tmp[1] = 0;
+  while (x < cmdlen) {
+    if (x % 8 == 0)
+      cdmessage(d, " ");
+    if (x % 16 == 0) {
+      cdmessage(d, "\n");
+      if (x+1 < cmdlen)
+        cdmessage(d, "\t");
+    }	
+    tmp[0] = cmdp[x];
+    sprintf(ebuf, "%02x ", tmp[0]);
+    cdmessage(d, ebuf);
+    x++;
+  }
+  if (!(x % 16 == 0))
+    cdmessage(d, "\n");
+}
+
 static int sgio_handle_scsi_cmd(cdrom_drive *d) {
   int status = 0;
   struct sg_info *sgi = (struct sg_info *)d->sg;
   struct sg_io_hdr *hdr = sgi->hdr;
+  char ebuf[256];
 
   if (sgi->in_size) {
     hdr->dxfer_len = sgi->in_size;
@@ -217,8 +242,10 @@
     if (status >= 0)
       if (hdr->status)
         status = check_sbp_error(hdr->sbp);
-    if (status < 0) 
+    if (status < 0) {
+      print_cmd_error(d, "writing", sgi->cmdp, sgi->cmd_len);
       return TR_EWRITE;
+    }
   }
   if (!sgi->in_size | sgi->out_size) {
     hdr->dxfer_len = sgi->out_size;
@@ -226,14 +253,18 @@
 
     errno = 0;
     status = ioctl(d->cdda_fd, SG_IO, hdr);
-    if (status < 0)
+    if (status < 0) {
+      print_cmd_error(d, "reading", hdr->cmdp, hdr->cmd_len);
       return TR_EREAD;
+    }
     if (status >= 0)
       if (hdr->status)
         status = check_sbp_error(hdr->sbp);
   }
-  if (status)
+  if (status) {
+    print_cmd_error(d, "reading", hdr->cmdp, hdr->cmd_len);
     return status;
+  }
 
   errno = 0;
   return 0;
@@ -352,6 +383,7 @@
   struct sg_header *hdr = (struct sg_header *)sgi->hdr;
 
   sgi->cmdp = (char *)hdr + sizeof (struct sg_header);
+  sgi->cmd_len = cmd_len;
   memcpy(sgi->cmdp, cmdp, cmd_len);
 
   sgi->dxferp = sgi->cmdp + cmd_len;
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin