Lines Matching defs:sp

41 dt_strtab_grow(dt_strtab_t *sp)
45 if ((ptr = malloc(sp->str_bufsz)) == NULL)
48 bufs = realloc(sp->str_bufs, (sp->str_nbufs + 1) * sizeof (char *));
55 sp->str_nbufs++;
56 sp->str_bufs = bufs;
57 sp->str_ptr = ptr;
58 sp->str_bufs[sp->str_nbufs - 1] = sp->str_ptr;
66 dt_strtab_t *sp = malloc(sizeof (dt_strtab_t));
71 if (sp == NULL)
74 bzero(sp, sizeof (dt_strtab_t));
75 sp->str_hash = malloc(nbuckets * sizeof (dt_strhash_t *));
77 if (sp->str_hash == NULL)
80 bzero(sp->str_hash, nbuckets * sizeof (dt_strhash_t *));
81 sp->str_hashsz = nbuckets;
82 sp->str_bufs = NULL;
83 sp->str_ptr = NULL;
84 sp->str_nbufs = 0;
85 sp->str_bufsz = bufsz;
86 sp->str_nstrs = 1;
87 sp->str_size = 1;
89 if (dt_strtab_grow(sp) == -1)
92 *sp->str_ptr++ = '\0';
93 return (sp);
96 dt_strtab_destroy(sp);
101 dt_strtab_destroy(dt_strtab_t *sp)
106 for (i = 0; i < sp->str_hashsz; i++) {
107 for (hp = sp->str_hash[i]; hp != NULL; hp = hq) {
113 for (i = 0; i < sp->str_nbufs; i++)
114 free(sp->str_bufs[i]);
116 if (sp->str_hash != NULL)
117 free(sp->str_hash);
118 if (sp->str_bufs != NULL)
119 free(sp->str_bufs);
121 free(sp);
147 dt_strtab_compare(dt_strtab_t *sp, dt_strhash_t *hp,
156 if (buf == sp->str_bufs[b] + sp->str_bufsz)
157 buf = sp->str_bufs[++b];
159 resid = sp->str_bufs[b] + sp->str_bufsz - buf;
174 dt_strtab_copyin(dt_strtab_t *sp, const char *str, size_t len)
176 char *old_p = sp->str_ptr;
177 ulong_t old_n = sp->str_nbufs;
179 ulong_t b = sp->str_nbufs - 1;
183 if (sp->str_ptr == sp->str_bufs[b] + sp->str_bufsz) {
184 if (dt_strtab_grow(sp) == -1)
189 resid = sp->str_bufs[b] + sp->str_bufsz - sp->str_ptr;
191 bcopy(str, sp->str_ptr, n);
193 sp->str_ptr += n;
201 while (sp->str_nbufs != old_n)
202 free(sp->str_bufs[--sp->str_nbufs]);
204 sp->str_ptr = old_p;
209 dt_strtab_index(dt_strtab_t *sp, const char *str)
218 h = dt_strtab_hash(str, &len) % sp->str_hashsz;
220 for (hp = sp->str_hash[h]; hp != NULL; hp = hp->str_next) {
221 if (dt_strtab_compare(sp, hp, str, len + 1) == 0)
229 dt_strtab_insert(dt_strtab_t *sp, const char *str)
236 if ((off = dt_strtab_index(sp, str)) != -1)
239 h = dt_strtab_hash(str, &len) % sp->str_hashsz;
248 hp->str_data = sp->str_ptr;
249 hp->str_buf = sp->str_nbufs - 1;
250 hp->str_off = sp->str_size;
252 hp->str_next = sp->str_hash[h];
258 if (dt_strtab_copyin(sp, str, len + 1) == -1)
261 sp->str_nstrs++;
262 sp->str_size += len + 1;
263 sp->str_hash[h] = hp;
269 dt_strtab_size(const dt_strtab_t *sp)
271 return (sp->str_size);
275 dt_strtab_write(const dt_strtab_t *sp, dt_strtab_write_f *func, void *private)
281 for (i = 0; i < sp->str_nbufs; i++, total += res) {
282 if (i == sp->str_nbufs - 1)
283 n = sp->str_ptr - sp->str_bufs[i];
285 n = sp->str_bufsz;
287 if ((res = func(sp->str_bufs[i], n, total, private)) <= 0)
291 if (total == 0 && sp->str_size != 0)