本文整理汇总了Golang中C.memcpy函数的典型用法代码示例。如果您正苦于以下问题:Golang memcpy函数的具体用法?Golang memcpy怎么用?Golang memcpy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了memcpy函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: sourceFill
//export sourceFill
func sourceFill(dinfo *C.struct_jpeg_decompress_struct) C.boolean {
mgr := getSourceManager(dinfo)
buffer := [readBufferSize]byte{}
bytes, err := mgr.src.Read(buffer[:])
C.memcpy(mgr.buffer, unsafe.Pointer(&buffer[0]), C.size_t(bytes))
mgr.pub.bytes_in_buffer = C.size_t(bytes)
mgr.currentSize = bytes
mgr.pub.next_input_byte = (*C.JOCTET)(mgr.buffer)
if err == io.EOF {
if bytes == 0 {
if mgr.startOfFile {
releaseSourceManager(mgr)
panic("input is empty")
}
// EOF and need more data. Fill in a fake EOI to get a partial image.
footer := []byte{0xff, C.JPEG_EOI}
C.memcpy(mgr.buffer, unsafe.Pointer(&footer[0]), C.size_t(len(footer)))
mgr.pub.bytes_in_buffer = 2
}
} else if err != nil {
releaseSourceManager(mgr)
panic(err)
}
mgr.startOfFile = false
return C.TRUE
}
示例2: fill_pdu_for_test_crypt
func fill_pdu_for_test_crypt(is_encrypt bool, pt C.enum_snmp_privacy, salt, key, data []byte) ([]byte, error) {
var digest [100000]byte
var pdu C.snmp_pdu_t
C.snmp_pdu_init(&pdu)
pdu.user.priv_proto = pt
C.memcpy(unsafe.Pointer(&pdu.user.priv_key[0]), unsafe.Pointer(&key[0]), C.size_t(C.SNMP_PRIV_KEY_SIZ))
pdu.user.priv_len = C.size_t(16) //C.size_t(C.SNMP_PRIV_KEY_SIZ) //(au == SNMP_PRIV_DES ) ? SNMP_AUTH_HMACMD5_KEY_SIZ : SNMP_AUTH_HMACSHA_KEY_SIZ;
pdu.engine.engine_boots = 3
pdu.engine.engine_time = 3
C.memcpy(unsafe.Pointer(&pdu.msg_salt[0]), unsafe.Pointer(&salt[0]), 8)
copy(digest[:], data)
pdu.scoped_ptr = (*C.u_char)(unsafe.Pointer(&digest[0]))
pdu.scoped_len = C.size_t((len(data) / 8) * 8)
var ret_code C.enum_snmp_code
if is_encrypt {
ret_code = C.snmp_pdu_encrypt(&pdu)
} else {
ret_code = C.snmp_pdu_decrypt(&pdu)
}
if 0 != ret_code {
err := errors.New(C.GoString(C.snmp_pdu_get_error(&pdu, ret_code)))
return nil, err
}
return readGoBytes((*C.uint8_t)(pdu.scoped_ptr), C.uint32_t(pdu.scoped_len)), nil
}
示例3: callback_friend_request
//export callback_friend_request
func callback_friend_request(
c_tox *C.Tox,
c_public_key *C.uint8_t,
c_message *C.uint8_t,
c_length C.size_t,
c_user_data unsafe.Pointer,
) {
// Initialize variables.
tox := (*Tox)(c_user_data)
var publicKey ToxPublicKey
message := make([]byte, c_length)
// Copy the public key.
C.memcpy(
unsafe.Pointer(&publicKey[0]),
unsafe.Pointer(c_public_key),
ToxPublicKeySize,
)
// Copy the friend request message.
if c_length > 0 {
C.memcpy(
unsafe.Pointer(&message[0]),
unsafe.Pointer(c_message),
c_length,
)
}
// Register the callback.
tox.onFriendRequest(tox, publicKey, message)
}
示例4: ReadMsgpackFrame
//export ReadMsgpackFrame
//
// ReadMsgpackFrame reads the msgpack frame at byteOffset in rawStream, decodes the
// 2-5 bytes of a msgpack binary array (either bin8, bin16, or bin32), and returns
// and the decoded-into-R object and the next byteOffset to use.
//
func ReadMsgpackFrame(rawStream C.SEXP, byteOffset C.SEXP) C.SEXP {
var start int
if C.TYPEOF(byteOffset) == C.REALSXP {
start = int(C.get_real_elt(byteOffset, 0))
} else if C.TYPEOF(byteOffset) == C.INTSXP {
start = int(C.get_int_elt(byteOffset, 0))
} else {
C.ReportErrorToR_NoReturn(C.CString("read.msgpack.frame(x, byteOffset) requires byteOffset to be a numeric byte-offset number."))
}
// rawStream must be a RAWSXP
if C.TYPEOF(rawStream) != C.RAWSXP {
C.ReportErrorToR_NoReturn(C.CString("read.msgpack.frame(x, byteOffset) requires x be a RAW vector of bytes."))
}
n := int(C.Rf_xlength(rawStream))
if n == 0 {
return C.R_NilValue
}
if start >= n {
C.ReportErrorToR_NoReturn(C.CString(fmt.Sprintf("read.msgpack.frame(x, byteOffset) error: byteOffset(%d) is beyond the length of x (x has len %d).", start, n)))
}
var decoder [5]byte
C.memcpy(unsafe.Pointer(&decoder[0]), unsafe.Pointer(C.get_raw_elt_ptr(rawStream, C.ulonglong(start))), C.size_t(5))
headerSz, _, totalSz, err := DecodeMsgpackBinArrayHeader(decoder[:])
if err != nil {
C.ReportErrorToR_NoReturn(C.CString(fmt.Sprintf("ReadMsgpackFrame error trying to decode msgpack frame: %s", err)))
}
if start+totalSz > n {
C.ReportErrorToR_NoReturn(C.CString(fmt.Sprintf("read.msgpack.frame(x, byteOffset) error: byteOffset(%d) plus the frames size(%d) goes beyond the length of x (x has len %d).", start, totalSz, n)))
}
bytes := make([]byte, totalSz)
C.memcpy(unsafe.Pointer(&bytes[0]), unsafe.Pointer(C.get_raw_elt_ptr(rawStream, C.ulonglong(start))), C.size_t(totalSz))
rObject := decodeMsgpackToR(bytes[headerSz:])
C.Rf_protect(rObject)
returnList := C.allocVector(C.VECSXP, C.R_xlen_t(2))
C.Rf_protect(returnList)
C.SET_VECTOR_ELT(returnList, C.R_xlen_t(0), C.Rf_ScalarReal(C.double(float64(start+totalSz))))
C.SET_VECTOR_ELT(returnList, C.R_xlen_t(1), rObject)
C.Rf_unprotect_ptr(rObject)
C.Rf_unprotect_ptr(returnList)
return returnList
}
示例5: RecvBytes
/*
Receive a message part from a socket.
For a description of flags, see: http://api.zeromq.org/2-2:zmq-recv#toc2
*/
func (soc *Socket) RecvBytes(flags Flag) ([]byte, error) {
var msg C.zmq_msg_t
if i, err := C.zmq_msg_init(&msg); i != 0 {
return []byte{}, errget(err)
}
defer C.zmq_msg_close(&msg)
var size C.int
var err error
var i C.int
i, err = C.zmq_recv(soc.soc, &msg, C.int(flags))
if i == 0 {
size = C.int(C.zmq_msg_size(&msg))
} else {
size = -1
}
if size < 0 {
return []byte{}, errget(err)
}
if size == 0 {
return []byte{}, nil
}
data := make([]byte, int(size))
C.memcpy(unsafe.Pointer(&data[0]), C.zmq_msg_data(&msg), C.size_t(size))
return data, nil
}
示例6: Recv
// Receive a message from the socket.
// int zmq_recv (void *s, zmq_msg_t *msg, int flags);
func (s *zmqSocket) Recv(flags SendRecvOption) (data []byte, err error) {
// Allocate and initialise a new zmq_msg_t
err = nil
var m C.zmq_msg_t
if C.zmq_msg_init(&m) != 0 {
println("init")
err = errno()
return
}
defer C.zmq_msg_close(&m)
// Receive into message
if C.zmq_recvmsg(s.s, &m, C.int(flags)) != 0 {
println("recvmsg")
err = errno()
return
}
// Copy message data into a byte array
// FIXME Ideally this wouldn't require a copy.
size := C.zmq_msg_size(&m)
if size > 0 {
data = make([]byte, int(size))
C.memcpy(unsafe.Pointer(&data[0]), C.zmq_msg_data(&m), size)
} else {
data = nil
}
return
}
示例7: Decode
func (m *AACDecoder) Decode(data []byte) (sample []byte, err error) {
r := C.aacdec_decode(
&m.m,
(*C.uint8_t)(unsafe.Pointer(&data[0])),
(C.int)(len(data)),
)
if int(r) < 0 {
err = errors.New("decode failed")
return
}
if int(m.m.got) == 0 {
err = errors.New("no data")
return
}
size := int(m.m.f.linesize[0]) * 2
sample = make([]byte, size*2)
for i := 0; i < 2; i++ {
C.memcpy(
unsafe.Pointer(&sample[i*size]),
unsafe.Pointer(m.m.f.data[i]),
(C.size_t)(size),
)
}
return
}
示例8: NewTensor
// NewTensor converts from a Go value to a Tensor. Valid values are scalars,
// slices, and arrays. Every element of a slice must have the same length so
// that the resulting Tensor has a valid shape.
func NewTensor(value interface{}) (*Tensor, error) {
val := reflect.ValueOf(value)
dims, dataType, err := dimsAndDataTypeOf(val.Type())
if err != nil {
return nil, err
}
// TODO(ashankar): Remove the bytes.Buffer and endcode directly into
// C-memory, avoiding the memcpy and cutting down memory usage in half.
shape := make([]int64, dims)
buf := new(bytes.Buffer)
if err := encodeTensor(buf, shape, val); err != nil {
return nil, err
}
var shapePtr *C.int64_t
if len(shape) > 0 {
shapePtr = (*C.int64_t)(unsafe.Pointer(&shape[0]))
}
t := &Tensor{
c: C.TF_AllocateTensor(C.TF_DataType(dataType), shapePtr, C.int(len(shape)), C.size_t(buf.Len())),
shape: shape,
}
runtime.SetFinalizer(t, (*Tensor).finalize)
if buf.Len() > 0 {
slice := buf.Bytes() // https://github.com/golang/go/issues/14210
C.memcpy(C.TF_TensorData(t.c), unsafe.Pointer(&slice[0]), C.size_t(buf.Len()))
}
return t, nil
}
示例9: Bytes
func (d *Disassembler) Bytes() []byte {
b := make([]byte, d.Len())
C.memcpy(unsafe.Pointer(&b[0]),
unsafe.Pointer(C.ud_insn_ptr(&d.u)),
C.size_t(d.Len()))
return b
}
示例10: GoFileWrite
//export GoFileWrite
// Returns SQLite error code to be returned by xWrite:
// SQLITE_OK: wrote n bytes
// SQLITE_IOERR_WRITE: got error while writing
// SQLITE_FULL: partial write
func GoFileWrite(fd C.int, src *C.char, n C.int, offset C.long) (rv int) {
println("writing", n, "bytes at offset", offset, "to fd", fd)
defer func() {
println("write returning", rv)
}()
file := GetFile(int(fd))
if file == nil {
return C.SQLITE_IOERR_WRITE
}
// TODO: avoid this copy
buf := make([]byte, n)
C.memcpy(unsafe.Pointer(&buf[0]), unsafe.Pointer(src), C.size_t(len(buf)))
nwritten, err := file.WriteAt(buf, int64(offset))
if err != nil {
if err == os.ENOSPC {
return C.SQLITE_FULL
}
return C.SQLITE_IOERR_WRITE
}
if nwritten != int(n) {
return C.SQLITE_IOERR_WRITE
}
return C.SQLITE_OK
}
示例11: GoFileRead
//export GoFileRead
// Returns SQLite error code to be returned by xRead:
// SQLITE_OK: read n bytes
// SQLITE_IOERR_READ: got error while reading
// SQLITE_IOERR_SHORT_READ: read fewer than n bytes; rest will be zeroed
func GoFileRead(fd C.int, dst *C.char, n C.int, offset C.long) (rv int) {
println("reading", n, "bytes at offset", offset, "from fd", fd)
defer func() {
println("read returning", rv)
}()
file := GetFile(int(fd))
if file == nil {
return C.SQLITE_IOERR_READ
}
buf := make([]byte, n)
curbuf := buf
for n > 0 {
read, err := file.ReadAt(curbuf, int64(offset))
curbuf = curbuf[read:]
n -= C.int(read)
if err == os.EOF {
break
}
if err != nil {
return C.SQLITE_IOERR_READ
}
}
C.memcpy(unsafe.Pointer(dst), unsafe.Pointer(&buf[0]), C.size_t(len(buf)))
if n != 0 {
return C.SQLITE_IOERR_SHORT_READ
}
return C.SQLITE_OK
}
示例12: Next
func (p *Pcap) Next() (*Packet, os.Error) {
var header *C.struct_pcap_pkthdr
var buf *C.u_char
switch C.pcap_next_ex(p.cptr, &header, &buf) {
case 0:
return nil, os.NewError("read time out")
case -1:
return nil, os.NewError(p.Geterror())
case -2:
return nil, os.NewError("savefile eof")
}
ret := new(Packet)
ret.Time.Sec = int32(header.ts.tv_sec)
ret.Time.Usec = int32(header.ts.tv_usec)
ret.Caplen = uint32(header.caplen)
ret.Len = uint32(header.len)
ret.Data = make([]byte, header.caplen)
if header.caplen > 0 {
C.memcpy(unsafe.Pointer(&ret.Data[0]), unsafe.Pointer(buf), C.size_t(header.caplen))
}
return ret, nil
}
示例13: CompileJIT
// Compile pattern with jit compilation. flagC is Compile flags,
// flagS is study flag.
func CompileJIT(pattern string, flagsC, flagsS int) (Regexp, error) {
patternC := C.CString(pattern)
defer C.free(unsafe.Pointer(patternC))
if clen := int(C.strlen(patternC)); clen != len(pattern) {
return Regexp{}, fmt.Errorf("%s (%d): %s",
pattern,
clen,
"NUL byte in pattern",
)
}
var errptr *C.char
var erroffset C.int
ptr := C.pcre_compile(patternC, C.int(flagsC), &errptr, &erroffset, nil)
if ptr == nil {
return Regexp{}, fmt.Errorf("%s (%d): %s",
pattern,
int(erroffset),
C.GoString(errptr),
)
}
psize := pcresize(ptr)
var re Regexp
re.ptr = make([]byte, psize)
C.memcpy(unsafe.Pointer(&re.ptr[0]), unsafe.Pointer(ptr), psize)
errS := re.study(flagsS)
if errS != nil {
return re, fmt.Errorf("study error: %s", errS)
}
return re, nil
}
示例14: ClipRectangleList
func (self *Surface) ClipRectangleList() ([]Rectangle, Status) {
list := C.cairo_copy_clip_rectangle_list(self.context)
defer C.cairo_rectangle_list_destroy(list)
rects := make([]Rectangle, int(list.num_rectangles))
C.memcpy(unsafe.Pointer(&rects[0]), unsafe.Pointer(list.rectangles), C.size_t(list.num_rectangles*8))
return rects, Status(list.status)
}
示例15: aqbankingGetPasswordFn
//export aqbankingGetPasswordFn
func aqbankingGetPasswordFn(token *C.char, buffer unsafe.Pointer, minLen, maxLen int) int {
pin, ok := knownAqbankingPins[C.GoString(token)]
if ok {
C.memcpy(buffer, unsafe.Pointer(C.CString(pin)), C.size_t(len(pin)))
}
return 0
}