diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-12-10 11:09:32 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-02-12 09:08:41 +0100 |
commit | 8a43adbe47454689149bac27adc45439eab44965 (patch) | |
tree | 3c853d662a32f182b44af8170d6d5c6b2ab90932 /cpukit/score | |
parent | 4eab96bbb421018c17f984c1c3a4220abe16c788 (diff) |
score: Add _Freechain_Extend()
Update #3835.
Diffstat (limited to 'cpukit/score')
-rw-r--r-- | cpukit/score/src/freechain.c | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/cpukit/score/src/freechain.c b/cpukit/score/src/freechain.c index f7da12216d..f15ce1ea4f 100644 --- a/cpukit/score/src/freechain.c +++ b/cpukit/score/src/freechain.c @@ -21,6 +21,28 @@ #include <rtems/score/freechain.h> #include <rtems/score/assert.h> +void *_Freechain_Extend( + Freechain_Control *freechain, + Freechain_Allocator allocator, + size_t number_nodes_to_extend, + size_t node_size +) +{ + void *starting_address; + + starting_address = ( *allocator )( number_nodes_to_extend * node_size ); + number_nodes_to_extend *= ( starting_address != NULL ); + + _Chain_Initialize( + &freechain->Free, + starting_address, + number_nodes_to_extend, + node_size + ); + + return starting_address; +} + void *_Freechain_Get( Freechain_Control *freechain, Freechain_Allocator allocator, @@ -31,14 +53,9 @@ void *_Freechain_Get( _Assert( node_size >= sizeof( Chain_Node ) ); if ( _Chain_Is_empty( &freechain->Free ) && number_nodes_to_extend > 0 ) { - void *starting_address; - - starting_address = ( *allocator )( number_nodes_to_extend * node_size ); - number_nodes_to_extend *= ( starting_address != NULL ); - - _Chain_Initialize( - &freechain->Free, - starting_address, + _Freechain_Extend( + freechain, + allocator, number_nodes_to_extend, node_size ); |