aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/bazil.org/fuse/buffer.go
blob: bb1d2b77696a3520309ce7c1fa8d8e2a0d00a1c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package fuse

import "unsafe"

// buffer provides a mechanism for constructing a message from
// multiple segments.
type buffer []byte

// alloc allocates size bytes and returns a pointer to the new
// segment.
func (w *buffer) alloc(size uintptr) unsafe.Pointer {
    s := int(size)
    if len(*w)+s > cap(*w) {
        old := *w
        *w = make([]byte, len(*w), 2*cap(*w)+s)
        copy(*w, old)
    }
    l := len(*w)
    *w = (*w)[:l+s]
    return unsafe.Pointer(&(*w)[l])
}

// reset clears out the contents of the buffer.
func (w *buffer) reset() {
    for i := range (*w)[:cap(*w)] {
        (*w)[i] = 0
    }
    *w = (*w)[:0]
}

func newBuffer(extra uintptr) buffer {
    const hdrSize = unsafe.Sizeof(outHeader{})
    buf := make(buffer, hdrSize, hdrSize+extra)
    return buf
}