diff options
author | Simon Leblanc <sim.leblanc@gmail.com> | 2014-12-25 03:02:47 -0500 |
---|---|---|
committer | Simon Leblanc <sim.leblanc@gmail.com> | 2014-12-25 03:02:47 -0500 |
commit | 28fd63f43a9cc4100e694c3e7f638c74d3ad474f (patch) | |
tree | d34b897276396b1e512099219a954707b9a52810 | |
parent | 8f5144afd65c59bc18cf069a0c9a95c18dc1c07e (diff) | |
download | gl-28fd63f43a9cc4100e694c3e7f638c74d3ad474f.tar.gz |
Fix #174 ptr() panic on uintptr
-rw-r--r-- | gl.go | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -54,7 +54,7 @@ func freeString(ptr *C.GLchar) { C.free(unsafe.Pointer(ptr)) } func ptr(v interface{}) unsafe.Pointer { - if v == nil || reflect.ValueOf(v).IsNil() { + if v == nil { return unsafe.Pointer(nil) } @@ -65,8 +65,14 @@ func ptr(v interface{}) unsafe.Pointer { offset, _ := v.(uintptr) return unsafe.Pointer(offset) case reflect.Ptr: + if rv.IsNil() { + return unsafe.Pointer(nil) + } et = rv.Elem() case reflect.Slice: + if rv.IsNil() || rv.Len() == 0 { + return unsafe.Pointer(nil) + } et = rv.Index(0) default: panic("type must be a pointer, a slice, uintptr or nil") |