Changeset View
Changeset View
Standalone View
Standalone View
sys/geom/geom_subr.c
Show First 20 Lines • Show All 646 Lines • ▼ Show 20 Lines | g_provider_add_alias(struct g_provider *pp, const char *fmt, ...) | ||||
/* | /* | ||||
* Generate the alias string and save it in the list. | * Generate the alias string and save it in the list. | ||||
*/ | */ | ||||
sb = sbuf_new_auto(); | sb = sbuf_new_auto(); | ||||
va_start(ap, fmt); | va_start(ap, fmt); | ||||
sbuf_vprintf(sb, fmt, ap); | sbuf_vprintf(sb, fmt, ap); | ||||
va_end(ap); | va_end(ap); | ||||
sbuf_finish(sb); | sbuf_finish(sb); | ||||
LIST_FOREACH(gap, &pp->aliases, ga_next) { | |||||
imp: This is good no matter what we do | |||||
if (strcmp(gap->ga_alias, sbuf_data(sb)) != 0) | |||||
continue; | |||||
/* Don't re-add the same alias. */ | |||||
sbuf_delete(sb); | |||||
return; | |||||
} | |||||
gap = g_malloc(sizeof(*gap) + sbuf_len(sb) + 1, M_WAITOK | M_ZERO); | gap = g_malloc(sizeof(*gap) + sbuf_len(sb) + 1, M_WAITOK | M_ZERO); | ||||
memcpy((char *)(gap + 1), sbuf_data(sb), sbuf_len(sb)); | memcpy((char *)(gap + 1), sbuf_data(sb), sbuf_len(sb)); | ||||
sbuf_delete(sb); | sbuf_delete(sb); | ||||
gap->ga_alias = (const char *)(gap + 1); | gap->ga_alias = (const char *)(gap + 1); | ||||
LIST_INSERT_HEAD(&pp->aliases, gap, ga_next); | LIST_INSERT_HEAD(&pp->aliases, gap, ga_next); | ||||
} | } | ||||
void | void | ||||
▲ Show 20 Lines • Show All 1,008 Lines • Show Last 20 Lines |
This is good no matter what we do