1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
/*
* Copyright (c) 2016 embedded brains GmbH.
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems/assoc.h>
#include <stdbool.h>
#include <string.h>
static size_t space( size_t buffer_size, size_t len )
{
if ( len < buffer_size ) {
return buffer_size - len;
} else {
return 0;
}
}
size_t rtems_assoc_32_to_string(
uint32_t value,
char *buffer,
size_t buffer_size,
const rtems_assoc_32_pair *pairs,
size_t pair_count,
const char *separator,
const char *fallback
)
{
size_t len;
size_t i;
len = 0;
for ( i = 0; i < pair_count ; ++i ) {
const rtems_assoc_32_pair *p;
p = &pairs[ i ];
if ( ( value & p->bits ) != 0 ) {
if ( len > 0 ) {
len += strlcpy( &buffer[ len ], separator, space( buffer_size, len ) );
}
len += strlcpy( &buffer[ len ], p->name, space( buffer_size, len ) );
}
}
if ( len == 0 ) {
len += strlcpy( buffer, fallback, buffer_size );
}
return len;
}
|