blob: c9bbe14780ad6af2f0f8e6c669eee5a0c4250e11 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
Hacking on `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.
Implementation
--------------
`bfs` is written in [C](https://en.wikipedia.org/wiki/C_(programming_language)), specifically [C11](https://en.wikipedia.org/wiki/C11_(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).
|