@@ -525,15 +525,29 @@ value value_from_double(value v, double d)
525
525
526
526
value value_from_string (value v , const char * str , size_t length )
527
527
{
528
- if (v != NULL && str != NULL && length > 0 )
528
+ if (v != NULL )
529
529
{
530
- size_t current_size = value_size (v );
530
+ if (str == NULL || length == 0 )
531
+ {
532
+ return value_from (v , NULL , 1 );
533
+ }
534
+ else
535
+ {
536
+ size_t current_size = value_type_size (v );
531
537
532
- size_t bytes = length + 1 ;
538
+ size_t bytes = length + 1 ;
533
539
534
- size_t size = (bytes <= current_size ) ? bytes : current_size ;
540
+ size_t size = (bytes <= current_size ) ? bytes : current_size ;
535
541
536
- return value_from (v , str , size );
542
+ value_from (v , str , size );
543
+
544
+ if (bytes > current_size )
545
+ {
546
+ char * str = value_to_string (v );
547
+
548
+ str [size - 1 ] = '\0' ;
549
+ }
550
+ }
537
551
}
538
552
539
553
return v ;
@@ -543,7 +557,7 @@ value value_from_buffer(value v, const void *buffer, size_t size)
543
557
{
544
558
if (v != NULL && buffer != NULL && size > 0 )
545
559
{
546
- size_t current_size = value_size (v );
560
+ size_t current_size = value_type_size (v );
547
561
548
562
size_t bytes = sizeof (char ) * size ;
549
563
@@ -557,7 +571,7 @@ value value_from_array(value v, const value *values, size_t size)
557
571
{
558
572
if (v != NULL && values != NULL && size > 0 )
559
573
{
560
- size_t current_size = value_size (v );
574
+ size_t current_size = value_type_size (v );
561
575
562
576
size_t bytes = sizeof (const value ) * size ;
563
577
@@ -571,7 +585,7 @@ value value_from_map(value v, const value *tuples, size_t size)
571
585
{
572
586
if (v != NULL && tuples != NULL && size > 0 )
573
587
{
574
- size_t current_size = value_size (v );
588
+ size_t current_size = value_type_size (v );
575
589
576
590
size_t bytes = sizeof (const value ) * size ;
577
591
0 commit comments