static rtems_filesystem_mount_table_entry_t *alloc_mount_table_entry( const char *source_or_null, const char *target_or_null, const char *filesystemtype, size_t *target_length_ptr ) { const char *target = target_or_null != NULL ? target_or_null : "/"; size_t filesystemtype_size = strlen( filesystemtype ) + 1; size_t source_size = source_or_null != NULL ? strlen( source_or_null ) + 1 : 0; size_t target_size = strlen( target ) + 1; size_t size = sizeof( rtems_filesystem_mount_table_entry_t ) + filesystemtype_size + source_size + target_size + sizeof( rtems_filesystem_global_location_t ); rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size ); if ( mt_entry != NULL ) { rtems_filesystem_global_location_t *mt_fs_root = (rtems_filesystem_global_location_t *) ((char *) mt_entry + sizeof( *mt_entry )); char *str = (char *) mt_fs_root + sizeof( *mt_fs_root ); memcpy( str, filesystemtype, filesystemtype_size ); mt_entry->type = str; str += filesystemtype_size; if ( source_or_null != NULL ) { memcpy( str, source_or_null, source_size ); mt_entry->dev = str; str += source_size; } memcpy( str, target, target_size ); mt_entry->target = str; str += target_size; mt_entry->mounted = true; mt_entry->mt_fs_root = mt_fs_root; mt_entry->pathconf_limits_and_options = &rtems_filesystem_default_pathconf; mt_fs_root->location.mt_entry = mt_entry; mt_fs_root->reference_count = 1; rtems_chain_initialize( &mt_entry->location_chain, mt_fs_root, 1, sizeof(*mt_fs_root) ); } *target_length_ptr = target_size - 1; return mt_entry; }
static void extend_descriptors(rtems_rbheap_control *control) { rtems_chain_control *chain = rtems_rbheap_get_spare_descriptor_chain(control); rtems_rbheap_set_extend_descriptors( control, rtems_rbheap_extend_descriptors_never ); rtems_chain_initialize( chain, chunks, PAGE_COUNT, sizeof(chunks [0]) ); }
int rtems_print_printer_task( rtems_printer *printer, rtems_printer_task_context *ctx ) { rtems_status_code sc; if ( ctx->buffer_size < sizeof( printer_task_buffer ) ) { return EINVAL; } sc = rtems_task_create( rtems_build_name( 'P', 'R', 'N', 'T'), ctx->task_priority, ctx->task_stack_size, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &ctx->task ); if ( sc != RTEMS_SUCCESSFUL ) { return ENOMEM; } rtems_chain_initialize_empty( &ctx->todo_buffers ); rtems_chain_initialize( &ctx->free_buffers, ctx->buffer_table, ctx->buffer_count, ctx->buffer_size ); ctx->buffer_size -= sizeof( printer_task_buffer ); printer->context = ctx; printer->printer = printer_task_printer; rtems_task_start( ctx->task, printer_task, (rtems_task_argument) ctx ); return 0; }