diff options
Diffstat (limited to 'backend/test.c')
| -rw-r--r-- | backend/test.c | 172 | 
1 files changed, 103 insertions, 69 deletions
| diff --git a/backend/test.c b/backend/test.c index 3c7a949..ea73290 100644 --- a/backend/test.c +++ b/backend/test.c @@ -391,11 +391,11 @@ init_options (Test_Device * test_device)    od->desc = SANE_DESC_SCAN_MODE;    od->type = SANE_TYPE_STRING;    od->unit = SANE_UNIT_NONE; -  od->size = max_string_size (mode_list); +  od->size = (SANE_Int) max_string_size (mode_list);    od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;    od->constraint_type = SANE_CONSTRAINT_STRING_LIST;    od->constraint.string_list = mode_list; -  test_device->val[opt_mode].s = malloc (od->size); +  test_device->val[opt_mode].s = malloc ((size_t) od->size);    if (!test_device->val[opt_mode].s)      goto fail;    strcpy (test_device->val[opt_mode].s, init_mode); @@ -454,7 +454,7 @@ init_options (Test_Device * test_device)    od->desc = SANE_I18N ("Set the order of frames in three-pass color mode.");    od->type = SANE_TYPE_STRING;    od->unit = SANE_UNIT_NONE; -  od->size = max_string_size (order_list); +  od->size = (SANE_Int) max_string_size (order_list);    od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;    if (strcmp (init_mode, SANE_VALUE_SCAN_MODE_COLOR) != 0)      od->cap |= SANE_CAP_INACTIVE; @@ -462,7 +462,7 @@ init_options (Test_Device * test_device)      od->cap |= SANE_CAP_INACTIVE;    od->constraint_type = SANE_CONSTRAINT_STRING_LIST;    od->constraint.string_list = order_list; -  test_device->val[opt_three_pass_order].s = malloc (od->size); +  test_device->val[opt_three_pass_order].s = malloc ((size_t) od->size);    if (!test_device->val[opt_three_pass_order].s)      goto fail;    strcpy (test_device->val[opt_three_pass_order].s, init_three_pass_order); @@ -487,11 +487,11 @@ init_options (Test_Device * test_device)    od->desc = SANE_I18N("If Automatic Document Feeder is selected, the feeder will be 'empty' after 10 scans.");    od->type = SANE_TYPE_STRING;    od->unit = SANE_UNIT_NONE; -  od->size = max_string_size (source_list); +  od->size = (SANE_Int) max_string_size (source_list);    od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;    od->constraint_type = SANE_CONSTRAINT_STRING_LIST;    od->constraint.string_list = source_list; -  test_device->val[opt_scan_source].s = malloc (od->size); +  test_device->val[opt_scan_source].s = malloc ((size_t) od->size);    if (!test_device->val[opt_scan_source].s)      goto fail;    strcpy (test_device->val[opt_scan_source].s, init_scan_source); @@ -523,11 +523,11 @@ init_options (Test_Device * test_device)  	       "height of 10 mm per square.");    od->type = SANE_TYPE_STRING;    od->unit = SANE_UNIT_NONE; -  od->size = max_string_size (test_picture_list); +  od->size = (SANE_Int) max_string_size (test_picture_list);    od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;    od->constraint_type = SANE_CONSTRAINT_STRING_LIST;    od->constraint.string_list = test_picture_list; -  test_device->val[opt_test_picture].s = malloc (od->size); +  test_device->val[opt_test_picture].s = malloc ((size_t) od->size);    if (!test_device->val[opt_test_picture].s)      goto fail;    strcpy (test_device->val[opt_test_picture].s, init_test_picture); @@ -618,11 +618,11 @@ init_options (Test_Device * test_device)  	       "codes are for testing how the frontend handles them.");    od->type = SANE_TYPE_STRING;    od->unit = SANE_UNIT_NONE; -  od->size = max_string_size (read_status_code_list); +  od->size = (SANE_Int) max_string_size (read_status_code_list);    od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;    od->constraint_type = SANE_CONSTRAINT_STRING_LIST;    od->constraint.string_list = read_status_code_list; -  test_device->val[opt_read_status_code].s = malloc (od->size); +  test_device->val[opt_read_status_code].s = malloc ((size_t) od->size);    if (!test_device->val[opt_read_status_code].s)      goto fail;    strcpy (test_device->val[opt_read_status_code].s, init_read_status_code); @@ -914,8 +914,8 @@ init_options (Test_Device * test_device)    /* opt_int */    od = &test_device->opt[opt_int];    od->name = "int"; -  od->title = SANE_I18N ("(1/6) Int"); -  od->desc = SANE_I18N ("(1/6) Int test option with no unit and no " +  od->title = SANE_I18N ("(1/7) Int"); +  od->desc = SANE_I18N ("(1/7) Int test option with no unit and no "  			"constraint set.");    od->type = SANE_TYPE_INT;    od->unit = SANE_UNIT_NONE; @@ -930,8 +930,8 @@ init_options (Test_Device * test_device)    /* opt_int_constraint_range */    od = &test_device->opt[opt_int_constraint_range];    od->name = "int-constraint-range"; -  od->title = SANE_I18N ("(2/6) Int constraint range"); -  od->desc = SANE_I18N ("(2/6) Int test option with unit pixel and " +  od->title = SANE_I18N ("(2/7) Int constraint range"); +  od->desc = SANE_I18N ("(2/7) Int test option with unit pixel and "  			"constraint range set. Minimum is 4, maximum 192, and "  			"quant is 2.");    od->type = SANE_TYPE_INT; @@ -947,8 +947,8 @@ init_options (Test_Device * test_device)    /* opt_int_constraint_word_list */    od = &test_device->opt[opt_int_constraint_word_list];    od->name = "int-constraint-word-list"; -  od->title = SANE_I18N ("(3/6) Int constraint word list"); -  od->desc = SANE_I18N ("(3/6) Int test option with unit bits and " +  od->title = SANE_I18N ("(3/7) Int constraint word list"); +  od->desc = SANE_I18N ("(3/7) Int test option with unit bits and "  			"constraint word list set.");    od->type = SANE_TYPE_INT;    od->unit = SANE_UNIT_BIT; @@ -963,8 +963,8 @@ init_options (Test_Device * test_device)    /* opt_int_array */    od = &test_device->opt[opt_int_array];    od->name = "int-constraint-array"; -  od->title = SANE_I18N ("(4/6) Int array"); -  od->desc = SANE_I18N ("(4/6) Int test option with unit mm and using " +  od->title = SANE_I18N ("(4/7) Int array"); +  od->desc = SANE_I18N ("(4/7) Int test option with unit mm and using "  			"an array without constraints.");    od->type = SANE_TYPE_INT;    od->unit = SANE_UNIT_MM; @@ -979,8 +979,8 @@ init_options (Test_Device * test_device)    /* opt_int_array_constraint_range */    od = &test_device->opt[opt_int_array_constraint_range];    od->name = "int-constraint-array-constraint-range"; -  od->title = SANE_I18N ("(5/6) Int array constraint range"); -  od->desc = SANE_I18N ("(5/6) Int test option with unit dpi and using " +  od->title = SANE_I18N ("(5/7) Int array constraint range"); +  od->desc = SANE_I18N ("(5/7) Int test option with unit dpi and using "  			"an array with a range constraint. Minimum is 4, "  			"maximum 192, and quant is 2.");    od->type = SANE_TYPE_INT; @@ -994,6 +994,40 @@ init_options (Test_Device * test_device)    test_device->val[opt_int_array_constraint_range].wa =      &int_array_constraint_range[0]; + /* opt_int_array_constraint_word_list */ +  od = &test_device->opt[opt_int_array_constraint_word_list]; +  od->name = "int-constraint-array-constraint-word-list"; +  od->title = SANE_I18N ("(6/7) Int array constraint word list"); +  od->desc = SANE_I18N ("(6/7) Int test option with unit percent and using " +			"an array with a word list constraint."); +  od->type = SANE_TYPE_INT; +  od->unit = SANE_UNIT_PERCENT; +  od->size = 6 * sizeof (SANE_Word); +  od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED; +  if (init_enable_test_options == SANE_FALSE) +    od->cap |= SANE_CAP_INACTIVE; +  od->constraint_type = SANE_CONSTRAINT_WORD_LIST; +  od->constraint.word_list = int_constraint_word_list; +  test_device->val[opt_int_array_constraint_word_list].wa = +    &int_array_constraint_word_list[0]; + +  /* opt_int_inexact */ +  od = &test_device->opt[opt_int_inexact]; +  od->name = "int-inexact"; +  od->title = SANE_I18N ("(7/7) Int inexact"); +  od->desc = SANE_I18N ("(7/7) Int test option that modifies the value " +			"and returns SANE_INFO_INEXACT."); +  od->type = SANE_TYPE_INT; +  od->unit = SANE_UNIT_NONE; +  od->size = sizeof (SANE_Word); +  od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED; +  if (init_enable_test_options == SANE_FALSE) +    od->cap |= SANE_CAP_INACTIVE; +  od->constraint_type = SANE_CONSTRAINT_NONE; +  od->constraint.range = 0; +  test_device->val[opt_int_inexact].w = 67; + +    /* opt_gamma_red */    init_gamma_table(gamma_red, GAMMA_RED_SIZE, gamma_range.max);    od = &test_device->opt[opt_gamma_red]; @@ -1051,23 +1085,6 @@ init_options (Test_Device * test_device)    od->constraint.range = &gamma_range;    test_device->val[opt_gamma_all].wa = &gamma_all[0]; -  /* opt_int_array_constraint_word_list */ -  od = &test_device->opt[opt_int_array_constraint_word_list]; -  od->name = "int-constraint-array-constraint-word-list"; -  od->title = SANE_I18N ("(6/6) Int array constraint word list"); -  od->desc = SANE_I18N ("(6/6) Int test option with unit percent and using " -			"an array with a word list constraint."); -  od->type = SANE_TYPE_INT; -  od->unit = SANE_UNIT_PERCENT; -  od->size = 6 * sizeof (SANE_Word); -  od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED; -  if (init_enable_test_options == SANE_FALSE) -    od->cap |= SANE_CAP_INACTIVE; -  od->constraint_type = SANE_CONSTRAINT_WORD_LIST; -  od->constraint.word_list = int_constraint_word_list; -  test_device->val[opt_int_array_constraint_word_list].wa = -    &int_array_constraint_word_list[0]; -    /* opt_fixed_group */    od = &test_device->opt[opt_fixed_group];    od->name = ""; @@ -1150,13 +1167,13 @@ init_options (Test_Device * test_device)    od->desc = SANE_I18N ("(1/3) String test option without constraint.");    od->type = SANE_TYPE_STRING;    od->unit = SANE_UNIT_NONE; -  od->size = strlen (init_string) + 1; +  od->size = (SANE_Int) strlen (init_string) + 1;    od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;    if (init_enable_test_options == SANE_FALSE)      od->cap |= SANE_CAP_INACTIVE;    od->constraint_type = SANE_CONSTRAINT_NONE;    od->constraint.string_list = 0; -  test_device->val[opt_string].s = malloc (od->size); +  test_device->val[opt_string].s = malloc ((size_t) od->size);    if (!test_device->val[opt_string].s)      goto fail;    strcpy (test_device->val[opt_string].s, init_string); @@ -1169,13 +1186,13 @@ init_options (Test_Device * test_device)  			"constraint.");    od->type = SANE_TYPE_STRING;    od->unit = SANE_UNIT_NONE; -  od->size = max_string_size (string_constraint_string_list); +  od->size = (SANE_Int) max_string_size (string_constraint_string_list);    od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;    if (init_enable_test_options == SANE_FALSE)      od->cap |= SANE_CAP_INACTIVE;    od->constraint_type = SANE_CONSTRAINT_STRING_LIST;    od->constraint.string_list = string_constraint_string_list; -  test_device->val[opt_string_constraint_string_list].s = malloc (od->size); +  test_device->val[opt_string_constraint_string_list].s = malloc ((size_t) od->size);    if (!test_device->val[opt_string_constraint_string_list].s)      goto fail;    strcpy (test_device->val[opt_string_constraint_string_list].s, @@ -1189,14 +1206,14 @@ init_options (Test_Device * test_device)  			"constraint. Contains some more entries...");    od->type = SANE_TYPE_STRING;    od->unit = SANE_UNIT_NONE; -  od->size = max_string_size (string_constraint_long_string_list); +  od->size = (SANE_Int) max_string_size (string_constraint_long_string_list);    od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;    if (init_enable_test_options == SANE_FALSE)      od->cap |= SANE_CAP_INACTIVE;    od->constraint_type = SANE_CONSTRAINT_STRING_LIST;    od->constraint.string_list = string_constraint_long_string_list;    test_device->val[opt_string_constraint_long_string_list].s = -    malloc (od->size); +    malloc ((size_t) od->size);    if (!test_device->val[opt_string_constraint_long_string_list].s)      goto fail;    strcpy (test_device->val[opt_string_constraint_long_string_list].s, @@ -1419,7 +1436,8 @@ static SANE_Status  reader_process (Test_Device * test_device, SANE_Int fd)  {    SANE_Status status; -  SANE_Word byte_count = 0, bytes_total; +  size_t byte_count = 0; +  size_t bytes_total;    SANE_Byte *buffer = 0;    ssize_t bytes_written = 0;    size_t buffer_size = 0, write_count = 0; @@ -1427,24 +1445,24 @@ reader_process (Test_Device * test_device, SANE_Int fd)    DBG (2, "(child) reader_process: test_device=%p, fd=%d\n",         (void *) test_device, fd); -  bytes_total = test_device->lines * test_device->bytes_per_line; +  bytes_total = (size_t) test_device->lines * (size_t) test_device->bytes_per_line;    status = init_picture_buffer (test_device, &buffer, &buffer_size);    if (status != SANE_STATUS_GOOD)      return status;    DBG (2, "(child) reader_process: buffer=%p, buffersize=%lu\n", -       buffer, (u_long) buffer_size); +       (void *) buffer, (u_long) buffer_size);    while (byte_count < bytes_total)      {        if (write_count == 0)  	{  	  write_count = buffer_size; -	  if (byte_count + (SANE_Word) write_count > bytes_total) -	    write_count = bytes_total - byte_count; +	  if (byte_count + (size_t) write_count > bytes_total) +	    write_count = (size_t) bytes_total - (size_t) byte_count;  	  if (test_device->val[opt_read_delay].w == SANE_TRUE) -	    usleep (test_device->val[opt_read_delay_duration].w); +	    usleep ((useconds_t) test_device->val[opt_read_delay_duration].w);  	}        bytes_written = write (fd, buffer, write_count);        if (bytes_written < 0) @@ -1453,17 +1471,17 @@ reader_process (Test_Device * test_device, SANE_Int fd)  	       strerror (errno));  	  return SANE_STATUS_IO_ERROR;  	} -      byte_count += bytes_written; -      DBG (4, "(child) reader_process: wrote %ld bytes of %lu (%d total)\n", -	   (long) bytes_written, (u_long) write_count, byte_count); -      write_count -= bytes_written; +      byte_count += (size_t) bytes_written; +      DBG (4, "(child) reader_process: wrote %ld bytes of %lu (%zu total)\n", +	   bytes_written, write_count, byte_count); +      write_count -= (size_t) bytes_written;      }    free (buffer);    if (sanei_thread_is_forked ())      { -	  DBG (4, "(child) reader_process: finished,  wrote %d bytes, expected %d " +	  DBG (4, "(child) reader_process: finished,  wrote %zu bytes, expected %zu "         "bytes, now waiting\n", byte_count, bytes_total);  	  while (SANE_TRUE)  	    sleep (10); @@ -1472,7 +1490,7 @@ reader_process (Test_Device * test_device, SANE_Int fd)      }    else      { -	  DBG (4, "(child) reader_process: finished,  wrote %d bytes, expected %d " +	  DBG (4, "(child) reader_process: finished,  wrote %zu bytes, expected %zu "         "bytes\n", byte_count, bytes_total);      }    return SANE_STATUS_GOOD; @@ -1824,7 +1842,7 @@ sane_init (SANE_Int * __sane_unused__ version_code, SANE_Auth_Callback __sane_un    /* create devices */    sane_device_list = -    malloc ((init_number_of_devices + 1) * sizeof (sane_device)); +    malloc ((size_t) (init_number_of_devices + 1) * sizeof (sane_device));    if (!sane_device_list)      goto fail;    for (num = 0; num < init_number_of_devices; num++) @@ -1862,7 +1880,7 @@ sane_init (SANE_Int * __sane_unused__ version_code, SANE_Auth_Callback __sane_un      }    test_device->next = 0;    sane_device_list[num] = 0; -  srand (time (NULL)); +  srand ((unsigned int) time (NULL));    random_factor = ((double) rand ()) / RAND_MAX + 0.5;    inited = SANE_TRUE;    return SANE_STATUS_GOOD; @@ -2216,6 +2234,19 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action,  	  DBG (4, "sane_control_option: set option %d (%s) to %d\n",  	       option, test_device->opt[option].name, *(SANE_Int *) value);  	  break; +	case opt_int_inexact: +	  if (test_device->val[option].w == *(SANE_Int *) value) +	    { +	      DBG (4, "sane_control_option: option %d (%s) not changed\n", +		   option, test_device->opt[option].name); +	      break; +	    } +          *(SANE_Int *) value += 1; +	  test_device->val[option].w = *(SANE_Int *) value; +          myinfo |= SANE_INFO_INEXACT; +	  DBG (4, "sane_control_option: set option %d (%s) to %d\n", +	       option, test_device->opt[option].name, *(SANE_Int *) value); +	  break;  	case opt_fuzzy_parameters:	/* Bool with parameter reloading */  	  if (test_device->val[option].w == *(SANE_Bool *) value)  	    { @@ -2312,7 +2343,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action,  	case opt_gamma_all:  	case opt_int_array_constraint_word_list:  	  memcpy (test_device->val[option].wa, value, -		  test_device->opt[option].size); +		  (size_t) test_device->opt[option].size);  	  DBG (4, "sane_control_option: set option %d (%s) to %p\n",  	       option, test_device->opt[option].name, (void *) value);  	  if (option == opt_gamma_all) { @@ -2535,6 +2566,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action,  	case opt_ppl_loss:  	case opt_read_delay_duration:  	case opt_int: +        case opt_int_inexact:  	case opt_int_constraint_range:  	case opt_int_constraint_word_list:  	  *(SANE_Int *) value = test_device->val[option].w; @@ -2549,7 +2581,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action,  	case opt_gamma_all:  	case opt_int_array_constraint_word_list:  	  memcpy (value, test_device->val[option].wa, -		  test_device->opt[option].size); +		  (size_t) test_device->opt[option].size);  	  DBG (4, "sane_control_option: get option %d (%s), value=%p\n",  	       option, test_device->opt[option].name, (void *) value);  	  break; @@ -2639,7 +2671,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)        p->lines = test_device->lines;        if (test_device->val[opt_fuzzy_parameters].w == SANE_TRUE  	  && test_device->scanning == SANE_FALSE) -	p->lines *= random_factor; +	p->lines *= (SANE_Int) random_factor;      }    if (strcmp (mode, SANE_VALUE_SCAN_MODE_GRAY) == 0) @@ -2674,7 +2706,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)    p->pixels_per_line = (SANE_Int) (res * (br_x - tl_x) / MM_PER_INCH);    if (test_device->val[opt_fuzzy_parameters].w == SANE_TRUE        && test_device->scanning == SANE_FALSE) -    p->pixels_per_line *= random_factor; +    p->pixels_per_line *= (SANE_Int) random_factor;    if (p->pixels_per_line < 1)      p->pixels_per_line = 1; @@ -2842,11 +2874,11 @@ sane_read (SANE_Handle handle, SANE_Byte * data,    SANE_Int max_scan_length;    ssize_t bytes_read;    size_t read_count; -  SANE_Int bytes_total = test_device->lines * test_device->bytes_per_line; +  size_t bytes_total = (size_t) test_device->lines * (size_t) test_device->bytes_per_line;    DBG (4, "sane_read: handle=%p, data=%p, max_length = %d, length=%p\n", -       handle, data, max_length, (void *) length); +       handle, (void *) data, max_length, (void *) length);    if (!inited)      {        DBG (1, "sane_read: not inited, call sane_init() first\n"); @@ -2927,11 +2959,11 @@ sane_read (SANE_Handle handle, SANE_Byte * data,        DBG (1, "sane_read: not scanning (call sane_start first)\n");        return SANE_STATUS_INVAL;      } -  read_count = max_scan_length; +  read_count = (size_t) max_scan_length;    bytes_read = read (test_device->pipe, data, read_count);    if (bytes_read == 0 -      || (bytes_read + test_device->bytes_total >= bytes_total)) +      || ((size_t) bytes_read + (size_t) test_device->bytes_total >= bytes_total))      {        SANE_Status status;        DBG (2, "sane_read: EOF reached\n"); @@ -2966,11 +2998,11 @@ sane_read (SANE_Handle handle, SANE_Byte * data,  	  return SANE_STATUS_IO_ERROR;  	}      } -  *length = bytes_read; -  test_device->bytes_total += bytes_read; +  *length = (SANE_Int) bytes_read; +  test_device->bytes_total += (size_t) bytes_read; -  DBG (2, "sane_read: read %ld bytes of %d, total %d\n", (long) bytes_read, -       max_scan_length, test_device->bytes_total); +  DBG (2, "sane_read: read %zu bytes of %zu, total %zu\n", (size_t) bytes_read, +       (size_t) max_scan_length, (size_t) test_device->bytes_total);    return SANE_STATUS_GOOD;  } @@ -3051,6 +3083,7 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking)      }    else      { +      DBG (1, "sane_set_io_mode: unsupported\n");        if (non_blocking)  	return SANE_STATUS_UNSUPPORTED;      } @@ -3089,5 +3122,6 @@ sane_get_select_fd (SANE_Handle handle, SANE_Int * fd)        *fd = test_device->pipe;        return SANE_STATUS_GOOD;      } +  DBG(1,"sane_get_select_fd: unsupported\n");    return SANE_STATUS_UNSUPPORTED;  } | 
