Skip to content

Latest commit

 

History

History
61 lines (43 loc) · 2.57 KB

CONTRIBUTING.md

File metadata and controls

61 lines (43 loc) · 2.57 KB

Contributing to bfs

License

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/

Implementation

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 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 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).