The --inplace option now notices when the basis data is not coming
from the destination file (or an identical copy) and always writes
out the data (instead of seeking when at an identical offset).
diff --git a/receiver.c b/receiver.c
index 683a716..60b6c2f 100644
--- a/receiver.c
+++ b/receiver.c
@@ -57,6 +57,8 @@
 
 static struct bitbag *delayed_bits = NULL;
 static int phase = 0;
+/* We're either updating the basis file or an identical copy: */
+static int updating_basis;
 
 
 /*
@@ -216,7 +218,7 @@
 			sum_update(map, len);
 		}
 
-		if (inplace) {
+		if (updating_basis) {
 			if (offset == offset2 && fd != -1) {
 				OFF_T pos;
 				if (flush_write_file(fd) < 0)
@@ -360,6 +362,8 @@
 	if (delay_updates)
 		delayed_bits = bitbag_create(flist->count);
 
+	updating_basis = inplace;
+
 	while (1) {
 		cleanup_disable();
 
@@ -459,6 +463,7 @@
 				fnamecmp = get_backup_name(fname);
 				break;
 			case FNAMECMP_FUZZY:
+				updating_basis = 0;
 				if (file->dirname) {
 					pathjoin(fnamecmpbuf, MAXPATHLEN,
 						 file->dirname, xname);
@@ -467,6 +472,7 @@
 					fnamecmp = xname;
 				break;
 			default:
+				updating_basis = 0;
 				if (fnamecmp_type >= basis_dir_cnt) {
 					rprintf(FERROR,
 						"invalid basis_dir index: %d.\n",
@@ -546,7 +552,7 @@
 			file->mode = dest_mode(file->mode, st.st_mode, exists);
 		}
 
-		/* We now check to see if we are writing file "inplace" */
+		/* We now check to see if we are writing the file "inplace" */
 		if (inplace)  {
 			fd2 = do_open(fname, O_WRONLY|O_CREAT, 0600);
 			if (fd2 == -1) {