Generated by Cython 0.29.37
Yellow lines hint at Python interaction.
Click on a line that starts with a "+
" to see the C code that Cython generated for it.
Raw output: enclosure.c
001: # cython: language_level=3, c_string_type=unicode, c_string_encoding=default
002:
003: from . cimport ses
004:
005: from posix.ioctl cimport ioctl
006: from posix.fcntl cimport open, O_RDWR
007: from posix.unistd cimport close
008: from posix.strings cimport bzero
009: from libc.stdlib cimport calloc, free
010: from libc.stdint cimport UINT16_MAX
011:
012:
+013: cdef class Enclosure(object):
struct __pyx_obj_3bsd_9enclosure_Enclosure { PyObject_HEAD struct __pyx_vtabstruct_3bsd_9enclosure_Enclosure *__pyx_vtab; char const *enc; int enc_fd; }; struct __pyx_vtabstruct_3bsd_9enclosure_Enclosure { int (*setobj)(struct __pyx_obj_3bsd_9enclosure_Enclosure *, long, unsigned char *); }; static struct __pyx_vtabstruct_3bsd_9enclosure_Enclosure *__pyx_vtabptr_3bsd_9enclosure_Enclosure;
014:
015: cdef const char* enc # /dev/ses device passed to us
016: cdef int enc_fd # file descriptor for enclosure device
017:
+018: def __cinit__(self, enc):
/* Python wrapper */ static int __pyx_pw_3bsd_9enclosure_9Enclosure_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_3bsd_9enclosure_9Enclosure_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_enc = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_enc,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_enc)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 18, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_enc = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 18, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("bsd.enclosure.Enclosure.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_3bsd_9enclosure_9Enclosure___cinit__(((struct __pyx_obj_3bsd_9enclosure_Enclosure *)__pyx_v_self), __pyx_v_enc); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_pf_3bsd_9enclosure_9Enclosure___cinit__(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self, PyObject *__pyx_v_enc) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__cinit__", 0); /* … */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("bsd.enclosure.Enclosure.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
+019: self.enc = enc
__pyx_t_1 = __Pyx_PyObject_AsString(__pyx_v_enc); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error) __pyx_v_self->enc = __pyx_t_1;
+020: self.enc_fd = -1
__pyx_v_self->enc_fd = -1;
+021: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L5; } __pyx_L4_error: { #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L1_error; } __pyx_L5:; } }
+022: self.enc_fd = open(self.enc, O_RDWR)
__pyx_v_self->enc_fd = open(__pyx_v_self->enc, O_RDWR);
+023: if self.enc_fd == -1:
__pyx_t_2 = ((__pyx_v_self->enc_fd == -1L) != 0); if (__pyx_t_2) { /* … */ } }
+024: raise RuntimeError('Failed to open device')
{ #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif /*try:*/ { __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 24, __pyx_L8_error) } /*finally:*/ { __pyx_L8_error: { #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif goto __pyx_L4_error; } } } /* … */ __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_Failed_to_open_device); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_);
025:
+026: def __init__(self, enc):
/* Python wrapper */ static int __pyx_pw_3bsd_9enclosure_9Enclosure_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_3bsd_9enclosure_9Enclosure_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_enc = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_enc,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_enc)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 26, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_enc = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 26, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("bsd.enclosure.Enclosure.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_3bsd_9enclosure_9Enclosure_2__init__(((struct __pyx_obj_3bsd_9enclosure_Enclosure *)__pyx_v_self), __pyx_v_enc); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_pf_3bsd_9enclosure_9Enclosure_2__init__(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self, PyObject *__pyx_v_enc) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__", 0); /* … */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("bsd.enclosure.Enclosure.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
+027: self.enc = enc
__pyx_t_1 = __Pyx_PyObject_AsString(__pyx_v_enc); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error) __pyx_v_self->enc = __pyx_t_1;
028:
+029: def __dealloc__(self):
/* Python wrapper */ static void __pyx_pw_3bsd_9enclosure_9Enclosure_5__dealloc__(PyObject *__pyx_v_self); /*proto*/ static void __pyx_pw_3bsd_9enclosure_9Enclosure_5__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); __pyx_pf_3bsd_9enclosure_9Enclosure_4__dealloc__(((struct __pyx_obj_3bsd_9enclosure_Enclosure *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); } static void __pyx_pf_3bsd_9enclosure_9Enclosure_4__dealloc__(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__", 0); /* … */ /* function exit code */ __Pyx_RefNannyFinishContext(); }
+030: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L5; } __pyx_L5:; } }
+031: if self.enc_fd >= 0:
__pyx_t_1 = ((__pyx_v_self->enc_fd >= 0) != 0); if (__pyx_t_1) { /* … */ } }
+032: close(self.enc_fd)
(void)(close(__pyx_v_self->enc_fd));
033:
+034: def __status__(self):
/* Python wrapper */ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_7__status__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_7__status__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__status__ (wrapper)", 0); __pyx_r = __pyx_pf_3bsd_9enclosure_9Enclosure_6__status__(((struct __pyx_obj_3bsd_9enclosure_Enclosure *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_3bsd_9enclosure_9Enclosure_6__status__(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self) { encioc_string_t __pyx_v_enc_name; encioc_string_t __pyx_v_enc_id; encioc_element_t *__pyx_v_objp; encioc_elm_status_t __pyx_v_ob; encioc_elm_desc_t __pyx_v_objd; encioc_elm_devnames_t __pyx_v_objdn; unsigned char __pyx_v__enc_name[32]; unsigned char __pyx_v__enc_id[32]; int __pyx_v_res; int __pyx_v_num_elms; int __pyx_v_elm_name_size; u_char __pyx_v_estat; PyObject *__pyx_v_enc_info = NULL; int __pyx_v_i; PyObject *__pyx_v_element = NULL; long __pyx_7genexpr__pyx_v_j; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__status__", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_12); __Pyx_AddTraceback("bsd.enclosure.Enclosure.__status__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_enc_info); __Pyx_XDECREF(__pyx_v_element); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
035: cdef ses.encioc_string_t enc_name
036: cdef ses.encioc_string_t enc_id
+037: cdef ses.encioc_element_t * objp = NULL
__pyx_v_objp = NULL;
038: cdef ses.encioc_elm_status_t ob
039: cdef ses.encioc_elm_desc_t objd
040: cdef ses.encioc_elm_devnames_t objdn
041: cdef unsigned char _enc_name[32]
042: cdef unsigned char _enc_id[32]
+043: cdef int res = -1
__pyx_v_res = -1;
+044: cdef int num_elms = 0
__pyx_v_num_elms = 0;
+045: cdef int elm_name_size = 128
__pyx_v_elm_name_size = 0x80;
046: cdef ses.u_char estat
047:
+048: enc_info = {'name': '', 'id': '', 'status': [], 'elements': {}}
__pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_name, __pyx_kp_u__2) < 0) __PYX_ERR(0, 48, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_id, __pyx_kp_u__2) < 0) __PYX_ERR(0, 48, __pyx_L1_error) __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_status, __pyx_t_2) < 0) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_elements, __pyx_t_2) < 0) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_enc_info = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
049:
050: # enclosure name
+051: enc_name.bufsiz = sizeof(_enc_name)
__pyx_v_enc_name.bufsiz = (sizeof(__pyx_v__enc_name));
+052: enc_name.buf = &_enc_name[0]
__pyx_v_enc_name.buf = (&(__pyx_v__enc_name[0]));
+053: res = ioctl(self.enc_fd, ses.ENCIOC_GETENCNAME, <ses.caddr_t>&enc_name)
__pyx_v_res = ioctl(__pyx_v_self->enc_fd, ENCIOC_GETENCNAME, ((caddr_t)(&__pyx_v_enc_name)));
+054: if res != 0:
__pyx_t_3 = ((__pyx_v_res != 0) != 0); if (unlikely(__pyx_t_3)) { /* … */ }
+055: raise RuntimeError('ioctl failed to get enclosure name')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 55, __pyx_L1_error) /* … */ __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_ioctl_failed_to_get_enclosure_na); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 55, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3);
056: else:
+057: enc_info['name'] = enc_name.buf.strip()
/*else*/ { __pyx_t_2 = __Pyx_PyUnicode_FromCString(__pyx_v_enc_name.buf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_strip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_4); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(PyDict_SetItem(__pyx_v_enc_info, __pyx_n_u_name, __pyx_t_1) < 0)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; }
058:
059: # enclosure id
+060: enc_id.bufsiz = sizeof(_enc_id)
__pyx_v_enc_id.bufsiz = (sizeof(__pyx_v__enc_id));
+061: enc_id.buf = &_enc_id[0]
__pyx_v_enc_id.buf = (&(__pyx_v__enc_id[0]));
+062: res = ioctl(self.enc_fd, ses.ENCIOC_GETENCID, <ses.caddr_t>&enc_id)
__pyx_v_res = ioctl(__pyx_v_self->enc_fd, ENCIOC_GETENCID, ((caddr_t)(&__pyx_v_enc_id)));
+063: if res != 0:
__pyx_t_3 = ((__pyx_v_res != 0) != 0); if (unlikely(__pyx_t_3)) { /* … */ }
+064: raise RuntimeError('ioctl failed to get enclosure id')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 64, __pyx_L1_error) /* … */ __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_ioctl_failed_to_get_enclosure_id); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); __Pyx_GIVEREF(__pyx_tuple__4);
065: else:
+066: enc_info['id'] = enc_id.buf.strip()
/*else*/ { __pyx_t_4 = __Pyx_PyUnicode_FromCString(__pyx_v_enc_id.buf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_strip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(PyDict_SetItem(__pyx_v_enc_info, __pyx_n_u_id, __pyx_t_1) < 0)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; }
067:
068: # enclosure status
+069: res = ioctl(self.enc_fd, ses.ENCIOC_GETENCSTAT, <ses.caddr_t>&estat)
__pyx_v_res = ioctl(__pyx_v_self->enc_fd, ENCIOC_GETENCSTAT, ((caddr_t)(&__pyx_v_estat)));
+070: if res != 0:
__pyx_t_3 = ((__pyx_v_res != 0) != 0); if (unlikely(__pyx_t_3)) { /* … */ }
+071: raise RuntimeError('ioctl failed to get enclosure status')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 71, __pyx_L1_error) /* … */ __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_ioctl_failed_to_get_enclosure_st); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 71, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5);
072: else:
+073: if estat == 0:
/*else*/ { __pyx_t_3 = ((__pyx_v_estat == 0) != 0); if (__pyx_t_3) { /* … */ goto __pyx_L6; }
+074: enc_info['status'].append('OK')
__pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_enc_info, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_n_u_OK); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
075: else:
+076: if (estat & ses.SES_ENCSTAT_INFO):
/*else*/ { __pyx_t_3 = ((__pyx_v_estat & SES_ENCSTAT_INFO) != 0); if (__pyx_t_3) { /* … */ }
+077: enc_info['status'].append('INFO')
__pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_enc_info, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_n_u_INFO); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+078: if (estat & ses.SES_ENCSTAT_NONCRITICAL):
__pyx_t_3 = ((__pyx_v_estat & SES_ENCSTAT_NONCRITICAL) != 0); if (__pyx_t_3) { /* … */ }
+079: enc_info['status'].append('NONCRITICAL')
__pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_enc_info, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_n_u_NONCRITICAL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+080: if (estat & ses.SES_ENCSTAT_CRITICAL):
__pyx_t_3 = ((__pyx_v_estat & SES_ENCSTAT_CRITICAL) != 0); if (__pyx_t_3) { /* … */ }
+081: enc_info['status'].append('CRITICAL')
__pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_enc_info, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_n_u_CRITICAL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+082: if (estat & ses.SES_ENCSTAT_UNRECOV):
__pyx_t_3 = ((__pyx_v_estat & SES_ENCSTAT_UNRECOV) != 0); if (__pyx_t_3) { /* … */ } } __pyx_L6:; }
+083: enc_info['status'].append('UNRECOV')
__pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_enc_info, __pyx_n_u_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_n_u_UNRECOV); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
084:
085: # query all elements returned by ses device
+086: res = ioctl(self.enc_fd, ses.ENCIOC_GETNELM, <ses.caddr_t>&num_elms)
__pyx_v_res = ioctl(__pyx_v_self->enc_fd, ENCIOC_GETNELM, ((caddr_t)(&__pyx_v_num_elms)));
+087: if res < 0:
__pyx_t_3 = ((__pyx_v_res < 0) != 0); if (unlikely(__pyx_t_3)) { /* … */ }
+088: raise RuntimeError('ioctl failed to get number of elements')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 88, __pyx_L1_error) /* … */ __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_ioctl_failed_to_get_number_of_el); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 88, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__6); __Pyx_GIVEREF(__pyx_tuple__6);
089:
+090: objp = <ses.encioc_element_t*>calloc(num_elms, sizeof(ses.encioc_element_t))
__pyx_v_objp = ((encioc_element_t *)calloc(__pyx_v_num_elms, (sizeof(encioc_element_t))));
+091: if not objp:
__pyx_t_3 = ((!(__pyx_v_objp != 0)) != 0); if (unlikely(__pyx_t_3)) { /* … */ }
+092: raise MemoryError('calloc objp failed')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 92, __pyx_L1_error) /* … */ __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_calloc_objp_failed); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 92, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__7); __Pyx_GIVEREF(__pyx_tuple__7);
093:
+094: res = ioctl(self.enc_fd, ses.ENCIOC_GETELMMAP, <ses.caddr_t>objp)
__pyx_v_res = ioctl(__pyx_v_self->enc_fd, ENCIOC_GETELMMAP, ((caddr_t)__pyx_v_objp));
+095: if res < 0:
__pyx_t_3 = ((__pyx_v_res < 0) != 0); if (unlikely(__pyx_t_3)) { /* … */ }
+096: raise RuntimeError('ioctl failed to get enclosure element map')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 96, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 96, __pyx_L1_error) /* … */ __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u_ioctl_failed_to_get_enclosure_el); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 96, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__8); __Pyx_GIVEREF(__pyx_tuple__8);
097:
098: # we've got number of elements and mapped them, now iterate through
099: # them and get their information
+100: for i in range(num_elms):
__pyx_t_6 = __pyx_v_num_elms; __pyx_t_7 = __pyx_t_6; for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8;
+101: ob.elm_idx = objp[i].elm_idx
__pyx_t_9 = (__pyx_v_objp[__pyx_v_i]).elm_idx; __pyx_v_ob.elm_idx = __pyx_t_9;
+102: res = ioctl(self.enc_fd, ses.ENCIOC_GETELMSTAT, <ses.caddr_t>&ob)
__pyx_v_res = ioctl(__pyx_v_self->enc_fd, ENCIOC_GETELMSTAT, ((caddr_t)(&__pyx_v_ob)));
+103: if res < 0:
__pyx_t_3 = ((__pyx_v_res < 0) != 0); if (unlikely(__pyx_t_3)) { /* … */ }
+104: raise RuntimeError('ioctl failed to get element status')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 104, __pyx_L1_error) /* … */ __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_ioctl_failed_to_get_element_stat); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 104, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__9); __Pyx_GIVEREF(__pyx_tuple__9);
105:
106: element = {
+107: ob.elm_idx: {
__pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ob.elm_idx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2);
+108: 'type': objp[i].elm_type,
__pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_10 = __Pyx_PyInt_From_elm_type_t((__pyx_v_objp[__pyx_v_i]).elm_type); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_type, __pyx_t_10) < 0) __PYX_ERR(0, 108, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; { /* enter inner scope */
+109: 'status': [ob.cstat[j] for j in range(4)],
__pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); for (__pyx_t_11 = 0; __pyx_t_11 < 4; __pyx_t_11+=1) { __pyx_7genexpr__pyx_v_j = __pyx_t_11; __pyx_t_12 = __Pyx_PyInt_From_unsigned_char((__pyx_v_ob.cstat[__pyx_7genexpr__pyx_v_j])); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } } /* exit inner scope */ if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_status, __pyx_t_10) < 0) __PYX_ERR(0, 108, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_descriptor, __pyx_kp_u__2) < 0) __PYX_ERR(0, 108, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_dev, __pyx_kp_u__2) < 0) __PYX_ERR(0, 108, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_4) < 0) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_element, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
110: 'descriptor': '',
111: 'dev': '',
112: }
113: }
114:
115: # element descriptor info
+116: bzero(&objd, sizeof(objd))
bzero((&__pyx_v_objd), (sizeof(__pyx_v_objd)));
+117: objd.elm_idx = objp[i].elm_idx
__pyx_t_9 = (__pyx_v_objp[__pyx_v_i]).elm_idx; __pyx_v_objd.elm_idx = __pyx_t_9;
+118: objd.elm_desc_len = UINT16_MAX
__pyx_v_objd.elm_desc_len = UINT16_MAX;
+119: objd.elm_desc_str = <char*>calloc(UINT16_MAX, sizeof(char))
__pyx_v_objd.elm_desc_str = ((char *)calloc(UINT16_MAX, (sizeof(char))));
+120: res = ioctl(self.enc_fd, ses.ENCIOC_GETELMDESC, <ses.caddr_t>&objd)
__pyx_v_res = ioctl(__pyx_v_self->enc_fd, ENCIOC_GETELMDESC, ((caddr_t)(&__pyx_v_objd)));
+121: if res < 0:
__pyx_t_3 = ((__pyx_v_res < 0) != 0); if (unlikely(__pyx_t_3)) { /* … */ }
+122: raise RuntimeError('ioctl failed to get element description')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 122, __pyx_L1_error) /* … */ __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_ioctl_failed_to_get_element_desc); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10);
123: else:
+124: element[ob.elm_idx]['descriptor'] = objd.elm_desc_str.strip()
/*else*/ { __pyx_t_4 = __Pyx_PyUnicode_FromString(__pyx_v_objd.elm_desc_str); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_strip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ob.elm_idx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_element, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(PyObject_SetItem(__pyx_t_4, __pyx_n_u_descriptor, __pyx_t_1) < 0)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+125: free(objd.elm_desc_str)
free(__pyx_v_objd.elm_desc_str); }
126:
127: # devices connected to element
+128: bzero(&objdn, sizeof(objdn))
bzero((&__pyx_v_objdn), (sizeof(__pyx_v_objdn)));
+129: objdn.elm_idx = objp[i].elm_idx
__pyx_t_9 = (__pyx_v_objp[__pyx_v_i]).elm_idx; __pyx_v_objdn.elm_idx = __pyx_t_9;
+130: objdn.elm_names_size = elm_name_size
__pyx_v_objdn.elm_names_size = __pyx_v_elm_name_size;
+131: objdn.elm_devnames = <char*>calloc(elm_name_size, sizeof(char))
__pyx_v_objdn.elm_devnames = ((char *)calloc(__pyx_v_elm_name_size, (sizeof(char))));
+132: ioctl(self.enc_fd, ses.ENCIOC_GETELMDEVNAMES, <ses.caddr_t>&objdn)
(void)(ioctl(__pyx_v_self->enc_fd, ENCIOC_GETELMDEVNAMES, ((caddr_t)(&__pyx_v_objdn))));
+133: element[ob.elm_idx]['dev'] = objdn.elm_devnames.strip()
__pyx_t_4 = __Pyx_PyUnicode_FromString(__pyx_v_objdn.elm_devnames); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_strip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ob.elm_idx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_element, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(PyObject_SetItem(__pyx_t_4, __pyx_n_u_dev, __pyx_t_1) < 0)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+134: free(objdn.elm_devnames)
free(__pyx_v_objdn.elm_devnames);
135:
136: # update the final dict
+137: enc_info['elements'].update(element)
__pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_enc_info, __pyx_n_u_elements); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_update); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v_element) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_element); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; }
138:
+139: free(objp)
free(__pyx_v_objp);
+140: return enc_info
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_enc_info); __pyx_r = __pyx_v_enc_info; goto __pyx_L0;
141:
+142: cdef int setobj(self, long element, unsigned char *action) except -1:
static int __pyx_f_3bsd_9enclosure_9Enclosure_setobj(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self, long __pyx_v_element, unsigned char *__pyx_v_action) { encioc_elm_status_t __pyx_v_obj; int __pyx_v_res; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("setobj", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("bsd.enclosure.Enclosure.setobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
143: cdef ses.encioc_elm_status_t obj
+144: cdef int res = -1
__pyx_v_res = -1;
145:
+146: obj.elm_idx = element
__pyx_v_obj.elm_idx = __pyx_v_element;
+147: obj.cstat = action
memcpy(&(__pyx_v_obj.cstat[0]), __pyx_v_action, sizeof(__pyx_v_obj.cstat[0]) * (4 - 0));
+148: with nogil:
{ #ifdef WITH_THREAD PyThreadState *_save; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L5; } __pyx_L4_error: { #ifdef WITH_THREAD __Pyx_FastGIL_Forget(); Py_BLOCK_THREADS #endif goto __pyx_L1_error; } __pyx_L5:; } }
+149: res = ioctl(self.enc_fd, ses.ENCIOC_SETELMSTAT, <ses.caddr_t>&obj)
__pyx_v_res = ioctl(__pyx_v_self->enc_fd, ENCIOC_SETELMSTAT, ((caddr_t)(&__pyx_v_obj)));
+150: if res < 0:
__pyx_t_1 = ((__pyx_v_res < 0) != 0); if (__pyx_t_1) { /* … */ } }
+151: raise RuntimeError('ioctl failed to set element status')
{ #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif /*try:*/ { __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 151, __pyx_L8_error) } /*finally:*/ { __pyx_L8_error: { #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif goto __pyx_L4_error; } } } /* … */ __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_ioctl_failed_to_set_element_stat); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 151, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__11); __Pyx_GIVEREF(__pyx_tuple__11);
152:
+153: return res
__pyx_r = __pyx_v_res; goto __pyx_L0;
154:
+155: def identify(self, element):
/* Python wrapper */ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_9identify(PyObject *__pyx_v_self, PyObject *__pyx_v_element); /*proto*/ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_9identify(PyObject *__pyx_v_self, PyObject *__pyx_v_element) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("identify (wrapper)", 0); __pyx_r = __pyx_pf_3bsd_9enclosure_9Enclosure_8identify(((struct __pyx_obj_3bsd_9enclosure_Enclosure *)__pyx_v_self), ((PyObject *)__pyx_v_element)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_3bsd_9enclosure_9Enclosure_8identify(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self, PyObject *__pyx_v_element) { unsigned char __pyx_v_cstat[4]; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("identify", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("bsd.enclosure.Enclosure.identify", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
+156: cdef unsigned char[4] cstat = [128, 0, 2, 0]
__pyx_t_1[0] = 0x80; __pyx_t_1[1] = 0; __pyx_t_1[2] = 2; __pyx_t_1[3] = 0; memcpy(&(__pyx_v_cstat[0]), __pyx_t_1, sizeof(__pyx_v_cstat[0]) * (4));
+157: return self.setobj(<long>element, cstat)
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_As_long(__pyx_v_element); if (unlikely((__pyx_t_2 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 157, __pyx_L1_error) __pyx_t_3 = ((struct __pyx_vtabstruct_3bsd_9enclosure_Enclosure *)__pyx_v_self->__pyx_vtab)->setobj(__pyx_v_self, ((long)__pyx_t_2), __pyx_v_cstat); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 157, __pyx_L1_error) __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 157, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
158:
+159: def clear(self, element):
/* Python wrapper */ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_11clear(PyObject *__pyx_v_self, PyObject *__pyx_v_element); /*proto*/ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_11clear(PyObject *__pyx_v_self, PyObject *__pyx_v_element) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("clear (wrapper)", 0); __pyx_r = __pyx_pf_3bsd_9enclosure_9Enclosure_10clear(((struct __pyx_obj_3bsd_9enclosure_Enclosure *)__pyx_v_self), ((PyObject *)__pyx_v_element)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_3bsd_9enclosure_9Enclosure_10clear(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self, PyObject *__pyx_v_element) { unsigned char __pyx_v_cstat[4]; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("clear", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("bsd.enclosure.Enclosure.clear", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
+160: cdef unsigned char[4] cstat = [128, 0, 0, 0]
__pyx_t_1[0] = 0x80; __pyx_t_1[1] = 0; __pyx_t_1[2] = 0; __pyx_t_1[3] = 0; memcpy(&(__pyx_v_cstat[0]), __pyx_t_1, sizeof(__pyx_v_cstat[0]) * (4));
+161: return self.setobj(<long>element, cstat)
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_As_long(__pyx_v_element); if (unlikely((__pyx_t_2 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 161, __pyx_L1_error) __pyx_t_3 = ((struct __pyx_vtabstruct_3bsd_9enclosure_Enclosure *)__pyx_v_self->__pyx_vtab)->setobj(__pyx_v_self, ((long)__pyx_t_2), __pyx_v_cstat); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 161, __pyx_L1_error) __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
162:
+163: def fault(self, element):
/* Python wrapper */ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_13fault(PyObject *__pyx_v_self, PyObject *__pyx_v_element); /*proto*/ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_13fault(PyObject *__pyx_v_self, PyObject *__pyx_v_element) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fault (wrapper)", 0); __pyx_r = __pyx_pf_3bsd_9enclosure_9Enclosure_12fault(((struct __pyx_obj_3bsd_9enclosure_Enclosure *)__pyx_v_self), ((PyObject *)__pyx_v_element)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_3bsd_9enclosure_9Enclosure_12fault(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self, PyObject *__pyx_v_element) { unsigned char __pyx_v_cstat[4]; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fault", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("bsd.enclosure.Enclosure.fault", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
+164: cdef unsigned char[4] cstat = [128, 0, 0, 32]
__pyx_t_1[0] = 0x80; __pyx_t_1[1] = 0; __pyx_t_1[2] = 0; __pyx_t_1[3] = 32; memcpy(&(__pyx_v_cstat[0]), __pyx_t_1, sizeof(__pyx_v_cstat[0]) * (4));
+165: return self.setobj(<long>element, cstat)
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_As_long(__pyx_v_element); if (unlikely((__pyx_t_2 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 165, __pyx_L1_error) __pyx_t_3 = ((struct __pyx_vtabstruct_3bsd_9enclosure_Enclosure *)__pyx_v_self->__pyx_vtab)->setobj(__pyx_v_self, ((long)__pyx_t_2), __pyx_v_cstat); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 165, __pyx_L1_error) __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 165, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
166:
+167: def status(self):
/* Python wrapper */ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_15status(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_3bsd_9enclosure_9Enclosure_15status(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("status (wrapper)", 0); __pyx_r = __pyx_pf_3bsd_9enclosure_9Enclosure_14status(((struct __pyx_obj_3bsd_9enclosure_Enclosure *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_3bsd_9enclosure_9Enclosure_14status(struct __pyx_obj_3bsd_9enclosure_Enclosure *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("status", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("bsd.enclosure.Enclosure.status", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
+168: return self.__status__()
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_status_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;