On Wed, 28 Nov 2012 14:52:49 +0100, Jiri Olsa wrote: > Adding option 'o' to allow sorting based on the > input file number. [snip] > hist_entry__cmp_compute(struct hist_entry *left, struct hist_entry *right, > int c) > { > - int i; > + struct hist_entry **pairs_left = left->pairs; > + struct hist_entry **pairs_right = right->pairs; > + struct hist_entry *p_right, *p_left; > + static int64_t cmp; > > - for (i = 0; i < data_cnt; i++) { > - struct hist_entry **pairs_left = left->pairs; > - struct hist_entry **pairs_right = right->pairs; > - struct hist_entry *p_right, *p_left; > - static int64_t cmp; > + if (!pairs_left || !pairs_right) > + return pairs_left ? -1 : 1; > > - if (!pairs_left || !pairs_right) > - return pairs_right - pairs_left; > + p_right = pairs_right[sort_compute]; > + p_left = pairs_left[sort_compute]; > > - p_right = pairs_right[i]; > - p_left = pairs_left[i]; > + if (!p_left || !p_right) > + return p_left ? -1 : 1;
What if both p_left and p_right are NULL? Shouldn't it be move to the next pairs? > > - if (!p_left || !p_right) > - return p_right - p_left; > - > - /* > - * If we differ, we are done, otherwise continue until all > - * is processed or we find a difference. > - */ > - cmp = __hist_entry__cmp_compute(p_left, p_right, c); > - if (cmp) > - return cmp; > - } > + /* > + * If we differ, we are done, otherwise continue until all > + * is processed or we find a difference. > + */ I guess this comment is not applied anymore. Or we need a loop after checking sort_compute column, right? Thanks, Namhyung > + cmp = __hist_entry__cmp_compute(p_left, p_right, c); > + if (cmp) > + return cmp; > > return 0; > } > @@ -759,6 +748,7 @@ static const struct option options[] = { > "columns '.' is reserved."), > OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory", > "Look for files with symbols relative to this directory"), > + OPT_UINTEGER('o', "order", &sort_compute, "Specify compute sorting."), > OPT_END() > }; > > @@ -1087,6 +1077,11 @@ static int data_init(int argc, const char **argv) > d->idx = i; > } > > + if (sort_compute >= (unsigned int) data_cnt) { > + pr_err("Order option out of limit.\n"); > + return -EINVAL; > + } > + > return 0; > } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/