aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/bazil.org/fuse/buffer.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bazil.org/fuse/buffer.go')
-rw-r--r--vendor/bazil.org/fuse/buffer.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/vendor/bazil.org/fuse/buffer.go b/vendor/bazil.org/fuse/buffer.go
new file mode 100644
index 000000000..bb1d2b776
--- /dev/null
+++ b/vendor/bazil.org/fuse/buffer.go
@@ -0,0 +1,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
+}