diff --git a/src/nnn.c b/src/nnn.c
index 1227427..4f69348 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1142,8 +1142,8 @@ static size_t seltofile(int fd, uint *pcount, bool tgt)
 {
 	uint lastpos, count = 0;
 	char *pbuf = pselbuf;
-	size_t pos = 0, len;
-	ssize_t r, prefixlen, initlen, tgtlen;
+	size_t pos = 0;
+	ssize_t len, prefixlen, initlen;
 
 	if (pcount)
 		*pcount = 0;
@@ -1154,33 +1154,25 @@ static size_t seltofile(int fd, uint *pcount, bool tgt)
 	lastpos = selbufpos - 1;
 
 	if (tgt) {
-		prefixlen = (ssize_t)xstrsncpy(g_buf, prefixpath, PATH_MAX) - 1;
-		initlen = strlen(initpath);
+		prefixlen = (ssize_t)xstrlen(prefixpath);
+		initlen = (ssize_t)xstrlen(initpath);
 	}
 
 	while (pos <= lastpos) {
-		len = xstrlen(pbuf);
-		pos += len;
+		DPRINTF_S(pbuf);
+		len = (ssize_t)xstrlen(pbuf);
 
-		if (!tgt) {
-			r = write(fd, pbuf, len);
-			if (r != (ssize_t)len)
+		if (!tgt || (strncmp(initpath, pbuf, initlen) != 0)) {
+			if (write(fd, pbuf, len) != len)
 				return pos;
 		} else {
-			if (!strncmp(initpath, pbuf, initlen)) {
-				tgtlen = xstrsncpy(g_buf + prefixlen, pbuf + initlen, PATH_MAX - prefixlen - 1);
-				tgtlen += prefixlen - 1;
-			} else
-				tgtlen = (ssize_t)xstrsncpy(g_buf, pbuf, PATH_MAX) - 1;
-
-			r = write(fd, g_buf, tgtlen);
-			if (r != tgtlen) {
-				DPRINTF_S(pbuf);
-				DPRINTF_S(g_buf);
-				return 0;
-			}
+			if (write(fd, prefixpath, prefixlen) != prefixlen)
+				return pos;
+			if (write(fd, pbuf + initlen, len - initlen) != (len - initlen))
+				return pos;
 		}
 
+		pos += len;
 		if (pos <= lastpos) {
 			if (write(fd, "\n", 1) != 1)
 				return pos;
@@ -5382,7 +5374,7 @@ nochange:
 				if (cfg.useeditor && (!sb.st_size ||
 #ifdef FILE_MIME_OPTS
 				    (get_output(g_buf, CMD_LEN_MAX, "file", FILE_MIME_OPTS, newpath, FALSE)
-				    && !strncmp(g_buf, "text/", 5)))) {
+				    && !(((int *)g_buf)[0] == *(int *)"text" && g_buf[4] == '/')))) {
 #else
 				    /* no mime option; guess from description instead */
 				    (get_output(g_buf, CMD_LEN_MAX, "file", "-b", newpath, FALSE)