Deleted Added
full compact
tdata.c (178529) tdata.c (178546)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE

--- 160 unchanged lines hidden (view full) ---

169int
170tdesc_namecmp(void *arg1, void *arg2)
171{
172 tdesc_t *tdp1 = arg1, *tdp2 = arg2;
173
174 return (!streq(tdp1->t_name, tdp2->t_name));
175}
176
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE

--- 160 unchanged lines hidden (view full) ---

169int
170tdesc_namecmp(void *arg1, void *arg2)
171{
172 tdesc_t *tdp1 = arg1, *tdp2 = arg2;
173
174 return (!streq(tdp1->t_name, tdp2->t_name));
175}
176
177#if defined(sun)
177/*ARGSUSED1*/
178/*ARGSUSED1*/
178int
179tdesc_print(void *data, void *private)
179static int
180tdesc_print(void *data, void *private __unused)
180{
181 tdesc_t *tdp = data;
182
183 printf("%7d %s\n", tdp->t_id, tdesc_name(tdp));
184
185 return (1);
186}
181{
182 tdesc_t *tdp = data;
183
184 printf("%7d %s\n", tdp->t_id, tdesc_name(tdp));
185
186 return (1);
187}
188#endif
187
188static void
189free_intr(tdesc_t *tdp)
190{
191 free(tdp->t_intr);
192}
193
194static void

--- 47 unchanged lines hidden (view full) ---

242 NULL,
243 NULL,
244 NULL,
245 NULL,
246 NULL
247};
248
249/*ARGSUSED1*/
189
190static void
191free_intr(tdesc_t *tdp)
192{
193 free(tdp->t_intr);
194}
195
196static void

--- 47 unchanged lines hidden (view full) ---

