summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-08-03 05:33:30 +0000
committerUlrich Drepper <drepper@redhat.com>2001-08-03 05:33:30 +0000
commit755b39d29bec64927aff82e1598bdfb72a017515 (patch)
treec9e341fbc84e01470176ae337b8cc63d3e8cda37
parent518bd01a3d353c67e9db880c8faa70cf15855eda (diff)
downloadglibc-755b39d29bec64927aff82e1598bdfb72a017515.tar.gz
glibc-755b39d29bec64927aff82e1598bdfb72a017515.tar.xz
glibc-755b39d29bec64927aff82e1598bdfb72a017515.zip
(collate_read): Handle collating-element and reorder_after following copy statement correctly.
-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.  */