2007-08-06 Simon Josefsson <simon@josefsson.org>
[gnulib.git] / lib / argp-help.c
index ddb803b..1a4131f 100644 (file)
@@ -375,6 +375,9 @@ struct hol_entry
 
   /* The argp from which this option came.  */
   const struct argp *argp;
+
+  /* Position in the array */
+  unsigned ord;
 };
 
 /* A cluster of entries to reflect the argp tree structure.  */
@@ -592,7 +595,7 @@ hol_entry_long_iterate (const struct hol_entry *entry,
 }
 \f
 /* Iterator that returns true for the first short option.  */
-static inline int
+static int
 until_short (const struct argp_option *opt, const struct argp_option *real,
             const char *domain, void *cookie)
 {
@@ -733,7 +736,7 @@ canon_doc_option (const char **name)
   return non_opt;
 }
 
-#define HOL_ENTRY_PTRCMP(a,b) ((a) < (b) ? -1 : 1)
+#define HOL_ENTRY_PTRCMP(a,b) ((a)->ord < (b)->ord ? -1 : 1)
 
 /* Order ENTRY1 & ENTRY2 by the order which they should appear in a help
    listing.  */
@@ -829,8 +832,14 @@ static void
 hol_sort (struct hol *hol)
 {
   if (hol->num_entries > 0)
-    qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry),
-          hol_entry_qcmp);
+    {
+      unsigned i;
+      struct hol_entry *e;
+      for (i = 0, e = hol->entries; i < hol->num_entries; i++, e++)
+       e->ord = i;
+      qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry),
+            hol_entry_qcmp);
+    }
 }
 \f
 /* Append MORE to HOL, destroying MORE in the process.  Options in HOL shadow