From 58912f68c2489bcee787599837447e0d64dfd61a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 24 May 2017 21:03:56 +0200 Subject: New upstream version 1.0.27 --- backend/pieusb_specific.c | 48 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) (limited to 'backend/pieusb_specific.c') diff --git a/backend/pieusb_specific.c b/backend/pieusb_specific.c index 8231075..ce107cf 100644 --- a/backend/pieusb_specific.c +++ b/backend/pieusb_specific.c @@ -292,6 +292,8 @@ sanei_pieusb_find_device_callback (const char *devicename) return SANE_STATUS_INVAL; } + dev->flags = pieusb_supported_usb_device.flags; + /* Found a supported scanner, put it in the definitions list*/ DBG (DBG_info_proc, "sanei_pieusb_find_device_callback: success\n"); dev->next = pieusb_definition_list_head; @@ -996,18 +998,23 @@ sanei_pieusb_init_options (Pieusb_Scanner* scanner) } /** - * Parse line from config file into a vendor id, product id and a model number + * Parse line from config file into a vendor id, product id, model number, and flags * * @param config_line Text to parse * @param vendor_id * @param product_id * @param model_number + * @param flags * @return SANE_STATUS_GOOD, or SANE_STATUS_INVAL in case of a parse error */ SANE_Status -sanei_pieusb_parse_config_line(const char* config_line, SANE_Word* vendor_id, SANE_Word* product_id, SANE_Word* model_number) +sanei_pieusb_parse_config_line(const char* config_line, + SANE_Word* vendor_id, + SANE_Word* product_id, + SANE_Int* model_number, + SANE_Int* flags) { - char *vendor_id_string, *product_id_string, *model_number_string; + char *vendor_id_string, *product_id_string, *model_number_string, *flags_string; if (strncmp (config_line, "usb ", 4) != 0) { return SANE_STATUS_INVAL; @@ -1041,12 +1048,12 @@ sanei_pieusb_parse_config_line(const char* config_line, SANE_Word* vendor_id, SA } else { return SANE_STATUS_INVAL; } - /* Detect product-id */ + /* Detect model number */ config_line = sanei_config_skip_whitespace (config_line); if (*config_line) { config_line = sanei_config_get_string (config_line, &model_number_string); if (model_number_string) { - *model_number = strtol (model_number_string, 0, 0); + *model_number = (SANE_Int) strtol (model_number_string, 0, 0); free (model_number_string); } else { return SANE_STATUS_INVAL; @@ -1055,6 +1062,16 @@ sanei_pieusb_parse_config_line(const char* config_line, SANE_Word* vendor_id, SA } else { return SANE_STATUS_INVAL; } + /* Detect (optional) flags */ + *flags = 0; + config_line = sanei_config_skip_whitespace (config_line); + if (*config_line) { + config_line = sanei_config_get_string (config_line, &flags_string); + if (flags_string) { + *flags = (SANE_Int) strtol (flags_string, 0, 0); + free (flags_string); + } + } return SANE_STATUS_GOOD; } @@ -1064,16 +1081,18 @@ sanei_pieusb_parse_config_line(const char* config_line, SANE_Word* vendor_id, SA * @param vendor_id * @param product_id * @param model_number + * @param flags * @return */ SANE_Bool -sanei_pieusb_supported_device_list_contains(SANE_Word vendor_id, SANE_Word product_id, SANE_Word model_number) +sanei_pieusb_supported_device_list_contains(SANE_Word vendor_id, SANE_Word product_id, SANE_Int model_number, SANE_Int flags) { int i = 0; while (pieusb_supported_usb_device_list[i].vendor != 0) { if (pieusb_supported_usb_device_list[i].vendor == vendor_id && pieusb_supported_usb_device_list[i].product == product_id - && pieusb_supported_usb_device_list[i].model == model_number) { + && pieusb_supported_usb_device_list[i].model == model_number + && pieusb_supported_usb_device_list[i].flags == flags) { return SANE_TRUE; } i++; @@ -1086,10 +1105,11 @@ sanei_pieusb_supported_device_list_contains(SANE_Word vendor_id, SANE_Word produ * @param vendor_id * @param product_id * @param model_number + * @param flags * @return */ SANE_Status -sanei_pieusb_supported_device_list_add(SANE_Word vendor_id, SANE_Word product_id, SANE_Word model_number) +sanei_pieusb_supported_device_list_add(SANE_Word vendor_id, SANE_Word product_id, SANE_Int model_number, SANE_Int flags) { int i = 0, k; struct Pieusb_USB_Device_Entry* dl; @@ -1099,10 +1119,11 @@ sanei_pieusb_supported_device_list_add(SANE_Word vendor_id, SANE_Word product_id } /* i is index of last entry */ for (k=0; k<=i; k++) { - DBG(DBG_info_proc,"sanei_pieusb_supported_device_list_add(): current %03d: %04x %04x %02x\n", i, + DBG(DBG_info_proc,"sanei_pieusb_supported_device_list_add(): current %03d: %04x %04x %02x %02x\n", i, pieusb_supported_usb_device_list[k].vendor, pieusb_supported_usb_device_list[k].product, - pieusb_supported_usb_device_list[k].model); + pieusb_supported_usb_device_list[k].model, + pieusb_supported_usb_device_list[k].flags); } dl = realloc(pieusb_supported_usb_device_list,(i+2)*sizeof(struct Pieusb_USB_Device_Entry)); /* Add one entry to list */ @@ -1114,14 +1135,17 @@ sanei_pieusb_supported_device_list_add(SANE_Word vendor_id, SANE_Word product_id pieusb_supported_usb_device_list[i].vendor = vendor_id; pieusb_supported_usb_device_list[i].product = product_id; pieusb_supported_usb_device_list[i].model = model_number; + pieusb_supported_usb_device_list[i].flags = flags; pieusb_supported_usb_device_list[i+1].vendor = 0; pieusb_supported_usb_device_list[i+1].product = 0; pieusb_supported_usb_device_list[i+1].model = 0; + pieusb_supported_usb_device_list[i+1].flags = 0; for (k=0; k<=i+1; k++) { - DBG(DBG_info_proc,"sanei_pieusb_supported_device_list_add() add: %03d: %04x %04x %02x\n", i, + DBG(DBG_info_proc,"sanei_pieusb_supported_device_list_add() add: %03d: %04x %04x %02x %02x\n", i, pieusb_supported_usb_device_list[k].vendor, pieusb_supported_usb_device_list[k].product, - pieusb_supported_usb_device_list[k].model); + pieusb_supported_usb_device_list[k].model, + pieusb_supported_usb_device_list[k].flags); } return SANE_STATUS_GOOD; } -- cgit v1.2.3 From ffa8801644a7d53cc1c785e3450f794c07a14eb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 2 Feb 2020 17:13:01 +0100 Subject: New upstream version 1.0.29 --- backend/pieusb_specific.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'backend/pieusb_specific.c') diff --git a/backend/pieusb_specific.c b/backend/pieusb_specific.c index ce107cf..1b5f0f4 100644 --- a/backend/pieusb_specific.c +++ b/backend/pieusb_specific.c @@ -322,7 +322,7 @@ pieusb_initialize_device_definition (Pieusb_Device_Definition* dev, Pieusb_Scann buf = malloc(9); if (buf == NULL) return SANE_STATUS_NO_MEM; - strncpy(buf, inq->vendor, 8); + memcpy(buf, inq->vendor, 8); pp = buf + 8; *pp-- = '\0'; while (*pp == ' ') *pp-- = '\0'; @@ -332,7 +332,7 @@ pieusb_initialize_device_definition (Pieusb_Device_Definition* dev, Pieusb_Scann buf = malloc(17); if (buf == NULL) return SANE_STATUS_NO_MEM; - strncpy(buf, inq->product, 16); + memcpy(buf, inq->product, 16); pp = buf + 16; *pp-- = '\0'; while (*pp == ' ') *pp-- = '\0'; @@ -346,7 +346,7 @@ pieusb_initialize_device_definition (Pieusb_Device_Definition* dev, Pieusb_Scann buf = malloc(5); if (buf == NULL) return SANE_STATUS_NO_MEM; - strncpy(buf, inq->productRevision, 4); + memcpy(buf, inq->productRevision, 4); pp = buf + 4; *pp-- = '\0'; while (*pp == ' ') *pp-- = '\0'; -- cgit v1.2.3