|
@@ -1886,13 +1886,18 @@ networkstatus_compute_consensus(smartlist_t *votes,
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-/** DOCDOC */
|
|
|
+/** Given a list of networkstatus_t for each vote, return a newly allocated
|
|
|
+ * string containing the "package" lines for the vote. */
|
|
|
STATIC char *
|
|
|
compute_consensus_package_lines(smartlist_t *votes)
|
|
|
{
|
|
|
const int n_votes = smartlist_len(votes);
|
|
|
+
|
|
|
+ /* This will be a map from "packagename version" strings to arrays
|
|
|
+ * of const char *, with the i'th member of the array corresponding to the
|
|
|
+ * package line from the i'th vote.
|
|
|
+ */
|
|
|
strmap_t *package_status = strmap_new();
|
|
|
- smartlist_t *result_list = smartlist_new();
|
|
|
|
|
|
SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) {
|
|
|
if (! v->package_lines)
|
|
@@ -1901,6 +1906,7 @@ compute_consensus_package_lines(smartlist_t *votes)
|
|
|
if (! validate_recommended_package_line(line))
|
|
|
continue;
|
|
|
|
|
|
+ /* Skip 'cp' to the second space in the line. */
|
|
|
const char *cp = strchr(line, ' ');
|
|
|
if (!cp) continue;
|
|
|
++cp;
|
|
@@ -1919,7 +1925,8 @@ compute_consensus_package_lines(smartlist_t *votes)
|
|
|
} SMARTLIST_FOREACH_END(line);
|
|
|
} SMARTLIST_FOREACH_END(v);
|
|
|
|
|
|
- smartlist_t *entries = smartlist_new();
|
|
|
+ smartlist_t *entries = smartlist_new(); /* temporary */
|
|
|
+ smartlist_t *result_list = smartlist_new(); /* output */
|
|
|
STRMAP_FOREACH(package_status, key, const char **, values) {
|
|
|
int i, count=-1;
|
|
|
for (i = 0; i < n_votes; ++i) {
|