From fbe4376822189520610215e7d3e44c3c740c1811 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Tue, 24 Nov 2015 13:24:01 +0000 Subject: [PATCH] Inserting a new node into a linked list by using just two parameters: the insertion point and the new node. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5437 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 2 ++ src/nano.c | 9 ++++----- src/proto.h | 3 +-- src/search.c | 2 +- src/text.c | 10 ++++------ 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index d69c3c31..39b37030 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,8 @@ .mk as Makefiles. Suggested by Emmanuel Bourg in Debian bug #804845. * src/color.c (color_update): Tell the user when a syntax name given on the command line does not exist. This fixes Savannah bug #46503. + * src/nano.c (splice_node): Inserting a new node into a linked list + requires just two parameters: the insertion point and the new node. 2015-11-23 Benno Schulenberg * src/nano.c (main), src/winio.c (parse_kbinput): Make Ctrl+Left and diff --git a/src/nano.c b/src/nano.c index 2d75f2b6..d515380d 100644 --- a/src/nano.c +++ b/src/nano.c @@ -95,16 +95,15 @@ filestruct *copy_node(const filestruct *src) } /* Splice a node into an existing filestruct. */ -void splice_node(filestruct *begin, filestruct *newnode, filestruct - *end) +void splice_node(filestruct *begin, filestruct *newnode) { assert(newnode != NULL && begin != NULL); - newnode->next = end; + newnode->next = begin->next; newnode->prev = begin; + if (begin->next != NULL) + begin->next->prev = newnode; begin->next = newnode; - if (end != NULL) - end->prev = newnode; } /* Unlink a node from the rest of the filestruct and delete it. */ diff --git a/src/proto.h b/src/proto.h index e0a66b83..798ef12a 100644 --- a/src/proto.h +++ b/src/proto.h @@ -432,8 +432,7 @@ void do_right(void); /* All functions in nano.c. */ filestruct *make_new_node(filestruct *prevnode); filestruct *copy_node(const filestruct *src); -void splice_node(filestruct *begin, filestruct *newnode, filestruct - *end); +void splice_node(filestruct *begin, filestruct *newnode); void unlink_node(filestruct *fileptr); void delete_node(filestruct *fileptr); filestruct *copy_filestruct(const filestruct *src); diff --git a/src/search.c b/src/search.c index 202c9db4..dea199da 100644 --- a/src/search.c +++ b/src/search.c @@ -1323,7 +1323,7 @@ void update_history(filestruct **h, const char *s) /* Add the new entry to the end. */ (*hbot)->data = mallocstrcpy((*hbot)->data, s); - splice_node(*hbot, make_new_node(*hbot), (*hbot)->next); + splice_node(*hbot, make_new_node(*hbot)); *hbot = (*hbot)->next; (*hbot)->data = mallocstrcpy(NULL, ""); diff --git a/src/text.c b/src/text.c index a7d717a5..c21f6f8b 100644 --- a/src/text.c +++ b/src/text.c @@ -546,7 +546,7 @@ void do_undo(void) data[u->mark_begin_x] = '\0'; free(f->data); f->data = data; - splice_node(f, t, f->next); + splice_node(f, t); if (f == openfile->filebot) openfile->filebot = t; goto_line_posx(u->lineno, u->begin); @@ -677,7 +677,7 @@ void do_redo(void) data[u->begin] = '\0'; free(f->data); f->data = data; - splice_node(f, shoveline, f->next); + splice_node(f, shoveline); if (f == openfile->filebot) openfile->filebot = shoveline; renumber(shoveline); @@ -788,7 +788,7 @@ void do_enter() #endif openfile->current_x = extra; - splice_node(openfile->current, newnode, openfile->current->next); + splice_node(openfile->current, newnode); if (openfile->current == openfile->filebot) openfile->filebot = newnode; @@ -2139,9 +2139,7 @@ void do_justify(bool full_justify) /* Make a new line, and copy the text after where we're * going to break this line to the beginning of the new * line. */ - splice_node(openfile->current, - make_new_node(openfile->current), - openfile->current->next); + splice_node(openfile->current, make_new_node(openfile->current)); /* If this paragraph is non-quoted, and autoindent isn't * turned on, set the indentation length to zero so that the -- 2.39.5