This file is indexed.

/usr/share/doc/discover/api-reference/device_8c-source.html is in libdiscover-dev 2.1.2-5.1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>discover: /home/pere/src/debiancvs/pkg-discover/discover/trunk/lib/device.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.2 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
<div class="nav">
<a class="el" href="dir_000002.html">lib</a></div>
<h1>device.c</h1><a href="device_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 
00011 <span class="comment">/* $Progeny$</span>
00012 <span class="comment"> *</span>
00013 <span class="comment"> * Copyright 2001, 2002 Progeny Linux Systems, Inc.</span>
00014 <span class="comment"> * Copyright 2002 Hewlett-Packard Company</span>
00015 <span class="comment"> *</span>
00016 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span>
00017 <span class="comment"> * copy of this software and associated documentation files (the "Software"),</span>
00018 <span class="comment"> * to deal in the Software without restriction, including without limitation</span>
00019 <span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span>
00020 <span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span>
00021 <span class="comment"> * Software is furnished to do so, subject to the following conditions:</span>
00022 <span class="comment"> *</span>
00023 <span class="comment"> * The above copyright notice and this permission notice shall be included in</span>
00024 <span class="comment"> * all copies or substantial portions of the Software.</span>
00025 <span class="comment"> *</span>
00026 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
00027 <span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
00028 <span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL</span>
00029 <span class="comment"> * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
00030 <span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
00031 <span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span>
00032 <span class="comment"> * DEALINGS IN THE SOFTWARE.</span>
00033 <span class="comment"> */</span>
00034 
00035 <span class="preprocessor">#include "config.h"</span>
00036 
00037 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
00038 
00039 <span class="preprocessor">#include &lt;assert.h&gt;</span>
00040 <span class="preprocessor">#include &lt;stdbool.h&gt;</span>
00041 <span class="preprocessor">#include &lt;string.h&gt;</span>
00042 
00043 <span class="preprocessor">#include &lt;<a class="code" href="discover_8h.html">discover/discover.h</a>&gt;</span>
00044 <span class="preprocessor">#include &lt;<a class="code" href="discover-conf_8h.html">discover/discover-conf.h</a>&gt;</span>
00045 <span class="preprocessor">#include &lt;<a class="code" href="discover-xml_8h.html">discover/discover-xml.h</a>&gt;</span>
00046 
00047 <span class="preprocessor">#include &lt;discover/device.h&gt;</span>
00048 <span class="preprocessor">#include &lt;discover/utils.h&gt;</span>
00049 
00062 <a class="code" href="group__types.html#ga3">discover_device_t</a> *
<a name="l00063"></a><a class="code" href="group__device.html#ga0">00063</a> <a class="code" href="group__device.html#ga0">discover_device_find</a>(<span class="keywordtype">char</span> *discover_class, <a class="code" href="structdiscover__error.html">discover_error_t</a> *status)
00064 {
00065     <a class="code" href="group__types.html#ga3">discover_device_t</a> *result, *device, *last, *new_device;
00066     <a class="code" href="group__types.html#ga5">discover_xml_busclass_t</a> *busclasses;
00067     <a class="code" href="structdiscover__bus__map.html">discover_bus_map_t</a> *busmap;
00068     <span class="keywordtype">int</span> i;
00069 
00070     assert(discover_class);
00071 
00072     result = last = NULL;
00073 
00074     busmap = <a class="code" href="group__conf.html#ga2">discover_conf_get_full_bus_map</a>(status);
00075     <span class="keywordflow">if</span> (status-&gt;<a class="code" href="structdiscover__error.html#o0">code</a> != 0) {
00076         <span class="keywordflow">return</span> NULL;
00077     }
00078 
00079     <span class="keywordflow">for</span> (i = 0; busmap[i].name; i++) {
00080         <span class="keywordflow">if</span> (!busmap[i].scan_default) {
00081             <span class="keywordflow">continue</span>;
00082         }
00083 
00084         busclasses = <a class="code" href="group__busclass__xml.html#ga1">discover_xml_get_busclasses</a>(i, status);
00085         <span class="keywordflow">if</span> (status-&gt;<a class="code" href="structdiscover__error.html#o0">code</a> != 0) {
00086             <span class="keywordflow">return</span> result;
00087         }
00088         <span class="keywordflow">for</span> (device = <a class="code" href="sysdep_8c.html#a8">discover_get_devices</a>(i, status);
00089              device;
00090              device = <a class="code" href="group__device.html#ga21">discover_device_get_next</a>(device)) {
00091             <span class="keywordflow">if</span> (!device-&gt;busclass) {
00092                 <span class="comment">/* This is a device about which we know nothing. */</span>
00093                 <span class="keywordflow">continue</span>;
00094             }
00095             <span class="keywordflow">if</span> (<a class="code" href="group__busclass__xml.html#ga4">discover_xml_busclass_cmp</a>(device-&gt;busclass, discover_class,
00096                                           busclasses) == 0) {
00097                 new_device = <a class="code" href="group__device.html#ga22">discover_device_new</a>();
00098                 <a class="code" href="group__device.html#ga5">discover_device_copy</a>(device, new_device);
00099                 new_device-&gt;next = NULL;
00100 
00101                 <span class="keywordflow">if</span> (last) {
00102                     last-&gt;next = new_device;
00103                     last = new_device;
00104                 } <span class="keywordflow">else</span> {
00105                     result = last = new_device;
00106                 }
00107             }
00108         }
00109 
00110         <span class="keywordflow">if</span> (status-&gt;<a class="code" href="structdiscover__error.html#o0">code</a> != 0) {
00111             <span class="keywordflow">return</span> result;
00112         }
00113     }
00114 
00115     <span class="keywordflow">if</span> (result) {
00116         status-&gt;<a class="code" href="structdiscover__error.html#o0">code</a> = <a class="code" href="group__types.html#gga15a15">DISCOVER_SUCCESS</a>;
00117     } <span class="keywordflow">else</span> {
00118         <span class="keywordtype">char</span> *message = _discover_xmalloc(100);
00119         snprintf(message, 100, <span class="stringliteral">"Device \"%s\" not found"</span>,
00120                     discover_class);
00121         status-&gt;<a class="code" href="structdiscover__error.html#o0">code</a> = <a class="code" href="group__types.html#gga15a22">DISCOVER_EDEVICENOTFOUND</a>;
00122         status-&gt;<a class="code" href="structdiscover__error.html#o2">create_message</a>(&amp;status, message);
00123     }
00124 
00125     <span class="keywordflow">return</span> result;
00126 }
00127 
00128 <span class="keyword">static</span> <a class="code" href="group__types.html#ga4">discover_data_t</a> *
00129 scan_data_list(<a class="code" href="group__types.html#ga4">discover_data_t</a> *node, <span class="keywordtype">char</span> *discover_class, <span class="keywordtype">char</span> **version,
00130                <a class="code" href="structdiscover__error.html">discover_error_t</a> *status)
00131 {
00132     <a class="code" href="group__types.html#ga4">discover_data_t</a> *result = NULL;
00133     <span class="keywordtype">int</span> cmp;
00134 
00135     <span class="keywordflow">for</span> ( ; node != NULL; node = node-&gt;next) {
00136         <span class="keywordflow">if</span> (strcmp(node-&gt;discover_class, discover_class) == 0) {
00137             <span class="keywordflow">if</span> (*version &amp;&amp; node-&gt;version) {
00138                 cmp = <a class="code" href="group__version__cmp.html#ga0">discover_xml_version_cmp</a>(node-&gt;version,
00139                                                *version, status);
00140 
00141                 <span class="keywordflow">if</span> (status-&gt;<a class="code" href="structdiscover__error.html#o0">code</a> != 0) {
00142                     <span class="keywordflow">return</span> result;
00143                 }
00144                 <span class="keywordflow">if</span> (cmp) {
00145                     result = node;
00146                     <span class="comment">/* The version is no longer relevant for nested data</span>
00147 <span class="comment">                     * elements.</span>
00148 <span class="comment">                     */</span>
00149                     *version = NULL;
00150                     <span class="keywordflow">break</span>;
00151                 }
00152             } <span class="keywordflow">else</span> {
00153                 result = node;
00154                 <span class="keywordflow">break</span>;
00155             }
00156         }
00157     }
00158     <span class="keywordflow">return</span> result;
00159 }
00160 
00161 
00162 <span class="keyword">static</span> <a class="code" href="group__types.html#ga4">discover_data_t</a> *
00163 get_data(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device, <span class="keywordtype">char</span> *discover_class, <span class="keywordtype">char</span> **version,
00164          <a class="code" href="structdiscover__error.html">discover_error_t</a> *status)
00165 {
00166     assert(device != NULL);
00167     assert(discover_class != NULL);
00168 
00169     <span class="keywordflow">return</span> scan_data_list(device-&gt;data, discover_class, version, status);
00170 }
00171 
00172 <span class="keyword">static</span> <a class="code" href="group__types.html#ga4">discover_data_t</a> *
00173 get_child_data(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data, <span class="keywordtype">char</span> *discover_class, <span class="keywordtype">char</span> **version,
00174                <a class="code" href="structdiscover__error.html">discover_error_t</a> *status)
00175 {
00176     assert(data != NULL);
00177     assert(discover_class != NULL);
00178 
00179     <span class="keywordflow">return</span> scan_data_list(data-&gt;child, discover_class, version, status);
00180 }
00181 
00203 <span class="keywordtype">char</span> *
<a name="l00204"></a><a class="code" href="group__device.html#ga4">00204</a> <a class="code" href="group__device.html#ga4">discover_device_get_data</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device, <span class="keywordtype">char</span> *discover_class,
00205                          <span class="keywordtype">char</span> *version, <a class="code" href="structdiscover__error.html">discover_error_t</a> *status)
00206 {
00207     <a class="code" href="group__types.html#ga4">discover_data_t</a> *data;
00208     <span class="keywordtype">char</span> *result, *tmp, *tmp_orig, **argv, *block;
00209     size_t argv_len;
00210     <span class="keywordtype">int</span> i;
00211 
00212     assert(device != NULL);
00213     assert(discover_class != NULL);
00214     assert(status != NULL);
00215 
00216     status-&gt;<a class="code" href="structdiscover__error.html#o0">code</a> = 0;
00217 
00218     data = NULL;
00219     result = NULL;
00220     tmp_orig = tmp = _discover_xstrdup(discover_class);
00221     argv = NULL;
00222     argv_len = 0;
00223 
00224     <span class="keywordflow">while</span> ((block = strsep(&amp;tmp, <span class="stringliteral">"/"</span>))) {
00225         argv_len++;
00226         argv = _discover_xrealloc(argv, <span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *) * argv_len);
00227         argv[argv_len - 1] = block;
00228     }
00229 
00230 
00231     <span class="keywordflow">while</span>(!data &amp;&amp; device) {
00232         data = get_data(device, argv[0], &amp;version, status);
00233 
00234         <span class="keywordflow">if</span> (data) {
00235             <span class="keywordflow">for</span> (i = 1; i &lt; argv_len; i++) {
00236                 data = get_child_data(data, argv[i], &amp;version, status);
00237                 <span class="keywordflow">if</span> (status-&gt;<a class="code" href="structdiscover__error.html#o0">code</a> != 0) {
00238                     <span class="keywordflow">goto</span> out;
00239                 }
00240                 <span class="keywordflow">if</span> (!data) {
00241                     <span class="keywordflow">break</span>;
00242                 }
00243             }
00244         }
00245 
00246         device = device-&gt;extra;
00247     }
00248 
00249     <span class="keywordflow">if</span> (data) {
00250         result = data-&gt;text;
00251     }
00252 
00253 out:
00254 
00255     free(tmp_orig);
00256     free(argv);
00257 
00258     <span class="keywordflow">return</span> result;
00259 }
00260 
00267 <span class="keywordtype">void</span>
<a name="l00268"></a><a class="code" href="group__device.html#ga5">00268</a> <a class="code" href="group__device.html#ga5">discover_device_copy</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *src, <a class="code" href="group__types.html#ga3">discover_device_t</a> *dst)
00269 {
00270     assert(src != NULL);
00271     assert(dst != NULL);
00272 
00273     <span class="keywordflow">if</span> (src-&gt;busclass) {
00274         dst-&gt;busclass = _discover_xstrdup(src-&gt;busclass);
00275     }
00276 
00277     <span class="keywordflow">if</span> (src-&gt;model_id) {
00278         dst-&gt;model_id = _discover_xstrdup(src-&gt;model_id);
00279     }
00280 
00281     <span class="keywordflow">if</span> (src-&gt;model_name) {
00282         dst-&gt;model_name = _discover_xstrdup(src-&gt;model_name);
00283     }
00284 
00285     <span class="keywordflow">if</span> (src-&gt;vendor_id) {
00286         dst-&gt;vendor_id = _discover_xstrdup(src-&gt;vendor_id);
00287     }
00288 
00289     <span class="keywordflow">if</span> (src-&gt;vendor_name) {
00290         dst-&gt;vendor_name = _discover_xstrdup(src-&gt;vendor_name);
00291     }
00292 
00293     dst-&gt;busclasses = src-&gt;busclasses;
00294     dst-&gt;vendors = src-&gt;vendors;
00295     dst-&gt;data = src-&gt;data;
00296     dst-&gt;extra = src-&gt;extra;
00297     dst-&gt;next = src-&gt;next;
00298 }
00299 
00300 <span class="comment">/******************************************************************************</span>
00301 <span class="comment"> * Data accessors</span>
00302 <span class="comment"> */</span>
00303 
00307 <span class="keywordtype">char</span> *
<a name="l00308"></a><a class="code" href="group__device.html#ga6">00308</a> <a class="code" href="group__device.html#ga6">discover_data_get_class</a>(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data)
00309 {
00310     assert(data != NULL);
00311 
00312     <span class="keywordflow">return</span> data-&gt;discover_class;
00313 }
00314 
00318 <span class="keywordtype">char</span> *
<a name="l00319"></a><a class="code" href="group__device.html#ga7">00319</a> <a class="code" href="group__device.html#ga7">discover_data_get_text</a>(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data)
00320 {
00321     assert(data != NULL);
00322 
00323     <span class="keywordflow">return</span> data-&gt;text;
00324 }
00325 
00329 <a class="code" href="group__types.html#ga4">discover_data_t</a> *
<a name="l00330"></a><a class="code" href="group__device.html#ga8">00330</a> <a class="code" href="group__device.html#ga8">discover_data_get_parent</a>(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data)
00331 {
00332     assert(data != NULL);
00333 
00334     <span class="keywordflow">return</span> data-&gt;parent;
00335 }
00336 
00340 <a class="code" href="group__types.html#ga4">discover_data_t</a> *
<a name="l00341"></a><a class="code" href="group__device.html#ga9">00341</a> <a class="code" href="group__device.html#ga9">discover_data_get_child</a>(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data)
00342 {
00343     assert(data != NULL);
00344 
00345     <span class="keywordflow">return</span> data-&gt;child;
00346 }
00347 
00351 <a class="code" href="group__types.html#ga4">discover_data_t</a> *
<a name="l00352"></a><a class="code" href="group__device.html#ga10">00352</a> <a class="code" href="group__device.html#ga10">discover_data_get_next</a>(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data)
00353 {
00354     assert(data != NULL);
00355 
00356     <span class="keywordflow">return</span> data-&gt;next;
00357 }
00358 
00362 <a class="code" href="group__types.html#ga4">discover_data_t</a> *
<a name="l00363"></a><a class="code" href="group__device.html#ga11">00363</a> <a class="code" href="group__device.html#ga11">discover_data_get_prev</a>(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data)
00364 {
00365     assert(data != NULL);
00366 
00367     <span class="keywordflow">return</span> data-&gt;prev;
00368 }
00369 
00373 <a class="code" href="group__types.html#ga4">discover_data_t</a> *
<a name="l00374"></a><a class="code" href="group__device.html#ga12">00374</a> <a class="code" href="group__device.html#ga12">discover_data_get_first</a>(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data)
00375 {
00376     <span class="keywordtype">int</span> i = 1;
00377 
00378     <span class="keywordflow">if</span> (data == NULL) {
00379         <span class="keywordflow">return</span> NULL;
00380     }
00381 
00382     <span class="keywordflow">while</span>(i) {
00383         <span class="keywordflow">if</span>(data-&gt;prev) {
00384             data = data-&gt;prev;
00385         } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(data-&gt;parent) {
00386             data = data-&gt;parent;
00387         } <span class="keywordflow">else</span> {
00388             i = 0;
00389         }
00390     }
00391 <span class="comment">/*</span>
00392 <span class="comment"></span>
00393 <span class="comment">    for (;</span>
00394 <span class="comment">         data-&gt;prev;</span>
00395 <span class="comment">         data = data-&gt;prev)</span>
00396 <span class="comment">    ;</span>
00397 <span class="comment">    for (;</span>
00398 <span class="comment">         data-&gt;parent;</span>
00399 <span class="comment">         data = data-&gt;parent)</span>
00400 <span class="comment">    ;</span>
00401 <span class="comment">*/</span>
00402     <span class="keywordflow">return</span> data;
00403 }
00404 
00408 <a class="code" href="group__types.html#ga4">discover_data_t</a> *
<a name="l00409"></a><a class="code" href="group__device.html#ga13">00409</a> <a class="code" href="group__device.html#ga13">discover_data_new</a>(<span class="keywordtype">void</span>)
00410 {
00411     <a class="code" href="group__types.html#ga4">discover_data_t</a> *<span class="keyword">new</span>;
00412 
00413     <span class="keyword">new</span> = _discover_xmalloc(<span class="keyword">sizeof</span>(<a class="code" href="group__types.html#ga4">discover_data_t</a>));
00414 
00415     <span class="keyword">new</span>-&gt;discover_class = NULL;
00416     <span class="keyword">new</span>-&gt;version = NULL;
00417     <span class="keyword">new</span>-&gt;text = NULL;
00418     <span class="keyword">new</span>-&gt;parent = NULL;
00419     <span class="keyword">new</span>-&gt;child = NULL;
00420     <span class="keyword">new</span>-&gt;next = NULL;
00421     <span class="keyword">new</span>-&gt;prev = NULL;
00422 
00423     <span class="keywordflow">return</span> <span class="keyword">new</span>;
00424 }
00425 
00435 <span class="keywordtype">void</span>
<a name="l00436"></a><a class="code" href="group__device.html#ga14">00436</a> <a class="code" href="group__device.html#ga14">discover_data_free</a>(<a class="code" href="group__types.html#ga4">discover_data_t</a> *data_tree)
00437 {
00438     <a class="code" href="group__types.html#ga4">discover_data_t</a> *data, *last;
00439 
00440     last = NULL;
00441 
00442     <span class="keywordflow">if</span> (data_tree) {
00443         <span class="keywordflow">for</span> (data = data_tree-&gt;next;
00444              data;
00445              data = data-&gt;next) {
00446             <a class="code" href="group__device.html#ga14">discover_data_free</a>(data);
00447 
00448             <span class="keywordflow">if</span> (last) {
00449                 free(last);
00450             }
00451             last = data;
00452         }
00453 
00454         <span class="keywordflow">if</span> (last) {
00455             free(last);
00456         }
00457 
00458         <span class="keywordflow">if</span> (data_tree-&gt;child) {
00459             <a class="code" href="group__device.html#ga14">discover_data_free</a>(data_tree-&gt;child);
00460             free(data_tree-&gt;child);
00461         }
00462 
00463         <span class="keywordflow">if</span> (data_tree-&gt;discover_class) {
00464             free(data_tree-&gt;discover_class);
00465         }
00466 
00467         <span class="keywordflow">if</span> (data_tree-&gt;version) {
00468             free(data_tree-&gt;version);
00469         }
00470 
00471         <span class="keywordflow">if</span> (data_tree-&gt;text) {
00472             free(data_tree-&gt;text);
00473         }
00474     }
00475 }
00476 
00477 <span class="comment">/******************************************************************************</span>
00478 <span class="comment"> * Device accessors</span>
00479 <span class="comment"> */</span>
00480 
00484 <span class="keywordtype">char</span> *
<a name="l00485"></a><a class="code" href="group__device.html#ga15">00485</a> <a class="code" href="group__device.html#ga15">discover_device_get_busclass</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device)
00486 {
00487     assert(device != NULL);
00488 
00489     <span class="keywordflow">return</span> device-&gt;busclass;
00490 }
00491 
00495 <span class="keywordtype">char</span> *
<a name="l00496"></a><a class="code" href="group__device.html#ga16">00496</a> <a class="code" href="group__device.html#ga16">discover_device_get_model_id</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device)
00497 {
00498     assert(device != NULL);
00499 
00500     <span class="keywordflow">return</span> device-&gt;model_id;
00501 }
00502 
00506 <span class="keywordtype">char</span> *
<a name="l00507"></a><a class="code" href="group__device.html#ga17">00507</a> <a class="code" href="group__device.html#ga17">discover_device_get_model_name</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device)
00508 {
00509     assert(device != NULL);
00510 
00511     <span class="keywordflow">return</span> device-&gt;model_name;
00512 }
00513 
00517 <span class="keywordtype">char</span> *
<a name="l00518"></a><a class="code" href="group__device.html#ga18">00518</a> <a class="code" href="group__device.html#ga18">discover_device_get_vendor_id</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device)
00519 {
00520     assert(device != NULL);
00521 
00522     <span class="keywordflow">return</span> device-&gt;vendor_id;
00523 }
00524 
00528 <span class="keywordtype">char</span> *
<a name="l00529"></a><a class="code" href="group__device.html#ga19">00529</a> <a class="code" href="group__device.html#ga19">discover_device_get_vendor_name</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device)
00530 {
00531     assert(device != NULL);
00532 
00533     <span class="keywordflow">return</span> device-&gt;vendor_name;
00534 }
00535 
00539 <a class="code" href="group__types.html#ga4">discover_data_t</a> *
<a name="l00540"></a><a class="code" href="group__device.html#ga20">00540</a> <a class="code" href="group__device.html#ga20">discover_device_get_data_struct</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device)
00541 {
00542     assert(device != NULL);
00543 
00544     <span class="keywordflow">return</span> device-&gt;data;
00545 }
00546 
00550 <a class="code" href="group__types.html#ga3">discover_device_t</a> *
<a name="l00551"></a><a class="code" href="group__device.html#ga21">00551</a> <a class="code" href="group__device.html#ga21">discover_device_get_next</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *device)
00552 {
00553     assert(device != NULL);
00554 
00555     <span class="keywordflow">return</span> device-&gt;next;
00556 }
00557 
00561 <a class="code" href="group__types.html#ga3">discover_device_t</a> *
<a name="l00562"></a><a class="code" href="group__device.html#ga22">00562</a> <a class="code" href="group__device.html#ga22">discover_device_new</a>(<span class="keywordtype">void</span>)
00563 {
00564     <a class="code" href="group__types.html#ga3">discover_device_t</a> *<span class="keyword">new</span>;
00565 
00566     <span class="keyword">new</span> = _discover_xmalloc(<span class="keyword">sizeof</span>(<a class="code" href="group__types.html#ga3">discover_device_t</a>));
00567 
00568     <span class="keyword">new</span>-&gt;busclass = NULL;
00569     <span class="keyword">new</span>-&gt;model_id = NULL;
00570     <span class="keyword">new</span>-&gt;model_name = NULL;
00571     <span class="keyword">new</span>-&gt;vendor_id = NULL;
00572     <span class="keyword">new</span>-&gt;vendor_name = NULL;
00573     <span class="keyword">new</span>-&gt;busclasses = NULL;
00574     <span class="keyword">new</span>-&gt;vendors = NULL;
00575     <span class="keyword">new</span>-&gt;data = NULL;
00576     <span class="keyword">new</span>-&gt;next = NULL;
00577     <span class="keyword">new</span>-&gt;extra = NULL;
00578 
00579     <span class="keywordflow">return</span> <span class="keyword">new</span>;
00580 }
00581 
00591 <span class="keywordtype">void</span>
<a name="l00592"></a><a class="code" href="group__device.html#ga23">00592</a> <a class="code" href="group__device.html#ga23">discover_device_free</a>(<a class="code" href="group__types.html#ga3">discover_device_t</a> *devices, <span class="keywordtype">int</span> free_data)
00593 {
00594     <a class="code" href="group__types.html#ga3">discover_device_t</a> *device, *last;
00595 
00596     last = NULL;
00597 
00598     <span class="keywordflow">for</span> (device = devices;
00599          device;
00600          device = device-&gt;next) {
00601         <span class="keywordflow">if</span> (device-&gt;busclass) {
00602             free(device-&gt;busclass);
00603         }
00604 
00605         <span class="keywordflow">if</span> (device-&gt;model_id) {
00606             free(device-&gt;model_id);
00607         }
00608 
00609         <span class="keywordflow">if</span> (device-&gt;model_name) {
00610             free(device-&gt;model_name);
00611         }
00612 
00613         <span class="keywordflow">if</span> (device-&gt;vendor_id) {
00614             free(device-&gt;vendor_id);
00615         }
00616 
00617         <span class="keywordflow">if</span> (device-&gt;vendor_name) {
00618             free(device-&gt;vendor_name);
00619         }
00620 
00621         <span class="keywordflow">if</span> (free_data &amp;&amp; device-&gt;data) {
00622             <a class="code" href="group__device.html#ga14">discover_data_free</a>(device-&gt;data);
00623             free(device-&gt;data);
00624         }
00625 
00626         <span class="keywordflow">if</span> (last) {
00627             free(last);
00628         }
00629         last = device;
00630     }
00631 
00632     <span class="keywordflow">if</span> (last) {
00633         free(last);
00634     }
00635 }
00636 
00639 <span class="comment">/*</span>
00640 <span class="comment"> * Local variables:</span>
00641 <span class="comment"> * c-file-style: "progeny"</span>
00642 <span class="comment"> * indent-tabs-mode: nil</span>
00643 <span class="comment"> * End:</span>
00644 <span class="comment"> */</span>
00645 <span class="comment">/* vim: set cin fo=tcroq sw=4 et sts=4 tw=75: */</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Jul 28 03:38:00 2005 for discover by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
</body>
</html>