LINUX.ORG.RU

История изменений

Исправление punya, (текущая версия) :

#include <talloc2/tree.h>
#include <math.h>

char * bt_size_t_to_str ( void * ctx, size_t number )
{
    char * result;

    if ( number == 0 ) {
        result = talloc ( ctx, sizeof ( char ) * 2 );
        if ( result == NULL ) {
            return NULL;
        }
        result[0] = '0';
        result[1] = '\0';
        return result;
    }

    // size of number + 1 for '\0'
    uint8_t length = ( uint8_t ) floor ( log10 ( number ) ) + 2;
    result = talloc ( ctx, sizeof ( char ) * length );
    if ( result == NULL ) {
        return NULL;
    }
    result[length - 1] = '\0';
    char * walk        = result + length - 1;

    uint8_t digit;
    while ( number > 0 ) {
        walk--;
        digit  = number % 10;
        number /= 10;
        * walk = '0' + digit;
    }

    return result;
}

вот у меня такой вариант. самый очевидный.

Исходная версия punya, :

#include <talloc2/tree.h>
#include <math.h>

char * bt_size_t_to_str ( void * ctx, size_t number )
{
    char * result;

    if ( number == 0 ) {
        result = talloc ( ctx, sizeof ( char ) * 2 );
        if ( result == NULL ) {
            return NULL;
        }
        result[0] = '0';
        result[1] = '\0';
        return result;
    }

    // size of number + 1 for '\0'
    uint8_t length = ( uint8_t ) floor ( log10 ( number ) ) + 2;
    result = talloc ( ctx, sizeof ( char ) * length );
    if ( result == NULL ) {
        return NULL;
    }
    result[length - 1] = '\0';
    char * walk        = result + length - 1;

    uint8_t digit;
    while ( number > 0 ) {
        walk--;
        digit  = number % 10;
        number /= 10;
        * walk = '0' + digit;
    }

    return result;
}

вот у меня такой вариант =)