While I'm waiting on a response in another thread I'll quickly ask if anyone sees any potential problems with this freshly made code:
Code:
int alu_mov( alu_t *alu, uintptr_t num, uintptr_t val, size_t size )
{
int ret = 0;
void *dst, *src;
if ( num >= ALU_REG_ID_LIMIT )
{
if ( val >= ALU_REG_ID_LIMIT )
{
errno = 0;
(void)memmove( (void*)num, (void*)val, size );
ret = errno;
return ret;
}
ret = _alu_check2( alu, ALU_REG_ID_NEED, val );
if ( ret != 0 )
{
alu_error( ret );
return ret;
}
dst = (void*);
src = (alu->regv + val)->part;
goto copy;
}
ret = _alu_check1( alu, num );
if ( size > alu->buff.perN )
size = alu->buff.perN;
dst = (alu->regv + num)->part;
src = (void*)val;
copy:
errno = 0;
(void)memset( dst, 0, size );
ret = errno;
if ( ret != 0 )
{
alu_error( ret );
return ret;
}
if ( size > alu->buff.perN )
size = alu->buff.perN;
errno = 0;
(void)memmove( dst, src, size );
ret = errno;
if ( ret != 0 )
alu_error( ret );
return ret;
}
Personally I don't but never hurts to ask for 2nd opinion
Edit: Just spotted the
line, rectified in file, left here for future readers