const init a char array from a string value

This commit is contained in:
Andrew Johnson
2020-08-21 17:59:46 -05:00
parent 79d7ac9315
commit b36e5262c7
2 changed files with 27 additions and 3 deletions

View File

@@ -17,11 +17,26 @@ should also be read to understand what has changed since earlier releases.
<!-- Insert new items immediately below here ... -->
### Using a `{const:"string"}` to initialize an array of `DBF_CHAR`
It is now possible to use a JSON Const link with a string value to initialize
an aai or waveform record that has `FTVL` set to `CHAR` through the INP link.
The string length is not limited to 40 characters. This should also work for
aSub record inputs similarly configured as long strings.
```
record(waveform, "wf") {
field(NELM, 100)
field(FTVL, CHAR)
field(INP, {const:"This is a waveform and more than 40 characters"})
}
```
### RELEASE files may use `undefine`
GNUmake added the directive `undefine` in version 3.82 to allow variables to
be undefined. Support for this has been added to the EPICS Release file parser,
so `undefine` can now be used in configure/RELEASE files.
so `undefine` can now be used in configure/RELEASE files to unset variables.
## EPICS Release 7.0.4.1

View File

@@ -489,8 +489,17 @@ static long lnkConst_loadArray(struct link *plink, short dbrType, void *pbuffer,
case sc40:
if (clink->jlink.debug)
printf(" sc40 '%s'\n", clink->value.scalar_string);
status = dbFastPutConvertRoutine[DBF_STRING][dbrType]
(clink->value.scalar_string, pbuffer, NULL);
if (dbrType != DBF_CHAR) {
status = dbFastPutConvertRoutine[DBF_STRING][dbrType]
(clink->value.scalar_string, pbuffer, NULL);
}
else {
/* Long string conversion */
strncpy(pbuffer, clink->value.scalar_string, *pnReq);
((char *)pbuffer)[*pnReq] = 0;
nElems = strlen(pbuffer) + 1;
status = 0;
}
break;
case ai64: