[PATCH] dd fsync support

James Simmons jsimmons at infradead.org
Wed Apr 2 13:03:04 PDT 2008


Support to physically write output file data before finishing.

Index: dd.c
===================================================================
--- dd.c	(revision 21619)
+++ dd.c	(working copy)
@@ -87,6 +87,7 @@
 		FLAG_NOTRUNC = 1 << 2,
 		FLAG_TWOBUFS = 1 << 3,
 		FLAG_COUNT   = 1 << 4,
+		FLAG_FSYNC   = 1 << 5,
 	};
 	static const char keywords[] ALIGN1 =
 		"bs=\0""count=\0""seek=\0""skip=\0""if=\0""of=\0"
@@ -108,6 +109,7 @@
 		OP_conv_notrunc,
 		OP_conv_sync,
 		OP_conv_noerror,
+		OP_conv_fsync,
 #endif
 	};
 	int exitcode = EXIT_FAILURE;
@@ -185,6 +187,8 @@
 					flags |= FLAG_SYNC;
 				if (what == OP_conv_noerror)
 					flags |= FLAG_NOERROR;
+				if (what == OP_conv_fsync)
+					flags |= FLAG_FSYNC;
 				if (!key) /* no ',' left, so this was the last specifier */
 					break;
 				arg = key + 1; /* skip this keyword and ',' */
@@ -304,6 +308,11 @@
 			}
 		} else if (write_and_stats(ibuf, n, obs, outfile))
 			goto out_status;
+
+		if (flags & FLAG_FSYNC) {
+			if (fsync(ofd) < 0)
+				goto die_outfile;
+		}
 	}
 
 	if (ENABLE_FEATURE_DD_IBS_OBS && oc) {


More information about the busybox mailing list