Previously, linking a field of e.g. a calc record to itself
(calc.INPA = calc.A) directly or through a chain of other records
that support to follow the link for attributes like units, precision
caused an infinite recursion and crashed the ioc.
Affected records: calc, calcout, seq, sub and aSub
Also added support for seq link 0 fields which had been added meanwhile.
This enables us to use toctrees, which informs Sphinx on the global
documentation structure, and removes warnings about not-included
documents.
The old ComponentReference.pod was kept, in order to not break the old
HTML output, but the new Markdown file is used as source for the
generated markdown files in doc/
For long string buffers, we currently write a null terminator one byte
past the end of the buffer. This can be seen with a record of the type
```
record(aai, foo) {
field(NELM, 1)
field(FTVL, CHAR)
field(INP, {const: "foo"})
}
```
where the buffer is only of size 1, but then we write at index 1 (aka
past the end of the buffer).
Co-authored-by: Lucas A. M. Magalhães <lucmaga@gmail.com>
The handling of N-to-M array compression was broken with the addition
of the partial buffer option, which broke the bounds check that was
being used.
Note that this also makes the partial buffer option more consistent;
if, for example, you have
```
record(compress, foo) {
field(ALG, "N to 1 Average")
field(INP, "bar NPP")
field(NSAM, 2)
field(N, 2)
field(PBUF, YES)
}
```
(with `bar` having, e.g. length 3), then this will now behave as
expected on both of the samples.
If a sub record has an invalid INPx link, it was silently failing (and
not running the proc function). This change plumbs in the error, so
the put fails and the user knows something went wrong.