Home | History | Annotate | Download | only in named_semaphore
      1 #include <Python.h>
      2 #include <semaphore.h>
      3 
      4 
      5 static int
      6 parse_sem_t(PyObject *object, void *address)
      7 {
      8     *((sem_t **)address) = PyLong_AsVoidPtr(object);
      9     return 1;
     10 }
     11 
     12 
     13 static PyObject *
     14 namedsem_sem_open(PyObject *self, PyObject *args)
     15 {
     16     const char *name;
     17     int oflag;
     18     unsigned int value;
     19     sem_t *result;
     20 
     21     PyArg_ParseTuple(args, "siI", &name, &oflag, &value);
     22     result = sem_open(name, oflag, 0600, value);
     23 
     24     return PyLong_FromVoidPtr(result);
     25 }
     26 
     27 static PyObject *
     28 namedsem_sem_close(PyObject *self, PyObject *args)
     29 {
     30     sem_t *sem;
     31     int result;
     32 
     33     PyArg_ParseTuple(args, "O&", &parse_sem_t, &sem);
     34     result = sem_close(sem);
     35 
     36     return Py_BuildValue("i", result);
     37 }
     38 
     39 static PyObject *
     40 namedsem_sem_unlink(PyObject *self, PyObject *args)
     41 {
     42     const char *name;
     43     int result;
     44 
     45     PyArg_ParseTuple(args, "s", &name);
     46     result = sem_unlink(name);
     47 
     48     return Py_BuildValue("i", result);
     49 }
     50 
     51 static PyObject *
     52 namedsem_sem_wait(PyObject *self, PyObject *args)
     53 {
     54     sem_t *sem;
     55     int result;
     56 
     57     PyArg_ParseTuple(args, "O&", &parse_sem_t, &sem);
     58     result = sem_wait(sem);
     59 
     60     return Py_BuildValue("i", result);
     61 }
     62 
     63 static PyObject *
     64 namedsem_sem_post(PyObject *self, PyObject *args)
     65 {
     66     sem_t *sem;
     67     int result;
     68 
     69     PyArg_ParseTuple(args, "O&", &parse_sem_t, &sem);
     70     result = sem_post(sem);
     71 
     72     return Py_BuildValue("i", result);
     73 }
     74 
     75 
     76 static PyObject *
     77 namedsem_sem_getvalue(PyObject *self, PyObject *args)
     78 {
     79     sem_t *sem;
     80     int sval;
     81 
     82     PyArg_ParseTuple(args, "O&", &parse_sem_t, &sem);
     83     sem_getvalue(sem, &sval);
     84 
     85     return Py_BuildValue("i", sval);
     86 }
     87 
     88 
     89 
     90 static PyMethodDef NamedsemMethods[] = {
     91     {"sem_open", namedsem_sem_open, METH_VARARGS, "Execute sem_open()."},
     92     {"sem_close", namedsem_sem_close, METH_VARARGS, "Execute sem_close()."},
     93     {"sem_unlink", namedsem_sem_unlink, METH_VARARGS, "Execute sem_unlink()."},
     94     {"sem_wait", namedsem_sem_wait, METH_VARARGS, "Execute sem_wait()."},
     95     {"sem_post", namedsem_sem_post, METH_VARARGS, "Execute sem_post()."},
     96     {"sem_getvalue", namedsem_sem_getvalue, METH_VARARGS, "Execute sem_getvalue()."},
     97     {NULL, NULL, 0, NULL}
     98 };
     99 
    100 PyMODINIT_FUNC
    101 initnamedsem(void) {
    102     PyObject *module;
    103 
    104     module = Py_InitModule("namedsem", NamedsemMethods);
    105     PyModule_AddIntConstant(module, "SEM_FAILED", (long)SEM_FAILED);
    106 }
    107