#include #include #include "wildcards.h" using namespace std; const char *wildcardProblem; bool wildcards(int *lengthPointer, char ***contentPointer, const char *query, bool fullPaths) { al_ffblk wildcardSearchData; vector builder; bool hopefulAboutFileIo = true; bool startedSearch; errno = 0; if (al_findfirst(query, &wildcardSearchData, FA_ALL)) { wildcardProblem = errno ? strerror(errno) : "Nothing matches."; startedSearch = false; hopefulAboutFileIo = false; } else startedSearch = true; bool continueReading = hopefulAboutFileIo; while (continueReading) { char *fn = (char*)malloc(512); if (fn) { builder.push_back(fullPaths ? replace_filename(fn, query, wildcardSearchData.name, 512) : strcpy(fn, wildcardSearchData.name)); if (al_findnext(&wildcardSearchData)) { continueReading = false; /* if (errno) { wildcardProblem = strerror(errno); hopefulAboutFileIo = false; } */ } } else { wildcardProblem = "Not enough memory."; continueReading = false; hopefulAboutFileIo = false; } } if (startedSearch) al_findclose(&wildcardSearchData); if (hopefulAboutFileIo) { *contentPointer = (char**)malloc(builder.size() * sizeof(char*)); if (!*contentPointer) { wildcardProblem = "Not enough memory."; for (vector::iterator i = builder.begin(); i != builder.end(); i++) free(*i); return false; } *lengthPointer = builder.size(); for (int i = 0; i < *lengthPointer; i++) (*contentPointer)[i] = builder[i]; return true; } else { for (vector::iterator i = builder.begin(); i != builder.end(); i++) free(*i); return false; } } void destroyWildcards(int length, char **content) { for (int i = 0; i < length; i++) free(content[i]); free(content); }