From 73c1f7722305bcaf49d7f32ab7ca092259be48cb Mon Sep 17 00:00:00 2001 From: Arnaud Tournier Date: Fri, 28 Feb 2020 21:29:48 +0100 Subject: [PATCH 1/2] add wrapper for duk_get_buffer_data --- api.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/api.go b/api.go index 0870106..3062b43 100644 --- a/api.go +++ b/api.go @@ -450,6 +450,12 @@ func (d *Context) GetBuffer(index int) (rawPtr unsafe.Pointer, outSize uint) { return rawPtr, outSize } +// See: http://duktape.org/api.html#duk_get_buffer_data +func (d *Context) GetBufferData(index int) (rawPtr unsafe.Pointer, outSize uint) { + rawPtr = C.duk_get_buffer_data(d.duk_context, C.duk_idx_t(index), (*C.duk_size_t)(unsafe.Pointer(&outSize))) + return rawPtr, outSize +} + // See: http://duktape.org/api.html#duk_get_context func (d *Context) GetContext(index int) *Context { return contextFromPointer(C.duk_get_context(d.duk_context, C.duk_idx_t(index))) @@ -629,6 +635,11 @@ func (d *Context) IsBuffer(index int) bool { return int(C.duk_is_buffer(d.duk_context, C.duk_idx_t(index))) == 1 } +// See: http://duktape.org/api.html#duk_is_buffer_data +func (d *Context) IsBufferData(index int) bool { + return int(C.duk_is_buffer_data(d.duk_context, C.duk_idx_t(index))) == 1 +} + // See: http://duktape.org/api.html#duk_is_c_function func (d *Context) IsCFunction(index int) bool { return int(C.duk_is_c_function(d.duk_context, C.duk_idx_t(index))) == 1 @@ -1584,7 +1595,6 @@ func (d *Context) ConfigBuffer(bufferIdx int, buffer []byte) { * Realloc see: http://duktape.org/api.html#duk_realloc * ReallocRaw see: http://duktape.org/api.html#duk_realloc_raw * RequireCFunction see: http://duktape.org/api.html#duk_require_c_function - * GetBufferData see: http://duktape.org/api.html#duk_get_buffer_data * StealBuffer see: http://duktape.org/api.html#duk_steal_buffer * RequireBufferData see: http://duktape.org/api.html#duk_require_buffer_data * IsEvalError see: http://duktape.org/api.html#duk_is_eval_error From 80869a0a46eac7b850f55663a062f5d718b5f059 Mon Sep 17 00:00:00 2001 From: Arnaud Tournier Date: Thu, 5 Mar 2020 17:54:31 +0100 Subject: [PATCH 2/2] added SafeToBytes method --- api.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/api.go b/api.go index 3062b43..18338c1 100644 --- a/api.go +++ b/api.go @@ -1319,6 +1319,33 @@ func (d *Context) SafeToString(index int) string { return "" } +func (c *Context) SafeToBytes(index int) []byte { + var input []byte = nil + switch c.GetType(index) { + case TypeString: + input = []byte(c.SafeToString(index)) + break + case TypeBuffer: + inputPtr, inputLength := c.GetBuffer(index) + input = (*[1 << 30]byte)(inputPtr)[:inputLength:inputLength] + case TypeObject: + if c.IsBufferData(index) { + inputPtr, inputLength := c.GetBufferData(index) + input = (*[1 << 30]byte)(inputPtr)[:inputLength:inputLength] + } else { + fmt.Printf("cannot handle TypeObject content type of input param when SafeToBytes\n") + return nil + } + case TypePointer: + fmt.Printf("cannot handle TypePointer content type of input param when SafeToBytes\n") + return nil + default: + fmt.Printf("cannot guess content type of input param when SafeToBytes\n") + return nil + } + return input +} + // See: http://duktape.org/api.html#duk_set_finalizer func (d *Context) SetFinalizer(index int) { C.duk_set_finalizer(d.duk_context, C.duk_idx_t(index))