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} |