• Home
  • Raw
  • Download

Lines Matching +full:- +full:- +full:kernel +full:- +full:url

2    sane-desc.c -- generate list of supported SANE devices
4 Copyright (C) 2002-2006 Henning Meier-Geinitz <henning@meier-geinitz.de>
7 Copyright (C) 2009 Dr. Ing. Dieter Jurzitza <dieter.jurzitza@t-online.de>
144 struct url_entry *url; member
160 struct url_entry *url; member
169 struct url_entry *url; member
190 struct url_entry *url; member
202 struct url_entry *url; member
219 struct url_entry *url; member
313 printf ("Usage: %s [-s dir] [-m mode] [-d level] [-h] [-V]\n", in print_usage()
315 printf (" -s|--search-dir dir " in print_usage()
319 printf (" -m|--mode mode " in print_usage()
320 "Output mode (ascii, html-backends-split, html-mfgs,\n" in print_usage()
321 … xml, statistics, usermap, db, udev, udev+acl, udev+hwdb, hwdb, plist, hal, hal-new)\n"); in print_usage()
322 printf (" -t|--title \"title\" The title used for HTML pages\n"); in print_usage()
323 printf (" -i|--intro \"intro\" A short description of the " in print_usage()
325 printf (" -d|--debug-level level Specify debug level (0-3)\n"); in print_usage()
326 printf (" -h|--help Print help message\n"); in print_usage()
327 printf (" -V|--version Print version information\n"); in print_usage()
328 printf ("Report bugs to <henning@meier-geinitz.de>\n"); in print_usage()
334 printf ("sane-desc %s (%s)\n", SANE_DESC_VERSION, PACKAGE_STRING); in print_version()
335 printf ("Copyright (C) 2002-2006 Henning Meier-Geinitz " in print_version()
336 "<henning@meier-geinitz.de>\n" in print_version()
337 "sane-desc comes with NO WARRANTY, to the extent permitted by " in print_version()
339 "You may redistribute copies of sane-desc under the terms of the " in print_version()
352 {"search-dir", required_argument, NULL, 's'}, in get_options()
356 {"debug-level", required_argument, NULL, 'd'}, in get_options()
363 &longindex)) != -1) in get_options()
388 else if (strcmp (optarg, "html-backends-split") == 0) in get_options()
393 else if (strcmp (optarg, "html-mfgs") == 0) in get_options()
443 else if (strcmp (optarg, "hal-new") == 0) in get_options()
467 DBG_ERR ("unknown option (use -h for help)\n"); in get_options()
470 DBG_ERR ("missing parameter (use -h for help)\n"); in get_options()
473 DBG_ERR ("missing option (use -h for help)\n"); in get_options()
489 return -1; in char_compare()
502 return -1; in num_compare()
524 return -1; in string_compare()
543 url_entry *url = first_url; in update_url_list() local
546 while (url && url->name) in update_url_list()
548 if (string_compare (url->name, new_url) == 0) in update_url_list()
550 url = url->next; in update_url_list()
555 url = first_url; in update_url_list()
556 if (url) in update_url_list()
558 while (url->next) in update_url_list()
559 url = url->next; in update_url_list()
560 url->next = calloc (1, sizeof (url_entry)); in update_url_list()
561 url = url->next; in update_url_list()
566 url = first_url; in update_url_list()
568 if (!url) in update_url_list()
573 url->name = new_url; in update_url_list()
589 while (*str && (*str != '"' || *(str - 1) == '\\')) in get_token()
591 len = str - start; in get_token()
602 len = str - start; in get_token()
761 /* Check for a all-lowercase 4-digit hex number (e.g. 0x1234) */
830 if (strlen (dir_entry->d_name) > 5 && in read_files()
831 strcmp (dir_entry->d_name + strlen (dir_entry->d_name) - 5, in read_files()
835 + strlen (dir_entry->d_name) + 1 + 1 > PATH_MAX) in read_files()
840 sprintf (file_name, "%s/%s", search_dir, dir_entry->d_name); in read_files()
841 DBG_INFO ("-> reading desc file: %s\n", file_name); in read_files()
853 type_entry *current_type = current_backend->type; in read_files()
860 if (current_type->type == type_scanner || in read_files()
861 current_type->type == type_stillcam || in read_files()
862 current_type->type == type_vidcam) in read_files()
864 mfg_entry *current_mfg = current_type->mfg; in read_files()
868 model_entry *current_model = current_mfg->model; in read_files()
872 if (current_model->status == status_unknown) in read_files()
876 current_backend->name, in read_files()
877 current_mfg->name, in read_files()
878 current_model->name); in read_files()
881 if (!current_model->interface) in read_files()
885 current_backend->name, in read_files()
886 current_mfg->name, in read_files()
887 current_model->name); in read_files()
890 else if (strstr (current_model->interface, "USB")) in read_files()
892 if ((!current_model->usb_vendor_id || !current_model->usb_product_id) in read_files()
893 && !current_model->ignore_usb_id) in read_files()
897 current_backend->name, in read_files()
898 current_mfg->name, in read_files()
899 current_model->name); in read_files()
903 current_model = current_model->next; in read_files()
905 current_mfg = current_mfg->next; in read_files()
908 current_type = current_type->next; in read_files()
913 current_backend->name, no_status); in read_files()
918 current_backend->name, no_interface); in read_files()
923 current_backend->name, no_usbids); in read_files()
926 desc_name = dir_entry->d_name; in read_files()
971 new_be->name = string_entry; in read_files()
972 new_be->new = SANE_FALSE; in read_files()
984 string_compare (new_be->name, be->name); in read_files()
989 be->next = be_tmp; in read_files()
993 prev_be->next = be; in read_files()
997 be = be->next; in read_files()
1001 prev_be->next = new_be; in read_files()
1002 be = prev_be->next; in read_files()
1021 if (current_backend->version) in read_files()
1025 "(was: `%s')\n", current_backend->name, in read_files()
1026 string_entry, current_backend->version, in read_files()
1027 current_backend->version); in read_files()
1031 current_backend->name, string_entry); in read_files()
1032 current_backend->version = string_entry; in read_files()
1042 if (current_model->status != status_unknown) in read_files()
1046 current_model->name, current_backend->name); in read_files()
1052 current_model->name); in read_files()
1053 current_model->status = status_minimal; in read_files()
1059 current_model->name); in read_files()
1060 current_model->status = status_basic; in read_files()
1066 current_model->name); in read_files()
1067 current_model->status = status_good; in read_files()
1073 current_model->name); in read_files()
1074 current_model->status = status_complete; in read_files()
1080 current_model->name); in read_files()
1081 current_model->status = status_untested; in read_files()
1087 current_model->name); in read_files()
1088 current_model->status = status_unsupported; in read_files()
1094 current_model->name, string_entry, in read_files()
1095 current_backend->name); in read_files()
1096 current_model->status = status_untested; in read_files()
1103 current_level, current_backend->name); in read_files()
1117 current_backend->name); in read_files()
1118 current_backend->new = SANE_TRUE; in read_files()
1124 current_backend->name); in read_files()
1125 current_backend->new = SANE_FALSE; in read_files()
1130 "`%s'\n", current_backend->name, in read_files()
1132 current_backend->new = SANE_FALSE; in read_files()
1141 if (current_backend->manpage) in read_files()
1145 "(was: `%s')\n", current_backend->name, in read_files()
1146 string_entry, current_backend->manpage); in read_files()
1150 current_backend->name, string_entry); in read_files()
1151 current_backend->manpage = string_entry; in read_files()
1160 type = current_backend->type; in read_files()
1164 "`%s'\n", string_entry, current_backend->name); in read_files()
1168 while (type->next) in read_files()
1169 type = type->next; in read_files()
1170 type->next = calloc (1, sizeof (type_entry)); in read_files()
1171 type = type->next; in read_files()
1175 current_backend->type = in read_files()
1177 type = current_backend->type; in read_files()
1180 type->type = type_unknown; in read_files()
1184 "scanner\n", current_backend->name); in read_files()
1185 type->type = type_scanner; in read_files()
1190 "still camera\n", current_backend->name); in read_files()
1191 type->type = type_stillcam; in read_files()
1196 "video camera\n", current_backend->name); in read_files()
1197 type->type = type_vidcam; in read_files()
1202 "API\n", current_backend->name); in read_files()
1203 type->type = type_api; in read_files()
1208 "meta\n", current_backend->name); in read_files()
1209 type->type = type_meta; in read_files()
1215 current_backend->name, string_entry); in read_files()
1216 type->type = type_unknown; in read_files()
1232 current_backend->name); in read_files()
1235 if (current_type->type < type_meta) in read_files()
1239 current_backend->name); in read_files()
1243 if (current_type->desc) in read_files()
1248 current_backend->name, string_entry, in read_files()
1249 current_type->desc); in read_files()
1254 current_backend->name, string_entry); in read_files()
1255 current_type->desc = calloc (1, sizeof (desc_entry)); in read_files()
1256 if (!current_type->desc) in read_files()
1261 current_type->desc->desc = string_entry; in read_files()
1276 current_backend->name); in read_files()
1279 if (current_type->type >= type_meta) in read_files()
1283 current_backend->name); in read_files()
1287 mfg = current_type->mfg; in read_files()
1290 while (mfg->next) in read_files()
1291 mfg = mfg->next; in read_files()
1292 mfg->next = calloc (1, sizeof (mfg_entry)); in read_files()
1293 mfg = mfg->next; in read_files()
1297 current_type->mfg = calloc (1, sizeof (mfg_entry)); in read_files()
1298 mfg = current_type->mfg; in read_files()
1306 mfg->name = string_entry; in read_files()
1308 string_entry, current_backend->name); in read_files()
1324 current_backend->name); in read_files()
1332 current_backend->name); in read_files()
1335 model = current_mfg->model; in read_files()
1338 while (model->next) in read_files()
1339 model = model->next; in read_files()
1340 model->next = calloc (1, sizeof (model_entry)); in read_files()
1341 model = model->next; in read_files()
1345 current_mfg->model = in read_files()
1347 model = current_mfg->model; in read_files()
1355 model->name = string_entry; in read_files()
1356 model->status = status_unknown; in read_files()
1359 string_entry, current_mfg->name); in read_files()
1372 "hardware devices\n", current_backend->name); in read_files()
1376 if (current_model->interface) in read_files()
1380 current_backend->name, in read_files()
1381 current_model->name, string_entry, in read_files()
1382 current_model->interface); in read_files()
1386 current_model->name, string_entry); in read_files()
1387 current_model->interface = string_entry; in read_files()
1398 "hardware devices\n", current_backend->name); in read_files()
1403 current_model->name, three_string_entry[0], three_string_entry[1]); in read_files()
1406 DBG_INFO ("Ignoring `%s's scsi-entries of `%s'\n", in read_files()
1407 current_backend->name, in read_files()
1408 current_model->name); in read_files()
1412 current_model->scsi_is_processor = SANE_TRUE; in read_files()
1413 current_model->scsi_vendor_id = three_string_entry[0]; in read_files()
1414 current_model->scsi_product_id = three_string_entry[1]; in read_files()
1418 DBG_INFO ("scsi-format info in %s is invalid -> break\n", current_backend->name); in read_files()
1431 "hardware devices\n", current_backend->name); in read_files()
1437 current_backend->name, in read_files()
1438 current_model->name); in read_files()
1439 current_model->ignore_usb_id = SANE_TRUE; in read_files()
1445 "not a lowercase 4-digit hex number: " in read_files()
1446 "`%s'\n", current_backend->name, in read_files()
1447 current_model->name, two_string_entry[0]); in read_files()
1453 "not a lowercase 4-digit hex number: " in read_files()
1454 "`%s'\n", current_backend->name, in read_files()
1455 current_model->name, two_string_entry[1]); in read_files()
1459 if (current_model->usb_vendor_id || current_model->usb_product_id) in read_files()
1463 current_backend->name, in read_files()
1464 current_model->name, two_string_entry[0], in read_files()
1466 current_model->usb_vendor_id, in read_files()
1467 current_model->usb_product_id); in read_files()
1471 current_model->name, two_string_entry[0], two_string_entry[1]); in read_files()
1472 current_model->usb_vendor_id = two_string_entry[0]; in read_files()
1473 current_model->usb_product_id = two_string_entry[1]; in read_files()
1476 if (read_keyword (line, ":url", param_string, &string_entry) in read_files()
1482 current_backend->url = in read_files()
1483 update_url_list (current_backend->url, in read_files()
1487 current_backend->name); in read_files()
1490 current_mfg->url = in read_files()
1491 update_url_list (current_mfg->url, string_entry); in read_files()
1494 current_mfg->name); in read_files()
1497 current_type->desc->url = in read_files()
1498 update_url_list (current_type->desc->url, in read_files()
1503 current_backend->name); in read_files()
1506 current_model->url = in read_files()
1507 update_url_list (current_model->url, in read_files()
1511 current_model->name); in read_files()
1515 ("level %d not implemented for :url (backend `%s')\n", in read_files()
1516 current_level, current_backend->name); in read_files()
1528 current_backend->comment = string_entry; in read_files()
1530 current_backend->name, string_entry); in read_files()
1533 current_mfg->comment = string_entry; in read_files()
1536 current_mfg->name, string_entry); in read_files()
1539 current_type->desc->comment = string_entry; in read_files()
1542 current_backend->name, string_entry); in read_files()
1545 current_model->comment = string_entry; in read_files()
1547 current_model->name, string_entry); in read_files()
1552 current_level, current_backend->name); in read_files()
1598 model_record->name = model->name; in create_model_record()
1599 model_record->status = model->status; in create_model_record()
1600 model_record->interface = model->interface; in create_model_record()
1601 model_record->url = model->url; in create_model_record()
1602 model_record->comment = model->comment; in create_model_record()
1603 model_record->usb_vendor_id = model->usb_vendor_id; in create_model_record()
1604 model_record->usb_product_id = model->usb_product_id; in create_model_record()
1605 model_record->scsi_vendor_id = model->scsi_vendor_id; in create_model_record()
1606 model_record->scsi_product_id = model->scsi_product_id; in create_model_record()
1607 model_record->scsi_is_processor = model->scsi_is_processor; in create_model_record()
1612 /* minimal, basic, good, complete -> 2, untested -> 1, unsupported -> 0 */
1646 int compare = string_compare (model->name, model_record->name); in update_model_record_list()
1651 (string_compare (model->interface, model_record->interface) == 0) && in update_model_record_list()
1652 (string_compare (model->usb_vendor_id, model_record->usb_vendor_id) == 0) && in update_model_record_list()
1653 (string_compare (model->usb_product_id, model_record->usb_product_id) == 0)) in update_model_record_list()
1656 int new_priority = calc_priority (model->status); in update_model_record_list()
1657 int old_priority = calc_priority (model_record->status); in update_model_record_list()
1662 "higher priority\n", model->name, in update_model_record_list()
1663 model_record->be->name); in update_model_record_list()
1670 model->name, model_record->be->name); in update_model_record_list()
1671 tmp_model_record = model_record->next; in update_model_record_list()
1676 model_record->next = tmp_model_record; in update_model_record_list()
1680 prev_model_record->next = model_record; in update_model_record_list()
1684 model_record = model_record->next; in update_model_record_list()
1688 prev_model_record->next = create_model_record (model); in update_model_record_list()
1689 model_record = prev_model_record->next; in update_model_record_list()
1692 model_record->be = be; in update_model_record_list()
1693 DBG_DBG ("update_model_record_list: added model %s\n", model->name); in update_model_record_list()
1704 model_entry *model = mfg->model; in update_mfg_record_list()
1709 if (string_compare (mfg_record->name, mfg->name) == 0) in update_mfg_record_list()
1712 url_entry *mfg_url = mfg->url; in update_mfg_record_list()
1715 if (!mfg_record->comment) in update_mfg_record_list()
1716 mfg_record->comment = mfg->comment; in update_mfg_record_list()
1717 while (mfg_url && mfg_url->name) in update_mfg_record_list()
1719 mfg_record->url = update_url_list (mfg_record->url, in update_mfg_record_list()
1720 mfg_url->name); in update_mfg_record_list()
1721 mfg_url = mfg_url->next; in update_mfg_record_list()
1725 mfg_record = mfg_record->next; in update_mfg_record_list()
1731 url_entry *url = mfg->url; in update_mfg_record_list() local
1740 mfg_record->name = mfg->name; in update_mfg_record_list()
1741 mfg_record->comment = mfg->comment; in update_mfg_record_list()
1742 while (url) in update_mfg_record_list()
1744 mfg_record->url = update_url_list (mfg_record->url, url->name); in update_mfg_record_list()
1745 url = url->next; in update_mfg_record_list()
1758 string_compare (new_mfg_record->name, mfg_record->name); in update_mfg_record_list()
1763 mfg_record->next = tmp_mfg_record; in update_mfg_record_list()
1767 prev_mfg_record->next = mfg_record; in update_mfg_record_list()
1771 mfg_record = mfg_record->next; in update_mfg_record_list()
1775 prev_mfg_record->next = new_mfg_record; in update_mfg_record_list()
1776 mfg_record = prev_mfg_record->next; in update_mfg_record_list()
1781 DBG_DBG ("update_mfg_record_list: created mfg %s\n", mfg_record->name); in update_mfg_record_list()
1787 mfg_record->model_record = in update_mfg_record_list()
1788 update_model_record_list (mfg_record->model_record, model, be); in update_mfg_record_list()
1789 model = model->next; in update_mfg_record_list()
1804 type_entry *type = be->type; in create_mfg_list()
1807 if (type->type == dev_type) in create_mfg_list()
1809 mfg_entry *mfg = type->mfg; in create_mfg_list()
1814 mfg = mfg->next; in create_mfg_list()
1817 type = type->next; in create_mfg_list()
1819 be = be->next; in create_mfg_list()
1834 url_entry *url = be->url; in ascii_print_backends() local
1835 type_entry *type = be->type; in ascii_print_backends()
1837 if (be->name) in ascii_print_backends()
1838 printf ("backend `%s'\n", be->name); in ascii_print_backends()
1842 if (be->version) in ascii_print_backends()
1843 printf (" version `%s'\n", be->version); in ascii_print_backends()
1847 if (be->new) in ascii_print_backends()
1850 if (be->manpage) in ascii_print_backends()
1851 printf (" manpage `%s'\n", be->manpage); in ascii_print_backends()
1855 if (url) in ascii_print_backends()
1856 while (url) in ascii_print_backends()
1858 printf (" url `%s'\n", url->name); in ascii_print_backends()
1859 url = url->next; in ascii_print_backends()
1862 printf (" url *none*\n"); in ascii_print_backends()
1864 if (be->comment) in ascii_print_backends()
1865 printf (" comment `%s'\n", be->comment); in ascii_print_backends()
1872 switch (type->type) in ascii_print_backends()
1893 if (type->desc) in ascii_print_backends()
1895 url_entry *url = type->desc->url; in ascii_print_backends() local
1896 printf (" desc `%s'\n", type->desc->desc); in ascii_print_backends()
1897 if (url) in ascii_print_backends()
1898 while (url) in ascii_print_backends()
1900 printf (" url `%s'\n", url->name); in ascii_print_backends()
1901 url = url->next; in ascii_print_backends()
1904 printf (" url *none*\n"); in ascii_print_backends()
1906 if (type->desc->comment) in ascii_print_backends()
1907 printf (" comment `%s'\n", type->desc->comment); in ascii_print_backends()
1911 else if (type->type >= type_meta) in ascii_print_backends()
1914 if (type->mfg) in ascii_print_backends()
1916 mfg_entry *mfg = type->mfg; in ascii_print_backends()
1919 model_entry *model = mfg->model; in ascii_print_backends()
1920 url_entry *url = mfg->url; in ascii_print_backends() local
1922 printf (" mfg `%s'\n", mfg->name); in ascii_print_backends()
1923 if (url) in ascii_print_backends()
1924 while (url) in ascii_print_backends()
1926 printf (" url `%s'\n", url->name); in ascii_print_backends()
1927 url = url->next; in ascii_print_backends()
1930 printf (" url *none*\n"); in ascii_print_backends()
1932 if (mfg->comment) in ascii_print_backends()
1933 printf (" comment `%s'\n", mfg->comment); in ascii_print_backends()
1940 url_entry *url = model->url; in ascii_print_backends() local
1941 printf (" model `%s'\n", model->name); in ascii_print_backends()
1942 if (model->interface) in ascii_print_backends()
1943 printf (" interface `%s'\n", model->interface); in ascii_print_backends()
1947 if (model->usb_vendor_id) in ascii_print_backends()
1948 printf (" usb-vendor-id `%s'\n", model->usb_vendor_id); in ascii_print_backends()
1950 printf (" usb-vendor-id *none*\n"); in ascii_print_backends()
1952 if (model->usb_product_id) in ascii_print_backends()
1953 printf (" usb-product-id `%s'\n", model->usb_product_id); in ascii_print_backends()
1955 printf (" usb-product-id *none*\n"); in ascii_print_backends()
1957 switch (model->status) in ascii_print_backends()
1982 if (url) in ascii_print_backends()
1983 while (url) in ascii_print_backends()
1985 printf (" url `%s'\n", url->name); in ascii_print_backends()
1986 url = url->next; in ascii_print_backends()
1989 printf (" url *none*\n"); in ascii_print_backends()
1991 if (model->comment) in ascii_print_backends()
1992 printf (" comment `%s'\n", model->comment); in ascii_print_backends()
1996 model = model->next; in ascii_print_backends()
2001 mfg = mfg->next; in ascii_print_backends()
2004 else if (type->type < type_meta) in ascii_print_backends()
2006 type = type->next; in ascii_print_backends()
2010 be = be->next; in ascii_print_backends()
2067 url_entry *url = be->url; in xml_print_backends() local
2068 type_entry *type = be->type; in xml_print_backends()
2070 if (be->name) in xml_print_backends()
2071 printf ("<backend name=\"%s\">\n", clean_string (be->name)); in xml_print_backends()
2075 if (be->version) in xml_print_backends()
2076 printf ("<version>%s</version>\n", clean_string (be->version)); in xml_print_backends()
2080 if (be->new) in xml_print_backends()
2086 if (be->manpage) in xml_print_backends()
2087 printf (" <manpage>%s</manpage>\n", clean_string (be->manpage)); in xml_print_backends()
2091 if (url) in xml_print_backends()
2092 while (url) in xml_print_backends()
2094 printf (" <url>%s</url>\n", clean_string (url->name)); in xml_print_backends()
2095 url = url->next; in xml_print_backends()
2098 printf (" <url>*none*</url>\n"); in xml_print_backends()
2100 if (be->comment) in xml_print_backends()
2101 printf (" <comment>%s</comment>\n", clean_string (be->comment)); in xml_print_backends()
2109 switch (type->type) in xml_print_backends()
2130 if (type->desc) in xml_print_backends()
2132 url_entry *url = type->desc->url; in xml_print_backends() local
2134 clean_string (type->desc->desc)); in xml_print_backends()
2135 if (url) in xml_print_backends()
2136 while (url) in xml_print_backends()
2138 printf (" <url>%s</url>\n", clean_string (url->name)); in xml_print_backends()
2139 url = url->next; in xml_print_backends()
2142 printf (" <url>*none*</url>\n"); in xml_print_backends()
2144 if (type->desc->comment) in xml_print_backends()
2146 clean_string (type->desc->comment)); in xml_print_backends()
2150 else if (type->type >= type_meta) in xml_print_backends()
2153 if (type->mfg) in xml_print_backends()
2155 mfg_entry *mfg = type->mfg; in xml_print_backends()
2158 model_entry *model = mfg->model; in xml_print_backends()
2159 url_entry *url = mfg->url; in xml_print_backends() local
2161 printf (" <mfg name=\"%s\">\n", clean_string (mfg->name)); in xml_print_backends()
2162 if (url) in xml_print_backends()
2163 while (url) in xml_print_backends()
2165 printf (" <url>`%s'</url>\n", in xml_print_backends()
2166 clean_string (url->name)); in xml_print_backends()
2167 url = url->next; in xml_print_backends()
2170 printf (" <url>*none*</url>\n"); in xml_print_backends()
2172 if (mfg->comment) in xml_print_backends()
2174 clean_string (mfg->comment)); in xml_print_backends()
2181 url_entry *url = model->url; in xml_print_backends() local
2183 clean_string (model->name)); in xml_print_backends()
2184 if (model->interface) in xml_print_backends()
2186 clean_string (model->interface)); in xml_print_backends()
2190 if (model->usb_vendor_id) in xml_print_backends()
2192 clean_string (model->usb_vendor_id)); in xml_print_backends()
2195 if (model->usb_product_id) in xml_print_backends()
2197 clean_string (model->usb_product_id)); in xml_print_backends()
2201 switch (model->status) in xml_print_backends()
2226 if (url) in xml_print_backends()
2227 while (url) in xml_print_backends()
2229 printf (" <url>%s</url>\n", in xml_print_backends()
2230 clean_string (url->name)); in xml_print_backends()
2231 url = url->next; in xml_print_backends()
2234 printf (" <url>*none*</url>\n"); in xml_print_backends()
2236 if (model->comment) in xml_print_backends()
2238 clean_string (model->comment)); in xml_print_backends()
2242 model = model->next; in xml_print_backends()
2249 mfg = mfg->next; in xml_print_backends()
2252 else if (type->type < type_meta) in xml_print_backends()
2254 type = type->next; in xml_print_backends()
2260 be = be->next; in xml_print_backends()
2274 type_entry *type = be->type; in calculate_statistics_per_type()
2278 if (type->type == dev_type) in calculate_statistics_per_type()
2280 mfg_entry *mfg = type->mfg; in calculate_statistics_per_type()
2283 if (type->desc) in calculate_statistics_per_type()
2286 type = type->next; in calculate_statistics_per_type()
2292 type = type->next; in calculate_statistics_per_type()
2296 mfg = type->mfg; in calculate_statistics_per_type()
2299 model = mfg->model; in calculate_statistics_per_type()
2304 enum status_entry status = model->status; in calculate_statistics_per_type()
2306 model = model->next; in calculate_statistics_per_type()
2309 mfg = mfg->next; in calculate_statistics_per_type()
2311 } /* if (type->type) */ in calculate_statistics_per_type()
2312 type = type->next; in calculate_statistics_per_type()
2314 be = be->next; in calculate_statistics_per_type()
2347 for (status = status_complete; status >= status_unsupported; status--) in html_print_statistics_per_type()
2380 for (status = status_complete; status >= status_minimal; status--) in html_print_summary()
2426 snprintf (name, strlen (manufacturer_name) + 1 + 2, "%c-%s", in html_generate_anchor_name()
2432 *pointer = '-'; in html_generate_anchor_name()
2452 type_entry *type = be->type; in html_backends_split_table()
2457 if (type->type == dev_type) in html_backends_split_table()
2459 type = type->next; in html_backends_split_table()
2467 html_generate_anchor_name (dev_type, be->name), be->name); in html_backends_split_table()
2469 be = be->next; in html_backends_split_table()
2480 type_entry *type = be->type; in html_backends_split_table()
2484 if (type->type == dev_type) in html_backends_split_table()
2486 mfg_entry *mfg = type->mfg; in html_backends_split_table()
2490 html_generate_anchor_name (type->type, be->name), in html_backends_split_table()
2491 be->name); in html_backends_split_table()
2493 if (be->version || be->new) in html_backends_split_table()
2496 if (be->version) in html_backends_split_table()
2498 printf ("%s", be->version); in html_backends_split_table()
2499 if (be->new) in html_backends_split_table()
2510 if (be->url && be->url->name) in html_backends_split_table()
2512 url_entry *url = be->url; in html_backends_split_table() local
2514 while (url) in html_backends_split_table()
2516 if (url != be->url) in html_backends_split_table()
2518 printf ("<a href=\"%s\">%s</a>", url->name, url->name); in html_backends_split_table()
2519 url = url->next; in html_backends_split_table()
2523 if (be->manpage) in html_backends_split_table()
2525 "\">%s</a><br>\n", be->manpage, be->manpage); in html_backends_split_table()
2527 if (be->comment) in html_backends_split_table()
2528 printf ("<b>Comment:</b> %s<br>\n", be->comment); in html_backends_split_table()
2531 if (type->desc) in html_backends_split_table()
2533 if (type->desc->desc) in html_backends_split_table()
2535 if (type->desc->url && type->desc->url->name) in html_backends_split_table()
2538 type->desc->url->name, type->desc->desc); in html_backends_split_table()
2541 type->desc->desc); in html_backends_split_table()
2544 if (type->desc->comment) in html_backends_split_table()
2545 printf ("<b>Comment:</b> %s<br>\n", type->desc->comment); in html_backends_split_table()
2547 type = type->next; in html_backends_split_table()
2554 type = type->next; in html_backends_split_table()
2569 mfg = type->mfg; in html_backends_split_table()
2572 model = mfg->model; in html_backends_split_table()
2579 model = model->next; in html_backends_split_table()
2582 model = mfg->model; in html_backends_split_table()
2585 if (mfg->url && mfg->url->name) in html_backends_split_table()
2586 printf ("<a href=\"%s\">%s</a>\n", mfg->url->name, in html_backends_split_table()
2587 mfg->name); in html_backends_split_table()
2589 printf ("%s\n", mfg->name); in html_backends_split_table()
2593 enum status_entry status = model->status; in html_backends_split_table()
2595 if (model != mfg->model) in html_backends_split_table()
2598 if (model->url && model->url->name) in html_backends_split_table()
2601 model->url->name, model->name); in html_backends_split_table()
2604 model->name); in html_backends_split_table()
2606 if (model->interface) in html_backends_split_table()
2608 model->interface); in html_backends_split_table()
2612 if (model->usb_vendor_id && model->usb_product_id) in html_backends_split_table()
2614 model->usb_vendor_id, model->usb_product_id); in html_backends_split_table()
2621 if (model->comment && model->comment[0] != 0) in html_backends_split_table()
2622 printf ("<td>%s</td>\n", model->comment); in html_backends_split_table()
2626 model = model->next; in html_backends_split_table()
2630 mfg = mfg->next; in html_backends_split_table()
2633 } /* if (type->type) */ in html_backends_split_table()
2634 type = type->next; in html_backends_split_table()
2636 be = be->next; in html_backends_split_table()
2657 html_generate_anchor_name (type_unknown, mfg_record->name), in html_mfgs_table()
2658 mfg_record->name); in html_mfgs_table()
2659 mfg_record = mfg_record->next; in html_mfgs_table()
2667 model_record_entry *model_record = mfg_record->model_record; in html_mfgs_table()
2670 html_generate_anchor_name (type_unknown, mfg_record->name), in html_mfgs_table()
2671 mfg_record->name); in html_mfgs_table()
2673 if (mfg_record->url && mfg_record->url->name) in html_mfgs_table()
2675 url_entry *url = mfg_record->url; in html_mfgs_table() local
2677 while (url) in html_mfgs_table()
2679 if (url != mfg_record->url) in html_mfgs_table()
2681 printf ("<a href=\"%s\">%s</a>", url->name, url->name); in html_mfgs_table()
2682 url = url->next; in html_mfgs_table()
2686 if (mfg_record->comment) in html_mfgs_table()
2687 printf ("<b>Comment:</b> %s<br>\n", mfg_record->comment); in html_mfgs_table()
2691 mfg_record = mfg_record->next; in html_mfgs_table()
2708 enum status_entry status = model_record->status; in html_mfgs_table()
2710 if (model_record->url && model_record->url->name) in html_mfgs_table()
2713 model_record->url->name, model_record->name); in html_mfgs_table()
2715 printf ("<tr><td align=center>%s</td>\n", model_record->name); in html_mfgs_table()
2717 if (model_record->interface) in html_mfgs_table()
2718 printf ("<td align=center>%s</td>\n", model_record->interface); in html_mfgs_table()
2722 if (model_record->usb_vendor_id && model_record->usb_product_id) in html_mfgs_table()
2724 model_record->usb_vendor_id, model_record->usb_product_id); in html_mfgs_table()
2731 if (model_record->comment && model_record->comment[0] != 0) in html_mfgs_table()
2732 printf ("<td>%s</td>\n", model_record->comment); in html_mfgs_table()
2737 if (model_record->be->url && model_record->be->url->name) in html_mfgs_table()
2739 model_record->be->url->name, model_record->be->name); in html_mfgs_table()
2741 printf ("%s", model_record->be->name); in html_mfgs_table()
2743 if (model_record->be->version || model_record->be->new) in html_mfgs_table()
2746 if (model_record->be->version) in html_mfgs_table()
2748 printf ("%s", model_record->be->version); in html_mfgs_table()
2749 if (model_record->be->new) in html_mfgs_table()
2758 if (model_record->be->manpage) in html_mfgs_table()
2761 model_record->be->manpage, model_record->be->manpage); in html_mfgs_table()
2766 model_record = model_record->next; in html_mfgs_table()
2769 mfg_record = mfg_record->next; in html_mfgs_table()
2778 ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" in html_print_header()
2780 "<meta http-equiv=\"Content-Type\" content=\"text/html; " in html_print_header()
2781 "charset=iso-8859-1\">\n"); in html_print_header()
2793 "Please consult the manpages and the author-supplied webpages\n" in html_print_header()
2814 ">Contact</a>\n" "</address>\n" "<font size=-1>\n"); in html_print_footer()
2815 printf ("This page was created by sane-desc %s from %s\n", in html_print_footer()
2831 " <font color=" COLOR_NEW ">NEW!</font> means brand-new to the\n" in html_print_legend_backend()
2853 " <dd>A link to the man-page online, if it exists.</dd>\n"); in html_print_legend_manual()
2893 …" <dd>The USB vendor and product ids as printed by sane-find-scanner -q (only applicable for USB … in html_print_legend_usbid()
2918 " for day-to-day work. Some rather exotic features may be missing.\n" in html_print_legend_status()
2940 "distributed with the latest version of sane-backends, and the hardware " in html_print_backends_split()
2989 "by the latest version of sane-backends. </p>"; in html_print_mfgs()
3077 usbid->usb_vendor_id = strdup (usb_vendor_id); in create_usbid()
3078 usbid->usb_product_id = strdup (usb_product_id); in create_usbid()
3079 usbid->name = calloc (1, sizeof (manufacturer_model_type)); in create_usbid()
3080 usbid->name->name = calloc (1, strlen (manufacturer) + strlen (model) + 3); in create_usbid()
3081 sprintf (usbid->name->name, "%s %s", manufacturer, model); in create_usbid()
3082 usbid->name->next = 0; in create_usbid()
3083 usbid->next = 0; in create_usbid()
3095 scsiid->scsi_vendor_id = strdup (scsi_vendor_id); in create_scsiid()
3096 scsiid->scsi_product_id = strdup (scsi_product_id); in create_scsiid()
3097 scsiid->is_processor = is_processor; in create_scsiid()
3098 scsiid->name = calloc (1, sizeof (manufacturer_model_type)); in create_scsiid()
3099 scsiid->name->name = calloc (1, strlen (manufacturer) + strlen (model) + 3); in create_scsiid()
3100 sprintf (scsiid->name->name, "%s %s", manufacturer, model); in create_scsiid()
3101 scsiid->name->next = 0; in create_scsiid()
3102 scsiid->next = 0; in create_scsiid()
3121 if (strcmp (usb_vendor_id, usbid->usb_vendor_id) == 0 && in add_usbid()
3122 strcmp (usb_product_id, usbid->usb_product_id) == 0) in add_usbid()
3124 manufacturer_model_type *man_mod = usbid->name; in add_usbid()
3126 while (man_mod->next) in add_usbid()
3127 man_mod = man_mod->next; in add_usbid()
3128 man_mod->next = malloc (sizeof (manufacturer_model_type)); in add_usbid()
3129 man_mod->next->name = malloc (strlen (manufacturer) + strlen (model) + 3); in add_usbid()
3130 sprintf (man_mod->next->name, "%s %s", manufacturer, model); in add_usbid()
3131 man_mod->next->next = 0; in add_usbid()
3136 if (strcmp (usb_vendor_id, usbid->usb_vendor_id) < 0 || in add_usbid()
3137 (strcmp (usb_vendor_id, usbid->usb_vendor_id) == 0 && in add_usbid()
3138 strcmp (usb_product_id, usbid->usb_product_id) < 0)) in add_usbid()
3142 tmp_usbid->next = usbid; in add_usbid()
3144 prev_usbid->next = tmp_usbid; in add_usbid()
3150 usbid = usbid->next; in add_usbid()
3154 prev_usbid->next = create_usbid (manufacturer, model, usb_vendor_id, usb_product_id); in add_usbid()
3155 usbid = prev_usbid->next; in add_usbid()
3174 if (strcmp (scsi_vendor_id, scsiid->scsi_vendor_id) == 0 && in add_scsiid()
3175 strcmp (scsi_product_id, scsiid->scsi_product_id) == 0) in add_scsiid()
3177 manufacturer_model_type *man_mod = scsiid->name; in add_scsiid()
3179 while (man_mod->next) in add_scsiid()
3180 man_mod = man_mod->next; in add_scsiid()
3181 man_mod->next = malloc (sizeof (manufacturer_model_type)); in add_scsiid()
3182 man_mod->next->name = malloc (strlen (manufacturer) + strlen (model) + 3); in add_scsiid()
3183 sprintf (man_mod->next->name, "%s %s", manufacturer, model); in add_scsiid()
3184 man_mod->next->next = 0; in add_scsiid()
3189 if (strcmp (scsi_vendor_id, scsiid->scsi_vendor_id) < 0 || in add_scsiid()
3190 (strcmp (scsi_vendor_id, scsiid->scsi_vendor_id) == 0 && in add_scsiid()
3191 strcmp (scsi_product_id, scsiid->scsi_product_id) < 0)) in add_scsiid()
3195 tmp_scsiid->next = scsiid; in add_scsiid()
3197 prev_scsiid->next = tmp_scsiid; in add_scsiid()
3203 scsiid = scsiid->next; in add_scsiid()
3207 …prev_scsiid->next = create_scsiid (manufacturer, model, scsi_vendor_id, scsi_product_id, is_proces… in add_scsiid()
3208 scsiid = prev_scsiid->next; in add_scsiid()
3223 for (be = first_backend; be; be = be->next) in create_usbids_table()
3227 if (!be->type) in create_usbids_table()
3230 for (type = be->type; type; type = type->next) in create_usbids_table()
3234 if (!type->mfg) in create_usbids_table()
3237 for (mfg = type->mfg; mfg; mfg = mfg->next) in create_usbids_table()
3241 if (!mfg->model) in create_usbids_table()
3244 for (model = mfg->model; model; model = model->next) in create_usbids_table()
3246 if ((model->status == status_unsupported) in create_usbids_table()
3247 || (model->status == status_unknown)) in create_usbids_table()
3250 if (model->usb_vendor_id && model->usb_product_id) in create_usbids_table()
3252 first_usbid = add_usbid (first_usbid, mfg->name, in create_usbids_table()
3253 model->name, in create_usbids_table()
3254 model->usb_vendor_id, in create_usbids_table()
3255 model->usb_product_id); in create_usbids_table()
3274 for (be = first_backend; be; be = be->next) in create_scsiids_table()
3278 if (!be->type) in create_scsiids_table()
3281 for (type = be->type; type; type = type->next) in create_scsiids_table()
3285 if (!type->mfg) in create_scsiids_table()
3288 for (mfg = type->mfg; mfg; mfg = mfg->next) in create_scsiids_table()
3292 if (!mfg->model) in create_scsiids_table()
3295 for (model = mfg->model; model; model = model->next) in create_scsiids_table()
3297 if ((model->status == status_unsupported) in create_scsiids_table()
3298 || (model->status == status_unknown)) in create_scsiids_table()
3301 if (model->scsi_vendor_id && model->scsi_product_id) in create_scsiids_table()
3303 first_scsiid = add_scsiid (first_scsiid, mfg->name, in create_scsiids_table()
3304 model->name, in create_scsiids_table()
3305 model->scsi_vendor_id, in create_scsiids_table()
3306 model->scsi_product_id, in create_scsiids_table()
3307 model->scsi_is_processor); in create_scsiids_table()
3321 "# by sane-desc %s from %s\n", in print_header_comment()
3359 "# If the scanner is supported by sane-backends, please mail the entry to\n" in print_usermap_header()
3360 "# the sane-devel mailing list (sane-devel@alioth-lists.debian.net).\n" in print_usermap_header()
3374 manufacturer_model_type * name = usbid->name; in print_usermap()
3379 if (name != usbid->name) in print_usermap()
3381 printf ("%s", name->name); in print_usermap()
3382 name = name->next; in print_usermap()
3385 printf ("libusbscanner 0x0003 %s %s ", usbid->usb_vendor_id, in print_usermap()
3386 usbid->usb_product_id); in print_usermap()
3388 usbid = usbid->next; in print_usermap()
3392 /* print libsane.db file for hotplug-ng */
3423 "# If the scanner is supported by sane-backends, please mail the entry to\n" in print_db_header()
3424 "# the sane-devel mailing list (sane-devel@alioth-lists.debian.net).\n" in print_db_header()
3437 manufacturer_model_type * name = usbid->name; in print_db()
3442 if (name != usbid->name) in print_db()
3444 printf ("%s", name->name); in print_db()
3445 name = name->next; in print_db()
3448 printf ("%s\t%s\t%s:%s\t%s\n", usbid->usb_vendor_id, in print_db()
3449 usbid->usb_product_id, DEVOWNER, DEVGROUP, DEVMODE); in print_db()
3450 usbid = usbid->next; in print_db()
3465 "# SCSI-scanners from HP and other vendors that are entitled \"processor\"\n" in print_udev_header()
3483 "# If the scanner is supported by sane-backends, please mail the entry to\n" in print_udev_header()
3484 "# the sane-devel mailing list (sane-devel@alioth-lists.debian.net).\n" in print_udev_header()
3504 printf("# Kernel >= 2.6.22 jumps here\n" in print_udev()
3514 printf("# Kernel < 2.6.22 jumps here\n" in print_udev()
3520 manufacturer_model_type * name = usbid->name; in print_udev()
3526 if ((name != usbid->name) && (i > 0)) in print_udev()
3528 printf ("%s", name->name); in print_udev()
3529 name = name->next; in print_udev()
3548 usbid->usb_vendor_id + 2, usbid->usb_product_id + 2); in print_udev()
3551 usbid->usb_vendor_id + 2, usbid->usb_product_id + 2, DEVMODE, DEVGROUP); in print_udev()
3553 usbid = usbid->next; in print_udev()
3557 …yes\", RUN+=\"/bin/sh -c 'if test -e /sys/$env{DEVPATH}/power/control; then echo on > /sys/$env{DE… in print_udev()
3567 printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"6\", ENV{libsane_matched}=\"yes\"\n"); in print_udev()
3569 …printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"6\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}… in print_udev()
3576 …printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"EPSON\", ATTRS{model}==\"SCANN… in print_udev()
3578 …printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"EPSON\", ATTRS{model}==\"SCANN… in print_udev()
3583 manufacturer_model_type * name = scsiid->name; in print_udev()
3585 if (!scsiid->is_processor) in print_udev()
3587 scsiid = scsiid->next; in print_udev()
3592 if ((strcmp(scsiid->scsi_vendor_id, "EPSON") == 0) in print_udev()
3593 && (strncmp(scsiid->scsi_product_id, "SCANNER", 7) == 0)) in print_udev()
3595 scsiid = scsiid->next; in print_udev()
3603 if ((name != scsiid->name) && (i > 0)) in print_udev()
3605 printf ("%s", name->name); in print_udev()
3606 name = name->next; in print_udev()
3624 …printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", EN… in print_udev()
3625 scsiid->scsi_vendor_id, scsiid->scsi_product_id); in print_udev()
3627 …printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", MO… in print_udev()
3628 scsiid->scsi_vendor_id, scsiid->scsi_product_id, DEVMODE, DEVGROUP); in print_udev()
3630 scsiid = scsiid->next; in print_udev()
3635 …printf("\nENV{libsane_matched}==\"yes\", RUN+=\"/bin/setfacl -m g:%s:rw $env{DEVNAME}\"\n", DEVGRO… in print_udev()
3652 "# For the list of supported USB devices see /usr/lib/udev/hwdb.d/20-sane.hwdb\n" in print_udevhwdb_header()
3656 "# SCSI-scanners from HP and other vendors that are entitled \"processor\"\n" in print_udevhwdb_header()
3667 "# If the scanner is supported by sane-backends, please mail the entry to\n" in print_udevhwdb_header()
3668 "# the sane-devel mailing list (sane-devel@alioth-lists.debian.net).\n" in print_udevhwdb_header()
3688 printf ("KERNEL!=\"sg[0-9]*\", GOTO=\"libsane_rules_end\"\n\n"); in print_udevhwdb()
3700 manufacturer_model_type * name = scsiid->name; in print_udevhwdb()
3702 if (!scsiid->is_processor) in print_udevhwdb()
3704 scsiid = scsiid->next; in print_udevhwdb()
3709 if ((strcmp(scsiid->scsi_vendor_id, "EPSON") == 0) in print_udevhwdb()
3710 && (strncmp(scsiid->scsi_product_id, "SCANNER", 7) == 0)) in print_udevhwdb()
3712 scsiid = scsiid->next; in print_udevhwdb()
3720 if ((name != scsiid->name) && (i > 0)) in print_udevhwdb()
3722 printf ("%s", name->name); in print_udevhwdb()
3723 name = name->next; in print_udevhwdb()
3741 scsiid->scsi_vendor_id, scsiid->scsi_product_id); in print_udevhwdb()
3743 scsiid = scsiid->next; in print_udevhwdb()
3749 /* print /usr/lib/udev/hwdb.d/20-sane.conf for Linux hwdb */
3766 "# If the scanner is supported by sane-backends, please mail the entry to\n" in print_hwdb_header()
3767 "# the sane-devel mailing list (sane-devel@alioth-lists.debian.net).\n" in print_hwdb_header()
3784 manufacturer_model_type * name = usbid->name; in print_hwdb()
3790 if ((name != usbid->name) && (i > 0)) in print_hwdb()
3792 printf ("%s", name->name); in print_hwdb()
3793 name = name->next; in print_hwdb()
3810 vendor_id = strdup(usbid->usb_vendor_id + 2); in print_hwdb()
3811 product_id = strdup(usbid->usb_product_id + 2); in print_hwdb()
3824 usbid = usbid->next; in print_hwdb()
3833 printf ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); in print_plist()
3834 …printf ("<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DT… in print_plist()
3849 printf ("\t\t\t\t<string>%s</string>\n", usbid->usb_product_id); in print_plist()
3851 printf ("\t\t\t\t<string>%s</string>\n", usbid->usb_vendor_id); in print_plist()
3853 usbid = usbid->next; in print_plist()
3871 printf ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); in print_hal()
3874 printf (" <!-- SCSI-SUBSYSTEM -->\n"); in print_hal()
3876 printf (" <!-- Some SCSI Scanners announce themselves \"processor\" -->\n"); in print_hal()
3883 manufacturer_model_type * name = scsiid->name; in print_hal()
3885 if (!scsiid->is_processor) in print_hal()
3887 scsiid = scsiid->next; in print_hal()
3891 if (strcmp(last_vendor, scsiid->scsi_vendor_id) != 0) in print_hal()
3896 …printf (" <match key=\"@info.parent:scsi.vendor\" string=\"%s\">\n", scsiid->scsi_vendor_id… in print_hal()
3897 last_vendor = scsiid->scsi_vendor_id; in print_hal()
3901 printf (" <!-- SCSI Scanner "); in print_hal()
3904 if (name != scsiid->name) in print_hal()
3906 printf ("\"%s\"", name->name); in print_hal()
3907 name = name->next; in print_hal()
3909 printf (" -->\n"); in print_hal()
3910 …printf (" <match key=\"@info.parent:scsi.model\" string=\"%s\">\n", scsiid->scsi_product_… in print_hal()
3914 scsiid = scsiid->next; in print_hal()
3922 printf (" <!-- USB-SUBSYSTEM -->\n"); in print_hal()
3933 manufacturer_model_type * name = usbid->name; in print_hal()
3935 if (strcmp(last_vendor, usbid->usb_vendor_id) != 0) in print_hal()
3940 printf (" <match key=\"usb.vendor_id\" int=\"%s\">\n", usbid->usb_vendor_id); in print_hal()
3941 last_vendor = usbid->usb_vendor_id; in print_hal()
3946 printf (" <!-- "); in print_hal()
3949 if ((name != usbid->name) && (i > 0)) in print_hal()
3952 printf ("%s", name->name); in print_hal()
3953 name = name->next; in print_hal()
3962 printf (" -->\n"); in print_hal()
3963 printf (" <match key=\"usb.product_id\" int=\"%s\">\n", usbid->usb_product_id); in print_hal()
3968 usbid = usbid->next; in print_hal()