Lines 38-44
Link Here
|
38 |
*/ |
38 |
*/ |
39 |
import "C" |
39 |
import "C" |
40 |
|
40 |
|
41 |
import "unsafe" |
41 |
import ( |
|
|
42 |
"reflect" |
43 |
"unsafe" |
44 |
) |
42 |
|
45 |
|
43 |
type ( |
46 |
type ( |
44 |
CDmTask C.struct_dm_task |
47 |
CDmTask C.struct_dm_task |
Lines 184-196
Link Here
|
184 |
if Cdeps == nil { |
187 |
if Cdeps == nil { |
185 |
return nil |
188 |
return nil |
186 |
} |
189 |
} |
|
|
190 |
|
191 |
// golang issue: https://github.com/golang/go/issues/11925 |
192 |
hdr := reflect.SliceHeader{ |
193 |
Data: uintptr(unsafe.Pointer(uintptr(unsafe.Pointer(Cdeps)) + unsafe.Sizeof(*Cdeps))), |
194 |
Len: int(Cdeps.count), |
195 |
Cap: int(Cdeps.count), |
196 |
} |
197 |
devices := *(*[]C.uint64_t)(unsafe.Pointer(&hdr)) |
198 |
|
187 |
deps := &Deps{ |
199 |
deps := &Deps{ |
188 |
Count: uint32(Cdeps.count), |
200 |
Count: uint32(Cdeps.count), |
189 |
Filler: uint32(Cdeps.filler), |
201 |
Filler: uint32(Cdeps.filler), |
190 |
} |
202 |
} |
191 |
for _, device := range Cdeps.device { |
203 |
for _, device := range devices { |
192 |
deps.Device = append(deps.Device, (uint64)(device)) |
204 |
deps.Device = append(deps.Device, uint64(device)) |
193 |
} |
205 |
} |
194 |
return deps |
206 |
return deps |
195 |
} |
207 |
} |
196 |
|
208 |
|