mirror of
https://github.com/openharmony/third_party_libsnd.git
synced 2026-07-19 18:23:34 -04:00
Add functions psf_get_be(16|32|64) with tests.
These are needed for platforms where un-aligned accesses cause bus faults.
This commit is contained in:
@@ -3,6 +3,10 @@
|
||||
* src/test_endswap.def src/test_endswap.tpl
|
||||
Add tests for psf_put_be32() and psf_put_be64().
|
||||
|
||||
* src/sfendian.h src/test_endswap.(def|tpl)
|
||||
Add functions psf_get_be32() and psf_gett_be64() with tests.
|
||||
These are needed for platforms where un-aligned accesses cause bus faults.
|
||||
|
||||
2013-02-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
|
||||
* src/sfendian.h
|
||||
|
||||
@@ -164,6 +164,47 @@ psf_put_be32 (uint8_t *ptr, int offset, int32_t value)
|
||||
ptr [offset + 3] = value ;
|
||||
} /* psf_put_be32 */
|
||||
|
||||
static inline void
|
||||
psf_put_be16 (uint8_t *ptr, int offset, int16_t value)
|
||||
{
|
||||
ptr [offset] = value >> 8 ;
|
||||
ptr [offset + 1] = value ;
|
||||
} /* psf_put_be16 */
|
||||
|
||||
static inline int64_t
|
||||
psf_get_be64 (uint8_t *ptr, int offset)
|
||||
{ int64_t value ;
|
||||
|
||||
value = ptr [offset] << 24 ;
|
||||
value += ptr [offset + 1] << 16 ;
|
||||
value += ptr [offset + 2] << 8 ;
|
||||
value += ptr [offset + 3] ;
|
||||
|
||||
value <<= 32 ;
|
||||
|
||||
value += ptr [offset + 4] << 24 ;
|
||||
value += ptr [offset + 5] << 16 ;
|
||||
value += ptr [offset + 6] << 8 ;
|
||||
value += ptr [offset + 7] ;
|
||||
return value ;
|
||||
} /* psf_get_be64 */
|
||||
|
||||
static inline int32_t
|
||||
psf_get_be32 (uint8_t *ptr, int offset)
|
||||
{ int32_t value ;
|
||||
|
||||
value = ptr [offset] << 24 ;
|
||||
value += ptr [offset + 1] << 16 ;
|
||||
value += ptr [offset + 2] << 8 ;
|
||||
value += ptr [offset + 3] ;
|
||||
return value ;
|
||||
} /* psf_get_be32 */
|
||||
|
||||
static inline int16_t
|
||||
psf_get_be16 (uint8_t *ptr, int offset)
|
||||
{ return (ptr [offset] << 8) + ptr [offset + 1] ;
|
||||
} /* psf_get_be16 */
|
||||
|
||||
/*-----------------------------------------------------------------------------------------------
|
||||
** Generic functions for performing endian swapping on integer arrays.
|
||||
*/
|
||||
|
||||
@@ -18,6 +18,13 @@ int_type = {
|
||||
format = FMT_INT64 ;
|
||||
} ;
|
||||
|
||||
int_size = {
|
||||
name = 16 ;
|
||||
typename = int16_t ;
|
||||
value = 0x4142 ;
|
||||
strval = "AB" ;
|
||||
} ;
|
||||
|
||||
int_size = {
|
||||
name = 32 ;
|
||||
typename = int32_t ;
|
||||
|
||||
@@ -109,18 +109,22 @@ test_endswap_[+ (get "name") +] (void)
|
||||
static void
|
||||
test_psf_put_be[+ (get "name") +] (void)
|
||||
{ const char *test = "[+ (get "strval") +]" ;
|
||||
uint8_t array [20] ;
|
||||
uint8_t array [32] ;
|
||||
int k ;
|
||||
|
||||
printf (" %-40s : ", __func__) ;
|
||||
fflush (stdout) ;
|
||||
|
||||
for (k = 0 ; k < 6 ; k++)
|
||||
for (k = 0 ; k < 10 ; k++)
|
||||
{ memset (array, 0, sizeof (array)) ;
|
||||
|
||||
psf_put_be[+ (get "name") +] (array, k, [+ (get "value") +]) ;
|
||||
if (memcmp (array + k, test, sizeof ([+ (get "typename") +])) != 0)
|
||||
{ printf ("Failed at %d\n", k) ;
|
||||
{ printf ("\n\nLine %d : Put failed at index %d.\n", __LINE__, k) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
if (psf_get_be[+ (get "name") +] (array, k) != [+ (get "value") +])
|
||||
{ printf ("\n\nLine %d : Get failed at index %d.\n", __LINE__, k) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
} ;
|
||||
|
||||
Reference in New Issue
Block a user