diff --git a/libc/stdio/vfprintf.cpp b/libc/stdio/vfprintf.cpp
index 366b196..fe2e338 100644
--- a/libc/stdio/vfprintf.cpp
+++ b/libc/stdio/vfprintf.cpp
@@ -32,6 +32,7 @@
  */
 
 #define CHAR_TYPE char
+#define FUNCTION_NAME __vfprintf
 
 #include <sys/mman.h>
 #include <sys/types.h>
@@ -108,8 +109,7 @@
  * temporary buffer.  We only work on write-only files; this avoids
  * worries about ungetc buffers and so forth.
  */
-static int __sbprintf(FILE* fp, const char* fmt, va_list ap) {
-  int ret;
+static int __sbprintf(FILE* fp, const CHAR_TYPE* fmt, va_list ap) {
   FILE fake;
   struct __sfileext fakeext;
   unsigned char buf[BUFSIZ];
@@ -127,7 +127,7 @@
   fake._lbfsize = 0; /* not actually used, but Just In Case */
 
   /* do the work, then copy any error status */
-  ret = __vfprintf(&fake, fmt, ap);
+  int ret = FUNCTION_NAME(&fake, fmt, ap);
   if (ret >= 0 && __sflush(&fake)) ret = EOF;
   if (fake._flags & __SERR) fp->_flags |= __SERR;
   return (ret);
@@ -250,17 +250,16 @@
 #define CHARINT 0x0800  /* 8 bit integer */
 #define MAXINT 0x1000   /* largest integer size (intmax_t) */
 
-int __vfprintf(FILE* fp, const char* fmt0, __va_list ap) {
+int FUNCTION_NAME(FILE* fp, const CHAR_TYPE* fmt0, __va_list ap) {
   int ch;              /* character from fmt */
   int n, n2;           /* handy integers (short term usage) */
-  char* cp;            /* handy char pointer (short term usage) */
+  CHAR_TYPE* cp;            /* handy char pointer (short term usage) */
   struct __siov* iovp; /* for PRINT macro */
+  CHAR_TYPE sign;           /* sign prefix (' ', '+', '-', or \0) */
   int flags;           /* flags as above */
   int ret;             /* return value accumulator */
   int width;           /* width from format (%8d), or 0 */
   int prec;            /* precision from format; <0 for N/A */
-  char sign;           /* sign prefix (' ', '+', '-', or \0) */
-  mbstate_t ps;
   /*
    * We can decompose the printed representation of floating
    * point numbers into several parts, some of which may be empty:
@@ -287,7 +286,7 @@
   int expsize;                /* character count for expstr */
   int lead;                   /* sig figs before decimal or group sep */
   int ndig;                   /* actual number of digits returned by dtoa */
-  char expstr[MAXEXPDIG + 2]; /* buffer for exponent string: e+ZZZ */
+  CHAR_TYPE expstr[MAXEXPDIG + 2]; /* buffer for exponent string: e+ZZZ */
   char* dtoaresult = NULL;
 
   uintmax_t _umax;             /* integer arguments %[diouxX] */
@@ -299,14 +298,14 @@
 #define NIOV 8
   struct __suio uio;       /* output information: summary */
   struct __siov iov[NIOV]; /* ... and individual io vectors */
-  char buf[BUF];           /* buffer with space for digits of uintmax_t */
-  char ox[2];              /* space for 0x; ox[1] is either x, X, or \0 */
+  CHAR_TYPE buf[BUF];           /* buffer with space for digits of uintmax_t */
+  CHAR_TYPE ox[2];              /* space for 0x; ox[1] is either x, X, or \0 */
   union arg* argtable;     /* args, built due to positional arg */
   union arg statargtable[STATIC_ARG_TBL_SIZE];
   size_t argtablesiz;
   int nextarg;   /* 1-based argument index */
   va_list orgap; /* original argument pointer */
-  char* convbuf; /* buffer for wide to multi-byte conversion */
+  CHAR_TYPE* convbuf; /* buffer for wide/multibyte conversion */
 
   /*
    * Choose PADSIZE to trade efficiency vs. size.  If larger printf
@@ -466,7 +465,6 @@
   ret = 0;
   convbuf = NULL;
 
-  memset(&ps, 0, sizeof(ps));
   /*
    * Scan the format for conversions (`%' character).
    */
@@ -1275,10 +1273,7 @@
         flags |= LONGINT;
         /*FALLTHROUGH*/
       case 's':
-        if (flags & LONGINT)
-          ADDTYPE(TP_WCHAR);
-        else
-          ADDTYPE(TP_CHAR);
+        ADDTYPE((flags & LONGINT) ? TP_WCHAR : TP_CHAR);
         break;
       case 'U':
         flags |= LONGINT;
