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. */