2013-02-09 03:44:21 +04:00
/*
* Copyright ( C ) 2013 Red Hat , Inc .
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2.1 of the License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library . If not , see
* < http : //www.gnu.org/licenses/>.
*
*/
# include <config.h>
# include "testutils.h"
# include "virendian.h"
static int
test1 ( const void * data ATTRIBUTE_UNUSED )
{
/* Regular char should work, even if signed, and even with
* unaligned access . */
char array [ ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,
0x89 , 0x8a , 0x8b , 0x8c , 0x8d } ;
int ret = - 1 ;
if ( virReadBufInt64BE ( array ) ! = 0x0102030405060708ULL )
goto cleanup ;
if ( virReadBufInt64BE ( array + 5 ) ! = 0x060708898a8b8c8dULL )
goto cleanup ;
if ( virReadBufInt64LE ( array ) ! = 0x0807060504030201ULL )
goto cleanup ;
if ( virReadBufInt64LE ( array + 5 ) ! = 0x8d8c8b8a89080706ULL )
goto cleanup ;
if ( virReadBufInt32BE ( array ) ! = 0x01020304U )
goto cleanup ;
if ( virReadBufInt32BE ( array + 9 ) ! = 0x8a8b8c8dU )
goto cleanup ;
if ( virReadBufInt32LE ( array ) ! = 0x04030201U )
goto cleanup ;
if ( virReadBufInt32LE ( array + 9 ) ! = 0x8d8c8b8aU )
goto cleanup ;
2016-06-21 19:57:30 +03:00
if ( virReadBufInt16BE ( array ) ! = 0x0102U )
goto cleanup ;
if ( virReadBufInt16BE ( array + 11 ) ! = 0x8c8dU )
goto cleanup ;
if ( virReadBufInt16LE ( array ) ! = 0x0201U )
goto cleanup ;
if ( virReadBufInt16LE ( array + 11 ) ! = 0x8d8cU )
goto cleanup ;
2013-02-09 03:44:21 +04:00
ret = 0 ;
2014-03-25 10:53:44 +04:00
cleanup :
2013-02-09 03:44:21 +04:00
return ret ;
}
static int
test2 ( const void * data ATTRIBUTE_UNUSED )
{
/* Unsigned char should work without cast, even if unaligned access. */
unsigned char array [ ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,
0x89 , 0x8a , 0x8b , 0x8c , 0x8d } ;
int ret = - 1 ;
if ( virReadBufInt64BE ( array ) ! = 0x0102030405060708ULL )
goto cleanup ;
if ( virReadBufInt64BE ( array + 5 ) ! = 0x060708898a8b8c8dULL )
goto cleanup ;
if ( virReadBufInt64LE ( array ) ! = 0x0807060504030201ULL )
goto cleanup ;
if ( virReadBufInt64LE ( array + 5 ) ! = 0x8d8c8b8a89080706ULL )
goto cleanup ;
if ( virReadBufInt32BE ( array ) ! = 0x01020304U )
goto cleanup ;
if ( virReadBufInt32BE ( array + 9 ) ! = 0x8a8b8c8dU )
goto cleanup ;
if ( virReadBufInt32LE ( array ) ! = 0x04030201U )
goto cleanup ;
if ( virReadBufInt32LE ( array + 9 ) ! = 0x8d8c8b8aU )
goto cleanup ;
2016-06-21 19:57:30 +03:00
if ( virReadBufInt16BE ( array ) ! = 0x0102U )
goto cleanup ;
if ( virReadBufInt16BE ( array + 11 ) ! = 0x8c8dU )
goto cleanup ;
if ( virReadBufInt16LE ( array ) ! = 0x0201U )
goto cleanup ;
if ( virReadBufInt16LE ( array + 11 ) ! = 0x8d8cU )
goto cleanup ;
2013-02-09 03:44:21 +04:00
ret = 0 ;
2014-03-25 10:53:44 +04:00
cleanup :
2013-02-09 03:44:21 +04:00
return ret ;
}
static int
mymain ( void )
{
int ret = 0 ;
2016-05-26 18:01:50 +03:00
if ( virTestRun ( " test1 " , test1 , NULL ) < 0 )
2013-02-09 03:44:21 +04:00
ret = - 1 ;
2016-05-26 18:01:50 +03:00
if ( virTestRun ( " test2 " , test2 , NULL ) < 0 )
2013-02-09 03:44:21 +04:00
ret = - 1 ;
return ret ;
}
2017-03-29 17:45:42 +03:00
VIR_TEST_MAIN ( mymain )