1/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5#if defined(HAVE_SHM_OPEN)
6
7PyDoc_STRVAR(_posixshmem_shm_open__doc__,
8"shm_open($module, /, path, flags, mode=511)\n"
9"--\n"
10"\n"
11"Open a shared memory object.  Returns a file descriptor (integer).");
12
13#define _POSIXSHMEM_SHM_OPEN_METHODDEF    \
14    {"shm_open", _PyCFunction_CAST(_posixshmem_shm_open), METH_FASTCALL|METH_KEYWORDS, _posixshmem_shm_open__doc__},
15
16static int
17_posixshmem_shm_open_impl(PyObject *module, PyObject *path, int flags,
18                          int mode);
19
20static PyObject *
21_posixshmem_shm_open(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
22{
23    PyObject *return_value = NULL;
24    static const char * const _keywords[] = {"path", "flags", "mode", NULL};
25    static _PyArg_Parser _parser = {NULL, _keywords, "shm_open", 0};
26    PyObject *argsbuf[3];
27    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
28    PyObject *path;
29    int flags;
30    int mode = 511;
31    int _return_value;
32
33    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
34    if (!args) {
35        goto exit;
36    }
37    if (!PyUnicode_Check(args[0])) {
38        _PyArg_BadArgument("shm_open", "argument 'path'", "str", args[0]);
39        goto exit;
40    }
41    if (PyUnicode_READY(args[0]) == -1) {
42        goto exit;
43    }
44    path = args[0];
45    flags = _PyLong_AsInt(args[1]);
46    if (flags == -1 && PyErr_Occurred()) {
47        goto exit;
48    }
49    if (!noptargs) {
50        goto skip_optional_pos;
51    }
52    mode = _PyLong_AsInt(args[2]);
53    if (mode == -1 && PyErr_Occurred()) {
54        goto exit;
55    }
56skip_optional_pos:
57    _return_value = _posixshmem_shm_open_impl(module, path, flags, mode);
58    if ((_return_value == -1) && PyErr_Occurred()) {
59        goto exit;
60    }
61    return_value = PyLong_FromLong((long)_return_value);
62
63exit:
64    return return_value;
65}
66
67#endif /* defined(HAVE_SHM_OPEN) */
68
69#if defined(HAVE_SHM_UNLINK)
70
71PyDoc_STRVAR(_posixshmem_shm_unlink__doc__,
72"shm_unlink($module, /, path)\n"
73"--\n"
74"\n"
75"Remove a shared memory object (similar to unlink()).\n"
76"\n"
77"Remove a shared memory object name, and, once all processes  have  unmapped\n"
78"the object, de-allocates and destroys the contents of the associated memory\n"
79"region.");
80
81#define _POSIXSHMEM_SHM_UNLINK_METHODDEF    \
82    {"shm_unlink", _PyCFunction_CAST(_posixshmem_shm_unlink), METH_FASTCALL|METH_KEYWORDS, _posixshmem_shm_unlink__doc__},
83
84static PyObject *
85_posixshmem_shm_unlink_impl(PyObject *module, PyObject *path);
86
87static PyObject *
88_posixshmem_shm_unlink(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
89{
90    PyObject *return_value = NULL;
91    static const char * const _keywords[] = {"path", NULL};
92    static _PyArg_Parser _parser = {NULL, _keywords, "shm_unlink", 0};
93    PyObject *argsbuf[1];
94    PyObject *path;
95
96    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
97    if (!args) {
98        goto exit;
99    }
100    if (!PyUnicode_Check(args[0])) {
101        _PyArg_BadArgument("shm_unlink", "argument 'path'", "str", args[0]);
102        goto exit;
103    }
104    if (PyUnicode_READY(args[0]) == -1) {
105        goto exit;
106    }
107    path = args[0];
108    return_value = _posixshmem_shm_unlink_impl(module, path);
109
110exit:
111    return return_value;
112}
113
114#endif /* defined(HAVE_SHM_UNLINK) */
115
116#ifndef _POSIXSHMEM_SHM_OPEN_METHODDEF
117    #define _POSIXSHMEM_SHM_OPEN_METHODDEF
118#endif /* !defined(_POSIXSHMEM_SHM_OPEN_METHODDEF) */
119
120#ifndef _POSIXSHMEM_SHM_UNLINK_METHODDEF
121    #define _POSIXSHMEM_SHM_UNLINK_METHODDEF
122#endif /* !defined(_POSIXSHMEM_SHM_UNLINK_METHODDEF) */
123/*[clinic end generated code: output=a6db931a47d36e1b input=a9049054013a1b77]*/
124