Deleted Added
full compact
43c43
< __FBSDID("$FreeBSD: head/sys/security/mac/mac_framework.c 116678 2003-06-22 08:41:43Z phk $");
---
> __FBSDID("$FreeBSD: head/sys/security/mac/mac_framework.c 116701 2003-06-23 01:26:34Z rwatson $");
58a59
> #include <sys/sbuf.h>
401,403c402,404
< char *curptr, *curptr_start, *element_name, *element_temp; \
< size_t left, left_start, len; \
< int claimed, first, first_start, ignorenotfound; \
---
> int claimed, first, ignorenotfound, savedlen; \
> char *element_name, *element_temp; \
> struct sbuf sb; \
406,409d406
< element_temp = elementlist; \
< curptr = outbuf; \
< curptr[0] = '\0'; \
< left = outbuflen; \
410a408,409
> sbuf_new(&sb, outbuf, outbuflen, SBUF_FIXEDLEN); \
> element_temp = elementlist; \
412,414d410
< curptr_start = curptr; \
< left_start = left; \
< first_start = first; \
418c414
< } else \
---
> } else \
420c416
< claimed = 0; \
---
> savedlen = sbuf_len(&sb); \
422,423c418
< len = snprintf(curptr, left, "%s/", \
< element_name); \
---
> error = sbuf_printf(&sb, "%s/", element_name); \
426,429c421,423
< len = snprintf(curptr, left, ",%s/", \
< element_name); \
< if (len >= left) { \
< error = EINVAL; /* XXXMAC: E2BIG */ \
---
> error = sbuf_printf(&sb, ",%s/", element_name); \
> if (error == -1) { \
> error = EINVAL; /* XXX: E2BIG? */ \
432,434c426
< curptr += len; \
< left -= len; \
< \
---
> claimed = 0; \
436c428
< curptr, left, &len, &claimed); \
---
> &sb, &claimed); \
439,456c431,435
< if (claimed == 1) { \
< if (len >= outbuflen) { \
< error = EINVAL; /* XXXMAC: E2BIG */ \
< break; \
< } \
< curptr += len; \
< left -= len; \
< } else if (claimed == 0 && ignorenotfound) { \
< /* \
< * Revert addition of the label element \
< * name. \
< */ \
< curptr = curptr_start; \
< *curptr = '\0'; \
< left = left_start; \
< first = first_start; \
< } else { \
< error = EINVAL; /* XXXMAC: ENOLABEL */ \
---
> if (claimed == 0 && ignorenotfound) { \
> /* Revert last label name. */ \
> sbuf_setpos(&sb, savedlen); \
> } else if (claimed != 1) { \
> error = EINVAL; /* XXX: ENOLABEL? */ \
459a439
> sbuf_finish(&sb); \