diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index d15829d..ca90edc 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2010.07.29.164100" +#define Cdrskin_timestamP "2010.08.02.100630" diff --git a/libburn/sg-freebsd.c b/libburn/sg-freebsd.c index f842cd9..b01f7b5 100644 --- a/libburn/sg-freebsd.c +++ b/libburn/sg-freebsd.c @@ -964,8 +964,9 @@ int sg_issue_command(struct burn_drive *d, struct command *c) if (burn_sg_log_scsi & 3) { /* >>> Need own duration time measurement. Then remove bit1 */ - scsi_log_err(c, fp, c->sense, 0, - (c->error != 0) | 2); + scsi_log_err(c, fp, c->sense, + sense_len > 0 ? sense_len : 18, + 0, (c->error != 0) | 2); scsi_log_cmd(c,fp,0); } break; @@ -985,7 +986,8 @@ ex:; if (burn_sg_log_scsi & 3) /* >>> Need own duration time measurement. Then remove bit1 */ - scsi_log_err(c, fp, c->sense, 0, (c->error != 0) | 2); + scsi_log_err(c, fp, c->sense, sense_len > 0 ? sense_len : 18, + 0, (c->error != 0) | 2); cam_freeccb(ccb); return ret; diff --git a/libburn/sg-libcdio.c b/libburn/sg-libcdio.c index 8f2ec63..9c73431 100644 --- a/libburn/sg-libcdio.c +++ b/libburn/sg-libcdio.c @@ -697,7 +697,7 @@ int sg_issue_command(struct burn_drive *d, struct command *c) if (burn_sg_log_scsi & 3) { /* >>> Need own duration time measurement. Then remove bit1 */ - scsi_log_err(c, fp, c->sense, 0, + scsi_log_err(c, fp, c->sense, 18, 0, (c->error != 0) | 2); scsi_log_cmd(c,fp,0); } @@ -727,7 +727,7 @@ ex:; if (burn_sg_log_scsi & 3) /* >>> Need own duration time measurement. Then remove bit1 */ - scsi_log_err(c, fp, c->sense, 0, (c->error != 0) | 2); + scsi_log_err(c, fp, c->sense, 18, 0, (c->error != 0) | 2); return 1; } diff --git a/libburn/sg-linux.c b/libburn/sg-linux.c index 5cf7eff..682943c 100644 --- a/libburn/sg-linux.c +++ b/libburn/sg-linux.c @@ -1773,36 +1773,6 @@ int sg_release(struct burn_drive *d) } -#ifdef NIX -/* <<< now in spc.c as scsi_log_err */ - -/** logs outcome of a sg command. flag&1 causes an error message */ -static int sg_log_err(struct command *c, FILE *fp, - sg_io_hdr_t *s, - int flag) -{ - if(fp != NULL && (fp == stderr || (burn_sg_log_scsi & 1))) { - if(flag & 1) { - fprintf(fp, - "+++ key=%X asc=%2.2Xh ascq=%2.2Xh (%6d ms)\n", - s->sbp[2], s->sbp[12], s->sbp[13],s->duration); - } else { - scsi_show_cmd_reply(c, fp, 0); - fprintf(fp,"%6d ms\n", s->duration); - } - if (burn_sg_log_scsi & 4) - fflush(fp); - } - if (fp == stderr || !(burn_sg_log_scsi & 2)) - return 1; - - sg_log_err(c, stderr, s, flag); - return 1; -} - -#endif /* NIX */ - - /** Sends a SCSI command to the drive, receives reply and evaluates wether the command succeeded or shall be retried or finally failed. Returned SCSI errors shall not lead to a return value indicating failure. @@ -1933,8 +1903,8 @@ int sg_issue_command(struct burn_drive *d, struct command *c) case RETRY: done = 0; if (burn_sg_log_scsi & 3) { - scsi_log_err(c, fp, s.sbp, s.duration, - c->error != 0); + scsi_log_err(c, fp, s.sbp, s.sb_len_wr, + s.duration, c->error != 0); scsi_log_cmd(c,fp,0); } break; @@ -1981,8 +1951,8 @@ ex:; msg, 0, 0); } if (burn_sg_log_scsi & 3) - /* <<< sg_log_err(c, fp, &s, c->error != 0); */ - scsi_log_err(c, fp, s.sbp, s.duration, c->error != 0); + scsi_log_err(c, fp, s.sbp, s.sb_len_wr, + s.duration, c->error != 0); return 1; } diff --git a/libburn/spc.c b/libburn/spc.c index f3322b4..92f8cae 100644 --- a/libburn/spc.c +++ b/libburn/spc.c @@ -1520,19 +1520,31 @@ int scsi_log_cmd(struct command *c, void *fp_in, int flag) bit1 do not print duration */ int scsi_log_err(struct command *c, void *fp_in, unsigned char sense[18], - int duration, int flag) + int sense_len, int duration, int flag) { char durtxt[20]; FILE *fp = fp_in; + int key, asc, ascq, i, l; - if(fp != NULL && (fp == stderr || (burn_sg_log_scsi & 1))) { - if(flag & 1) { + if (fp != NULL && (fp == stderr || (burn_sg_log_scsi & 1))) { + if (flag & 1) { durtxt[0] = 0; if (!(flag & 2)) - sprintf(durtxt, " (%6d ms)\n",duration); + sprintf(durtxt, " (%6d ms)", duration); + spc_decode_sense(sense, 0, &key, &asc, &ascq); fprintf(fp, "+++ key=%X asc=%2.2Xh ascq=%2.2Xh%s\n", - sense[2], sense[12], sense[13], durtxt); - + (unsigned int) key, (unsigned int) asc, + (unsigned int) ascq, durtxt); + l = 18; + if ((sense[0] & 0x7f) == 0x72 || + (sense[0] & 0x7f) == 0x73) + l = sense[7] + 7 + 1; /* SPC-5 4.5.2. */ + if (l > sense_len) + l = sense_len; + fprintf(fp, "+++ sense data ="); + for (i = 0 ; i < l; i++) + fprintf(fp, " %2.2X", sense[i]); + fprintf(fp, "\n"); } else { scsi_show_cmd_reply(c, fp, 0); if (!(flag & 2)) @@ -1543,7 +1555,7 @@ int scsi_log_err(struct command *c, void *fp_in, unsigned char sense[18], } if (fp == stderr || !(burn_sg_log_scsi & 2)) return 1; - scsi_log_err(c, stderr, sense, duration, flag); + scsi_log_err(c, stderr, sense, sense_len, duration, flag); return 1; } diff --git a/libburn/spc.h b/libburn/spc.h index 8db36f4..c3f8b22 100644 --- a/libburn/spc.h +++ b/libburn/spc.h @@ -78,7 +78,7 @@ int scsi_log_cmd(struct command *c, void *fp, int flag); /* ts A91221 (former sg_log_err ts A91108) */ /** Logs outcome of a sg command. */ int scsi_log_err(struct command *c, void *fp, unsigned char sense[18], - int duration, int flag); + int sense_len, int duration, int flag); /* ts B00728 */ int spc_decode_sense(unsigned char *sense, int senselen,