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