static pgroup_t * internal_pgroup_create_common(entity_t *e, const char *name, const char *type, boolean_t unique) { pgroup_t *pg; pg = internal_pgroup_find(e, name, type); if (pg != NULL) { if (unique == B_TRUE) { return (NULL); } else { return (pg); } } pg = internal_pgroup_new(); (void) internal_attach_pgroup(e, pg); pg->sc_pgroup_name = strdup(name); pg->sc_pgroup_flags = 0; if (type != NULL) { pg->sc_pgroup_type = strdup(type); } else { est->sc_miss_type = B_TRUE; pg->sc_pgroup_type = NULL; } if (pg->sc_pgroup_name == NULL || (e->sc_op != SVCCFG_OP_APPLY && pg->sc_pgroup_type == NULL)) uu_die(gettext("Could not duplicate string")); return (pg); }
pgroup_t * internal_pgroup_find_or_create(entity_t *e, const char *name, const char *type) { pgroup_t *pg; pg = internal_pgroup_find(e, name, type); if (pg != NULL) return (pg); pg = internal_pgroup_new(); (void) internal_attach_pgroup(e, pg); pg->sc_pgroup_name = strdup(name); pg->sc_pgroup_type = strdup(type); pg->sc_pgroup_flags = 0; if (pg->sc_pgroup_name == NULL || pg->sc_pgroup_type == NULL) uu_die(gettext("Could not duplicate string")); return (pg); }
/* * Returns * 0 - success * ECANCELED - pg was deleted * ECONNABORTED - repository disconnected * ENOMEM - out of memory */ int load_pg_attrs(const scf_propertygroup_t *pg, pgroup_t **ipgp) { pgroup_t *ipg; ipg = internal_pgroup_new(); if (scf_pg_get_flags(pg, &ipg->sc_pgroup_flags) != 0) { switch (scf_error()) { case SCF_ERROR_DELETED: internal_pgroup_free(ipg); return (ECANCELED); case SCF_ERROR_CONNECTION_BROKEN: internal_pgroup_free(ipg); return (ECONNABORTED); case SCF_ERROR_NOT_SET: case SCF_ERROR_NOT_BOUND: default: bad_error("scf_pg_get_name", scf_error()); } } if (scf_pg_get_name(pg, loadbuf, loadbuf_sz) < 0) { switch (scf_error()) { case SCF_ERROR_DELETED: internal_pgroup_free(ipg); return (ECANCELED); case SCF_ERROR_CONNECTION_BROKEN: internal_pgroup_free(ipg); return (ECONNABORTED); case SCF_ERROR_NOT_SET: case SCF_ERROR_NOT_BOUND: default: bad_error("scf_pg_get_name", scf_error()); } } ipg->sc_pgroup_name = strdup(loadbuf); if (ipg->sc_pgroup_name == NULL) { internal_pgroup_free(ipg); return (ENOMEM); } if (scf_pg_get_type(pg, loadbuf, loadbuf_sz) < 0) { switch (scf_error()) { case SCF_ERROR_DELETED: free((char *)ipg->sc_pgroup_name); internal_pgroup_free(ipg); return (ECANCELED); case SCF_ERROR_CONNECTION_BROKEN: free((char *)ipg->sc_pgroup_name); internal_pgroup_free(ipg); return (ECONNABORTED); case SCF_ERROR_NOT_SET: case SCF_ERROR_NOT_BOUND: default: bad_error("scf_pg_get_name", scf_error()); } } ipg->sc_pgroup_type = strdup(loadbuf); if (ipg->sc_pgroup_type == NULL) { free((char *)ipg->sc_pgroup_name); internal_pgroup_free(ipg); return (ENOMEM); } *ipgp = ipg; return (0); }