Lines Matching defs:sp

42 strtab_grow(strtab_t *sp)
44 sp->str_nbufs++;
45 sp->str_bufs = xrealloc(sp->str_bufs, sp->str_nbufs * sizeof (char *));
46 sp->str_ptr = xmalloc(sp->str_bufsz);
47 sp->str_bufs[sp->str_nbufs - 1] = sp->str_ptr;
51 strtab_create(strtab_t *sp)
53 sp->str_hash = xcalloc(STRTAB_HASHSZ * sizeof (strhash_t *));
54 sp->str_hashsz = STRTAB_HASHSZ;
55 sp->str_bufs = NULL;
56 sp->str_ptr = NULL;
57 sp->str_nbufs = 0;
58 sp->str_bufsz = STRTAB_BUFSZ;
59 sp->str_nstrs = 1;
60 sp->str_size = 1;
62 strtab_grow(sp);
63 *sp->str_ptr++ = '\0';
67 strtab_destroy(strtab_t *sp)
72 for (i = 0; i < sp->str_hashsz; i++) {
73 for (hp = sp->str_hash[i]; hp != NULL; hp = hq) {
79 for (i = 0; i < sp->str_nbufs; i++)
80 free(sp->str_bufs[i]);
82 free(sp->str_hash);
83 free(sp->str_bufs);
107 strtab_compare(strtab_t *sp, strhash_t *hp, const char *str, size_t len)
115 if (buf == sp->str_bufs[b] + sp->str_bufsz)
116 buf = sp->str_bufs[++b];
118 resid = sp->str_bufs[b] + sp->str_bufsz - buf;
133 strtab_copyin(strtab_t *sp, const char *str, size_t len)
135 ulong_t b = sp->str_nbufs - 1;
139 if (sp->str_ptr == sp->str_bufs[b] + sp->str_bufsz) {
140 strtab_grow(sp);
144 resid = sp->str_bufs[b] + sp->str_bufsz - sp->str_ptr;
146 bcopy(str, sp->str_ptr, n);
148 sp->str_ptr += n;
155 strtab_insert(strtab_t *sp, const char *str)
164 h = strtab_hash(str, &len) % sp->str_hashsz;
170 for (hp = sp->str_hash[h]; hp != NULL; hp = hp->str_next) {
171 if (strtab_compare(sp, hp, str, len + 1) == 0)
181 hp->str_data = sp->str_ptr;
182 hp->str_buf = sp->str_nbufs - 1;
183 hp->str_off = sp->str_size;
185 hp->str_next = sp->str_hash[h];
187 sp->str_hash[h] = hp;
193 strtab_copyin(sp, str, len + 1);
194 sp->str_nstrs++;
195 sp->str_size += len + 1;
201 strtab_size(const strtab_t *sp)
203 return (sp->str_size);
207 strtab_write(const strtab_t *sp,
214 for (i = 0; i < sp->str_nbufs; i++, total += res) {
215 if (i == sp->str_nbufs - 1)
216 n = sp->str_ptr - sp->str_bufs[i];
218 n = sp->str_bufsz;
220 if ((res = func(sp->str_bufs[i], n, priv)) <= 0)
224 if (total == 0 && sp->str_size != 0)
231 strtab_print(const strtab_t *sp)
236 for (i = 0; i < sp->str_hashsz; i++) {
237 for (hp = sp->str_hash[i]; hp != NULL; hp = hp->str_next) {
245 if (buf == sp->str_bufs[b] + sp->str_bufsz)
246 buf = sp->str_bufs[++b];
248 resid = sp->str_bufs[b] + sp->str_bufsz - buf;