Lines Matching refs:state
66 * Common state
69 struct state {
75 void (*append_char)(struct state *, unsigned char);
85 sn_reserve (struct state *state, size_t n)
87 return state->s + n > state->theend;
91 sn_append_char (struct state *state, unsigned char c)
93 if (!sn_reserve (state, 1))
94 *state->s++ = c;
99 as_reserve (struct state *state, size_t n)
101 if (state->s + n > state->theend) {
102 int off = state->s - state->str;
105 if (state->max_sz && state->sz >= state->max_sz)
108 state->sz = max(state->sz * 2, state->sz + n);
109 if (state->max_sz)
110 state->sz = min(state->sz, state->max_sz);
111 tmp = realloc (state->str, state->sz);
114 state->str = tmp;
115 state->s = state->str + off;
116 state->theend = state->str + state->sz - 1;
122 as_append_char (struct state *state, unsigned char c)
124 if(!as_reserve (state, 1))
125 *state->s++ = c;
149 append_number(struct state *state,
166 (*state->append_char)(state, rep[n % base]);
173 (*state->append_char)(state, '0');
185 (*state->append_char)(state, '0');
192 (*state->append_char)(state, rep[10] + 23); /* XXX */
193 (*state->append_char)(state, '0');
197 (*state->append_char)(state, '-');
200 (*state->append_char)(state, '+');
203 (*state->append_char)(state, ' ');
209 char c = state->s[-i-1];
210 state->s[-i-1] = state->s[-len+i];
211 state->s[-len+i] = c;
215 (*state->append_char)(state, ' ');
221 char c = state->s[-i-1];
222 state->s[-i-1] = state->s[-len+i];
223 state->s[-len+i] = c;
233 append_string (struct state *state,
250 (*state->append_char) (state, ' ');
255 (*state->append_char) (state, *arg++);
260 (*state->append_char) (state, *arg++);
266 (*state->append_char) (state, ' ');
273 append_char(struct state *state,
281 (*state->append_char) (state, ' ') ;
284 (*state->append_char) (state, arg);
287 (*state->append_char) (state, ' ');
326 xyzprintf (struct state *state, const char *char_format, va_list ap)
405 append_char(state, va_arg(ap, int), width, flags);
409 len += append_string(state,
429 len += append_number (state, num, 10, "0123456789",
438 len += append_number (state, arg, 10, "0123456789",
447 len += append_number (state, arg, 010, "01234567",
456 len += append_number (state, arg, 0x10, "0123456789abcdef",
465 len += append_number (state, arg, 0x10, "0123456789ABCDEF",
472 len += append_number (state, arg, 0x10, "0123456789ABCDEF",
478 *arg = state->s - state->str;
485 (*state->append_char)(state, c);
489 (*state->append_char)(state, '%');
490 (*state->append_char)(state, c);
495 (*state->append_char) (state, c);
609 struct state state;
611 state.max_sz = max_sz;
612 state.sz = 1;
613 state.str = malloc(state.sz);
614 if (state.str == NULL) {
618 state.s = state.str;
619 state.theend = state.s + state.sz - 1;
620 state.append_char = as_append_char;
622 st = xyzprintf (&state, format, args);
623 if (st > state.sz) {
624 free (state.str);
630 *state.s = '\0';
631 tmp = realloc (state.str, st+1);
633 free (state.str);
647 struct state state;
651 state.max_sz = 0;
652 state.sz = sz;
653 state.str = ustr;
654 state.s = ustr;
655 state.theend = ustr + sz - (sz > 0);
656 state.append_char = sn_append_char;
658 ret = xyzprintf (&state, format, args);
659 if (state.s != NULL)
660 *state.s = '\0';