I'm using this read directory code from the ogg player example...
Code: Select all
filenames_t* readDirectory (char* directory) {
int ret=-1;
int n_dir=0;
int n_reg=0;
fio_dirent_t record;
char** filename_array =NULL;
int i =0;
filenames_t* current_dir =NULL;
int* fileattrib_array =NULL;
/*Create space */
current_dir = malloc(sizeof(*current_dir));
filename_array = malloc(sizeof(char*)*FILEARRAYBUFFER);
fileattrib_array = malloc(sizeof(int)*FILEARRAYBUFFER);
/*Open Directory */
if ((ret = fioDopen(directory)) < 0) {
//printf("Error opening dir\n");
return NULL;
}
i=0;
n_dir=0;
n_reg=0;
while (fioDread(ret, &record) > 0) {
/*Expand array if too small */
if (i % FILEARRAYBUFFER == 0) {
filename_array = realloc(filename_array,
sizeof(char*) * (i+FILEARRAYBUFFER));
fileattrib_array = realloc(fileattrib_array,
sizeof(int) * (i+FILEARRAYBUFFER));
}
/*Copy filename into array */
filename_array[i] = malloc(strlen(record.name)+1);
strcpy(filename_array[i], record.name);
fileattrib_array[i] = record.stat.mode;
/*Keep track of number of files */
if (FIO_SO_ISDIR(record.stat.mode)) {
n_dir++;
}
if (FIO_SO_ISREG(record.stat.mode)) {
n_reg++;
}
i++;
}
if (ret >= 0) fioDclose(ret);
current_dir->filenames = filename_array;
current_dir->num_filenames = i;
current_dir->attrib = fileattrib_array;
return current_dir;
}
current_dir, filename_array & fileattrib_array
is not freed: is it ok or is it a misconception of the code?
Thanks