Lines Matching defs:strs

107 int strs_init(struct strs **strs, size_t size)
109 struct strs *new;
115 *strs = NULL;
117 new = malloc(sizeof(struct strs));
133 *strs = new;
138 void strs_destroy(struct strs **strs)
140 if (!strs || !*strs) {
144 free((*strs)->list);
145 (*strs)->list = NULL;
146 (*strs)->num = 0;
147 (*strs)->size = 0;
148 free(*strs);
149 *strs = NULL;
152 void strs_free_all(struct strs *strs)
154 if (!strs) {
158 while (strs->num > 0) {
159 strs->num--;
160 free(strs->list[strs->num]);
164 int strs_add(struct strs *strs, char *s)
166 if (strs->num + 1 > strs->size) {
168 size_t i = strs->size;
169 strs->size *= 2;
170 new = reallocarray(strs->list, strs->size, sizeof(char *));
175 strs->list = new;
176 memset(&strs->list[i], 0, sizeof(char *)*(strs->size-i));
179 strs->list[strs->num] = s;
180 strs->num++;
185 int strs_create_and_add(struct strs *strs, const char *fmt, int num, ...)
200 rc = strs_add(strs, str);
212 char *strs_remove_last(struct strs *strs)
214 if (strs->num == 0) {
217 strs->num--;
218 return strs->list[strs->num];
221 int strs_add_at_index(struct strs *strs, char *s, size_t index)
223 if (index >= strs->size) {
225 size_t i = strs->size;
226 while (index >= strs->size) {
227 strs->size *= 2;
229 new = reallocarray(strs->list, strs->size, sizeof(char *));
234 strs->list = new;
235 memset(&strs->list[i], 0, sizeof(char *)*(strs->size - i));
238 strs->list[index] = s;
239 if (index >= strs->num) {
240 strs->num = index+1;
246 char *strs_read_at_index(struct strs *strs, size_t index)
248 if (index >= strs->num) {
252 return strs->list[index];
262 void strs_sort(struct strs *strs)
264 if (strs->num == 0) {
267 qsort(strs->list, strs->num, sizeof(char *), strs_cmp);
270 unsigned strs_num_items(const struct strs *strs)
272 return strs->num;
275 size_t strs_len_items(const struct strs *strs)
280 for (i=0; i<strs->num; i++) {
281 if (!strs->list[i]) continue;
282 len += strlen(strs->list[i]);
288 char *strs_to_str(const struct strs *strs)
296 if (strs->num == 0) {
300 /* strs->num added because either ' ' or '\0' follows each item */
301 len = strs_len_items(strs) + strs->num;
309 for (i=0; i<strs->num; i++) {
310 if (!strs->list[i]) continue;
311 len = strlen(strs->list[i]);
312 rc = snprintf(p, len+1, "%s", strs->list[i]);
319 if (i < strs->num - 1) {
330 void strs_write_each(const struct strs *strs, FILE *out)
334 for (i=0; i<strs->num; i++) {
335 if (!strs->list[i]) {
338 sepol_printf(out, "%s\n",strs->list[i]);
342 void strs_write_each_indented(const struct strs *strs, FILE *out, int indent)
346 for (i=0; i<strs->num; i++) {
347 if (!strs->list[i]) {
351 sepol_printf(out, "%s\n",strs->list[i]);
357 struct strs *strs = (struct strs *)args;
360 return strs_add_at_index(strs, key, datum->value-1);
363 int ebitmap_to_strs(const struct ebitmap *map, struct strs *strs, char **val_to_name)
373 rc = strs_add(strs, val_to_name[i]);
384 struct strs *strs;
388 rc = strs_init(&strs, 32);
393 rc = ebitmap_to_strs(map, strs, val_to_name);
399 strs_sort(strs);
402 str = strs_to_str(strs);
405 strs_destroy(&strs);
410 int strs_stack_init(struct strs **stack)
415 void strs_stack_destroy(struct strs **stack)
420 int strs_stack_push(struct strs *stack, char *s)
425 char *strs_stack_pop(struct strs *stack)
430 int strs_stack_empty(const struct strs *stack)