From 2e821464484c08ac28ed31c98ed2004a09356206 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Wed, 20 Jan 2016 09:22:23 +0000
Subject: [PATCH] Use a new rename_or_move() function to move files from the
 temp dir to the inbound dir.

---
 exec/binkit.js | 42 ++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)

diff --git a/exec/binkit.js b/exec/binkit.js
index 94bdf808fa..b9b98740d6 100644
--- a/exec/binkit.js
+++ b/exec/binkit.js
@@ -314,6 +314,44 @@ function handle_freq(reqfname, bp)
 	}
 }
 
+function rename_or_move(src, dst)
+{
+	var sf;
+	var df;
+	var buf;
+	var remain;
+
+	if (file_rename(src, dst))
+		return true;
+	sf = new File(src);
+	if (!sf.open("rb"))
+		return false;
+	df = new File(dst);
+	if (!df.open("web")) {
+		sf.close();
+		return false;
+	}
+	while (!sf.eof) {
+		// Read 2MB at a time...
+		remain = sf.length - sf.position;
+		if (remain === 0)
+			break;
+		if (remain > 0x200000)
+			remain = 0x200000;
+		buf = sf.read(remain);
+		if (!df.write(buf)) {
+			df.close();
+			df.remove();
+			sf.close();
+			return false;
+		}
+	}
+	df.close();
+	sf.close();
+	sf.remove();
+	return true;
+}
+
 function rx_callback(fname, bp)
 {
 	var semname;
@@ -336,12 +374,12 @@ function rx_callback(fname, bp)
 	else {
 		if (bp.authenticated === 'secure') {
 			log(LOG_INFO, "Moving '"+fname+"' to '"+bp.cb_data.binkit_scfg.secure_inbound+file_getname(fname)+"'.");
-			if (!file_rename(fname, bp.cb_data.binkit_scfg.secure_inbound+file_getname(fname)))
+			if (!rename_or_move(fname, bp.cb_data.binkit_scfg.secure_inbound+file_getname(fname)))
 				return false;
 		}
 		else {
 			log(LOG_INFO, "Moving '"+fname+"' to '"+bp.cb_data.binkit_scfg.inbound+file_getname(fname)+"'.");
-			if (!file_rename(fname, bp.cb_data.binkit_scfg.inbound+file_getname(fname)))
+			if (!rename_or_move(fname, bp.cb_data.binkit_scfg.inbound+file_getname(fname)))
 				return false;
 		}
 	}
-- 
GitLab