Skip to content

Commit abf2351

Browse files
committed
Solve issues with metacall values.
1 parent c722edd commit abf2351

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

source/reflect/source/reflect_value_type.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -525,15 +525,29 @@ value value_from_double(value v, double d)
525525

526526
value value_from_string(value v, const char *str, size_t length)
527527
{
528-
if (v != NULL && str != NULL && length > 0)
528+
if (v != NULL)
529529
{
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);
531537

532-
size_t bytes = length + 1;
538+
size_t bytes = length + 1;
533539

534-
size_t size = (bytes <= current_size) ? bytes : current_size;
540+
size_t size = (bytes <= current_size) ? bytes : current_size;
535541

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+
}
537551
}
538552

539553
return v;
@@ -543,7 +557,7 @@ value value_from_buffer(value v, const void *buffer, size_t size)
543557
{
544558
if (v != NULL && buffer != NULL && size > 0)
545559
{
546-
size_t current_size = value_size(v);
560+
size_t current_size = value_type_size(v);
547561

548562
size_t bytes = sizeof(char) * size;
549563

@@ -557,7 +571,7 @@ value value_from_array(value v, const value *values, size_t size)
557571
{
558572
if (v != NULL && values != NULL && size > 0)
559573
{
560-
size_t current_size = value_size(v);
574+
size_t current_size = value_type_size(v);
561575

562576
size_t bytes = sizeof(const value) * size;
563577

@@ -571,7 +585,7 @@ value value_from_map(value v, const value *tuples, size_t size)
571585
{
572586
if (v != NULL && tuples != NULL && size > 0)
573587
{
574-
size_t current_size = value_size(v);
588+
size_t current_size = value_type_size(v);
575589

576590
size_t bytes = sizeof(const value) * size;
577591

0 commit comments

Comments
 (0)