xref: /btstack/3rd-party/tinydir/README.md (revision e9d8dc8bd8076b7b89b9c4687764374e98e2f843)
198cd9557SMatthias RingwaldTinyDir
298cd9557SMatthias Ringwald=======
3*e9d8dc8bSDirk Helbig[![CMake](https://github.com/cxong/tinydir/actions/workflows/cmake.yml/badge.svg)](https://github.com/cxong/tinydir/actions/workflows/cmake.yml)
498cd9557SMatthias Ringwald[![Release](http://img.shields.io/github/release/cxong/tinydir.svg)](https://github.com/cxong/tinydir/releases/latest)
598cd9557SMatthias Ringwald
698cd9557SMatthias RingwaldLightweight, portable and easy to integrate C directory and file reader. TinyDir wraps dirent for POSIX and FindFirstFile for Windows.
798cd9557SMatthias Ringwald
898cd9557SMatthias RingwaldWindows unicode is supported by defining `UNICODE` and `_UNICODE` before including `tinydir.h`.
998cd9557SMatthias Ringwald
1098cd9557SMatthias RingwaldExample
1198cd9557SMatthias Ringwald=======
1298cd9557SMatthias Ringwald
1398cd9557SMatthias RingwaldThere are two methods. Error checking omitted:
1498cd9557SMatthias Ringwald
1598cd9557SMatthias Ringwald```C
1698cd9557SMatthias Ringwaldtinydir_dir dir;
1798cd9557SMatthias Ringwaldtinydir_open(&dir, "/path/to/dir");
1898cd9557SMatthias Ringwald
1998cd9557SMatthias Ringwaldwhile (dir.has_next)
2098cd9557SMatthias Ringwald{
2198cd9557SMatthias Ringwald	tinydir_file file;
2298cd9557SMatthias Ringwald	tinydir_readfile(&dir, &file);
2398cd9557SMatthias Ringwald
2498cd9557SMatthias Ringwald	printf("%s", file.name);
2598cd9557SMatthias Ringwald	if (file.is_dir)
2698cd9557SMatthias Ringwald	{
2798cd9557SMatthias Ringwald		printf("/");
2898cd9557SMatthias Ringwald	}
2998cd9557SMatthias Ringwald	printf("\n");
3098cd9557SMatthias Ringwald
3198cd9557SMatthias Ringwald	tinydir_next(&dir);
3298cd9557SMatthias Ringwald}
3398cd9557SMatthias Ringwald
3498cd9557SMatthias Ringwaldtinydir_close(&dir);
3598cd9557SMatthias Ringwald```
3698cd9557SMatthias Ringwald
3798cd9557SMatthias Ringwald```C
3898cd9557SMatthias Ringwaldtinydir_dir dir;
3998cd9557SMatthias Ringwaldint i;
4098cd9557SMatthias Ringwaldtinydir_open_sorted(&dir, "/path/to/dir");
4198cd9557SMatthias Ringwald
4298cd9557SMatthias Ringwaldfor (i = 0; i < dir.n_files; i++)
4398cd9557SMatthias Ringwald{
4498cd9557SMatthias Ringwald	tinydir_file file;
4598cd9557SMatthias Ringwald	tinydir_readfile_n(&dir, &file, i);
4698cd9557SMatthias Ringwald
4798cd9557SMatthias Ringwald	printf("%s", file.name);
4898cd9557SMatthias Ringwald	if (file.is_dir)
4998cd9557SMatthias Ringwald	{
5098cd9557SMatthias Ringwald		printf("/");
5198cd9557SMatthias Ringwald	}
5298cd9557SMatthias Ringwald	printf("\n");
5398cd9557SMatthias Ringwald}
5498cd9557SMatthias Ringwald
5598cd9557SMatthias Ringwaldtinydir_close(&dir);
5698cd9557SMatthias Ringwald```
5798cd9557SMatthias Ringwald
5898cd9557SMatthias RingwaldSee the `/samples` folder for more examples, including an interactive command-line directory navigator.
5998cd9557SMatthias Ringwald
6098cd9557SMatthias RingwaldLanguage
6198cd9557SMatthias Ringwald========
6298cd9557SMatthias Ringwald
6398cd9557SMatthias RingwaldANSI C, or C90.
6498cd9557SMatthias Ringwald
6598cd9557SMatthias RingwaldPlatforms
6698cd9557SMatthias Ringwald=========
6798cd9557SMatthias Ringwald
6898cd9557SMatthias RingwaldPOSIX and Windows supported. Open to the possibility of supporting other platforms.
6998cd9557SMatthias Ringwald
7098cd9557SMatthias RingwaldLicense
7198cd9557SMatthias Ringwald=======
7298cd9557SMatthias Ringwald
7398cd9557SMatthias RingwaldSimplified BSD; if you use tinydir you can comply by including `tinydir.h` or `COPYING` somewhere in your package.
7498cd9557SMatthias Ringwald
7598cd9557SMatthias RingwaldKnown Limitations
7698cd9557SMatthias Ringwald=================
7798cd9557SMatthias Ringwald
7898cd9557SMatthias Ringwald- Limited path and filename sizes
7998cd9557SMatthias Ringwald- [Possible race condition bug if folder being read has changing content](https://github.com/cxong/tinydir/issues/13)
80*e9d8dc8bSDirk Helbig- Does not support extended-length path lengths in Windows - paths are limited to 260 characters. See <https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry>
81