Lines Matching refs:st

118 morememory (struct Ebl_GStrtab *st, size_t len)  in morememory()  argument
128 newmem->next = st->memory; in morememory()
129 st->memory = newmem; in morememory()
130 st->backp = newmem->memory; in morememory()
131 st->left = len - offsetof (struct memoryblock, memory); in morememory()
136 ebl_gstrtabfree (struct Ebl_GStrtab *st) in ebl_gstrtabfree() argument
138 struct memoryblock *mb = st->memory; in ebl_gstrtabfree()
147 if (st->null.string != NULL) in ebl_gstrtabfree()
148 free ((char *) st->null.string); in ebl_gstrtabfree()
150 free (st); in ebl_gstrtabfree()
155 newstring (struct Ebl_GStrtab *st, const char *str, size_t len) in newstring() argument
159 - (((uintptr_t) st->backp) in newstring()
164 if (st->left < align + sizeof (struct Ebl_GStrent) + len * st->width) in newstring()
166 morememory (st, sizeof (struct Ebl_GStrent) + len * st->width); in newstring()
171 struct Ebl_GStrent *newstr = (struct Ebl_GStrent *) (st->backp + align); in newstring()
174 newstr->width = st->width; in newstring()
180 for (int j = st->width - 1; j >= 0; --j) in newstring()
181 newstr->reverse[i * st->width + j] = str[(len - 2 - i) * st->width + j]; in newstring()
182 for (size_t j = 0; j < st->width; ++j) in newstring()
183 newstr->reverse[(len - 1) * st->width + j] = '\0'; in newstring()
184 st->backp += align + sizeof (struct Ebl_GStrent) + len * st->width; in newstring()
185 st->left -= align + sizeof (struct Ebl_GStrent) + len * st->width; in newstring()
221 ebl_gstrtabadd (struct Ebl_GStrtab *st, const char *str, size_t len) in ebl_gstrtabadd() argument
232 for (j = 0; j < st->width; ++j) in ebl_gstrtabadd()
233 if (str[len * st->width + j] != '\0') in ebl_gstrtabadd()
235 while (j == st->width && ++len); in ebl_gstrtabadd()
240 if (len == 1 && st->null.string != NULL) in ebl_gstrtabadd()
241 return &st->null; in ebl_gstrtabadd()
244 newstr = newstring (st, str, len); in ebl_gstrtabadd()
249 sep = searchstring (&st->root, newstr); in ebl_gstrtabadd()
263 st->left += (st->backp - (char *) newstr) * st->width; in ebl_gstrtabadd()
264 st->backp = (char *) newstr; in ebl_gstrtabadd()
271 st->backp -= newstr->len; in ebl_gstrtabadd()
272 st->left += newstr->len; in ebl_gstrtabadd()
282 st->total += newstr->len - (*sep)->len; in ebl_gstrtabadd()
291 st->left += (st->backp - (char *) newstr) * st->width; in ebl_gstrtabadd()
292 st->backp = (char *) newstr; in ebl_gstrtabadd()
298 st->total += newstr->len; in ebl_gstrtabadd()
330 ebl_gstrtabfinalize (struct Ebl_GStrtab *st, Elf_Data *data) in ebl_gstrtabfinalize() argument
334 size_t nulllen = st->nullstr ? st->width : 0; in ebl_gstrtabfinalize()
337 data->d_buf = malloc (st->total + nulllen); in ebl_gstrtabfinalize()
343 if (st->nullstr) in ebl_gstrtabfinalize()
344 memset (data->d_buf, '\0', st->width); in ebl_gstrtabfinalize()
347 data->d_size = st->total + nulllen; in ebl_gstrtabfinalize()
356 copystrings (st->root, &endp, &copylen); in ebl_gstrtabfinalize()
357 assert (copylen == st->total * st->width + nulllen); in ebl_gstrtabfinalize()