Skip to content

Commit

Permalink
Extract CFFIBytes from Array<unsigned char> if possible
Browse files Browse the repository at this point in the history
  • Loading branch information
hughsando committed Dec 19, 2020
1 parent be3c37b commit 043f4d3
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions include/hx/CFFI.h
Original file line number Diff line number Diff line change
Expand Up @@ -316,22 +316,32 @@ struct CffiBytes

inline CffiBytes getByteData(value inValue)
{
static field bField = 0;
static field lengthField = 0;
if (bField==0)
{
bField = val_id("b");
lengthField = val_id("length");
}

if (val_is_object(inValue))
{
static field bField = 0;
static field lengthField = 0;
if (bField==0)
{
bField = val_id("b");
lengthField = val_id("length");
}
value b = val_field(inValue, bField);
value len = val_field(inValue, lengthField);
if (val_is_string(b) && val_is_int(len))
return CffiBytes( (unsigned char *)val_string(b), val_int(len) );
if (val_is_buffer(b) && val_is_int(len))
return CffiBytes( (unsigned char *)buffer_data(val_to_buffer(b)), val_int(len) );
}
else if (val_is_buffer(inValue))
{
value len = val_field(inValue, lengthField);
if (val_is_int(len))
{
buffer b = val_to_buffer(inValue);
return CffiBytes( (unsigned char *)buffer_data(b), val_int(len) );
}
}
return CffiBytes();
}

Expand Down

0 comments on commit 043f4d3

Please sign in to comment.