some cleanup on go wrapper code
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
hyung-hwan 2024-02-24 19:41:26 +09:00
parent 06176f4900
commit 6b279e1785

View File

@ -4,7 +4,6 @@ package hcl
#include <hcl.h> #include <hcl.h>
#include <hcl-utl.h> #include <hcl-utl.h>
#include <string.h> // for memcpy #include <string.h> // for memcpy
#include <stdlib.h> // for malloc, free
*/ */
import "C" import "C"
@ -18,6 +17,8 @@ import (
"unsafe" "unsafe"
) )
//import "fmt"
type IOHandle struct { type IOHandle struct {
file *os.File file *os.File
ioif interface{} ioif interface{}
@ -107,12 +108,9 @@ func hcl_go_cci_handler(c *C.hcl_t, cmd C.hcl_io_cmd_t, arg unsafe.Pointer) C.in
} else { } else {
// actual included stream // actual included stream
var includer_name string var includer_name string
var k []rune = ucstr_to_rune_slice(ioarg.name)
name = string(k) name = string(ucstr_to_rune_slice(ioarg.name))
//var k []rune = ucstr_to_rune_slice(ioarg.includer.name)
//var k []rune = ucstr_to_rune_slice(ioarg.includer.handle.remembered_path)
tptr = ioarg.includer.handle tptr = ioarg.includer.handle
tlen = *(*C.size_t)(unsafe.Pointer(uintptr(tptr) + unsafe.Sizeof(fd))) tlen = *(*C.size_t)(unsafe.Pointer(uintptr(tptr) + unsafe.Sizeof(fd)))
@ -121,9 +119,9 @@ func hcl_go_cci_handler(c *C.hcl_t, cmd C.hcl_io_cmd_t, arg unsafe.Pointer) C.in
} }
tlen = C.size_t(len(name)) // number of bytes in the string tlen = C.size_t(len(name)) // number of bytes in the string
tptr = C.malloc(C.size_t(unsafe.Sizeof(fd)) + C.size_t(unsafe.Sizeof(tlen)) + tlen) tptr = C.hcl_allocmem(c, C.size_t(unsafe.Sizeof(fd)) + C.size_t(unsafe.Sizeof(tlen)) + tlen)
if tptr == nil { if tptr == nil {
g.set_errmsg(C.HCL_ESYSMEM, "memory allocation failure for cci name") g.set_errmsg(C.HCL_ESYSMEM, "cci name allocation failure")
return -1 return -1
} }
@ -133,11 +131,12 @@ func hcl_go_cci_handler(c *C.hcl_t, cmd C.hcl_io_cmd_t, arg unsafe.Pointer) C.in
fd, err = g.io.cci.Open(g, name) fd, err = g.io.cci.Open(g, name)
if err != nil { if err != nil {
g.set_errmsg(C.HCL_EIOERR, err.Error()) g.set_errmsg(C.HCL_EIOERR, err.Error())
C.free(tptr) C.hcl_freemem(c, tptr)
return -1 return -1
} }
} }
// | fd | length | name bytes of the length |
C.memcpy(tptr, unsafe.Pointer(&fd), C.size_t(unsafe.Sizeof(fd))) C.memcpy(tptr, unsafe.Pointer(&fd), C.size_t(unsafe.Sizeof(fd)))
C.memcpy(unsafe.Pointer(uintptr(tptr)+unsafe.Sizeof(fd)), unsafe.Pointer(&tlen), C.size_t(unsafe.Sizeof(tlen))) C.memcpy(unsafe.Pointer(uintptr(tptr)+unsafe.Sizeof(fd)), unsafe.Pointer(&tlen), C.size_t(unsafe.Sizeof(tlen)))
C.memcpy(unsafe.Pointer(uintptr(tptr)+unsafe.Sizeof(fd)+unsafe.Sizeof(tlen)), unsafe.Pointer(C.CString(name)), tlen) C.memcpy(unsafe.Pointer(uintptr(tptr)+unsafe.Sizeof(fd)+unsafe.Sizeof(tlen)), unsafe.Pointer(C.CString(name)), tlen)
@ -152,11 +151,12 @@ func hcl_go_cci_handler(c *C.hcl_t, cmd C.hcl_io_cmd_t, arg unsafe.Pointer) C.in
) )
ioarg = (*C.hcl_io_cciarg_t)(arg) ioarg = (*C.hcl_io_cciarg_t)(arg)
fd = *(*int)(ioarg.handle) // the descriptor is at the beginning of the buffer. fd = *(*int)(ioarg.handle) // the descriptor at the beginning
if fd >= 0 { if fd >= 0 {
g.io.cci.Close(fd) g.io.cci.Close(fd)
} }
C.free(ioarg.handle) C.hcl_freemem(c, ioarg.handle)
ioarg.handle = nil
return 0 return 0
case C.HCL_IO_READ: case C.HCL_IO_READ:
@ -170,8 +170,7 @@ func hcl_go_cci_handler(c *C.hcl_t, cmd C.hcl_io_cmd_t, arg unsafe.Pointer) C.in
) )
ioarg = (*C.hcl_io_cciarg_t)(arg) ioarg = (*C.hcl_io_cciarg_t)(arg)
// the descriptor is at the beginning of the buffer. fd = *(*int)(ioarg.handle) // the descriptor at the beginning
fd = *(*int)(ioarg.handle)
buf = make([]rune, 1024) // TODO: different size... buf = make([]rune, 1024) // TODO: different size...
n, err = g.io.cci.Read(fd, buf) n, err = g.io.cci.Read(fd, buf)