|
3 | 3 |
|
4 | 4 | #include "Prototypes.h" |
5 | 5 |
|
| 6 | +/*{ |
| 7 | +
|
| 8 | +typedef bool(*Method_Files_fileHandler)(void*, char*); |
| 9 | + |
| 10 | +}*/ |
| 11 | + |
6 | 12 | FILE* Files_open(char* mode, char* picture, char* value) { |
7 | 13 | char fileName[4097]; |
8 | | - char* dataDir = DATADIR; |
| 14 | + char* dataDir = PKGDATADIR; |
9 | 15 | FILE* fd = Files_openHome(mode, picture, value); |
10 | 16 | if (fd) return fd; |
11 | 17 | snprintf(fileName, 4096, "%s/", dataDir); |
@@ -34,3 +40,43 @@ void Files_makeHome() { |
34 | 40 | fileName[4095] = '\0'; |
35 | 41 | mkdir(fileName, 0755); |
36 | 42 | } |
| 43 | + |
| 44 | +void Files_forEachInDir(char* dirName, Method_Files_fileHandler fileHandler, void* data) { |
| 45 | + bool result = false; |
| 46 | + FILE* fd; |
| 47 | + char homeName[4097]; |
| 48 | + char* homeDir = getenv("HOME"); |
| 49 | + snprintf(homeName, 4096, "%s/.dit/", homeDir); |
| 50 | + int homeLen = strlen(homeName); |
| 51 | + snprintf(homeName + homeLen, 4096 - homeLen, "%s", dirName); |
| 52 | + DIR* dir = opendir(homeName); |
| 53 | + while (dir) { |
| 54 | + struct dirent* entry = readdir(dir); |
| 55 | + if (!entry) break; |
| 56 | + if (entry->d_name[0] == '.') continue; |
| 57 | + snprintf(homeName + homeLen, 4096 - homeLen, "%s/%s", dirName, entry->d_name); |
| 58 | + if (fileHandler(data, homeName)) { |
| 59 | + if (dir) closedir(dir); |
| 60 | + return; |
| 61 | + } |
| 62 | + } |
| 63 | + char dataName[4097]; |
| 64 | + char* dataDir = PKGDATADIR; |
| 65 | + snprintf(dataName, 4096, "%s/", dataDir); |
| 66 | + int dataLen = strlen(dataName); |
| 67 | + snprintf(dataName + dataLen, 4096 - homeLen, "%s", dirName); |
| 68 | + dir = opendir(dataName); |
| 69 | + while (dir) { |
| 70 | + struct dirent* entry = readdir(dir); |
| 71 | + if (!entry) break; |
| 72 | + if (entry->d_name[0] == '.') continue; |
| 73 | + snprintf(homeName + homeLen, 4096 - homeLen, "%s/%s", dirName, entry->d_name); |
| 74 | + if (access(homeName, R_OK) == 0) |
| 75 | + continue; |
| 76 | + snprintf(dataName + dataLen, 4096 - dataLen, "%s/%s", dirName, entry->d_name); |
| 77 | + if (fileHandler(data, dataName)) { |
| 78 | + if (dir) closedir(dir); |
| 79 | + return; |
| 80 | + } |
| 81 | + } |
| 82 | +} |
0 commit comments