07: C: Reduce malloc calls
This commit is contained in:
parent
e1d55dda2e
commit
59bf88cb6b
|
@ -6,8 +6,9 @@ typedef struct entry {
|
|||
char *name;
|
||||
int isdir;
|
||||
size_t size;
|
||||
struct entry **entries;
|
||||
size_t n_entries;
|
||||
size_t n_alloc;
|
||||
struct entry **entries;
|
||||
struct entry *parent;
|
||||
} entry;
|
||||
|
||||
|
@ -22,10 +23,14 @@ entry *findent(entry *e, int isdir, const char *name) {
|
|||
}
|
||||
|
||||
entry *addent(entry *parent, int isdir, const char *name) {
|
||||
if (parent->n_entries)
|
||||
parent->entries = realloc(parent->entries, ++(parent->n_entries) * sizeof(entry*));
|
||||
else
|
||||
parent->entries = malloc(++(parent->n_entries) * sizeof(entry*));
|
||||
if (parent->n_entries >= parent->n_alloc) {
|
||||
parent->n_alloc += 10;
|
||||
if (parent->n_entries)
|
||||
parent->entries = realloc(parent->entries, parent->n_alloc * sizeof(entry*));
|
||||
else
|
||||
parent->entries = malloc(parent->n_alloc * sizeof(entry*));
|
||||
}
|
||||
parent->n_entries++;
|
||||
|
||||
entry *e = parent->entries[parent->n_entries - 1] = calloc(1, sizeof(entry));
|
||||
e->isdir = isdir;
|
||||
|
|
Loading…
Reference in New Issue