GCC seems to lose track of possible output lengths
of the first sprintf() when computing possible lengths
of the second.
../mbbioDirectTest.c:44:26: warning: ‘.B’ directive writing 2 bytes into a region of size between 1 and 40 [-Wformat-overflow=]
44 | sprintf(field,"%s.B%X", rec, i);
Adds tests to ensure that a record's special() routine can
return an error status that gets fed back to the client from
both before and after special() calls.
This was broken from 3.15 through 7.0.5 inclusive.
Uses Win32::Process or fork() to run caget/pvget.
The system_timeout() and qx_timeout() utilities added here
should be extracted into a separate EPICS::Timeouts module.
* github/pr/99:
fix an out-dated comment in the array filter code
add macro dbfl_pfield to db_field_log.h and use it in dbGet
fix in dbGet: decide use of db_field_log based on whether it has copy or not
add macro dbfl_has_copy to db_field_log.h and use it in dbAccess.c
refactor db_field_log and filters to get rid of dbfl_type_rec
make it clearer what the result of wrapArrayIndices will be
This refactor simplifies and streamlines the code associated with server
side filters. Apart from immediate benefits (clearer code, less duplication)
it is also hoped that this will make it easier to add write filters.
The data pointer dbfl_ref.field can now either point to a copy owned by a
filter, or it can point to the original data owned by a record. In the
latter case, the dbfl_ref.dtor is NULL.
The dbExtractArray* functions are unified to the single function
dbExtractArray and stripped of conversion functionality. This is redundant
because we always call dbGet after applying filters, which takes care of
conversion. Accordingly, dbChannelMakeArrayCopy is now obsolete and its
single use (in the ts filter) replaced with dbExtractArray. Instead, we add
the helper function dbChannelGetArrayInfo to wrap the common boilerplate
around calls to the get_array_info method, used in both arr.c and ts.c.