diff --git a/libc/stdio/local.h b/libc/stdio/local.h
index d04abc1..ab31af1 100644
--- a/libc/stdio/local.h
+++ b/libc/stdio/local.h
@@ -38,7 +38,7 @@
 #include <stdbool.h>
 #include <wchar.h>
 
-#if defined(__cplusplus) // Until we fork all of stdio...
+#if defined(__cplusplus)  // Until we fork all of stdio...
 #include "private/bionic_fortify.h"
 #endif
 
@@ -59,53 +59,53 @@
 };
 
 struct __sFILE {
-	unsigned char *_p;	/* current position in (some) buffer */
-	int	_r;		/* read space left for getc() */
-	int	_w;		/* write space left for putc() */
+  unsigned char* _p; /* current position in (some) buffer */
+  int _r;            /* read space left for getc() */
+  int _w;            /* write space left for putc() */
 #if defined(__LP64__)
-	int	_flags;		/* flags, below; this FILE is free if 0 */
-	int	_file;		/* fileno, if Unix descriptor, else -1 */
+  int _flags; /* flags, below; this FILE is free if 0 */
+  int _file;  /* fileno, if Unix descriptor, else -1 */
 #else
-	short	_flags;		/* flags, below; this FILE is free if 0 */
-	short	_file;		/* fileno, if Unix descriptor, else -1 */
+  short _flags; /* flags, below; this FILE is free if 0 */
+  short _file;  /* fileno, if Unix descriptor, else -1 */
 #endif
-	struct	__sbuf _bf;	/* the buffer (at least 1 byte, if !NULL) */
-	int	_lbfsize;	/* 0 or -_bf._size, for inline putc */
+  struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
+  int _lbfsize;      /* 0 or -_bf._size, for inline putc */
 
-	// Function pointers used by `funopen`.
-	// Note that `_seek` is ignored if `_seek64` (in __sfileext) is set.
-	// TODO: NetBSD has `funopen2` which corrects the `int`s to `size_t`s.
-	// TODO: glibc has `fopencookie` which passes the function pointers in a struct.
-	void* _cookie;	/* cookie passed to io functions */
-	int (*_close)(void*);
-	int (*_read)(void*, char*, int);
-	fpos_t (*_seek)(void*, fpos_t, int);
-	int (*_write)(void*, const char*, int);
+  // Function pointers used by `funopen`.
+  // Note that `_seek` is ignored if `_seek64` (in __sfileext) is set.
+  // TODO: NetBSD has `funopen2` which corrects the `int`s to `size_t`s.
+  // TODO: glibc has `fopencookie` which passes the function pointers in a struct.
+  void* _cookie; /* cookie passed to io functions */
+  int (*_close)(void*);
+  int (*_read)(void*, char*, int);
+  fpos_t (*_seek)(void*, fpos_t, int);
+  int (*_write)(void*, const char*, int);
 
-	/* extension data, to avoid further ABI breakage */
-	struct	__sbuf _ext;
-	/* data for long sequences of ungetc() */
-	unsigned char *_up;	/* saved _p when _p is doing ungetc data */
-	int	_ur;		/* saved _r when _r is counting ungetc data */
+  /* extension data, to avoid further ABI breakage */
+  struct __sbuf _ext;
+  /* data for long sequences of ungetc() */
+  unsigned char* _up; /* saved _p when _p is doing ungetc data */
+  int _ur;            /* saved _r when _r is counting ungetc data */
 
-	/* tricks to meet minimum requirements even when malloc() fails */
-	unsigned char _ubuf[3];	/* guarantee an ungetc() buffer */
-	unsigned char _nbuf[1];	/* guarantee a getc() buffer */
+  /* tricks to meet minimum requirements even when malloc() fails */
+  unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
+  unsigned char _nbuf[1]; /* guarantee a getc() buffer */
 
-	/* separate buffer for fgetln() when line crosses buffer boundary */
-	struct	__sbuf _lb;	/* buffer for fgetln() */
+  /* separate buffer for fgetln() when line crosses buffer boundary */
+  struct __sbuf _lb; /* buffer for fgetln() */
 
-	/* Unix stdio files get aligned to block boundaries on fseek() */
-	int	_blksize;	/* stat.st_blksize (may be != _bf._size) */
+  /* Unix stdio files get aligned to block boundaries on fseek() */
+  int _blksize; /* stat.st_blksize (may be != _bf._size) */
 
-	fpos_t _unused_0; // This was the `_offset` field (see below).
+  fpos_t _unused_0;  // This was the `_offset` field (see below).
 
-	// Do not add new fields here. (Or remove or change the size of any above.)
-	// Although bionic currently exports `stdin`, `stdout`, and `stderr` symbols,
-	// that still hasn't made it to the NDK. All NDK-built apps index directly
-	// into an array of this struct (which was in <stdio.h> historically), so if
-	// you need to make any changes, they need to be in the `__sfileext` struct
-	// below, and accessed via `_EXT`.
+  // Do not add new fields here. (Or remove or change the size of any above.)
+  // Although bionic currently exports `stdin`, `stdout`, and `stderr` symbols,
+  // that still hasn't made it to the NDK. All NDK-built apps index directly
+  // into an array of this struct (which was in <stdio.h> historically), so if
+  // you need to make any changes, they need to be in the `__sfileext` struct
+  // below, and accessed via `_EXT`.
 };
 
 /* minimal requirement of SUSv2 */
@@ -144,9 +144,9 @@
 #define __SNBF 0x0002  // Unbuffered.
 // __SRD and __SWR are mutually exclusive because they indicate what we did last.
 // If you want to know whether we were opened read-write, check __SRW instead.
-#define __SRD  0x0004  // Last operation was read.
-#define __SWR  0x0008  // Last operation was write.
-#define __SRW  0x0010  // Was opened for reading & writing.
+#define __SRD 0x0004   // Last operation was read.
+#define __SWR 0x0008   // Last operation was write.
+#define __SRW 0x0010   // Was opened for reading & writing.
 #define __SEOF 0x0020  // Found EOF.
 #define __SERR 0x0040  // Found error.
 #define __SMBF 0x0080  // `_buf` is from malloc.
@@ -167,13 +167,13 @@
 #define _EXT(fp) __BIONIC_CAST(reinterpret_cast, struct __sfileext*, (fp)->_ext._base)
 
 #define _UB(fp) _EXT(fp)->_ub
-#define _FLOCK(fp)  _EXT(fp)->_lock
+#define _FLOCK(fp) _EXT(fp)->_lock
 
-#define _FILEEXT_SETUP(fp, fext) \
-  do { \
+#define _FILEEXT_SETUP(fp, fext)                                              \
+  do {                                                                        \
     (fp)->_ext._base = __BIONIC_CAST(reinterpret_cast, unsigned char*, fext); \
-    memset(_EXT(fp), 0, sizeof(struct __sfileext)); \
-    _EXT(fp)->_caller_handles_locking = true; \
+    memset(_EXT(fp), 0, sizeof(struct __sfileext));                           \
+    _EXT(fp)->_caller_handles_locking = true;                                 \
   } while (0)
 
 // Android <= 19 had getc/putc macros in <stdio.h> that referred
@@ -193,49 +193,49 @@
 __LIBC32_LEGACY_PUBLIC__ void __smakebuf(FILE*);
 
 /* These are referenced by the Greed for Glory franchise. */
-__LIBC32_LEGACY_PUBLIC__ int __sflush(FILE *);
-__LIBC32_LEGACY_PUBLIC__ int __sread(void *, char *, int);
-__LIBC32_LEGACY_PUBLIC__ int __swrite(void *, const char *, int);
-__LIBC32_LEGACY_PUBLIC__ fpos_t __sseek(void *, fpos_t, int);
-__LIBC32_LEGACY_PUBLIC__ int __sclose(void *);
-__LIBC32_LEGACY_PUBLIC__ int _fwalk(int (*)(FILE *));
+__LIBC32_LEGACY_PUBLIC__ int __sflush(FILE*);
+__LIBC32_LEGACY_PUBLIC__ int __sread(void*, char*, int);
+__LIBC32_LEGACY_PUBLIC__ int __swrite(void*, const char*, int);
+__LIBC32_LEGACY_PUBLIC__ fpos_t __sseek(void*, fpos_t, int);
+__LIBC32_LEGACY_PUBLIC__ int __sclose(void*);
+__LIBC32_LEGACY_PUBLIC__ int _fwalk(int (*)(FILE*));
 
 off64_t __sseek64(void*, off64_t, int);
-int	__sflush_locked(FILE *);
-int	__swhatbuf(FILE *, size_t *, int *);
-wint_t __fgetwc_unlock(FILE *);
-wint_t	__ungetwc(wint_t, FILE *);
-int	__vfprintf(FILE *, const char *, va_list);
-int	__svfscanf(FILE *, const char *, va_list);
-int	__vfwprintf(FILE *, const wchar_t *, va_list);
-int	__vfwscanf(FILE *, const wchar_t *, va_list);
+int __sflush_locked(FILE*);
+int __swhatbuf(FILE*, size_t*, int*);
+wint_t __fgetwc_unlock(FILE*);
+wint_t __ungetwc(wint_t, FILE*);
+int __vfprintf(FILE*, const char*, va_list);
+int __svfscanf(FILE*, const char*, va_list);
+int __vfwprintf(FILE*, const wchar_t*, va_list);
+int __vfwscanf(FILE*, const wchar_t*, va_list);
 
 /*
  * Return true if the given FILE cannot be written now.
  */
-#define	cantwrite(fp) \
-	((((fp)->_flags & __SWR) == 0 || (fp)->_bf._base == NULL) && \
-	 __swsetup(fp))
+#define cantwrite(fp) ((((fp)->_flags & __SWR) == 0 || (fp)->_bf._base == NULL) && __swsetup(fp))
 
 /*
  * Test whether the given stdio file has an active ungetc buffer;
  * release such a buffer, without restoring ordinary unread data.
  */
-#define	HASUB(fp) (_UB(fp)._base != NULL)
-#define	FREEUB(fp) { \
-	if (_UB(fp)._base != (fp)->_ubuf) \
-		free(_UB(fp)._base); \
-	_UB(fp)._base = NULL; \
-}
+#define HASUB(fp) (_UB(fp)._base != NULL)
+#define FREEUB(fp)                                         \
+  {                                                        \
+    if (_UB(fp)._base != (fp)->_ubuf) free(_UB(fp)._base); \
+    _UB(fp)._base = NULL;                                  \
+  }
 
