Lines Matching refs:tok

80 tok_finish(Tokenizer *tok)
83 *tok->wptr = '\0';
84 if ((tok->flags & TOK_KEEP) || tok->wptr != tok->wstart) {
85 tok->argv[tok->argc++] = tok->wstart;
86 tok->argv[tok->argc] = NULL;
87 tok->wstart = ++tok->wptr;
89 tok->flags &= ~TOK_KEEP;
99 Tokenizer *tok = (Tokenizer *) tok_malloc(sizeof(Tokenizer));
101 if (tok == NULL)
103 tok->ifs = tok_strdup(ifs ? ifs : IFS);
104 if (tok->ifs == NULL) {
105 tok_free((ptr_t)tok);
108 tok->argc = 0;
109 tok->amax = AINCR;
110 tok->argv = (char **) tok_malloc(sizeof(char *) * tok->amax);
111 if (tok->argv == NULL) {
112 tok_free((ptr_t)tok->ifs);
113 tok_free((ptr_t)tok);
116 tok->argv[0] = NULL;
117 tok->wspace = (char *) tok_malloc(WINCR);
118 if (tok->wspace == NULL) {
119 tok_free((ptr_t)tok->argv);
120 tok_free((ptr_t)tok->ifs);
121 tok_free((ptr_t)tok);
124 tok->wmax = tok->wspace + WINCR;
125 tok->wstart = tok->wspace;
126 tok->wptr = tok->wspace;
127 tok->flags = 0;
128 tok->quote = Q_none;
130 return (tok);
138 tok_reset(Tokenizer *tok)
141 tok->argc = 0;
142 tok->wstart = tok->wspace;
143 tok->wptr = tok->wspace;
144 tok->flags = 0;
145 tok->quote = Q_none;
153 tok_end(Tokenizer *tok)
156 tok_free((ptr_t) tok->ifs);
157 tok_free((ptr_t) tok->wspace);
158 tok_free((ptr_t) tok->argv);
159 tok_free((ptr_t) tok);
167 * tok current tokenizer state (setup with tok_init())
182 tok_line(Tokenizer *tok, const LineInfo *line,
194 cc = tok->argc;
195 co = tok->wptr - tok->wstart;
199 tok->flags |= TOK_KEEP;
200 tok->flags &= ~TOK_EAT;
201 switch (tok->quote) {
203 tok->quote = Q_single; /* Enter single quote
208 tok->quote = Q_none;
212 tok->quote = Q_none;
213 *tok->wptr++ = *ptr;
217 *tok->wptr++ = *ptr;
221 tok->quote = Q_double;
222 *tok->wptr++ = *ptr;
231 tok->flags &= ~TOK_EAT;
232 tok->flags |= TOK_KEEP;
233 switch (tok->quote) {
235 tok->quote = Q_double;
239 tok->quote = Q_none;
243 tok->quote = Q_none;
244 *tok->wptr++ = *ptr;
248 *tok->wptr++ = *ptr;
252 tok->quote = Q_double;
253 *tok->wptr++ = *ptr;
262 tok->flags |= TOK_KEEP;
263 tok->flags &= ~TOK_EAT;
264 switch (tok->quote) {
266 tok->quote = Q_one;
270 tok->quote = Q_doubleone;
274 *tok->wptr++ = *ptr;
275 tok->quote = Q_none;
279 *tok->wptr++ = *ptr;
283 tok->quote = Q_double;
284 *tok->wptr++ = *ptr;
293 tok->flags &= ~TOK_EAT;
294 switch (tok->quote) {
300 *tok->wptr++ = *ptr; /* Add the return */
304 tok->flags |= TOK_EAT;
305 tok->quote = Q_double;
309 tok->flags |= TOK_EAT;
310 tok->quote = Q_none;
319 switch (tok->quote) {
322 if (tok->flags & TOK_EAT) {
323 tok->flags &= ~TOK_EAT;
335 tok->quote = Q_double;
336 *tok->wptr++ = *ptr;
340 tok->quote = Q_none;
341 *tok->wptr++ = *ptr;
350 tok->flags &= ~TOK_EAT;
351 switch (tok->quote) {
353 if (strchr(tok->ifs, *ptr) != NULL)
354 tok_finish(tok);
356 *tok->wptr++ = *ptr;
361 *tok->wptr++ = *ptr;
366 *tok->wptr++ = '\\';
367 tok->quote = Q_double;
368 *tok->wptr++ = *ptr;
372 tok->quote = Q_none;
373 *tok->wptr++ = *ptr;
383 if (tok->wptr >= tok->wmax - 4) {
384 size_t size = tok->wmax - tok->wspace + WINCR;
385 char *s = (char *) tok_realloc(tok->wspace, size);
389 if (s != tok->wspace) {
391 for (i = 0; i < tok->argc; i++) {
392 tok->argv[i] =
393 (tok->argv[i] - tok->wspace) + s;
395 tok->wptr = (tok->wptr - tok->wspace) + s;
396 tok->wstart = (tok->wstart - tok->wspace) + s;
397 tok->wspace = s;
399 tok->wmax = s + size;
401 if (tok->argc >= tok->amax - 4) {
403 tok->amax += AINCR;
404 p = (char **) tok_realloc(tok->argv,
405 tok->amax * sizeof(char *));
408 tok->argv = p;
413 cc = tok->argc;
414 co = tok->wptr - tok->wstart;
420 tok_finish(tok);
421 *argv = (const char **)tok->argv;
422 *argc = tok->argc;
431 tok_str(Tokenizer *tok, const char *line, int *argc, const char ***argv)
438 return (tok_line(tok, &li, argc, argv, NULL, NULL));