From c47a574a108626706893232b034ba2824229c4b0 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Sun, 16 Nov 2025 22:39:57 +0900 Subject: [PATCH] add MDE/Directory --- include/MDE/Directory.h | 16 ++++++++++++++++ include/MDE/Foundation.h | 1 + include/MDE/Users.h | 2 +- src/directory.c | 30 ++++++++++++++++++++++++++++++ src/file.c | 1 - src/users.c | 2 +- 6 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 include/MDE/Directory.h create mode 100644 src/directory.c diff --git a/include/MDE/Directory.h b/include/MDE/Directory.h new file mode 100644 index 0000000..9b7a18a --- /dev/null +++ b/include/MDE/Directory.h @@ -0,0 +1,16 @@ +#ifndef __MDE_DIRECTORY_H__ +#define __MDE_DIRECTORY_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void MDEDirectoryScan(const char* path, void(*call)(const char* name, int dir, void* user), void* user); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/MDE/Foundation.h b/include/MDE/Foundation.h index bef90ea..c581037 100644 --- a/include/MDE/Foundation.h +++ b/include/MDE/Foundation.h @@ -6,5 +6,6 @@ #include #include #include +#include #endif diff --git a/include/MDE/Users.h b/include/MDE/Users.h index e8808e9..9d0d074 100644 --- a/include/MDE/Users.h +++ b/include/MDE/Users.h @@ -7,7 +7,7 @@ extern "C" { #endif -void MDEListUsers(void(*call)(const char* name, void* user), void* user); +void MDEUsersList(void(*call)(const char* name, void* user), void* user); #ifdef __cplusplus } diff --git a/src/directory.c b/src/directory.c new file mode 100644 index 0000000..d57b87b --- /dev/null +++ b/src/directory.c @@ -0,0 +1,30 @@ +#include + +#include +#include +#include +#include + +void MDEDirectoryScan(const char* path, void(*call)(const char* name, int dir, void* user), void* user){ + DIR* dir = opendir(path); + if(dir != NULL){ + struct dirent* d; + while((d = readdir(dir)) != NULL){ + char* p; + struct stat s; + if(strcmp(d->d_name, "..") == 0 || strcmp(d->d_name, ".") == 0) continue; + + p = malloc(strlen(path) + 1 + strlen(d->d_name) + 1); + strcpy(p, path); + if(path[strlen(path) - 1] != '/') strcat(p, "/"); + strcat(p, d->d_name); + + if(stat(p, &s) == 0){ + call(p, S_ISDIR(s.st_mode) ? 1 : 0, user); + } + + free(p); + } + closedir(dir); + } +} diff --git a/src/file.c b/src/file.c index 2a8831e..3108bd0 100644 --- a/src/file.c +++ b/src/file.c @@ -1,7 +1,6 @@ #include #include -#include void MDEFileCopy(const char* src, const char* dst){ char buffer[4096]; diff --git a/src/users.c b/src/users.c index 2a19bda..8562d3e 100644 --- a/src/users.c +++ b/src/users.c @@ -3,7 +3,7 @@ #include -void MDEListUsers(void(*call)(const char* name, void* user), void* user){ +void MDEUsersList(void(*call)(const char* name, void* user), void* user){ struct passwd* pwd; setpwent();