Contributing to `bfs` ===================== License ------- `bfs` is licensed under the [Zero-Clause BSD License](https://opensource.org/licenses/0BSD), a maximally permissive license. Contributions must use the same license. Individual files contain the following tag instead of the full license text: SPDX-License-Identifier: 0BSD This enables machine processing of license information based on the SPDX License Identifiers that are available here: https://spdx.org/licenses/ Implementation -------------- `bfs` is written in [C](https://en.wikipedia.org/wiki/C_(programming_language)), specifically [C17](https://en.wikipedia.org/wiki/C17_(C_standard_revision)). You can get a feel for the coding style by skimming the source code. [`main.c`](/src/main.c) contains an overview of the rest of source files. A quick summary: - Tabs for indentation, spaces for alignment. - Most types and functions should be namespaced with `bfs_`. Exceptions are made for things that could be generally useful outside of `bfs`. - Error handling follows the C standard library conventions: return a nonzero `int` or a `NULL` pointer, with the error code in `errno`. All failure cases should be handled, including `malloc()` failures. - `goto` is not considered harmful for cleaning up in error paths. Tests ----- `bfs` includes an extensive test suite. See the [build documentation](BUILDING.md#testing) for details on running the tests. Test cases are grouped by the standard or `find` implementation that supports the tested feature(s): | Group | Description | |---------------------------------|---------------------------------------| | [`tests/posix`](/tests/posix) | POSIX compatibility tests | | [`tests/bsd`](/tests/bsd) | BSD `find` features | | [`tests/gnu`](/tests/gnu) | GNU `find` features | | [`tests/common`](/tests/common) | Features common to BSD and GNU `find` | | [`tests/bfs`](/tests/bfs) | `bfs`-specific tests | Both new features and bug fixes should have associated tests. To add a test, create a new `*.sh` file in the appropriate group. Snapshot tests use the `bfs_diff` function to automatically compare the generated and expected outputs. For example, ```bash # posix/something.sh bfs_diff basic -name something ``` `basic` is one of the directory trees generated for test cases; others include `links`, `loops`, `deep`, and `rainbow`. Run `./tests/tests.sh posix/something --update` to generate the reference snapshot (and don't forget to `git add` it).