files = x_realloc(files, sizeof(struct files *)*allocated);
}
- files[num_files] = x_malloc(sizeof(struct files *));
+ files[num_files] = x_malloc(sizeof(struct files));
files[num_files]->fname = x_strdup(fname);
files[num_files]->mtime = st->st_mtime;
files[num_files]->size = file_size(st) / 1024;
size_threshold = maxsize * LIMIT_MULTIPLE;
files_threshold = maxfiles * LIMIT_MULTIPLE;
+ num_files = 0;
+ total_size = 0;
+
/* build a list of files */
traverse(dir, traverse_fn);
for (i=0;i<num_files;i++) {
free(files[i]->fname);
free(files[i]);
+ files[i] = NULL;
}
+ if (files) free(files);
+ allocated = 0;
+ files = NULL;
num_files = 0;
total_size = 0;
}
/*
- this is like strdup() but dies if the malloc fails
+ this is like realloc() but dies if the malloc fails
*/
void *x_realloc(void *ptr, size_t size)
{
+ void *p2;
if (!ptr) return x_malloc(size);
- ptr = realloc(ptr, size);
- if (!ptr) {
+ p2 = malloc(size);
+ if (!p2) {
fatal("out of memory in x_realloc");
}
- return ptr;
+ if (ptr) {
+ memcpy(p2, ptr, size);
+ free(ptr);
+ }
+ return p2;
}