diff --git a/libc/stdio/stdio.cpp b/libc/stdio/stdio.cpp
index c10bc00..46d717a 100644
--- a/libc/stdio/stdio.cpp
+++ b/libc/stdio/stdio.cpp
@@ -935,6 +935,16 @@
   PRINTF_IMPL(vswscanf(s, fmt, ap));
 }
 
+int vfprintf(FILE* fp, const char* fmt, va_list ap) {
+  ScopedFileLock sfl(fp);
+  return __vfprintf(fp, fmt, ap);
+}
+
+int vfwprintf(FILE* fp, const wchar_t* fmt, va_list ap) {
+  ScopedFileLock sfl(fp);
+  return __vfwprintf(fp, fmt, ap);
+}
+
 int vprintf(const char* fmt, va_list ap) {
   return vfprintf(stdout, fmt, ap);
 }
diff --git a/libc/stdio/vfprintf.cpp b/libc/stdio/vfprintf.cpp
index 6d16828..10303d9 100644
--- a/libc/stdio/vfprintf.cpp
+++ b/libc/stdio/vfprintf.cpp
@@ -83,7 +83,7 @@
   wchar_t* pwchararg;
 };
 
-static int __find_arguments(const char* fmt0, va_list ap, union arg** argtable, size_t* argtablesiz);
+static int __find_arguments(const CHAR_TYPE* fmt0, va_list ap, union arg** argtable, size_t* argtablesiz);
 static int __grow_type_table(unsigned char** typetable, int* tablesize);
 
 /*
@@ -250,16 +250,6 @@
 #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 ret;
-
-  FLOCKFILE(fp);
-  ret = __vfprintf(fp, fmt0, ap);
-  FUNLOCKFILE(fp);
-  return (ret);
-}
-DEF_STRONG(vfprintf);
-
 int __vfprintf(FILE* fp, const char* fmt0, __va_list ap) {
   char* fmt;           /* format string */
   int ch;              /* character from fmt */
diff --git a/libc/stdio/vfwprintf.cpp b/libc/stdio/vfwprintf.cpp
index 80eb78a..38acccf 100644
--- a/libc/stdio/vfwprintf.cpp
+++ b/libc/stdio/vfwprintf.cpp
@@ -83,8 +83,7 @@
   wchar_t* pwchararg;
 };
 
-static int __find_arguments(const wchar_t* fmt0, va_list ap, union arg** argtable,
-                            size_t* argtablesiz);
+static int __find_arguments(const CHAR_TYPE* fmt0, va_list ap, union arg** argtable, size_t* argtablesiz);
 static int __grow_type_table(unsigned char** typetable, int* tablesize);
 
 /*
@@ -997,17 +996,6 @@
   return (ret);
 }
 
-int vfwprintf(FILE* __restrict fp, const wchar_t* __restrict fmt0, __va_list ap) {
-  int r;
-
-  FLOCKFILE(fp);
-  r = __vfwprintf(fp, fmt0, ap);
-  FUNLOCKFILE(fp);
-
-  return (r);
-}
-DEF_STRONG(vfwprintf);
-
 /*
  * Type ids for argument type table.
  */
@@ -1192,6 +1180,9 @@
           flags |= SHORTINT;
         }
         goto rflag;
+      case 'j':
+        flags |= MAXINT;
+        goto rflag;
       case 'l':
         if (*fmt == 'l') {
           fmt++;
@@ -1367,9 +1358,15 @@
       case TP_SSIZEINT:
         (*argtable)[n].pssizearg = va_arg(ap, ssize_t*);
         break;
-      case TP_MAXINT:
+      case T_MAXINT:
         (*argtable)[n].intmaxarg = va_arg(ap, intmax_t);
         break;
+      case T_MAXUINT:
+        (*argtable)[n].uintmaxarg = va_arg(ap, uintmax_t);
+        break;
+      case TP_MAXINT:
+        (*argtable)[n].pintmaxarg = va_arg(ap, intmax_t*);
+        break;
       case T_WINT:
         (*argtable)[n].wintarg = va_arg(ap, wint_t);
         break;
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp
index e07980e..87a0eae 100644
--- a/tests/stdio_test.cpp
+++ b/tests/stdio_test.cpp
@@ -621,6 +621,38 @@
   EXPECT_EQ(std::wstring(L"<a>"), buf);
 }
 
+TEST(STDIO_TEST, swprintf_jd_INTMAX_MAX) {
+  constexpr size_t nchars = 32;
+  wchar_t buf[nchars];
+
+  swprintf(buf, nchars, L"%jd", INTMAX_MAX);
+  EXPECT_EQ(std::wstring(L"9223372036854775807"), buf);
+}
+
+TEST(STDIO_TEST, swprintf_jd_INTMAX_MIN) {
+  constexpr size_t nchars = 32;
+  wchar_t buf[nchars];
+
+  swprintf(buf, nchars, L"%jd", INTMAX_MIN);
+  EXPECT_EQ(std::wstring(L"-9223372036854775808"), buf);
+}
+
+TEST(STDIO_TEST, swprintf_ju_UINTMAX_MAX) {
+  constexpr size_t nchars = 32;
+  wchar_t buf[nchars];
+
+  swprintf(buf, nchars, L"%ju", UINTMAX_MAX);
+  EXPECT_EQ(std::wstring(L"18446744073709551615"), buf);
+}
+
+TEST(STDIO_TEST, swprintf_1$ju_UINTMAX_MAX) {
+  constexpr size_t nchars = 32;
+  wchar_t buf[nchars];
+
+  swprintf(buf, nchars, L"%1$ju", UINTMAX_MAX);
+  EXPECT_EQ(std::wstring(L"18446744073709551615"), buf);
+}
+
 TEST(STDIO_TEST, swprintf_ls) {
   constexpr size_t nchars = 32;
   wchar_t buf[nchars];
@@ -655,6 +687,30 @@
   EXPECT_STREQ("-2147483648", buf);
 }
 
+TEST(STDIO_TEST, snprintf_jd_INTMAX_MAX) {
+  char buf[BUFSIZ];
+  snprintf(buf, sizeof(buf), "%jd", INTMAX_MAX);
+  EXPECT_STREQ("9223372036854775807", buf);
+}
+
+TEST(STDIO_TEST, snprintf_jd_INTMAX_MIN) {
+  char buf[BUFSIZ];
+  snprintf(buf, sizeof(buf), "%jd", INTMAX_MIN);
+  EXPECT_STREQ("-9223372036854775808", buf);
+}
+
+TEST(STDIO_TEST, snprintf_ju_UINTMAX_MAX) {
+  char buf[BUFSIZ];
+  snprintf(buf, sizeof(buf), "%ju", UINTMAX_MAX);
+  EXPECT_STREQ("18446744073709551615", buf);
+}
+
+TEST(STDIO_TEST, snprintf_1$ju_UINTMAX_MAX) {
+  char buf[BUFSIZ];
+  snprintf(buf, sizeof(buf), "%1$ju", UINTMAX_MAX);
+  EXPECT_STREQ("18446744073709551615", buf);
+}
+
 TEST(STDIO_TEST, snprintf_ld_LONG_MAX) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%ld", LONG_MAX);
