Make sure epicsInt8 is signed on all architectures

This commit is contained in:
2021-12-17 09:16:31 +01:00
parent 1c3aa01846
commit c5012d9f73
5 changed files with 20 additions and 3 deletions

View File

@@ -16,6 +16,17 @@ should also be read to understand what has changed since earlier releases.
<!-- Insert new items immediately below here ... -->
### Make sure epicsInt8 is signed on all architectures
So far, `epicsInt8` and thus `DBF_CHAR` used to be unsigned on architectures
where `char` is unsigned, for example on many PPC architectures.
This had led to different behavior between architectures when converting
`DBF_CHAR` to signed integer or to floating point types.
WARNING: This fix may change behavior of existing databases on on architectures
with unsigned `char` (many PPC) when using input links to read from `CHAR`
waveforms. Architectures with signed `char` (usually x86) are unaffected.
### Fix for `undefined` in configure/RELEASE files
Prevents `Use of uninitialized value` warnings from convertRelease.pl.

View File

@@ -88,6 +88,7 @@ public:
bool push ( const T & value );
template < class T >
unsigned push ( const T * pValue, unsigned nElem );
unsigned push ( const char * pValue, unsigned nElem );
unsigned push ( const epicsInt8 * pValue, unsigned nElem );
unsigned push ( const epicsUInt8 * pValue, unsigned nElem );
unsigned push ( const epicsOldString * pValue, unsigned nElem );
@@ -208,6 +209,11 @@ inline unsigned comBuf :: push ( const epicsUInt8 *pValue, unsigned nElem )
return copyInBytes ( pValue, nElem );
}
inline unsigned comBuf :: push ( const char *pValue, unsigned nElem )
{
return copyInBytes ( pValue, nElem );
}
inline unsigned comBuf :: push ( const epicsOldString * pValue, unsigned nElem )
{
unsigned index = this->nextWriteIndex;

View File

@@ -46,7 +46,7 @@ void comQueRecv::clear ()
this->nBytesPending = 0u;
}
unsigned comQueRecv::copyOutBytes ( epicsInt8 *pBuf, unsigned nBytes )
unsigned comQueRecv::copyOutBytes ( char *pBuf, unsigned nBytes )
{
unsigned totalBytes = 0u;
do {

View File

@@ -33,7 +33,7 @@ public:
comQueRecv ( comBufMemoryManager & );
~comQueRecv ();
unsigned occupiedBytes () const;
unsigned copyOutBytes ( epicsInt8 *pBuf, unsigned nBytes );
unsigned copyOutBytes ( char *pBuf, unsigned nBytes );
unsigned removeBytes ( unsigned nBytes );
void pushLastComBufReceived ( comBuf & );
void clear ();

View File

@@ -41,7 +41,7 @@ typedef enum {
* These are sufficient for all our current archs
* @{
*/
typedef char epicsInt8;
typedef signed char epicsInt8;
typedef unsigned char epicsUInt8;
typedef short epicsInt16;
typedef unsigned short epicsUInt16;