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