1 /* $NetBSD: dev_verbose.c,v 1.1 2014/09/21 14:30:22 christos Exp $ */
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 #include <sys/cdefs.h>
26 __KERNEL_RCSID(0, "$NetBSD: dev_verbose.c,v 1.1 2014/09/21 14:30:22 christos Exp $");
28 #include <sys/param.h>
31 #include <sys/systm.h>
37 #include <dev/dev_verbose.h>
40 dev_untokenstring(const char *words
, const uint16_t *token
, char *buf
,
46 for (; *token
!= 0; token
++) {
47 cp
= buf
+ strlcat(buf
, words
+ *token
, len
- 2);
52 return cp
!= buf
? buf
: NULL
;
56 dev_findvendor(char *buf
, size_t len
, const char *words
, size_t nwords
,
57 const uint16_t *vendors
, size_t nvendors
, uint16_t vendor
)
61 for (n
= 0; n
< nvendors
; n
++) {
62 if (vendors
[n
] == vendor
)
63 return dev_untokenstring(words
, &vendors
[n
+ 1],
68 while (vendors
[n
] != 0 && n
< nvendors
)
71 snprintf(buf
, len
, "vendor %4.4x", vendor
);
76 dev_findproduct(char *buf
, size_t len
, const char *words
, size_t nwords
,
77 const uint16_t *products
, size_t nproducts
, uint16_t vendor
,
82 for (n
= 0; n
< nproducts
; n
++) {
83 if (products
[n
] == vendor
&& products
[n
+ 1] == product
)
84 return dev_untokenstring(words
, &products
[n
+ 2],
89 while (products
[n
] != 0 && n
< nproducts
)
92 snprintf(buf
, len
, "product %4.4x", product
);