diff options
Diffstat (limited to 'cddl/contrib/opensolaris/lib/libuutil')
6 files changed, 87 insertions, 78 deletions
diff --git a/cddl/contrib/opensolaris/lib/libuutil/common/libuutil.h b/cddl/contrib/opensolaris/lib/libuutil/common/libuutil.h index fcd5e79..269687e 100644 --- a/cddl/contrib/opensolaris/lib/libuutil/common/libuutil.h +++ b/cddl/contrib/opensolaris/lib/libuutil/common/libuutil.h @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -20,15 +19,13 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _LIBUUTIL_H #define _LIBUUTIL_H -#pragma ident "%Z%%M% %I% %E% SMI" - #include <solaris.h> #include <sys/types.h> #include <stdarg.h> @@ -149,6 +146,7 @@ extern int uu_open_tmp(const char *dir, uint_t uflags); /*PRINTFLIKE1*/ extern char *uu_msprintf(const char *format, ...); extern void *uu_zalloc(size_t); +extern char *uu_strdup(const char *); extern void uu_free(void *); /* diff --git a/cddl/contrib/opensolaris/lib/libuutil/common/libuutil_common.h b/cddl/contrib/opensolaris/lib/libuutil/common/libuutil_common.h index fc9cc7c..9ebaaed 100644 --- a/cddl/contrib/opensolaris/lib/libuutil/common/libuutil_common.h +++ b/cddl/contrib/opensolaris/lib/libuutil/common/libuutil_common.h @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -21,7 +20,7 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -30,16 +29,6 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include <solaris.h> - -/* - * We don't bind to the internal libc interfaces if this is a - * native build. - */ -#ifndef NATIVE_BUILD -#include "c_synonyms.h" -#endif - #include <libuutil.h> #include <libuutil_impl.h> diff --git a/cddl/contrib/opensolaris/lib/libuutil/common/uu_alloc.c b/cddl/contrib/opensolaris/lib/libuutil/common/uu_alloc.c index 7cdbf01..05d8622 100644 --- a/cddl/contrib/opensolaris/lib/libuutil/common/uu_alloc.c +++ b/cddl/contrib/opensolaris/lib/libuutil/common/uu_alloc.c @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -20,12 +19,10 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include "libuutil_common.h" #include <stdarg.h> @@ -55,6 +52,22 @@ uu_free(void *p) } char * +uu_strdup(const char *str) +{ + char *buf = NULL; + + if (str != NULL) { + size_t sz; + + sz = strlen(str) + 1; + buf = uu_zalloc(sz); + if (buf != NULL) + (void) memcpy(buf, str, sz); + } + return (buf); +} + +char * uu_msprintf(const char *format, ...) { va_list args; diff --git a/cddl/contrib/opensolaris/lib/libuutil/common/uu_avl.c b/cddl/contrib/opensolaris/lib/libuutil/common/uu_avl.c index 93feea9..308e920 100644 --- a/cddl/contrib/opensolaris/lib/libuutil/common/uu_avl.c +++ b/cddl/contrib/opensolaris/lib/libuutil/common/uu_avl.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -120,7 +120,8 @@ uu_avl_pool_destroy(uu_avl_pool_t *pp) UU_PTR_ENCODE(&pp->uap_null_avl)) { uu_panic("uu_avl_pool_destroy: Pool \"%.*s\" (%p) has " "outstanding avls, or is corrupt.\n", - sizeof (pp->uap_name), pp->uap_name, pp); + (int)sizeof (pp->uap_name), pp->uap_name, + (void *)pp); } } (void) pthread_mutex_lock(&uu_apool_list_lock); @@ -142,14 +143,14 @@ uu_avl_node_init(void *base, uu_avl_node_t *np, uu_avl_pool_t *pp) if (offset + sizeof (*np) > pp->uap_objsize) { uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): " "offset %ld doesn't fit in object (size %ld)\n", - base, np, pp, pp->uap_name, offset, - pp->uap_objsize); + base, (void *)np, (void *)pp, pp->uap_name, + (long)offset, (long)pp->uap_objsize); } if (offset != pp->uap_nodeoffset) { uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): " "offset %ld doesn't match pool's offset (%ld)\n", - base, np, pp, pp->uap_name, offset, - pp->uap_objsize); + base, (void *)np, (void *)pp, pp->uap_name, + (long)offset, (long)pp->uap_objsize); } } @@ -166,12 +167,12 @@ uu_avl_node_fini(void *base, uu_avl_node_t *np, uu_avl_pool_t *pp) if (na[0] == DEAD_MARKER && na[1] == DEAD_MARKER) { uu_panic("uu_avl_node_fini(%p, %p, %p (\"%s\")): " "node already finied\n", - base, np, pp, pp->uap_name); + base, (void *)np, (void *)pp, pp->uap_name); } if (na[0] != POOL_TO_MARKER(pp) || na[1] != 0) { uu_panic("uu_avl_node_fini(%p, %p, %p (\"%s\")): " "node corrupt, in tree, or in different pool\n", - base, np, pp, pp->uap_name); + base, (void *)np, (void *)pp, pp->uap_name); } } @@ -251,12 +252,13 @@ uu_avl_destroy(uu_avl_t *ap) if (ap->ua_debug) { if (avl_numnodes(&ap->ua_tree) != 0) { - uu_panic("uu_avl_destroy(%p): tree not empty\n", ap); + uu_panic("uu_avl_destroy(%p): tree not empty\n", + (void *)ap); } if (ap->ua_null_walk.uaw_next != &ap->ua_null_walk || ap->ua_null_walk.uaw_prev != &ap->ua_null_walk) { uu_panic("uu_avl_destroy(%p): outstanding walkers\n", - ap); + (void *)ap); } } (void) pthread_mutex_lock(&pp->uap_lock); @@ -441,7 +443,7 @@ uu_avl_remove(uu_avl_t *ap, void *elem) (void) _avl_walk_advance(wp, ap); } else if (wp->uaw_next_result != NULL) { uu_panic("uu_avl_remove(%p, %p): active non-robust " - "walker\n", ap, elem); + "walker\n", (void *)ap, elem); } } @@ -497,19 +499,19 @@ uu_avl_insert(uu_avl_t *ap, void *elem, uu_avl_index_t idx) if (na[1] != 0) uu_panic("uu_avl_insert(%p, %p, %p): node already " "in tree, or corrupt\n", - ap, elem, idx); + (void *)ap, elem, (void *)idx); if (na[0] == 0) uu_panic("uu_avl_insert(%p, %p, %p): node not " "initialized\n", - ap, elem, idx); + (void *)ap, elem, (void *)idx); if (na[0] != POOL_TO_MARKER(pp)) uu_panic("uu_avl_insert(%p, %p, %p): node from " "other pool, or corrupt\n", - ap, elem, idx); + (void *)ap, elem, (void *)idx); if (!INDEX_VALID(ap, idx)) uu_panic("uu_avl_insert(%p, %p, %p): %s\n", - ap, elem, idx, + (void *)ap, elem, (void *)idx, INDEX_CHECK(idx)? "outdated index" : "invalid index"); @@ -526,8 +528,8 @@ uu_avl_nearest_next(uu_avl_t *ap, uu_avl_index_t idx) { if (ap->ua_debug && !INDEX_VALID(ap, idx)) uu_panic("uu_avl_nearest_next(%p, %p): %s\n", - ap, idx, INDEX_CHECK(idx)? "outdated index" : - "invalid index"); + (void *)ap, (void *)idx, INDEX_CHECK(idx)? + "outdated index" : "invalid index"); return (avl_nearest(&ap->ua_tree, INDEX_DECODE(idx), AVL_AFTER)); } @@ -536,8 +538,8 @@ uu_avl_nearest_prev(uu_avl_t *ap, uu_avl_index_t idx) { if (ap->ua_debug && !INDEX_VALID(ap, idx)) uu_panic("uu_avl_nearest_prev(%p, %p): %s\n", - ap, idx, INDEX_CHECK(idx)? "outdated index" : - "invalid index"); + (void *)ap, (void *)idx, INDEX_CHECK(idx)? + "outdated index" : "invalid index"); return (avl_nearest(&ap->ua_tree, INDEX_DECODE(idx), AVL_BEFORE)); } diff --git a/cddl/contrib/opensolaris/lib/libuutil/common/uu_dprintf.c b/cddl/contrib/opensolaris/lib/libuutil/common/uu_dprintf.c index 5b990a5..528c3e7 100644 --- a/cddl/contrib/opensolaris/lib/libuutil/common/uu_dprintf.c +++ b/cddl/contrib/opensolaris/lib/libuutil/common/uu_dprintf.c @@ -33,7 +33,7 @@ #include <stdarg.h> #include <stdio.h> #include <stdlib.h> -#include <strings.h> +#include <string.h> #define FACILITY_FMT "%s (%s): " diff --git a/cddl/contrib/opensolaris/lib/libuutil/common/uu_list.c b/cddl/contrib/opensolaris/lib/libuutil/common/uu_list.c index d9dc86f..35c7ba8 100644 --- a/cddl/contrib/opensolaris/lib/libuutil/common/uu_list.c +++ b/cddl/contrib/opensolaris/lib/libuutil/common/uu_list.c @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -20,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -117,7 +116,8 @@ uu_list_pool_destroy(uu_list_pool_t *pp) UU_PTR_ENCODE(&pp->ulp_null_list)) { uu_panic("uu_list_pool_destroy: Pool \"%.*s\" (%p) has " "outstanding lists, or is corrupt.\n", - sizeof (pp->ulp_name), pp->ulp_name, pp); + (int)sizeof (pp->ulp_name), pp->ulp_name, + (void *)pp); } } (void) pthread_mutex_lock(&uu_lpool_list_lock); @@ -139,14 +139,14 @@ uu_list_node_init(void *base, uu_list_node_t *np_arg, uu_list_pool_t *pp) if (offset + sizeof (*np) > pp->ulp_objsize) { uu_panic("uu_list_node_init(%p, %p, %p (\"%s\")): " "offset %ld doesn't fit in object (size %ld)\n", - base, np, pp, pp->ulp_name, offset, - pp->ulp_objsize); + base, (void *)np, (void *)pp, pp->ulp_name, + (long)offset, (long)pp->ulp_objsize); } if (offset != pp->ulp_nodeoffset) { uu_panic("uu_list_node_init(%p, %p, %p (\"%s\")): " "offset %ld doesn't match pool's offset (%ld)\n", - base, np, pp, pp->ulp_name, offset, - pp->ulp_objsize); + base, (void *)np, (void *)pp, pp->ulp_name, + (long)offset, (long)pp->ulp_objsize); } } np->uln_next = POOL_TO_MARKER(pp); @@ -163,13 +163,13 @@ uu_list_node_fini(void *base, uu_list_node_t *np_arg, uu_list_pool_t *pp) np->uln_prev == NULL) { uu_panic("uu_list_node_fini(%p, %p, %p (\"%s\")): " "node already finied\n", - base, np_arg, pp, pp->ulp_name); + base, (void *)np_arg, (void *)pp, pp->ulp_name); } if (np->uln_next != POOL_TO_MARKER(pp) || np->uln_prev != NULL) { uu_panic("uu_list_node_fini(%p, %p, %p (\"%s\")): " "node corrupt or on list\n", - base, np_arg, pp, pp->ulp_name); + base, (void *)np_arg, (void *)pp, pp->ulp_name); } } np->uln_next = NULL; @@ -190,7 +190,7 @@ uu_list_create(uu_list_pool_t *pp, void *parent, uint32_t flags) if (pp->ulp_debug) uu_panic("uu_list_create(%p, ...): requested " "UU_LIST_SORTED, but pool has no comparison func\n", - pp); + (void *)pp); uu_set_error(UU_ERROR_NOT_SUPPORTED); return (NULL); } @@ -236,16 +236,16 @@ uu_list_destroy(uu_list_t *lp) if (lp->ul_null_node.uln_next != &lp->ul_null_node || lp->ul_null_node.uln_prev != &lp->ul_null_node) { uu_panic("uu_list_destroy(%p): list not empty\n", - lp); + (void *)lp); } if (lp->ul_numnodes != 0) { uu_panic("uu_list_destroy(%p): numnodes is nonzero, " - "but list is empty\n", lp); + "but list is empty\n", (void *)lp); } if (lp->ul_null_walk.ulw_next != &lp->ul_null_walk || lp->ul_null_walk.ulw_prev != &lp->ul_null_walk) { uu_panic("uu_list_destroy(%p): outstanding walkers\n", - lp); + (void *)lp); } } @@ -266,13 +266,14 @@ list_insert(uu_list_t *lp, uu_list_node_impl_t *np, uu_list_node_impl_t *prev, if (lp->ul_debug) { if (next->uln_prev != prev || prev->uln_next != next) uu_panic("insert(%p): internal error: %p and %p not " - "neighbors\n", lp, next, prev); + "neighbors\n", (void *)lp, (void *)next, + (void *)prev); if (np->uln_next != POOL_TO_MARKER(lp->ul_pool) || np->uln_prev != NULL) { uu_panic("insert(%p): elem %p node %p corrupt, " "not initialized, or already in a list.\n", - lp, NODE_TO_ELEM(lp, np), np); + (void *)lp, NODE_TO_ELEM(lp, np), (void *)np); } /* * invalidate outstanding uu_list_index_ts. @@ -299,12 +300,12 @@ uu_list_insert(uu_list_t *lp, void *elem, uu_list_index_t idx) if (lp->ul_debug) { if (!INDEX_VALID(lp, idx)) uu_panic("uu_list_insert(%p, %p, %p): %s\n", - lp, elem, idx, + (void *)lp, elem, (void *)idx, INDEX_CHECK(idx)? "outdated index" : "invalid index"); if (np->uln_prev == NULL) uu_panic("uu_list_insert(%p, %p, %p): out-of-date " - "index\n", lp, elem, idx); + "index\n", (void *)lp, elem, (void *)idx); } list_insert(lp, ELEM_TO_NODE(lp, elem), np->uln_prev, np); @@ -354,11 +355,12 @@ uu_list_nearest_next(uu_list_t *lp, uu_list_index_t idx) if (lp->ul_debug) { if (!INDEX_VALID(lp, idx)) uu_panic("uu_list_nearest_next(%p, %p): %s\n", - lp, idx, INDEX_CHECK(idx)? "outdated index" : + (void *)lp, (void *)idx, + INDEX_CHECK(idx)? "outdated index" : "invalid index"); if (np->uln_prev == NULL) uu_panic("uu_list_nearest_next(%p, %p): out-of-date " - "index\n", lp, idx); + "index\n", (void *)lp, (void *)idx); } if (np == &lp->ul_null_node) @@ -378,11 +380,11 @@ uu_list_nearest_prev(uu_list_t *lp, uu_list_index_t idx) if (lp->ul_debug) { if (!INDEX_VALID(lp, idx)) uu_panic("uu_list_nearest_prev(%p, %p): %s\n", - lp, idx, INDEX_CHECK(idx)? "outdated index" : - "invalid index"); + (void *)lp, (void *)idx, INDEX_CHECK(idx)? + "outdated index" : "invalid index"); if (np->uln_prev == NULL) uu_panic("uu_list_nearest_prev(%p, %p): out-of-date " - "index\n", lp, idx); + "index\n", (void *)lp, (void *)idx); } if ((np = np->uln_prev) == &lp->ul_null_node) @@ -409,6 +411,11 @@ list_walk_init(uu_list_walk_t *wp, uu_list_t *lp, uint32_t flags) wp->ulw_next_result = lp->ul_null_node.uln_prev; if (lp->ul_debug || robust) { + /* + * Add this walker to the list's list of walkers so + * uu_list_remove() can advance us if somebody tries to + * remove ulw_next_result. + */ wp->ulw_next = next = &lp->ul_null_walk; wp->ulw_prev = prev = next->ulw_prev; next->ulw_prev = wp; @@ -538,7 +545,7 @@ uu_list_remove(uu_list_t *lp, void *elem) if (lp->ul_debug) { if (np->uln_prev == NULL) uu_panic("uu_list_remove(%p, %p): elem not on list\n", - lp, elem); + (void *)lp, elem); /* * invalidate outstanding uu_list_index_ts. */ @@ -556,7 +563,7 @@ uu_list_remove(uu_list_t *lp, void *elem) (void) list_walk_advance(wp, lp); } else if (wp->ulw_next_result != NULL) { uu_panic("uu_list_remove(%p, %p): active non-robust " - "walker\n", lp, elem); + "walker\n", (void *)lp, elem); } } @@ -578,8 +585,8 @@ uu_list_teardown(uu_list_t *lp, void **cookie) * XXX: disable list modification until list is empty */ if (lp->ul_debug && *cookie != NULL) - uu_panic("uu_list_teardown(%p, %p): unexpected cookie\n", lp, - cookie); + uu_panic("uu_list_teardown(%p, %p): unexpected cookie\n", + (void *)lp, (void *)cookie); ep = uu_list_first(lp); if (ep) @@ -599,12 +606,12 @@ uu_list_insert_before(uu_list_t *lp, void *target, void *elem) if (np->uln_prev == NULL) uu_panic("uu_list_insert_before(%p, %p, %p): %p is " "not currently on a list\n", - lp, target, elem, target); + (void *)lp, target, elem, target); } if (lp->ul_sorted) { if (lp->ul_debug) uu_panic("uu_list_insert_before(%p, ...): list is " - "UU_LIST_SORTED\n", lp); + "UU_LIST_SORTED\n", (void *)lp); uu_set_error(UU_ERROR_NOT_SUPPORTED); return (-1); } @@ -625,12 +632,12 @@ uu_list_insert_after(uu_list_t *lp, void *target, void *elem) if (np->uln_prev == NULL) uu_panic("uu_list_insert_after(%p, %p, %p): %p is " "not currently on a list\n", - lp, target, elem, target); + (void *)lp, target, elem, target); } if (lp->ul_sorted) { if (lp->ul_debug) uu_panic("uu_list_insert_after(%p, ...): list is " - "UU_LIST_SORTED\n", lp); + "UU_LIST_SORTED\n", (void *)lp); uu_set_error(UU_ERROR_NOT_SUPPORTED); return (-1); } |