summaryrefslogtreecommitdiffstats
path: root/abs/extra/sane/xerox_mfp_fix_usb_devices.patch
blob: 5ed29b974aa0744cb6c00f63d9c8a9d07ffae7af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
commit 5ea227caeacd504b64eef301e83fa63e0a25b3f7
Author: Alex Belkin <abc@telekom.ru>
Date:   Tue Mar 8 17:57:19 2011 +0300

    keep usb device by default (correct for bug introduced by tcp sub-backend

diff --git a/backend/xerox_mfp.c b/backend/xerox_mfp.c
index e08b50f..d4672a7 100644
--- a/backend/xerox_mfp.c
+++ b/backend/xerox_mfp.c
@@ -37,10 +37,10 @@
 static const SANE_Device **devlist = NULL;	/* sane_get_devices array */
 static struct device *devices_head = NULL;	/* sane_get_devices list */
 
-transport available_transports[] = {
+enum { TRANSPORT_USB, TRANSPORT_TCP, TRANSPORTS_MAX };
+transport available_transports[TRANSPORTS_MAX] = {
     { "usb", usb_dev_request, usb_dev_open, usb_dev_close, usb_configure_device },
     { "tcp", tcp_dev_request, tcp_dev_open, tcp_dev_close, tcp_configure_device },
-    { 0 }
 };
 
 static int resolv_state(int state)
@@ -824,7 +824,13 @@ free_devices (void)
   devices_head = NULL;
 }
 
-/* SANE API ignores return code of this callback */
+static transport *tr_from_devname(SANE_String_Const devname)
+{
+  if (strncmp("tcp", devname, 3) == 0)
+    return &available_transports[TRANSPORT_TCP];
+  return &available_transports[TRANSPORT_USB];
+}
+
 static SANE_Status
 list_one_device (SANE_String_Const devname)
 {
@@ -839,12 +845,7 @@ list_one_device (SANE_String_Const devname)
       return SANE_STATUS_GOOD;
   }
 
-  for (tr = available_transports; tr->ttype; tr++) {
-    if (!strncmp (devname, tr->ttype, strlen(tr->ttype)))
-      break;
-  }
-  if (!tr->ttype)
-    return SANE_STATUS_INVAL;
+  tr = tr_from_devname(devname);
 
   dev = calloc (1, sizeof (struct device));
   if (dev == NULL)
@@ -878,13 +879,7 @@ list_one_device (SANE_String_Const devname)
 static SANE_Status
 list_conf_devices (UNUSED (SANEI_Config * config), const char *devname)
 {
-    transport *tr;
-
-    for (tr = available_transports; tr->ttype; tr++) {
-	if (!strncmp (devname, tr->ttype, strlen(tr->ttype)))
-	    return tr->configure_device(devname, list_one_device);
-    }
-    return	SANE_STATUS_INVAL;
+  return tr_from_devname(devname)->configure_device(devname, list_one_device);
 }
 
 SANE_Status