dirent
glad
dirent | glad | |
---|---|---|
4 | 43 | |
1,013 | 3,518 | |
- | - | |
5.8 | 7.1 | |
3 months ago | 30 days ago | |
C | C | |
MIT License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
dirent
-
Iterate filesystem and store information in a struct array
#include #include #include #include #include #include #include typedef struct file_info { char *path; // ToDo: more info in the future } file_info; // Function prototypes bool is_special_file(const char *file); file_info **find_all_files(const char *root_dir); int find_files(const char *dir_path, file_info ***files, int *cap, int *cnt); file_info *file_info_new(const char *path); int main(int argc, char **argv) { find_all_files("/tmp/test"); // ToDo: Free all the memory correctly return 0; } file_info *file_info_new(const char *path) { file_info *file = malloc(sizeof(file_info)); if (!file) return NULL; file->path = path; return file; } file_info **find_all_files(const char *root_dir) { file_info **files = malloc(sizeof(file_info *)); int capacity = 1; int count = 0; int result = find_files(root_dir, &files, &capacity, &count); printf("Array cap: %d\n", capacity); printf("Array count: %d\n", count); printf("-------------------\n"); for (int i = 0; i < count; i++) { printf("%s\n", files[i]->path); } return files; } // Based on the implementation from https://github.com/tronkko/dirent int find_files(const char *dir_path, file_info ***files, int *cap, int *cnt) { char buffer[PATH_MAX + 2]; char *p = buffer; char *end = &buffer[PATH_MAX]; // Copy directory name to buffer const char *src = dir_path; while (p < end && *src != '\0') { *p++ = *src++; } *p = '\0'; // Open directory stream DIR *dir_stream = opendir(dir_path); if (!dir_stream) { printf("Failed to open %s (%s)\n", dir_path, strerror(errno)); return -1; } // Iterate all files/directories within the directory struct dirent *ent; while ((ent = readdir(dir_stream)) != NULL) { char *q = p; char c; // Get final character of directory name if (buffer < q) c = q[-1]; else c = ':'; // Append directory separator if not already there if (c != ':' && c != '/' && c != '\\') *q++ = '/'; // Append file name to current directory path src = ent->d_name; while (q < end && *src != '\0') { *q++ = *src++; } *q = '\0'; // Resize array if needed if (*cnt == *cap) { int realloc_size = (*cap) * 2; file_info **tmp_files = realloc(*files, realloc_size * sizeof(file_info *)); if (!tmp_files) exit(1); *cap *= 2; *files = tmp_files; } // Process every dirent type switch (ent->d_type) { case DT_LNK: { printf("[LINK] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; break; } case DT_REG: { printf("[FILE] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; break; } case DT_DIR: { if (!is_special_file(ent->d_name)) { printf("[DIR] %s\n", buffer); (*files)[*cnt] = file_info_new(buffer); (*cnt)++; find_files(buffer, files, cap, cnt); } break; } default: break; } } return 0; } bool is_special_file(const char *file) { if (strcmp(file, ".") != 0 && strcmp(file, "..") != 0) return false; return true; }
-
Iterate files/directories/subdirectories in C ?
Thanks for the reply. Yea, I wonder how I would go about implementing an iterative approach tho. I am currently working with the following implementation: https://github.com/tronkko/dirent/blob/master/include/dirent.h
-
How can you iterate up the directory tree until the program gets to the first?
You can use dirent for both if you include a compatibility shim for windows.
-
OGL - A Great Cross Platform OpenGL Base Library With Almost Everything OpenGL You might Ever need
dirent
glad
-
STB: Single-file public domain libraries for C/C++
there's glad (https://github.com/Dav1dde/glad) which you can use as a single .c file + .h header that defines OpenGL stuff or a single header-only file. I use it on all of my OpenGL projects!
-
How do I enable anisotropic filtering with GLAD?
If you run into a similar issue with another extension, you need to manually add extensions when generating the GLAD loader.
-
Exploring Computer Graphics: Weekly Chronicle #1
GLEW/GLAD: Libraries that manage and give access to OpenGL functions and extensions. The difference is that GLAD allows for greater flexibility & customization for more recent versions of OpenGL. However, the Udemy course that I'm following uses GLEW and at least at this point, I prefer to follow along with the tools that each resource recommends.
-
Implications of running OpenGL inside a VM(parallels) on a Mac
I downloaded glad from this website : http://glad.dav1d.de/ I was also referring to this tutorial to setup my project : https://learnopengl.com/Getting-started/Creating-a-window
-
How do you setup OpenGL?
Not sure what you're asking, what is your end goal? If you opt for glfw look at the glfw docs: https://www.glfw.org/documentation.html and/or https://github.com/Dav1dde/glad/blob/glad2/example/c/gl_glfw.c for GLAD
-
Modern OpenGL loading library solution
Just link to GLAD if you're going to link to it! https://github.com/Dav1dde/glad
- When I compile my program, it has a problem with my include statement for the GLFW header file.
-
I (Putnam) put an up-to-date version of the graphics portion of Dwarf Fortress on Github, including the upcoming SDL2 version on a branch
glew is a GL extension/loading library, OP didn't write glew, personally I use GLAD (https://glad.dav1d.de/) in my projects, which is pretty much the same thing but auto-generated for you based on your project requirements.
-
including opengl header file but can't use its functions
In general nobody really uses the gl headers because they are super outdated and, i believe, only use Microsoft's software renderer for OpenGL. You should use a OpenGL function loader like GLAD instead.
-
Is setting up C+OpenGL with VSC really that hard?
Just use a library like glad which loads everything at runtime under the hood (even system OpenGL runtime, no need to link anything). For a quick start, there is a website to generate headers and a single glad.c to put in your project: https://glad.dav1d.de/
What are some alternatives?
imgui-node-editor - Node Editor built using Dear ImGui
glew - The OpenGL Extension Wrangler Library
imgui - Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
GLFW - A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input
TinyErode - A portable C++ library for simulating hydraulic erosion.
glew-cmake - GLEW(https://github.com/nigels-com/glew, source updated nightly) with Cmake and pre-generated sources
libcake - Librairie en C
opengl-imgui-cmake-template - 👾 template repo for getting started with opengl together with imgui using cmake
glm
ImGuizmo - Immediate mode 3D gizmo for scene editing and other controls based on Dear Imgui
stb - stb single-file public domain libraries for C/C++
LearnOpenGL - Code repository of all OpenGL chapters from the book and its accompanying website https://learnopengl.com