-#define FLOCKFILE(fp)   if (!_EXT(fp)->_caller_handles_locking) flockfile(fp)
-#define FUNLOCKFILE(fp) if (!_EXT(fp)->_caller_handles_locking) funlockfile(fp)
+#define FLOCKFILE(fp) \
+  if (!_EXT(fp)->_caller_handles_locking) flockfile(fp)
+#define FUNLOCKFILE(fp) \
+  if (!_EXT(fp)->_caller_handles_locking) funlockfile(fp)
 
 #define NO_PRINTF_PERCENT_N
 
 /* OpenBSD exposes these in <stdio.h>, but we only want them exposed to the implementation. */
-#define __sferror(p)   (((p)->_flags & __SERR) != 0)
-#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
+#define __sferror(p) (((p)->_flags & __SERR) != 0)
+#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR | __SEOF)))
 #define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
 
 /* OpenBSD declares these in fvwrite.h, but we share them with C++ parts of the implementation. */
@@ -252,7 +252,7 @@
 wint_t __fputwc_unlock(wchar_t wc, FILE* fp);
 
 /* Remove the if (!__sdidinit) __sinit() idiom from untouched upstream stdio code. */
-extern void __sinit(void); // Not actually implemented.
+extern void __sinit(void);  // Not actually implemented.
 #define __sdidinit 1
 
 size_t parsefloat(FILE*, char*, char*);
@@ -260,7 +260,8 @@
 
 // Sanity check a FILE* for nullptr, so we can emit a message while crashing
 // instead of doing a blind null-dereference.
-#define CHECK_FP(fp) if (fp == nullptr) __fortify_fatal("%s: null FILE*", __FUNCTION__)
+#define CHECK_FP(fp) \
+  if (fp == nullptr) __fortify_fatal("%s: null FILE*", __FUNCTION__)
 
 /*
  * Floating point scanf/printf (input/output) definitions.
@@ -287,23 +288,21 @@
 char* __hldtoa(long double, const char*, int, int*, int*, char**);
 char* __ldtoa(long double*, int, int, int*, int*, char**);
 
-#define WCIO_GET(fp) \
-	(_EXT(fp) ? &(_EXT(fp)->_wcio) : (struct wchar_io_data *)0)
+#define WCIO_GET(fp) (_EXT(fp) ? &(_EXT(fp)->_wcio) : (struct wchar_io_data*)0)
 
-#define _SET_ORIENTATION(fp, mode) \
-do {\
-	struct wchar_io_data *_wcio = WCIO_GET(fp); \
-	if (_wcio && _wcio->wcio_mode == 0) \
-		_wcio->wcio_mode = (mode);\
-} while (0)
+#define _SET_ORIENTATION(fp, mode)                                 \
+  do {                                                             \
+    struct wchar_io_data* _wcio = WCIO_GET(fp);                    \
+    if (_wcio && _wcio->wcio_mode == 0) _wcio->wcio_mode = (mode); \
+  } while (0)
 
-#define WCIO_FREE(fp) \
-do {\
-	struct wchar_io_data *_wcio = WCIO_GET(fp); \
-	if (_wcio) { \
-		_wcio->wcio_mode = 0;\
-		_wcio->wcio_ungetwc_inbuf = 0;\
-	} \
-} while (0)
+#define WCIO_FREE(fp)                           \
+  do {                                          \
+    struct wchar_io_data* _wcio = WCIO_GET(fp); \
+    if (_wcio) {                                \
+      _wcio->wcio_mode = 0;                     \
+      _wcio->wcio_ungetwc_inbuf = 0;            \
+    }                                           \
+  } while (0)
 
 __END_DECLS
