#include #include #include #include #include // Is directory bool_t is_directory(char* dirname) { struct stat st; if (stat(dirname, &st) == 0) { if (S_ISDIR(st.st_mode)) { return TRUE; } } return FALSE; } // List directory char** list_directory(char* dirname) { DIR *d; struct dirent *dir; d = opendir(dirname); char** file_names = (char**)malloc(sizeof(char*)); if (!file_names) { return NULL; } file_names[0] = NULL; size_t file_count = 0; if (d) { while ((dir = readdir(d)) != NULL) { if (dir->d_type == DT_REG) { // When a regular file is reached /// Create space for it in the list file_names = realloc(file_names, (file_count+1+1)*sizeof(char*)); /// Create space for the name file_names[file_count] = calloc(strlen(dir->d_name)+1, sizeof(char)); /// Copy the name strcpy(file_names[file_count], dir->d_name); /// Mark the end of the file list with a NULL entry file_names[++file_count] = NULL; } } return file_names; } return NULL; }