Home | History | Annotate | Download | only in src

Lines Matching refs:strs

99 int strs_init(struct strs **strs, size_t size)
101 struct strs *new;
103 *strs = NULL;
105 new = malloc(sizeof(struct strs));
121 *strs = new;
126 void strs_destroy(struct strs **strs)
128 if (!strs || !*strs) {
132 free((*strs)->list);
133 (*strs)->list = NULL;
134 (*strs)->num = 0;
135 (*strs)->size = 0;
136 free(*strs);
137 *strs = NULL;
140 void strs_free_all(struct strs *strs)
142 if (!strs) {
146 while (strs->num > 0) {
147 strs->num--;
148 free(strs->list[strs->num]);
152 int strs_add(struct strs *strs, char *s)
154 if (strs->num + 1 > strs->size) {
156 unsigned i = strs->size;
157 strs->size *= 2;
158 new = realloc(strs->list, sizeof(char *)*strs->size);
163 strs->list = new;
164 memset(&strs->list[i], 0, sizeof(char *)*(strs->size-i));
167 strs->list[strs->num] = s;
168 strs->num++;
173 int strs_create_and_add(struct strs *strs, const char *fmt, int num, ...)
188 rc = strs_add(strs, str);
200 char *strs_remove_last(struct strs *strs)
202 if (strs->num == 0) {
205 strs->num--;
206 return strs->list[strs->num];
209 int strs_add_at_index(struct strs *strs, char *s, unsigned index)
211 if (index >= strs->size) {
213 unsigned i = strs->size;
214 while (index >= strs->size) {
215 strs->size *= 2;
217 new = realloc(strs->list, sizeof(char *)*strs->size);
222 strs->list = new;
223 memset(&strs->list[i], 0, sizeof(char *)*(strs->size - i));
226 strs->list[index] = s;
227 if (index >= strs->num) {
228 strs->num = index+1;
234 char *strs_read_at_index(struct strs *strs, unsigned index)
236 if (index >= strs->num) {
240 return strs->list[index];
250 void strs_sort(struct strs *strs)
252 if (strs->num == 0) {
255 qsort(strs->list, strs->num, sizeof(char *), strs_cmp);
258 unsigned strs_num_items(struct strs *strs)
260 return strs->num;
263 size_t strs_len_items(struct strs *strs)
268 for (i=0; i<strs->num; i++) {
269 if (!strs->list[i]) continue;
270 len += strlen(strs->list[i]);
276 char *strs_to_str(struct strs *strs)
284 if (strs->num == 0) {
288 /* strs->num added because either ' ' or '\0' follows each item */
289 len = strs_len_items(strs) + strs->num;
297 for (i=0; i<strs->num; i++) {
298 if (!strs->list[i]) continue;
299 len = strlen(strs->list[i]);
300 rc = snprintf(p, len+1, "%s", strs->list[i]);
307 if (i < strs->num - 1) {
318 void strs_write_each(struct strs *strs, FILE *out)
322 for (i=0; i<strs->num; i++) {
323 if (!strs->list[i]) {
326 sepol_printf(out, "%s\n",strs->list[i]);
330 void strs_write_each_indented(struct strs *strs, FILE *out, int indent)
334 for (i=0; i<strs->num; i++) {
335 if (!strs->list[i]) {
339 sepol_printf(out, "%s\n",strs->list[i]);
345 struct strs *strs = (struct strs *)args;
348 return strs_add_at_index(strs, key, datum->value-1);
351 int ebitmap_to_strs(struct ebitmap *map, struct strs *strs, char **val_to_name)
360 rc = strs_add(strs, val_to_name[i]);
371 struct strs *strs;
375 rc = strs_init(&strs, 32);
380 rc = ebitmap_to_strs(map, strs, val_to_name);
386 strs_sort(strs);
389 str = strs_to_str(strs);
392 strs_destroy(&strs);
397 int stack_init(struct strs **stack)
402 void stack_destroy(struct strs **stack)
407 int stack_push(struct strs *stack, char *s)
412 char *stack_pop(struct strs *stack)
417 int stack_empty(struct strs *stack)