diff --git a/vmbase/src/bionic.rs b/vmbase/src/bionic.rs
index 6ea8d60..c4b7ccc 100644
--- a/vmbase/src/bionic.rs
+++ b/vmbase/src/bionic.rs
@@ -124,13 +124,13 @@
 }
 
 #[repr(usize)]
-/// Arbitrary token FILE pseudo-pointers used by C to refer to the default streams.
-enum File {
+/// Fake FILE* values used by C to refer to the default streams.
+enum CFilePtr {
     Stdout = 0x7670cf00,
     Stderr = 0x9d118200,
 }
 
-impl File {
+impl CFilePtr {
     fn write_lines(&self, s: &str) {
         for line in s.split_inclusive('\n') {
             let (line, ellipsis) = if let Some(stripped) = line.strip_suffix('\n') {
@@ -147,29 +147,29 @@
     }
 }
 
-impl TryFrom<usize> for File {
+impl TryFrom<usize> for CFilePtr {
     type Error = &'static str;
 
     fn try_from(value: usize) -> Result<Self, Self::Error> {
         match value {
-            x if x == File::Stdout as _ => Ok(File::Stdout),
-            x if x == File::Stderr as _ => Ok(File::Stderr),
+            x if x == Self::Stdout as _ => Ok(Self::Stdout),
+            x if x == Self::Stderr as _ => Ok(Self::Stderr),
             _ => Err("Received Invalid FILE* from C"),
         }
     }
 }
 
 #[no_mangle]
-static stdout: File = File::Stdout;
+static stdout: CFilePtr = CFilePtr::Stdout;
 #[no_mangle]
-static stderr: File = File::Stderr;
+static stderr: CFilePtr = CFilePtr::Stderr;
 
 #[no_mangle]
 extern "C" fn fputs(c_str: *const c_char, stream: usize) -> c_int {
     // SAFETY: Just like libc, we need to assume that `s` is a valid NULL-terminated string.
     let c_str = unsafe { CStr::from_ptr(c_str) };
 
-    if let (Ok(s), Ok(f)) = (c_str.to_str(), File::try_from(stream)) {
+    if let (Ok(s), Ok(f)) = (c_str.to_str(), CFilePtr::try_from(stream)) {
         f.write_lines(s);
         0
     } else {
@@ -185,7 +185,7 @@
     // SAFETY: Just like libc, we need to assume that `ptr` is valid.
     let bytes = unsafe { slice::from_raw_parts(ptr as *const u8, length) };
 
-    if let (Ok(s), Ok(f)) = (str::from_utf8(bytes), File::try_from(stream)) {
+    if let (Ok(s), Ok(f)) = (str::from_utf8(bytes), CFilePtr::try_from(stream)) {
         f.write_lines(s);
         length
     } else {
