for (i = 0; i < mnemon->num_bins; i++)
if (mnemon->bins[i].count == count)
return &mnemon->bins[i];
+ else if (mnemon->bins[i].count > count)
+ break;
mnemon_bins_grow (mnemon);
- bin = &mnemon->bins[mnemon->num_bins++];
+ bin = &mnemon->bins[i];
+
+ /* Make room to insert new bin at its sorted location. */
+ memmove (bin + 1, bin, (mnemon->num_bins - i) * sizeof (bin_t));
+ mnemon->num_bins++;
bin_init (bin, count);
mnemon->dir_name, category->name);
xasprintf (&lock_filename, "%s/.#%s",
mnemon->dir_name, category->name);
+
file = fopen (lock_filename, "w");
if (file == NULL) {
fprintf (stderr, "Error: Failed to open %s for writing: %s\n",
category_print (category, file);
+ fclose (file);
+
err = rename (lock_filename, filename);
if (err < 0) {
fprintf (stderr, "Error: Failes to rename %s to %s: %s\n",
lock_filename, filename, strerror (errno));
continue;
}
+
+ free (filename);
+ free (lock_filename);
}
}