bfs
is licensed under the Zero-Clause BSD License, 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/
bfs
is written in C, specifically C17.
You can get a feel for the coding style by skimming the source code.
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 ofbfs
. - Error handling follows the C standard library conventions: return a nonzero
int
or aNULL
pointer, with the error code inerrno
. All failure cases should be handled, includingmalloc()
failures. goto
is not considered harmful for cleaning up in error paths.
bfs
includes an extensive test suite.
See the build documentation 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 |
POSIX compatibility tests |
tests/bsd |
BSD find features |
tests/gnu |
GNU find features |
tests/common |
Features common to BSD and GNU find |
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,
# 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).