Пример #1
0
static void
add_prop(char *property)
{
	svcprop_prop_node_t *p, *last;
	char *slash;

	const char * const invalid_component_emsg =
	    gettext("Invalid component name `%s'.\n");

	/* FMRI syntax knowledge. */
	slash = strchr(property, '/');
	if (slash != NULL) {
		if (strchr(slash + 1, '/') != NULL) {
			uu_warn(gettext("-p argument `%s' has too many "
			    "components.\n"), property);
			usage();
		}
	}

	if (slash != NULL)
		*slash = '\0';

	p = safe_malloc(sizeof (svcprop_prop_node_t));
	uu_list_node_init(p, &p->spn_list_node, prop_pool);

	p->spn_comp1 = property;
	p->spn_comp2 = (slash == NULL) ? NULL : slash + 1;

	if (uu_check_name(p->spn_comp1, UU_NAME_DOMAIN) == -1)
		uu_xdie(UU_EXIT_USAGE, invalid_component_emsg, p->spn_comp1);
	if (p->spn_comp2 != NULL &&
	    uu_check_name(p->spn_comp2, UU_NAME_DOMAIN) == -1)
		uu_xdie(UU_EXIT_USAGE, invalid_component_emsg, p->spn_comp2);

	last = uu_list_last(prop_list);
	if (last != NULL) {
		if ((last->spn_comp2 == NULL) ^ (p->spn_comp2 == NULL)) {
			/*
			 * The -p options have mixed numbers of components.
			 * If they both turn out to be valid, then the
			 * single-component ones will specify property groups,
			 * so we need to turn on types to keep the output of
			 * display_prop() consistent with display_pg().
			 */
			types = 1;
		}
	}

	(void) uu_list_insert_after(prop_list, NULL, p);
}
Пример #2
0
uu_dprintf_t *
uu_dprintf_create(const char *name, uu_dprintf_severity_t severity,
    uint_t flags)
{
	uu_dprintf_t *D;

	if (uu_check_name(name, UU_NAME_DOMAIN) == -1) {
		uu_set_error(UU_ERROR_INVALID_ARGUMENT);
		return (NULL);
	}

	if ((D = uu_zalloc(sizeof (uu_dprintf_t))) == NULL)
		return (NULL);

	if (name != NULL) {
		D->uud_name = strdup(name);
		if (D->uud_name == NULL) {
			uu_free(D);
			return (NULL);
		}
	} else {
		D->uud_name = NULL;
	}

	D->uud_severity = severity;
	D->uud_flags = flags;

	return (D);
}
Пример #3
0
uu_avl_pool_t *
uu_avl_pool_create(const char *name, size_t objsize, size_t nodeoffset,
    uu_compare_fn_t *compare_func, uint32_t flags)
{
	uu_avl_pool_t *pp, *next, *prev;

	if (name == NULL ||
	    uu_check_name(name, UU_NAME_DOMAIN) == -1 ||
	    nodeoffset + sizeof (uu_avl_node_t) > objsize ||
	    compare_func == NULL) {
		uu_set_error(UU_ERROR_INVALID_ARGUMENT);
		return (NULL);
	}

	if (flags & ~UU_AVL_POOL_DEBUG) {
		uu_set_error(UU_ERROR_UNKNOWN_FLAG);
		return (NULL);
	}

	pp = uu_zalloc(sizeof (uu_avl_pool_t));
	if (pp == NULL) {
		uu_set_error(UU_ERROR_NO_MEMORY);
		return (NULL);
	}

	(void) strlcpy(pp->uap_name, name, sizeof (pp->uap_name));
	pp->uap_nodeoffset = nodeoffset;
	pp->uap_objsize = objsize;
	pp->uap_cmp = compare_func;
	if (flags & UU_AVL_POOL_DEBUG)
		pp->uap_debug = 1;
	pp->uap_last_index = 0;

	(void) pthread_mutex_init(&pp->uap_lock, NULL);

	pp->uap_null_avl.ua_next_enc = UU_PTR_ENCODE(&pp->uap_null_avl);
	pp->uap_null_avl.ua_prev_enc = UU_PTR_ENCODE(&pp->uap_null_avl);

	(void) pthread_mutex_lock(&uu_apool_list_lock);
	pp->uap_next = next = &uu_null_apool;
	pp->uap_prev = prev = next->uap_prev;
	next->uap_prev = pp;
	prev->uap_next = pp;
	(void) pthread_mutex_unlock(&uu_apool_list_lock);

	return (pp);
}