diff options
| author | Jörg Frings-Fürst <debian@jff.email> | 2023-02-16 10:20:08 +0100 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff.email> | 2023-02-16 10:20:08 +0100 | 
| commit | 778ebf8ee9cb22ea5727844333bcd5a6ee6bc0de (patch) | |
| tree | a754e785b286ed82b45fe4e50b980714ad80e0a7 /backend/mustek.c | |
| parent | 7d8aac1f3634dc58785bec7acf097dd6bac8c394 (diff) | |
| parent | 32cb765f681299af226ca0520993cbe47ba5ecd0 (diff) | |
Merge branch 'release/debian/1.2.1-1'debian/1.2.1-1
Diffstat (limited to 'backend/mustek.c')
| -rw-r--r-- | backend/mustek.c | 95 | 
1 files changed, 38 insertions, 57 deletions
| diff --git a/backend/mustek.c b/backend/mustek.c index 4d77fb5..bad118a 100644 --- a/backend/mustek.c +++ b/backend/mustek.c @@ -198,15 +198,6 @@ static const SANE_Byte scsi_inquiry[] = {  static const SANE_Byte scsi_test_unit_ready[] = {    MUSTEK_SCSI_TEST_UNIT_READY, 0x00, 0x00, 0x00, 0x00, 0x00  }; -/* Remove #ifdef and this comment when this SCSI command is used for -   something.  Keeping this definition around so we don't loose info -   about the protocol. - */ -#ifdef ENABLE_MUSTEK_SCSI_AREA_AND_WINDOWS -static const SANE_Byte scsi_area_and_windows[] = { -  MUSTEK_SCSI_AREA_AND_WINDOWS, 0x00, 0x00, 0x00, 0x09, 0x00 -}; -#endif  static const SANE_Byte scsi_request_sense[] = {    MUSTEK_SCSI_REQUEST_SENSE, 0x00, 0x00, 0x00, 0x04, 0x00  }; @@ -219,28 +210,16 @@ static const SANE_Byte scsi_ccd_distance[] = {  static const SANE_Byte scsi_get_image_status[] = {    MUSTEK_SCSI_GET_IMAGE_STATUS, 0x00, 0x00, 0x00, 0x06, 0x00  }; -static const SANE_Byte scsi_set_window[] = { -  MUSTEK_SCSI_SET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00 -};  static const SANE_Byte scsi_get_window[] = {    MUSTEK_SCSI_GET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00  }; -static const SANE_Byte scsi_read_data[] = { -  MUSTEK_SCSI_READ_DATA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; -static const SANE_Byte scsi_send_data[] = { -  MUSTEK_SCSI_SEND_DATA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; -/* Remove #ifdef and this comment when this SCSI command is used for -   something.  Keeping this definition around so we don't loose info -   about the protocol. - */ -#ifdef ENABLE_MUSTEK_SCSI_LOOKUP_TABLE -static const SANE_Byte scsi_lookup_table[] = { -  MUSTEK_SCSI_LOOKUP_TABLE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00 -}; -#endif + +/* Sizes for fixed-length, non-vendor-specific CDB formats (others are 0) */ +#define CDB_SIZE(opcode)	((opcode) < 0x20 ? 6 : \ +				 (opcode) < 0x60 ? 10 : \ +				 (opcode) < 0x80 ? 0 : \ +				 (opcode) < 0xa0 ? 16 : \ +				 (opcode) < 0xc0 ? 12 : 0)  /* prototypes */  static SANE_Status area_and_windows (Mustek_Scanner * s); @@ -1994,7 +1973,7 @@ set_window_se (Mustek_Scanner * s, SANE_Int lamp)    /* setup SCSI command (except length): */    memset (cmd, 0, sizeof (cmd));    cmd[0] = MUSTEK_SCSI_SET_WINDOW; -  cp = cmd + sizeof (scsi_set_window);	/* skip command block           */ +  cp = cmd + CDB_SIZE (MUSTEK_SCSI_SET_WINDOW);	/* skip command block   */    if (s->mode & MUSTEK_MODE_COLOR)      { @@ -2093,7 +2072,7 @@ set_window_se (Mustek_Scanner * s, SANE_Int lamp)      *cp++ = 0;    cp += 5;			/* skip reserved bytes          */ -  cmd[8] = cp - cmd - sizeof (scsi_set_window); +  cmd[8] = cp - cmd - CDB_SIZE (MUSTEK_SCSI_SET_WINDOW);    return dev_cmd (s, cmd, (cp - cmd), 0, 0);  } @@ -2111,7 +2090,7 @@ set_window_pro (Mustek_Scanner * s)    else      cmd[8] = 0x0a; -  cp = cmd + sizeof (scsi_set_window);	/* skip command block           */ +  cp = cmd + CDB_SIZE (MUSTEK_SCSI_SET_WINDOW);	/* skip command block   */    *cp++ = 0;			/* what's this? */    pixels_per_mm = SANE_UNFIX (s->hw->dpi_range.max) / MM_PER_INCH; @@ -2174,7 +2153,7 @@ get_calibration_lines_pro (Mustek_Scanner * s)    for (line = 0; line < s->hw->cal.lines; line++)      { -      status = dev_cmd (s, cmd, sizeof (scsi_read_data), +      status = dev_cmd (s, cmd, CDB_SIZE (MUSTEK_SCSI_READ_DATA),  			s->hw->cal.buffer + line * len, &len);        if ((status != SANE_STATUS_GOOD) @@ -2199,17 +2178,17 @@ send_calibration_lines_pro (Mustek_Scanner * s)    DBG (5, "send_calibration_lines_pro\n");    buf_size = s->hw->cal.bytes / 2; -  cmd1 = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data)); -  cmd2 = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data)); +  cmd1 = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); +  cmd2 = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));    if (!cmd1 || !cmd2)      { -      DBG (1, "send_calibration_lines_pro: failed to malloc %ld bytes for " +      DBG (1, "send_calibration_lines_pro: failed to malloc %zu bytes for "  	   "sending lines\n", -	   (long int) (buf_size + sizeof (scsi_send_data))); +	   buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));        return SANE_STATUS_NO_MEM;      } -  memset (cmd1, 0, sizeof (scsi_send_data)); -  memset (cmd2, 0, sizeof (scsi_send_data)); +  memset (cmd1, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); +  memset (cmd2, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA));    cmd1[0] = cmd2[0] = MUSTEK_SCSI_SEND_DATA;    cmd1[6] = cmd2[6] = (buf_size >> 16) & 0xff; @@ -2236,21 +2215,21 @@ send_calibration_lines_pro (Mustek_Scanner * s)  	  calibration_word = (1024 * 65536 / calibration_word) - 1024;  	  if (calibration_word > 1023)  	    calibration_word = 1023; -	  *(cmd1 + sizeof (scsi_send_data) + (buf_size / 3) * color + column) -	    = calibration_word & 0xff; -	  *(cmd2 + sizeof (scsi_send_data) + (buf_size / 3) * color + column) -	    = (calibration_word >> 8) & 0xff; +	  *(cmd1 + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + (buf_size / 3) * color +	    + column) = calibration_word & 0xff; +	  *(cmd2 + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + (buf_size / 3) * color +	    + column) = (calibration_word >> 8) & 0xff;  	}      } -  status = dev_cmd (s, cmd1, buf_size + sizeof (scsi_send_data), 0, 0); +  status = dev_cmd (s, cmd1, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0);    if (status != SANE_STATUS_GOOD)      {        DBG (1, "send_calibration_lines_pro: send failed\n");        return status;      } -  status = dev_cmd (s, cmd2, buf_size + sizeof (scsi_send_data), 0, 0); +  status = dev_cmd (s, cmd2, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0);    if (status != SANE_STATUS_GOOD)      {        DBG (1, "send_calibration_lines_pro: send failed\n"); @@ -2328,7 +2307,8 @@ get_calibration_lines_se (Mustek_Scanner * s)    cmd[7] = (lines >> 8) & 0xff;    cmd[8] = (lines >> 0) & 0xff;    len = lines * bytes_per_color; -  status = dev_cmd (s, cmd, sizeof (scsi_read_data), s->hw->cal.buffer, &len); +  status = dev_cmd (s, cmd, CDB_SIZE (MUSTEK_SCSI_READ_DATA), +		    s->hw->cal.buffer, &len);    if ((status != SANE_STATUS_GOOD)        || (len != (unsigned int) (lines * bytes_per_color)))      { @@ -2361,15 +2341,15 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color)    DBG (5, "send_calibration_lines_se: %d bytes, color: %d\n",         bytes_per_color, color + 1); -  cmd = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data)); +  cmd = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));    if (!cmd)      { -      DBG (1, "send_calibration_lines_se: failed to malloc %ld bytes for " +      DBG (1, "send_calibration_lines_se: failed to malloc %zu bytes for "  	   "sending lines\n", -	   (long int) (buf_size + sizeof (scsi_send_data))); +	   buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));        return SANE_STATUS_NO_MEM;      } -  memset (cmd, 0, sizeof (scsi_send_data)); +  memset (cmd, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA));    for (column = 0; column < bytes_per_color; column++)      { @@ -2386,7 +2366,7 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color)        cali_word = 256 * s->hw->cal.lines * 255 / cali_word - 256;        if (cali_word > 255)  	cali_word = 255; -      *(cmd + sizeof (scsi_send_data) + column) = cali_word; +      *(cmd + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + column) = cali_word;      }    cmd[0] = MUSTEK_SCSI_SEND_DATA; @@ -2395,7 +2375,7 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color)    cmd[7] = (buf_size >> 8) & 0xff;    cmd[8] = (buf_size >> 0) & 0xff; -  status = dev_cmd (s, cmd, buf_size + sizeof (scsi_send_data), 0, 0); +  status = dev_cmd (s, cmd, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0);    if (status != SANE_STATUS_GOOD)      {        DBG (1, "send_calibration_lines_se: send failed\n"); @@ -2457,14 +2437,15 @@ send_gamma_table_se (Mustek_Scanner * s)    SANE_Int i, j;  # define CLIP(x)	((x) < 0 ? 0 : ((x) > 255 ? 255 : (x))) -  memset (gamma, 0, sizeof (scsi_send_data)); +  memset (gamma, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA));    gamma[0] = MUSTEK_SCSI_SEND_DATA;    gamma[2] = 0x03;		/* indicates gamma table */    if ((s->mode & MUSTEK_MODE_GRAY) || (s->mode & MUSTEK_MODE_COLOR))      { -      if (s->hw->gamma_length + sizeof (scsi_send_data) > sizeof (gamma)) +      if ((size_t) s->hw->gamma_length + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) +	  > sizeof (gamma))  	return SANE_STATUS_NO_MEM;        gamma[7] = (s->hw->gamma_length >> 8) & 0xff;        gamma[8] = (s->hw->gamma_length >> 0) & 0xff; @@ -2491,7 +2472,7 @@ send_gamma_table_se (Mustek_Scanner * s)  	  val_a = MAX (2 * val_b - val_a, 0);  	  /* Interpolate first entries from 256 entry table  */ -	  cp = gamma + sizeof (scsi_send_data); +	  cp = gamma + CDB_SIZE (MUSTEK_SCSI_SEND_DATA);  	  for (j = 0; j < factor; j++)  	    *cp++ = CLIP (((factor - j) * val_a + j * val_b  			   + factor / 2) / factor); @@ -2518,7 +2499,7 @@ send_gamma_table_se (Mustek_Scanner * s)  	  DBG (5, "send_gamma_table_se: sending table for color %d\n",  	       gamma[6]); -	  status = dev_cmd (s, gamma, sizeof (scsi_send_data) +	  status = dev_cmd (s, gamma, CDB_SIZE (MUSTEK_SCSI_SEND_DATA)  			    + s->hw->gamma_length, 0, 0);  	  ++color;  	} @@ -2535,7 +2516,7 @@ send_gamma_table_se (Mustek_Scanner * s)        DBG (5, "send_gamma_table_se: sending lineart threshold %2X\n",  	   gamma[8]); -      return dev_cmd (s, gamma, sizeof (scsi_send_data), 0, 0); +      return dev_cmd (s, gamma, CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0);      }  } @@ -4656,7 +4637,7 @@ output_data (Mustek_Scanner * s, FILE * fp,    SANE_Int y, num_lines;    DBG (5, "output_data: data=%p, lpb=%d, bpl=%d, extra=%p\n", -       data, lines_per_buffer, bpl, extra); +       (void *) data, lines_per_buffer, bpl, (void *) extra);    /* convert to pixel-interleaved format: */    if ((s->mode & MUSTEK_MODE_COLOR) | 
