diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp
index c4e5cfa..a0b0426 100644
--- a/cmds/dumpstate/dumpstate.cpp
+++ b/cmds/dumpstate/dumpstate.cpp
@@ -602,7 +602,7 @@
         path += sizeof(mmcblk0) - 1;
     }
 
-    dprintf(STDOUT_FILENO, "%s: %s\n", path, buffer);
+    printf("%s: %s\n", path, buffer);
     free(buffer);
 
     if (fields[__STAT_IO_TICKS]) {
@@ -639,11 +639,10 @@
                                  / fields[__STAT_IO_TICKS];
 
         if (!write_perf && !write_ios) {
-            dprintf(STDOUT_FILENO, "%s: perf(ios) rd: %luKB/s(%lu/s) q: %u\n", path, read_perf,
-                    read_ios, queue);
+            printf("%s: perf(ios) rd: %luKB/s(%lu/s) q: %u\n", path, read_perf, read_ios, queue);
         } else {
-            dprintf(STDOUT_FILENO, "%s: perf(ios) rd: %luKB/s(%lu/s) wr: %luKB/s(%lu/s) q: %u\n",
-                    path, read_perf, read_ios, write_perf, write_ios, queue);
+            printf("%s: perf(ios) rd: %luKB/s(%lu/s) wr: %luKB/s(%lu/s) q: %u\n", path, read_perf,
+                   read_ios, write_perf, write_ios, queue);
         }
 
         /* bugreport timeout factor adjustment */
@@ -673,27 +672,25 @@
     network = android::base::GetProperty("gsm.operator.alpha", "(unknown)");
     strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S", localtime(&now_));
 
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== dumpstate: %s\n", date);
-    dprintf(STDOUT_FILENO, "========================================================\n");
+    printf("========================================================\n");
+    printf("== dumpstate: %s\n", date);
+    printf("========================================================\n");
 
-    dprintf(STDOUT_FILENO, "\n");
-    dprintf(STDOUT_FILENO, "Build: %s\n", build.c_str());
+    printf("\n");
+    printf("Build: %s\n", build.c_str());
     // NOTE: fingerprint entry format is important for other tools.
-    dprintf(STDOUT_FILENO, "Build fingerprint: '%s'\n", fingerprint.c_str());
-    dprintf(STDOUT_FILENO, "Bootloader: %s\n", bootloader.c_str());
-    dprintf(STDOUT_FILENO, "Radio: %s\n", radio.c_str());
-    dprintf(STDOUT_FILENO, "Network: %s\n", network.c_str());
+    printf("Build fingerprint: '%s'\n", fingerprint.c_str());
+    printf("Bootloader: %s\n", bootloader.c_str());
+    printf("Radio: %s\n", radio.c_str());
+    printf("Network: %s\n", network.c_str());
 
-    dprintf(STDOUT_FILENO, "Kernel: ");
-    fsync(STDOUT_FILENO);
+    printf("Kernel: ");
     DumpFileToFd(STDOUT_FILENO, "", "/proc/version");
-    dprintf(STDOUT_FILENO, "Command line: %s\n", strtok(cmdline_buf, "\n"));
-    dprintf(STDOUT_FILENO, "Bugreport format version: %s\n", version_.c_str());
-    dprintf(STDOUT_FILENO, "Dumpstate info: id=%d pid=%d dry_run=%d args=%s extra_options=%s\n",
-            id_, pid_, PropertiesHelper::IsDryRun(), args_.c_str(), extra_options_.c_str());
-    dprintf(STDOUT_FILENO, "\n");
-    fsync(STDOUT_FILENO);
+    printf("Command line: %s\n", strtok(cmdline_buf, "\n"));
+    printf("Bugreport format version: %s\n", version_.c_str());
+    printf("Dumpstate info: id=%d pid=%d dry_run=%d args=%s extra_options=%s\n", id_, pid_,
+           PropertiesHelper::IsDryRun(), args_.c_str(), extra_options_.c_str());
+    printf("\n");
 }
 
 // List of file extensions that can cause a zip file attachment to be rejected by some email
@@ -857,13 +854,13 @@
            dump_traces_dir.c_str(), anr_traces_dir.c_str(), already_dumped);
 
     if (anr_traces_path.empty()) {
-        dprintf(STDOUT_FILENO, "*** NO VM TRACES FILE DEFINED (dalvik.vm.stack-trace-file)\n\n");
+        printf("*** NO VM TRACES FILE DEFINED (dalvik.vm.stack-trace-file)\n\n");
     } else {
         int fd = TEMP_FAILURE_RETRY(
             open(anr_traces_path.c_str(), O_RDONLY | O_CLOEXEC | O_NOFOLLOW | O_NONBLOCK));
         if (fd < 0) {
-            dprintf(STDOUT_FILENO, "*** NO ANR VM TRACES FILE (%s): %s\n\n",
-                    anr_traces_path.c_str(), strerror(errno));
+            printf("*** NO ANR VM TRACES FILE (%s): %s\n\n", anr_traces_path.c_str(),
+                   strerror(errno));
         } else {
             if (add_to_zip) {
                 if (!already_dumped) {
@@ -1003,7 +1000,7 @@
         }
     }
     if (!dumped) {
-        dprintf(STDOUT_FILENO, "*** NO TOMBSTONES to dump in %s\n\n", TOMBSTONE_DIR);
+        printf("*** NO TOMBSTONES to dump in %s\n\n", TOMBSTONE_DIR);
     }
 
     DumpFile("NETWORK DEV INFO", "/proc/net/dev");
@@ -1076,18 +1073,18 @@
 
     RunCommand("LAST RADIO LOG", {"parse_radio_log", "/proc/last_radio_log"});
 
-    dprintf(STDOUT_FILENO, "------ BACKLIGHTS ------\n");
-    dprintf(STDOUT_FILENO, "LCD brightness=");
+    printf("------ BACKLIGHTS ------\n");
+    printf("LCD brightness=");
     DumpFile("", "/sys/class/leds/lcd-backlight/brightness");
-    dprintf(STDOUT_FILENO, "Button brightness=");
+    printf("Button brightness=");
     DumpFile("", "/sys/class/leds/button-backlight/brightness");
-    dprintf(STDOUT_FILENO, "Keyboard brightness=");
+    printf("Keyboard brightness=");
     DumpFile("", "/sys/class/leds/keyboard-backlight/brightness");
-    dprintf(STDOUT_FILENO, "ALS mode=");
+    printf("ALS mode=");
     DumpFile("", "/sys/class/leds/lcd-backlight/als");
-    dprintf(STDOUT_FILENO, "LCD driver registers:\n");
+    printf("LCD driver registers:\n");
     DumpFile("", "/sys/class/leds/lcd-backlight/registers");
-    dprintf(STDOUT_FILENO, "\n");
+    printf("\n");
 
     /* Binder state is expensive to look at as it uses a lot of memory. */
     DumpFile("BINDER FAILED TRANSACTION LOG", "/sys/kernel/debug/binder/failed_transaction_log");
@@ -1112,16 +1109,16 @@
         RunCommand("DUMP VENDOR RIL LOGS", {"vril-dump"}, options.Build());
     }
 
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== Android Framework Services\n");
-    dprintf(STDOUT_FILENO, "========================================================\n");
+    printf("========================================================\n");
+    printf("== Android Framework Services\n");
+    printf("========================================================\n");
 
     RunDumpsys("DUMPSYS", {"--skip", "meminfo", "cpuinfo"}, CommandOptions::WithTimeout(90).Build(),
                10);
 
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== Checkins\n");
-    dprintf(STDOUT_FILENO, "========================================================\n");
+    printf("========================================================\n");
+    printf("== Checkins\n");
+    printf("========================================================\n");
 
     RunDumpsys("CHECKIN BATTERYSTATS", {"batterystats", "-c"});
     RunDumpsys("CHECKIN MEMINFO", {"meminfo", "--checkin"});
@@ -1130,21 +1127,21 @@
     RunDumpsys("CHECKIN USAGESTATS", {"usagestats", "-c"});
     RunDumpsys("CHECKIN PACKAGE", {"package", "--checkin"});
 
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== Running Application Activities\n");
-    dprintf(STDOUT_FILENO, "========================================================\n");
+    printf("========================================================\n");
+    printf("== Running Application Activities\n");
+    printf("========================================================\n");
 
     RunDumpsys("APP ACTIVITIES", {"activity", "all"});
 
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== Running Application Services\n");
-    dprintf(STDOUT_FILENO, "========================================================\n");
+    printf("========================================================\n");
+    printf("== Running Application Services\n");
+    printf("========================================================\n");
 
     RunDumpsys("APP SERVICES", {"activity", "service", "all"});
 
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== Running Application Providers\n");
-    dprintf(STDOUT_FILENO, "========================================================\n");
+    printf("========================================================\n");
+    printf("== Running Application Providers\n");
+    printf("========================================================\n");
 
     RunDumpsys("APP PROVIDERS", {"activity", "provider", "all"});
 
@@ -1153,20 +1150,19 @@
     // collected.
     DumpModemLogs();
 
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== Final progress (pid %d): %d/%d (estimated %d)\n", ds.pid_,
-            ds.progress_->Get(), ds.progress_->GetMax(), ds.progress_->GetInitialMax());
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== dumpstate: done (id %d)\n", ds.id_);
-    dprintf(STDOUT_FILENO, "========================================================\n");
+    printf("========================================================\n");
+    printf("== Final progress (pid %d): %d/%d (estimated %d)\n", ds.pid_, ds.progress_->Get(),
+           ds.progress_->GetMax(), ds.progress_->GetInitialMax());
+    printf("========================================================\n");
+    printf("== dumpstate: done (id %d)\n", ds.id_);
+    printf("========================================================\n");
 }
 
 void Dumpstate::DumpstateBoard() {
     DurationReporter duration_reporter("dumpstate_board()");
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    dprintf(STDOUT_FILENO, "== Board\n");
-    dprintf(STDOUT_FILENO, "========================================================\n");
-    fsync(STDOUT_FILENO);
+    printf("========================================================\n");
+    printf("== Board\n");
+    printf("========================================================\n");
 
     android::sp<android::hardware::dumpstate::V1_0::IDumpstateDevice> dumpstate_device(
         android::hardware::dumpstate::V1_0::IDumpstateDevice::getService("DumpstateDevice"));
@@ -1204,8 +1200,7 @@
     dumpstate_device->dumpstateBoard(handle);
 
     AddZipEntry("dumpstate-board.txt", path);
-    dprintf(STDOUT_FILENO, "*** See dumpstate-board.txt entry ***\n");
-    fsync(STDOUT_FILENO);
+    printf("*** See dumpstate-board.txt entry ***\n");
 
     native_handle_close(handle);
     native_handle_delete(handle);
@@ -1632,6 +1627,10 @@
                    ds.tmp_path_.c_str(), strerror(errno));
         }
     }
+
+    // Don't buffer stdout
+    setvbuf(stdout, nullptr, _IONBF, 0);
+
     // NOTE: there should be no stdout output until now, otherwise it would break the header.
     // In particular, DurationReport objects should be created passing 'title, NULL', so their
     // duration is logged into MYLOG instead.
