diff --git a/src/files.c b/src/files.c
index 80245bbd89e4bb27b220fd5bb4e2c84ebe838792..588f7d88aab0548f668fe5d4621140cbf28a733c 100644
--- a/src/files.c
+++ b/src/files.c
@@ -1214,7 +1214,7 @@ void do_insertfile(void)
 #ifndef NANO_TINY
 		    if (!execute)
 #endif
-		    if (check_poshistory(answer, &priorline, &priorcol))
+		    if (has_old_position(answer, &priorline, &priorcol))
 			do_gotolinecolumn(priorline, priorcol, FALSE, FALSE);
 		}
 #endif /* !DISABLE_HISTORIES */
@@ -3146,27 +3146,28 @@ void update_poshistory(char *filename, ssize_t lineno, ssize_t xpos)
     free(fullpath);
 }
 
-/* Check the recorded last file positions to see if the given file
- * matches an existing entry.  If so, return 1 and set line and column
- * to the retrieved values.  Otherwise, return 0. */
-int check_poshistory(const char *file, ssize_t *line, ssize_t *column)
+/* Check whether the given file matches an existing entry in the recorded
+ * last file positions.  If not, return FALSE.  If yes, return TRUE and
+ * set line and column to the retrieved values. */
+bool has_old_position(const char *file, ssize_t *line, ssize_t *column)
 {
-    poshiststruct *posptr;
+    poshiststruct *posptr = position_history;
     char *fullpath = get_full_path(file);
 
     if (fullpath == NULL)
-	return 0;
+	return FALSE;
+
+    while (posptr != NULL && strcmp(posptr->filename, fullpath) != 0)
+	posptr = posptr->next;
 
-    for (posptr = position_history; posptr != NULL; posptr = posptr->next) {
-	if (!strcmp(posptr->filename, fullpath)) {
-	    *line = posptr->lineno;
-	    *column = posptr->xno;
-	    free(fullpath);
-	    return 1;
-	}
-    }
     free(fullpath);
-    return 0;
+
+    if (posptr == NULL)
+        return FALSE;
+
+    *line = posptr->lineno;
+    *column = posptr->xno;
+    return TRUE;
 }
 
 /* Load the recorded file positions from ~/.nano/filepos_history. */
diff --git a/src/nano.c b/src/nano.c
index 5f1422b1b877198094e1122431a3467b3e65fb15..197194a95c5a3e050eaced38cd03e2105682a9c2 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -2606,7 +2606,7 @@ int main(int argc, char **argv)
 		else if (ISSET(POS_HISTORY)) {
 		    ssize_t savedposline, savedposcol;
 		    /* If edited before, restore the last cursor position. */
-		    if (check_poshistory(argv[i], &savedposline, &savedposcol))
+		    if (has_old_position(argv[i], &savedposline, &savedposcol))
 			do_gotolinecolumn(savedposline, savedposcol,
 						FALSE, FALSE);
 		}
@@ -2640,7 +2640,7 @@ int main(int argc, char **argv)
     else if (ISSET(POS_HISTORY)) {
 	ssize_t savedposline, savedposcol;
 	/* If the file was edited before, restore the last cursor position. */
-	if (check_poshistory(argv[optind], &savedposline, &savedposcol))
+	if (has_old_position(argv[optind], &savedposline, &savedposcol))
 	    do_gotolinecolumn(savedposline, savedposcol, FALSE, FALSE);
     }
 #endif
diff --git a/src/proto.h b/src/proto.h
index 5680c6edd475ed6d24d06a1605eb27ae28de226b..52350c9a54ebb02e6dfd08d378975fca99147073 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -354,7 +354,7 @@ int check_dotnano(void);
 void load_poshistory(void);
 void save_poshistory(void);
 void update_poshistory(char *filename, ssize_t lineno, ssize_t xpos);
-int check_poshistory(const char *file, ssize_t *line, ssize_t *column);
+bool has_old_position(const char *file, ssize_t *line, ssize_t *column);
 #endif
 
 /* Some functions in global.c. */