about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--locale/programs/ld-collate.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index 63c379ae84..e9e92e2bf4 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -2742,7 +2742,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
 	      break;
 	    }
 
-	  if (state != 0)
+	  if (state != 0 && state != 2)
 	    goto err_label;
 
 	  arg = lr_token (ldfile, charmap, repertoire, verbose);
@@ -3533,7 +3533,9 @@ error while adding equivalent collating symbol"));
 		goto move_entry;
 
 	      if (find_entry (&collate->elem_table, symstr, symlen,
-			      (void **) &seqp) == 0)
+			      (void **) &seqp) == 0
+		  && (seqp->last != NULL || seqp->next != NULL
+		      || (collate->start != NULL && seqp == collate->start)))
 		{
 		move_entry:
 		  /* Remove the entry from the old position.  */