summaryrefslogtreecommitdiffstats
path: root/cython/screenshotr.pxi
diff options
context:
space:
mode:
Diffstat (limited to 'cython/screenshotr.pxi')
-rw-r--r--cython/screenshotr.pxi20
1 files changed, 11 insertions, 9 deletions
diff --git a/cython/screenshotr.pxi b/cython/screenshotr.pxi
index d7dfc57..9213b64 100644
--- a/cython/screenshotr.pxi
+++ b/cython/screenshotr.pxi
@@ -32,11 +32,7 @@ cdef class ScreenshotrClient(DeviceLinkService):
32 cdef screenshotr_client_t _c_client 32 cdef screenshotr_client_t _c_client
33 33
34 def __cinit__(self, iDevice device not None, int port, *args, **kwargs): 34 def __cinit__(self, iDevice device not None, int port, *args, **kwargs):
35 cdef: 35 self.handle_error(screenshotr_client_new(device._c_dev, port, &self._c_client))
36 iDevice dev = device
37 screenshotr_error_t err
38 err = screenshotr_client_new(dev._c_dev, port, &self._c_client)
39 self.handle_error(err)
40 36
41 def __dealloc__(self): 37 def __dealloc__(self):
42 cdef screenshotr_error_t err 38 cdef screenshotr_error_t err
@@ -46,15 +42,21 @@ cdef class ScreenshotrClient(DeviceLinkService):
46 42
47 cpdef bytes take_screenshot(self): 43 cpdef bytes take_screenshot(self):
48 cdef: 44 cdef:
49 char* c_data 45 char* c_data = NULL
50 uint64_t data_size 46 uint64_t data_size
51 bytes result 47 bytes result
52 screenshotr_error_t err 48 screenshotr_error_t err
53 49
54 err = screenshotr_take_screenshot(self._c_client, &c_data, &data_size) 50 err = screenshotr_take_screenshot(self._c_client, &c_data, &data_size)
55 self.handle_error(err) 51 try:
56 result = c_data[:data_size] 52 self.handle_error(err)
57 return result 53
54 result = c_data[:data_size]
55 return result
56 except Exception, e:
57 if c_data != NULL:
58 stdlib.free(c_data)
59 raise
58 60
59 cdef inline BaseError _error(self, int16_t ret): 61 cdef inline BaseError _error(self, int16_t ret):
60 return ScreenshotrError(ret) 62 return ScreenshotrError(ret)