1
1

Moving an updated position-history item to the end of the list,

so that it won't be dropped any time soon.


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5582 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Этот коммит содержится в:
Benno Schulenberg 2016-01-24 14:49:42 +00:00
родитель cd1d435ac7
Коммит 8c705b5dc2
2 изменённых файлов: 30 добавлений и 17 удалений

Просмотреть файл

@ -1,3 +1,8 @@
2016-01-24 Benno Schulenberg <bensberg@justemail.net>
* src/files.c (update_poshistory): Move an updated item to the end
of the list, so that it won't be dropped any time soon. The problem
was pointed out by David Niklas.
2016-01-22 Benno Schulenberg <bensberg@justemail.net> 2016-01-22 Benno Schulenberg <bensberg@justemail.net>
* src/utils.c (get_homedir): Don't use $HOME when we're root, because * src/utils.c (get_homedir): Don't use $HOME when we're root, because
some sudos don't filter it out of the environment (which can lead to some sudos don't filter it out of the environment (which can lead to

Просмотреть файл

@ -3183,33 +3183,41 @@ void save_poshistory(void)
* and a column. If no entry is found, add a new one at the end. */ * and a column. If no entry is found, add a new one at the end. */
void update_poshistory(char *filename, ssize_t lineno, ssize_t xpos) void update_poshistory(char *filename, ssize_t lineno, ssize_t xpos)
{ {
poshiststruct *posptr, *posprev = NULL; poshiststruct *posptr, *theone, *posprev = NULL;
char *fullpath = get_full_path(filename); char *fullpath = get_full_path(filename);
if (fullpath == NULL) if (fullpath == NULL)
return; return;
/* Look for a matching filename in the list. */
for (posptr = position_history; posptr != NULL; posptr = posptr->next) { for (posptr = position_history; posptr != NULL; posptr = posptr->next) {
if (!strcmp(posptr->filename, fullpath)) { if (!strcmp(posptr->filename, fullpath))
posptr->lineno = lineno; break;
posptr->xno = xpos;
free(fullpath);
return;
}
posprev = posptr; posprev = posptr;
} }
/* Didn't find it, make a new node yo! */ theone = posptr;
posptr = (poshiststruct *)nmalloc(sizeof(poshiststruct));
posptr->filename = mallocstrcpy(NULL, fullpath);
posptr->lineno = lineno;
posptr->xno = xpos;
posptr->next = NULL;
if (position_history == NULL) /* If we didn't find it, make a new node; otherwise, if we're
position_history = posptr; * not at the end, move the matching one to the end. */
else if (theone == NULL) {
posprev->next = posptr; theone = (poshiststruct *)nmalloc(sizeof(poshiststruct));
theone->filename = mallocstrcpy(NULL, fullpath);
if (position_history == NULL)
position_history = theone;
else
posprev->next = theone;
} else if (posptr->next != NULL) {
posprev->next = posptr->next;
while (posptr->next != NULL)
posptr = posptr->next;
posptr->next = theone;
}
/* Store the last cursor position. */
theone->lineno = lineno;
theone->xno = xpos;
theone->next = NULL;
free(fullpath); free(fullpath);
} }