Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/stdlib.hfa

    r09ee131 r03ecdcf  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 18 21:51:13 2021
    13 // Update Count     : 569
     12// Last Modified On : Sat Dec 12 13:52:34 2020
     13// Update Count     : 536
    1414//
    1515
     
    163163                S_fill(T) ret = { 't' };
    164164                size_t size = sizeof(T);
    165                 if ( size > sizeof(ret.t) ) {
    166                         abort( "ERROR: const object of size greater than 50 bytes given for dynamic memory fill\n" );
    167                 } // if
     165                if(size > sizeof(ret.t)) { printf("ERROR: const object of size greater than 50 bytes given for dynamic memory fill\n"); exit(1); }
    168166                memcpy( &ret.t, &t, size );
    169167                return ret;
     
    175173        S_realloc(T)    ?`realloc ( T * a )                             { return (S_realloc(T)){a}; }
    176174
    177         T * $alloc_internal( void * Resize, T * Realloc, size_t Align, size_t Dim, S_fill(T) Fill ) {
     175        T * $alloc_internal( void * Resize, T * Realloc, size_t Align, size_t Dim, S_fill(T) Fill) {
    178176                T * ptr = NULL;
    179177                size_t size = sizeof(T);
     
    183181                        ptr = (T*) (void *) resize( (void *)Resize, Align, Dim * size );
    184182                } else if ( Realloc ) {
    185                         if ( Fill.tag != '0' ) copy_end = min(malloc_size( Realloc ), Dim * size );
    186                         ptr = (T *) (void *) realloc( (void *)Realloc, Align, Dim * size );
     183                        if (Fill.tag != '0') copy_end = min(malloc_size( Realloc ), Dim * size);
     184                        ptr = (T*) (void *) realloc( (void *)Realloc, Align, Dim * size );
    187185                } else {
    188                         ptr = (T *) (void *) memalign( Align, Dim * size );
    189                 }
    190 
    191                 if ( Fill.tag == 'c' ) {
     186                        ptr = (T*) (void *) memalign( Align, Dim * size );
     187                }
     188
     189                if(Fill.tag == 'c') {
    192190                        memset( (char *)ptr + copy_end, (int)Fill.c, Dim * size - copy_end );
    193                 } else if ( Fill.tag == 't' ) {
     191                } else if(Fill.tag == 't') {
    194192                        for ( int i = copy_end; i < Dim * size; i += size ) {
    195                                 #pragma GCC diagnostic push
    196                                 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
    197                                 memcpy( (char *)ptr + i, &Fill.t, sizeof(Fill.t) );
    198                                 #pragma GCC diagnostic pop
     193#pragma GCC diagnostic push
     194#pragma GCC diagnostic ignored "-Warray-bounds"
     195#pragma GCC diagnostic push
     196#pragma GCC diagnostic ignored "-Wstringop-overflow="
     197                                memcpy( (char *)ptr + i, &Fill.t, size );
     198#pragma GCC diagnostic pop
     199#pragma GCC diagnostic pop
    199200                        }
    200                 } else if ( Fill.tag == 'a' ) {
     201                } else if(Fill.tag == 'a') {
    201202                        memcpy( (char *)ptr + copy_end, Fill.at, min(Dim * size - copy_end, Fill.size) );
    202                 } else if ( Fill.tag == 'T' ) {
    203                         memcpy( (char *)ptr + copy_end, Fill.at, Dim * size );
     203                } else if(Fill.tag == 'T') {
     204                        for ( int i = copy_end; i < Dim * size; i += size ) {
     205                                memcpy( (char *)ptr + i, Fill.at, size );
     206                        }
    204207                }
    205208
     
    270273static inline forall( dtype T | sized(T), ttype TT | { void ?{}( T &, TT ); } )
    271274T * new( TT p ) {
    272         return &(*(T *)malloc()){ p };                                          // run constructor
     275        return &(*(T *)malloc()){ p };                                                  // run constructor
    273276} // new
    274277
Note: See TracChangeset for help on using the changeset viewer.