sprintf.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       sprintf.c (627B)
       ---
            1 
            2 #include <stdio.h>
            3 #include <errno.h>
            4 
            5 #include "ioprivate.h"
            6 
            7 struct sprintbuf {
            8         char *buf;
            9 };
           10 
           11 static int
           12 sprintputch(int ch, struct sprintbuf *b)
           13 {
           14         *b->buf++ = ch;
           15         return 0;
           16 }
           17 
           18 int
           19 vsprintf(char *buf, const char *fmt, va_list ap)
           20 {
           21         struct sprintbuf b = {buf};
           22 
           23         if (buf == NULL) {
           24                 errno = EINVAL;
           25                 return -1;
           26         }
           27 
           28         // print the string to the buffer
           29         int cnt = vprintfmt((void*)sprintputch, &b, fmt, ap);
           30 
           31         // null terminate the buffer
           32         *b.buf = '\0';
           33 
           34         return cnt;
           35 }
           36 
           37 int
           38 sprintf(char *buf, const char *fmt, ...)
           39 {
           40         va_list ap;
           41         int rc;
           42 
           43         va_start(ap, fmt);
           44         rc = vsprintf(buf, fmt, ap);
           45         va_end(ap);
           46 
           47         return rc;
           48 }
           49