Skip to content
Snippets Groups Projects
Commit 412970a9 authored by dmitriy.gerasimov's avatar dmitriy.gerasimov
Browse files

Merge branch 'features-2954' into 'master'

Features 2954

See merge request !33
parents 50bbcf37 81a58386
No related branches found
No related tags found
1 merge request!33Features 2954
......@@ -22,12 +22,16 @@
along with any DAP based project. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdbool.h>
#include "dap_list.h"
#include <dirent.h>
#ifndef _DAP_FILE_UTILS_H_
#define _DAP_FILE_UTILS_H_
#ifdef _WIN32
#include <Windows.h>
/* On Win32, the canonical directory separator is the backslash, and
* the search path separator is the semicolon. Note that also the
* (forward) slash works as directory separator.
......@@ -85,4 +89,12 @@ char* dap_path_get_basename(const char *a_file_name);
bool dap_path_is_absolute(const char *a_file_name);
char* dap_path_get_dirname(const char *a_file_name);
/**
* Get list of subdirectories
*
* @a_path_name directory path.
* @return dap_list_t type variable that contains a list of subdirectories.
*/
dap_list_t *dap_get_subs(const char *a_path_name);
#endif // _FILE_UTILS_H_
......@@ -368,3 +368,34 @@ char* dap_path_get_dirname(const char *a_file_name)
return l_base;
}
dap_list_t *dap_get_subs(const char *a_path_dir){
dap_list_t *list = dap_list_alloc();
#ifdef _WIN32
size_t m_size = strlen(a_path_dir);
char *m_path = DAP_NEW_SIZE(char, m_size + 2);
memcpy(m_path, a_path_dir, m_size);
m_path[m_size] = '*';
m_path[m_size + 1] = '\0';
WIN32_FIND_DATA info_file;
HANDLE h_find_file = FindFirstFileA(m_path, &info_file);
while (FindNextFileA(h_find_file, &info_file)){
if (info_file.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY){
dap_list_append(list, info_file.cFileName);
}
}
FindClose(h_find_file);
DAP_FREE(m_path);
#else
DIR *dir = opendir(a_path_dir);
struct dirent *entry = readdir(dir);
while (entry != NULL){
if (strcmp(entry->d_name, "..") != 0 && strcmp(entry->d_name, ".") != 0 && entry->d_type == DT_DIR){
dap_list_append(list, entry->d_name);
}
entry = readdir(dir);
}
closedir(dir);
#endif
return list;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment