Lightweight, portable and easy to integrate C directory and file reader

Overview

TinyDir

Build Status Release

Lightweight, portable and easy to integrate C directory and file reader. TinyDir wraps dirent for POSIX and FindFirstFile for Windows.

Windows unicode is supported by defining UNICODE and _UNICODE before including tinydir.h.

Example

There are two methods. Error checking omitted:

tinydir_dir dir;
tinydir_open(&dir, "/path/to/dir");

while (dir.has_next)
{
	tinydir_file file;
	tinydir_readfile(&dir, &file);

	printf("%s", file.name);
	if (file.is_dir)
	{
		printf("/");
	}
	printf("\n");

	tinydir_next(&dir);
}

tinydir_close(&dir);
tinydir_dir dir;
int i;
tinydir_open_sorted(&dir, "/path/to/dir");

for (i = 0; i < dir.n_files; i++)
{
	tinydir_file file;
	tinydir_readfile_n(&dir, &file, i);

	printf("%s", file.name);
	if (file.is_dir)
	{
		printf("/");
	}
	printf("\n");
}

tinydir_close(&dir);

See the /samples folder for more examples, including an interactive command-line directory navigator.

Language

ANSI C, or C90.

Platforms

POSIX and Windows supported. Open to the possibility of supporting other platforms.

License

Simplified BSD; if you use tinydir you can comply by including tinydir.h or COPYING somewhere in your package.

Known Limitations

Comments
  • Downloads & Videos folder not displaying - windows

    Downloads & Videos folder not displaying - windows

    Hello I love this library , but I'm having issues with displaying my videos and downloads folder. I tried using a folder inside of them and it worked, but for some odd reason these folders are not displaying.

    Any idea why?

    Please note I built a wrapper class around TinyDir so that I can not have to call it often.

    See http://pastebin.com/sS3UfDAw and http://pastebin.com/EwTEJsf6

    opened by nhurde 28
  • Doesn't work with MinGW-w64

    Doesn't work with MinGW-w64

    It looks like readdir_r is not supported by MinGW-w64 distributions. When I try to build the samples on my MinGW Builds 5.3.0 compiler, I get the following errors.

    In file included from tinydir\samples\file_open_sample.c:2:0:
    tinydir/tinydir.h: In function 'tinydir_open':
    tinydir/tinydir.h:194:10: error: implicit declaration of function 'readdir_r' [-Werror=implicit-function-declaration]
      error = readdir_r(dir->_d, dir->_ep, &dir->_e);
              ^
    tinydir/tinydir.h: In function '_tinydir_dirent_buf_size':
    tinydir/tinydir.h:629:13: error: #error "buffer size for readdir_r cannot be determined"
     #           error "buffer size for readdir_r cannot be determined"
                 ^
    

    Is there an alternative?

    opened by eXpl0it3r 11
  • Add basic extension detection.

    Add basic extension detection.

    I was in need to browse directories in C. I find tinydir lib. But I need to get files extensions, so here is the code. I added a member to tinydir_file structure : (char *) extension. This member is filled with the pointer to the last dot find in the filename. Searching the last dot is made using the standard C function : strrchr()

    opened by AMDG2 10
  • tinydir_file_open crashes with debug msvcr

    tinydir_file_open crashes with debug msvcr

    Hi,

    The following code crashes when compiled on MSVS2013 with debug version of C runtime lib:

    #define UNICODE
    #define _UNICODE
    #include "tinydir.h"
    
    int main() {
        tinydir_file fi;
        tinydir_file_open(&fi, L".");
        (void) fi;
        return 0;
    }
    

    Compilation command:

    >cl test.c /MDd
    Microsoft (R) C/C++ Optimizing Compiler Version 18.00.40629 for x86
    

    I can see that something is wrong with this call - https://github.com/cxong/tinydir/blob/98e9a82dd4296db5f5445e1026cdf7ddd6121a73/tinydir.h#L625 but it is not clear what is wrong.

    opened by staticlibs 9
  • Compilation error with MSVC 14 x86

    Compilation error with MSVC 14 x86

    UNICODE is defined in my project. But I get the following errors.

    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(263): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'const TCHAR *' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(263): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(268): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'const TCHAR *' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(268): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(286): error C2664: 'char *strcpy(char *,const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(286): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(288): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(288): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(295): error C2664: 'char *strcpy(char *,const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(295): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(296): error C2664: 'char *strcat(char *,const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(296): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(497): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'const TCHAR [260]' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(497): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(504): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'const WCHAR [260]' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(504): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(517): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'const WCHAR [260]' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(517): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(523): error C2664: 'char *strcpy(char *,const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(523): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(524): error C2664: 'char *strcat(char *,const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(524): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(531): error C2664: 'char *strcpy(char *,const char *)': cannot convert argument 1 from 'TCHAR [256]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(531): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(532): error C2664: 'char *strcat(char *,const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(532): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(609): error C2664: 'char *strcpy(char *,const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(609): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(635): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'const TCHAR *' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(635): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(640): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'const TCHAR *' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(640): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(654): error C2664: 'errno_t _splitpath_s(const char *,char *,std::size_t,char *,std::size_t,char *,std::size_t,char *,std::size_t)': cannot convert argument 1 from 'const TCHAR *' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(654): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(681): error C2664: 'char *strcpy(char *,const char *)': cannot convert argument 1 from 'TCHAR [260]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(681): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(684): error C2664: 'char *strcat(char *,const char *)': cannot convert argument 1 from 'TCHAR [3]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(684): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(687): error C2664: 'char *strcat(char *,const char *)': cannot convert argument 1 from 'TCHAR [256]' to 'char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(687): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(710): error C2664: 'int strcmp(const char *,const char *)': cannot convert argument 1 from 'TCHAR [256]' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(710): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(732): error C2665: 'strrchr': none of the 2 overloads could convert all the argument types
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(732): note: while trying to match the argument list '(TCHAR [256], char)'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(735): error C2664: 'size_t strlen(const char *)': cannot convert argument 1 from 'TCHAR [256]' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(735): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(752): error C2664: 'int strncmp(const char *,const char *,std::size_t)': cannot convert argument 1 from 'const TCHAR [256]' to 'const char *'
    E:\Development\SourceTree\Utilities\external\tinydir\tinydir.h(752): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\string.h(529): note: could be 'char *strrchr(char *const ,const int)'
    D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\vcruntime_string.h(73): note: or       'const char *strrchr(const char *,int)'
    
    opened by Furkanzmc 6
  • About how to use it in vs2010 under win7

    About how to use it in vs2010 under win7

    Hello, the lib is fantastic. I am a newer in C language and I wonder how to implement it. Should I just include the header file tinydir.h ? But when I do this I cannot run the samples because there are many errors about strict type transforms. Should I do something more? Thank you.

    opened by SJTUsuperxu 5
  • GCC11 warnings

    GCC11 warnings

    In our repository idaholab/moose, we are getting the following warnings when compiling with gcc 11

    In file included from /usr/include/string.h:519,
                     from /usr/include/c++/11/cstring:42,
                     from /home/lindad/projects/moose/libmesh/installed/include/Eigen/Core:286,
                     from /home/lindad/projects/moose/libmesh/installed/include/libmesh/type_vector.h:35,
                     from /home/lindad/projects/moose/libmesh/installed/include/libmesh/point.h:24,
                     from /home/lindad/projects/moose/libmesh/installed/include/libmesh/bounding_box.h:25,
                     from /home/lindad/projects/moose/framework/build/header_symlinks/MooseUtils.h:22,
                     from /home/lindad/projects/moose/framework/src/utils/MooseUtils.C:11:
    In function ‘char* strncat(char*, const char*, size_t)’,
        inlined from ‘int tinydir_readfile(const tinydir_dir*, tinydir_file*)’ at /home/lindad/projects/moose/framework/contrib/tinydir/include/tinydir.h:334:10,
        inlined from ‘std::__cxx11::list<std::__cxx11::basic_string<char> > MooseUtils::listDir(std::string, bool)’ at /home/lindad/projects/moose/framework/src/utils/MooseUtils.C:701:21:
    /usr/include/x86_64-linux-gnu/bits/string_fortified.h:135:34: warning: ‘char* __builtin___strncat_chk(char*, const char*, long unsigned int, long unsigned int)’ accessing between 3 and 1 bytes at offsets 0 and 4096 overlaps 1 byte at offset 4096 [-Wrestrict]
      135 |   return __builtin___strncat_chk (__dest, __src, __len,
          |          ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
      136 |                                   __glibc_objsize (__dest));
          |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /home/lindad/projects/moose/framework/src/utils/MooseUtils.C:24:
    In function ‘void tinydir_close(tinydir_dir*)’,
        inlined from ‘void tinydir_close(tinydir_dir*)’ at /home/lindad/projects/moose/framework/contrib/tinydir/include/tinydir.h:215:6,
        inlined from ‘std::__cxx11::list<std::__cxx11::basic_string<char> > MooseUtils::listDir(std::string, bool)’ at /home/lindad/projects/moose/framework/src/utils/MooseUtils.C:709:16:
    /home/lindad/projects/moose/framework/contrib/tinydir/include/tinydir.h:225:18: warning: ‘dir.tinydir_dir::_files’ may be used uninitialized [-Wmaybe-uninitialized]
      225 |         if (dir->_files != NULL)
          |             ~~~~~^~~~~~
    /home/lindad/projects/moose/framework/src/utils/MooseUtils.C: In function ‘std::__cxx11::list<std::__cxx11::basic_string<char> > MooseUtils::listDir(std::string, bool)’:
    /home/lindad/projects/moose/framework/src/utils/MooseUtils.C:693:15: note: ‘dir’ declared here
      693 |   tinydir_dir dir;
    

    Is this user error or is this something that can be fixed on your end? This is our user code

    std::list<std::string>
    listDir(const std::string path, bool files_only)
    {
      std::list<std::string> files;
    
      tinydir_dir dir;
      dir.has_next = 0; // Avoid a garbage value in has_next (clang StaticAnalysis)                                       
      tinydir_open(&dir, path.c_str());
    
      while (dir.has_next)
      {
        tinydir_file file;
        file.is_dir = 0; // Avoid a garbage value in is_dir (clang StaticAnalysis)                                        
        tinydir_readfile(&dir, &file);
    
        if (!files_only || !file.is_dir)
          files.push_back(path + "/" + file.name);
    
        tinydir_next(&dir);
      }
    
      tinydir_close(&dir);
    
      return files;
    }
    
    opened by lindsayad 4
  • Fix small bug

    Fix small bug

    Tinydir disable pragma warning in all file that include this header, I have fixed the bug, update the repo: before the line 41 add this:

    # pragma warning(push)

    before the last line ( last #endif ) add this;

    #ifdef _MSC_VER
    # pragma warning(pop)
    #endif
    

    Then pragma warning working in all files except tinydir.

    opened by GFdevelop 4
  • Modified some things so it works with MSVC

    Modified some things so it works with MSVC

    Comment with : // Variable created here :'( , are just there because i don't like creating variable in the middle of a function in C (I prefer to put them only at the beginning).

    opened by BarbDev 4
  • tinydir_open_sorted is really slow under windows

    tinydir_open_sorted is really slow under windows

    I have a folder of 8000 images in it. If I call tinydir_open_sorted on it's path, it will take as long as 2 minutes to retrieve the full list of file. I am under MSVC 2010 under windows 7 x64. Profiling shows 99.9% of the time spent in an unknown method. If I use tinydir_open instead and I sort the file myself using a vector and std::sort, the result will take much less than a second to return.

    I think the problem is with the use of realloc, that must constantly allocate new block of memory compare to a std::vector that might handle the reallocation much better.

    Here's the C++ version that run much faster (to compare with tinydir_open_sorted) std::vectorstd::string dirList tinydir_open(&dir, dirPath.c_str()); while (dir.has_next) { tinydir_file file; tinydir_readfile(&dir, &file); if(!file.is_dir) dirList.push_back(std::string(file.name)); tinydir_next(&dir); }

    tinydir_close(&dir); std::sort(dirList.begin(), dirList.end()); return dirList;

    opened by jpjodoin 4
  • Cannot open drive root on Windows

    Cannot open drive root on Windows

    Hello,

    I'm struggling to open the top directory on Windows (C:). Other directories are fine. For instance, when using file_open_sample.c I get:

    C:\msys32\home\IEUser\tinydir>a.exe C:\
    Error opening file: No error
    
    C:\msys32\home\IEUser\tinydir>a.exe C:
    Error opening file: No error
    
    C:\msys32\home\IEUser\tinydir>a.exe "C:\Program Files"
    Path: C:/Program Files
    Name: Program Files
    Extension:
    Is dir? yes
    Is regular file? no
    

    i used MinGW here, but I think it's the same with MSVC. Am I missing something?

    opened by wojdyr 3
  • Multiple sort options as a parameter

    Multiple sort options as a parameter

    Hi, I was wondering if there's a possibility to have tinydir_open_sorted to have multiple sorting options. One way I can think of to achieve this would be to pass our own (comparator?) like this one https://github.com/cxong/tinydir/blob/master/tinydir.h#L755

    This would allow the user to sort alphabetically in both ascending/descending order as well sorting by size, timestamps etc.

    opened by joel16 2
  • tinydir_readfile returns -1 when file is a broken link

    tinydir_readfile returns -1 when file is a broken link

    I.e. a file, which you could create with

    ln -s /broken/link .
    

    In that case iterate_sample.c shows directory listing only partially. And random_access_sample.c fails to open a directory at line 8.

    tinydir_readfile finishes at line 559 when processing a broken link

    My OS is Linux.

    opened by asv22 11
  • Use rewinddir to count number of files

    Use rewinddir to count number of files

    In tinydir_open_sorted, a first pass is used to count the number of files, then a second pass actually reads the file info. In between the two passes, tinydir closes and reopens the dir.

    This is unnecessary with dirent; there's the rewinddir function which allows going back to the first file. This would also eliminate a race condition where the directory may have changed between the two passes.

    Not sure if there's an equivalent for Windows.

    enhancement 
    opened by cxong 2
Releases(1.2.5)
  • 1.2.5(Nov 17, 2021)

    • Allow opening drive root with tinydir_file_open #66
    • Fix handling of broken links #63
    • Fix missing PATH_MAX macro in Debian GNU/Hurd 9

    Thanks to @wojdyr and @lautis0503

    Source code(tar.gz)
    Source code(zip)
  • 1.2.4(Oct 23, 2018)

    • Don't define _TINYDIR_PATH_MAX if PATH_MAX not available (#61)
    • Fix possible WIN32_LEAN_AND_MEAN redefinition (#62)

    Thanks to @schodet and @jesta88 for reporting

    Source code(tar.gz)
    Source code(zip)
  • 1.2.3(Jul 19, 2017)

  • 1.2.2(Mar 29, 2017)

  • 1.2.1(Dec 28, 2016)

    • Fix tinydir_file_open with filename only failure in Windows (e33a1da)
    • Fix unicode support in tinydir_file_open (1f9b31e)
    • Fix unicode support (f8f1774)
    • Use readdir by default (4a2655e)
    • Fix build with gcc-6 (d617ef8)
    Source code(tar.gz)
    Source code(zip)
  • 1.2(Jul 8, 2016)

  • 1.1.1(Apr 2, 2016)

  • 1.1.0(Mar 12, 2016)

Owner
Cong
Cong
A small C library with that portably invokes native file open, folder select and file save dialogs.

Cross platform (Windows, Mac, Linux) native file dialog library with C and C++ bindings, based on mlabbe/nativefiledialog.

Bernard Teo 294 Nov 24, 2022
P1031 low level file i/o and filesystem library for the C++ standard

This is the post-peer-review LLFIO v2 rewrite. You can view its documentation at https://ned14.github.io/llfio/ master branch develop branch CMake das

Niall Douglas 533 Nov 26, 2022
localfuse - File system implemented on Linux using C and libfuse

localfuse - File system implemented on Linux using C and libfuse Use pure C to have a simple file system of your own on the linux system Install and b

null 4 Sep 23, 2021
The MHS Filesystem- A very simple linked-list based file system designed for recoverability and low data redundancy. Public domain filesystem (Version 1)

MHS Filesystem The MHS filesystem. Features: can be modified to work with any size of disk or sector, even non powers of two! Allocation bitmap stored

DMHSW 8 Sep 17, 2022
Cross-platform C++11 header-only library for memory mapped file IO

mio An easy to use header-only cross-platform C++11 memory mapping library with an MIT license. mio has been created with the goal to be easily includ

null 1.4k Nov 26, 2022
FSearch is a fast file search utility for Unix-like systems based on GTK+3

FSearch is a fast file search utility, inspired by Everything Search Engine. It's written in C and based on GTK3.

Christian Boxdörfer 2.2k Nov 25, 2022
WineFS is a file system for Persistent Memory (PM) which is aimed at maximizing the performance of memory-mapped applications.

WineFS WineFS is a file system for Persistent Memory (PM) which is aimed at maximizing the performance of memory-mapped applications. WineFS uses a no

UT Systems and Storage Lab 23 Oct 2, 2022
PoC of a native Linux file system to mount container images.

composefs PoC of a native Linux file system to mount container images. It is unfinished and just a few days of work. The idea is to pass a binary blob

Giuseppe Scrivano 0 Jun 9, 2022
LoomIO is an object-level coordination system for distributed file systems.

LoomIO is an object-level coordination system for distributed file systems. It adopts wait-free design to enable interfering object requests self-organizing and obtain an optimized scheduling decision. Currently, LoomIO is implemented and integrated in Ceph.

null 2 Jun 19, 2022
C++ implementation of a platform independent endian safe binary file stream

EndianSafeBinaryStream A C++ implementation of a platform independent endian safe binary file stream that can save primitive types and is easily exten

Corbinian Gruber 2 Mar 22, 2022
An implementation of C++17 std::filesystem for C++11 /C++14/C++17/C++20 on Windows, macOS, Linux and FreeBSD.

Filesystem Motivation Why the namespace GHC? Platforms Tests Usage Downloads Using it as Single-File-Header Using it as Forwarding-/Implementation-Hea

null 995 Nov 22, 2022
Lightweight, portable and easy to integrate C directory and file reader

TinyDir Lightweight, portable and easy to integrate C directory and file reader. TinyDir wraps dirent for POSIX and FindFirstFile for Windows. Windows

Cong 696 Nov 26, 2022
A set of open c++ game development tools that are lightweight, easy-to-integrate and free to use. Currently hosting a magicavoxel .vox full scene loader.

open game tools Open game tools is a set of unencumbered, free, lightweight, easy-to-integrate tools for use in game development. So far it contains:

null 288 Nov 26, 2022
a JSON parser and printer library in C. easy to integrate with any model.

libjson - simple and efficient json parser and printer in C Introduction libjson is a simple library without any dependancies to parse and pretty prin

Vincent Hanquez 260 Nov 21, 2022
Easy to integrate memory allocation library for Direct3D 12

D3D12 Memory Allocator Easy to integrate memory allocation library for Direct3D 12. Documentation: Browse online: D3D12 Memory Allocator (generated fr

GPUOpen Libraries & SDKs 481 Nov 29, 2022
A Simple Nastran to JSON mesh reader which makes it easy to exchange data

Nastran to Json Converter A simple code that helps convert Nastran meshes to a JSON file format that is more suitable for the current day and age. Cur

Vijai Kumar S 5 Sep 23, 2021
An asynchronous directory file change watcher module for Windows, macOS and Linux wrapped for V

A V module for asynchronously watching for file changes in a directory. The module is essentially a wrapper for septag/dmon. It works for Windows, macOS and Linux.

null 18 Aug 24, 2022
Lightweight single-file utilities for C99. Portable & zero dependency

plainlibs Lightweight single-file utilities for C99. Key Features Portable across Unix & Windows (including MSVC) Zero dependencies (besides C stdlib)

null 5 Oct 5, 2022
LibreSSL Portable itself. This includes the build scaffold and compatibility layer that builds portable LibreSSL from the OpenBSD source code.

LibreSSL Portable itself. This includes the build scaffold and compatibility layer that builds portable LibreSSL from the OpenBSD source code.

OpenBSD LibreSSL Portable 1.2k Nov 24, 2022