X-Git-Url: https://git.cworth.org/git?p=mnemon;a=blobdiff_plain;f=mnemon.c;h=101ace80edb9f29d49232261de5db331931a847a;hp=a1872bcf9632b9b0b00debd2d6cd0c1a5ba490b9;hb=b3370d9eb4c77cfb39e6045af5f4cdb8c045452f;hpb=f2912ab7a76a0362c41ca8b336cc6933f4f9fc30 diff --git a/mnemon.c b/mnemon.c index a1872bc..101ace8 100644 --- a/mnemon.c +++ b/mnemon.c @@ -345,10 +345,16 @@ mnemon_get_bin (mnemon_t *mnemon, 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); @@ -497,6 +503,7 @@ mnemon_save (mnemon_t *mnemon) 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", @@ -506,12 +513,17 @@ mnemon_save (mnemon_t *mnemon) 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); } }