Example #1
0
void
setneturg(void)
{
    ring_mark(&netoring);
}
Example #2
0
static int
vrprintf(struct ring *ring, const char *fmt, va_list va)
{
    uint32_t mark = ring_mark(ring);
    char bf[24];
    char ch;

    while ((ch = *(fmt++))) {
        if (ch == '\n') {
            ring_write_ch(ring, '\n');
            ring_write_ch(ring, '\r');
        } else if (ch != '%') {
            ring_write_ch(ring, ch);
        } else {
            char zero_pad = 0;
            char *ptr;
            uint32_t len;

            ch = *(fmt++);

            /* Zero padding requested */
            if (ch == '0') {
                ch = *(fmt++);
                if (ch == '\0')
                    goto end;
                if (ch >= '0' && ch <= '9')
                    zero_pad = ch - '0';
                ch = *(fmt++);
            }

            switch (ch) {
            case 0:
                goto end;

            case 'u':
            case 'd':
                len = itoa(va_arg(va, uint32_t), 10, 0, (ch == 'u'), bf, zero_pad);
                ring_write(ring, (uint8_t *)bf, len);
                break;

            case 'x':
            case 'X':
                len = itoa(va_arg(va, uint32_t), 16, (ch == 'X'), 1, bf, zero_pad);
                ring_write(ring, (uint8_t *)bf, len);
                break;

            case 'c' :
                ring_write_ch(ring, (char)(va_arg(va, int)));
                break;

            case 's' :
                ptr = va_arg(va, char*);
                ring_write(ring, (uint8_t *)ptr, strlen(ptr));
                break;

            default:
                ring_write_ch(ring, ch);
                break;
            }
        }
    }
end:
    return ring_marklen(ring, mark);
}