equal
deleted
inserted
replaced
11 "bytes" |
11 "bytes" |
12 "sort" |
12 "sort" |
13 "sync" |
13 "sync" |
14 "syscall" |
14 "syscall" |
15 "unsafe" |
15 "unsafe" |
16 |
|
17 "golang.org/x/sys/internal/unsafeheader" |
|
18 ) |
16 ) |
19 |
17 |
20 var ( |
18 var ( |
21 Stdin = 0 |
19 Stdin = 0 |
22 Stdout = 1 |
20 Stdout = 1 |
115 if errno != nil { |
113 if errno != nil { |
116 return nil, errno |
114 return nil, errno |
117 } |
115 } |
118 |
116 |
119 // Use unsafe to convert addr into a []byte. |
117 // Use unsafe to convert addr into a []byte. |
120 var b []byte |
118 b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length) |
121 hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b)) |
|
122 hdr.Data = unsafe.Pointer(addr) |
|
123 hdr.Cap = length |
|
124 hdr.Len = length |
|
125 |
119 |
126 // Register mapping in m and return it. |
120 // Register mapping in m and return it. |
127 p := &b[cap(b)-1] |
121 p := &b[cap(b)-1] |
128 m.Lock() |
122 m.Lock() |
129 defer m.Unlock() |
123 defer m.Unlock() |