int dsm_client_record(struct dsm_client *client, const char *fmt, ...) { va_list ap; int size = 0; char *str; struct snprintf_ctxt ctxt; if(!client) { DSM_LOG_ERR("%s no client to record\n", __func__); goto out; } if(client->buff_size <= client->used_size) { DSM_LOG_ERR("%s no buffer to record\n", __func__); goto out; } ctxt.avail = client->buff_size - client->used_size -1; str = (char *)&client->dump_buff[client->used_size]; ctxt.next = str; va_start(ap, fmt); __xprintf(fmt, ap, printf_putc, &ctxt); va_end(ap); *ctxt.next = 0; size = ctxt.next - str; client->used_size += size; out: return size; }
void dprintf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); __xprintf(fmt, ap, (void*) dputc, 0); va_end(ap); }
void cprintf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); __xprintf(fmt, ap, (void*) console_putc, 0); va_end(ap); console_flush(); }
void printf(const char *fmt, ...) { va_list ap; /*serial_puts_msg(" "); dump_uint(out); serial_puts_msg(" ");*/ va_start(ap, fmt); __xprintf(0 ,fmt, ap, (void*) xconsole_putc, 0); va_end(ap); }
int snprintf(char *str, int sz, const char *fmt, ...) { va_list ap; struct snprintf_ctxt ctxt; if(sz < 1) return 0; ctxt.avail = sz - 1; ctxt.next = str; va_start(ap, fmt); __xprintf(fmt, ap, snprintf_putc, &ctxt); va_end(ap); *ctxt.next = 0; return ctxt.next - str; }