244 NULL,
245 NULL,
246 NULL,
247 NULL,
248 NULL
249};
250
251/*ARGSUSED1*/
250static int
251tdesc_free_cb(tdesc_t *tdp, void *private)
252static void
253tdesc_free_cb(void *arg, void *private __unused)
252{
254{
255 tdesc_t *tdp = arg;
253 if (tdp->t_name)
254 free(tdp->t_name);
255 if (free_cbs[tdp->t_type])
256 free_cbs[tdp->t_type](tdp);
257 free(tdp);
258
256 if (tdp->t_name)
257 free(tdp->t_name);
258 if (free_cbs[tdp->t_type])
259 free_cbs[tdp->t_type](tdp);
260 free(tdp);
261
259 return (1);
262 return;
260}
261
262void
263tdesc_free(tdesc_t *tdp)
264{
263}
264
265void
266tdesc_free(tdesc_t *tdp)
267{
265 (void) tdesc_free_cb(tdp, NULL);
268 tdesc_free_cb(tdp, NULL);
266}
267
268static int
269}
270
271static int
269tdata_label_cmp(labelent_t *le1, labelent_t *le2)
272tdata_label_cmp(void *arg1, void *arg2)
270{
273{
274 labelent_t *le1 = arg1;
275 labelent_t *le2 = arg2;
271 return (le1->le_idx - le2->le_idx);
272}
273
274void
276 return (le1->le_idx - le2->le_idx);
277}
278
279void
275tdata_label_add(tdata_t *td, char *label, int idx)
280tdata_label_add(tdata_t *td, const char *label, int idx)
276{
277 labelent_t *le = xmalloc(sizeof (*le));
278
279 le->le_name = xstrdup(label);
280 le->le_idx = (idx == -1 ? td->td_nextid - 1 : idx);
281
281{
282 labelent_t *le = xmalloc(sizeof (*le));
283
284 le->le_name = xstrdup(label);
285 le->le_idx = (idx == -1 ? td->td_nextid - 1 : idx);
286
282 slist_add(&td->td_labels, le, (int (*)())tdata_label_cmp);
287 slist_add(&td->td_labels, le, tdata_label_cmp);
283}
284
285static int
286tdata_label_top_cb(void *data, void *arg)
287{
288 labelent_t *le = data;
289 labelent_t **topp = arg;
290

--- 8 unchanged lines hidden (view full) ---

299 labelent_t *top = NULL;
300
301 (void) list_iter(td->td_labels, tdata_label_top_cb, &top);
302
303 return (top);
304}
305
306static int
288}
289
290static int
291tdata_label_top_cb(void *data, void *arg)
292{
293 labelent_t *le = data;
294 labelent_t **topp = arg;
295

--- 8 unchanged lines hidden (view full) ---

304 labelent_t *top = NULL;
305
306 (void) list_iter(td->td_labels, tdata_label_top_cb, &top);
307
308 return (top);
309}
310
311static int
307tdata_label_find_cb(labelent_t *le, labelent_t *tmpl)
312tdata_label_find_cb(void *arg1, void *arg2)
308{
313{
314 labelent_t *le = arg1;
315 labelent_t *tmpl = arg2;
309 return (streq(le->le_name, tmpl->le_name));
310}
311
312int
313tdata_label_find(tdata_t *td, char *label)
314{
315 labelent_t let;
316 labelent_t *ret;
317
318 if (streq(label, "BASE")) {
319 ret = (labelent_t *)list_first(td->td_labels);
320 return (ret ? ret->le_idx : -1);
321 }
322
323 let.le_name = label;
324
325 if (!(ret = (labelent_t *)list_find(td->td_labels, &let,
316 return (streq(le->le_name, tmpl->le_name));
317}
318
319int
320tdata_label_find(tdata_t *td, char *label)
321{
322 labelent_t let;
323 labelent_t *ret;
324
325 if (streq(label, "BASE")) {
326 ret = (labelent_t *)list_first(td->td_labels);
327 return (ret ? ret->le_idx : -1);
328 }
329
330 let.le_name = label;
331
332 if (!(ret = (labelent_t *)list_find(td->td_labels, &let,
326 (int (*)())tdata_label_find_cb)))
333 tdata_label_find_cb)))
327 return (-1);
328
329 return (ret->le_idx);
330}
331
332static int
333tdata_label_newmax_cb(void *data, void *arg)
334{

--- 11 unchanged lines hidden (view full) ---

346void
347tdata_label_newmax(tdata_t *td, int newmax)
348{
349 (void) list_iter(td->td_labels, tdata_label_newmax_cb, &newmax);
350}
351
352/*ARGSUSED1*/
353static void
334 return (-1);
335
336 return (ret->le_idx);
337}
338
339static int
340tdata_label_newmax_cb(void *data, void *arg)
341{

--- 11 unchanged lines hidden (view full) ---

353void
354tdata_label_newmax(tdata_t *td, int newmax)
355{
356 (void) list_iter(td->td_labels, tdata_label_newmax_cb, &newmax);
357}
358
359/*ARGSUSED1*/
360static void
354tdata_label_free_cb(labelent_t *le, void *private)
361tdata_label_free_cb(void *arg, void *private __unused)
355{
362{
363 labelent_t *le = arg;
356 if (le->le_name)
357 free(le->le_name);
358 free(le);
359}
360
361void
362tdata_label_free(tdata_t *td)
363{
364 if (le->le_name)
365 free(le->le_name);
366 free(le);
367}
368
369void
370tdata_label_free(tdata_t *td)
371{
364 list_free(td->td_labels, (void (*)())tdata_label_free_cb, NULL);
372 list_free(td->td_labels, tdata_label_free_cb, NULL);
365 td->td_labels = NULL;
366}
367
368tdata_t *
369tdata_new(void)
370{
371 tdata_t *new = xcalloc(sizeof (tdata_t));
372

--- 13 unchanged lines hidden (view full) ---

386 pthread_mutex_init(&new->td_mergelock, NULL);
387
388 return (new);
389}
390
391void
392tdata_free(tdata_t *td)
393{
373 td->td_labels = NULL;
374}
375
376tdata_t *
377tdata_new(void)
378{
379 tdata_t *new = xcalloc(sizeof (tdata_t));
380

--- 13 unchanged lines hidden (view full) ---

394 pthread_mutex_init(&new->td_mergelock, NULL);
395
396 return (new);
397}
398
399void
400tdata_free(tdata_t *td)
401{
394 hash_free(td->td_iihash, (void (*)())iidesc_free, NULL);
395 hash_free(td->td_layouthash, (void (*)())tdesc_free_cb, NULL);
402 hash_free(td->td_iihash, iidesc_free, NULL);
403 hash_free(td->td_layouthash, tdesc_free_cb, NULL);
396 hash_free(td->td_idhash, NULL, NULL);
397 list_free(td->td_fwdlist, NULL, NULL);
398
399 tdata_label_free(td);
400
401 free(td->td_parlabel);
402 free(td->td_parname);
403
404 pthread_mutex_destroy(&td->td_mergelock);
405
406 free(td);
407}
408
409/*ARGSUSED1*/
410static int
404 hash_free(td->td_idhash, NULL, NULL);
405 list_free(td->td_fwdlist, NULL, NULL);
406
407 tdata_label_free(td);
408
409 free(td->td_parlabel);
410 free(td->td_parname);
411
412 pthread_mutex_destroy(&td->td_mergelock);
413
414 free(td);
415}
416
417/*ARGSUSED1*/
418static int
411build_hashes(tdesc_t *ctdp, tdesc_t **ctdpp, void *private)
419build_hashes(tdesc_t *ctdp, tdesc_t **ctdpp __unused, void *private)
412{
413 tdata_t *td = private;
414
415 hash_add(td->td_idhash, ctdp);
416 hash_add(td->td_layouthash, ctdp);
417
418 return (1);
419}

--- 40 unchanged lines hidden (view full) ---

460
461 /* Add td2's type tree to the hashes */
462 tdata_build_hashes_common(td1, td2->td_iihash);
463
464 list_concat(&td1->td_fwdlist, td2->td_fwdlist);
465 td2->td_fwdlist = NULL;
466
467 slist_merge(&td1->td_labels, td2->td_labels,
420{
421 tdata_t *td = private;
422
423 hash_add(td->td_idhash, ctdp);
424 hash_add(td->td_layouthash, ctdp);
425
426 return (1);
427}

--- 40 unchanged lines hidden (view full) ---

468
469 /* Add td2's type tree to the hashes */
470 tdata_build_hashes_common(td1, td2->td_iihash);
471
472 list_concat(&td1->td_fwdlist, td2->td_fwdlist);
473 td2->td_fwdlist = NULL;
474
475 slist_merge(&td1->td_labels, td2->td_labels,
468 (int (*)())tdata_label_cmp);
476 tdata_label_cmp);
469 td2->td_labels = NULL;
470
471 /* free the td2 hashes (data is now part of td1) */
472
473 hash_free(td2->td_layouthash, NULL, NULL);
474 td2->td_layouthash = NULL;
475
476 hash_free(td2->td_iihash, NULL, NULL);
477 td2->td_iihash = NULL;
478
479 tdata_free(td2);
480}
477 td2->td_labels = NULL;
478
479 /* free the td2 hashes (data is now part of td1) */
480
481 hash_free(td2->td_layouthash, NULL, NULL);
482 td2->td_layouthash = NULL;
483
484 hash_free(td2->td_iihash, NULL, NULL);
485 td2->td_iihash = NULL;
486
487 tdata_free(td2);
488}