#include #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 **)g_malloc(sizeof(char *)); if (file_names == NULL) { 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 char **temp = g_realloc(file_names, (file_count + 1 + 1) * sizeof(char *)); if (temp == NULL) { for (size_t file_idx = 0; file_idx < file_count; file_idx++) { g_free(file_names[file_idx]); } return NULL; } file_names = temp; /// Create space for the name file_names[file_count] = g_calloc(strlen(dir->d_name) + 1, sizeof(char)); if (file_names[file_count] == NULL) { for (size_t file_idx = 0; file_idx < file_count; file_idx++) { g_free(file_names[file_idx]); } return NULL; } /// 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; } // Get full path char *full_path(char *dir, char *file) { char *fpath = NULL; size_t dir_len = strlen(dir); size_t file_len = strlen(file); fpath = (char *)g_calloc(dir_len + file_len + 2, sizeof(char)); if (fpath == NULL) { return NULL; } strcpy(fpath, dir); strcpy(fpath + dir_len + 1, file); fpath[dir_len] = '/'; return fpath; } // Determines if file name has tif file extension bool_t is_tif_ext(char *file_name) { size_t file_len = strlen(file_name); if ((file_name[file_len - 3] == 't') && (file_name[file_len - 2] == 'i') && (file_name[file_len - 1] == 'f')) { return TRUE; } return FALSE; }