aboutsummaryrefslogtreecommitdiffstats
path: root/libgamma_native_error.w32.pyx
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2022-07-21 14:53:18 +0200
committerMattias Andrée <maandree@kth.se>2022-07-21 14:53:18 +0200
commit3be28b4e8f75190d30e311f0e69da714cac62cc5 (patch)
tree95374a0ac30802f838e0fee1d7c686b66dd26b11 /libgamma_native_error.w32.pyx
parentRemove dist (diff)
downloadpylibgamma-1.1.3.tar.gz
pylibgamma-1.1.3.tar.bz2
pylibgamma-1.1.3.tar.xz
Change license to ISC, change style, improve makefile1.1.3
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'libgamma_native_error.w32.pyx')
-rw-r--r--libgamma_native_error.w32.pyx167
1 files changed, 167 insertions, 0 deletions
diff --git a/libgamma_native_error.w32.pyx b/libgamma_native_error.w32.pyx
new file mode 100644
index 0000000..21548f0
--- /dev/null
+++ b/libgamma_native_error.w32.pyx
@@ -0,0 +1,167 @@
+# -*- python -*-
+# See LICENSE file for copyright and license details.
+cimport cython
+
+
+cdef extern short libgamma_group_gid
+'''
+Group that the user needs to be a member of if
+`LIBGAMMA_DEVICE_REQUIRE_GROUP` is returned
+'''
+
+cdef extern const char* libgamma_group_name
+'''
+Group that the user needs to be a member of if
+`LIBGAMMA_DEVICE_REQUIRE_GROUP` is returned,
+`NULL` if the name of the group `libgamma_group_gid`
+cannot be determined
+'''
+
+
+cdef extern void libgamma_perror(const char *name, int error_code) nogil
+'''
+Prints an error to stderr in a `perror` fashion,
+however this function will not translate the `libgamma`
+errors into human-readable strings, it will simply
+print the name of the error. If the value `error_code`
+is the value of `LIBGAMMA_ERRNO_SET`, `perror` will be
+used to print the current error stored in `errno`.
+If `error_code` is non-negative (an `errno` value`), that
+value will be stored in `errno` and `perror` will be
+used to print it. Additionally, if the `error_code` is
+the value of `LIBGAMMA_DEVICE_REQUIRE_GROUP` the
+required group will be printed with its numerical value
+and, if known, its name.
+
+@param name The text to add at the beginning
+@param value The error code, may be an `errno` value
+'''
+
+cdef extern const char *libgamma_name_of_error(int value) nogil
+'''
+Returns the name of the definition associated with a `libgamma` error code
+
+@param value The error code
+@return The name of the definition associated with the error code,
+ `NULL` if the error code does not exist. The return string
+ should not be `free`:d
+'''
+
+cdef extern int libgamma_value_of_error(const char *name) nogil
+'''
+Return the value of a `libgamma` error definition refered to by name
+
+@param name The name of the definition associated with the error code
+@return The error code, zero if the name does is `NULL`
+ or does not refer to a `libgamma` error
+'''
+
+
+def libgamma_native_get_group_gid() -> int:
+ '''
+ Getter
+
+ Group that the user needs to be a member of if
+ `LIBGAMMA_DEVICE_REQUIRE_GROUP` is returned
+ '''
+ return int(libgamma_group_gid)
+
+
+def libgamma_native_set_group_gid(gid : int):
+ '''
+ Setter
+
+ Group that the user needs to be a member of if
+ `LIBGAMMA_DEVICE_REQUIRE_GROUP` is returned
+ '''
+ libgamma_group_gid = <int>gid
+
+
+def libgamma_native_get_group_name() -> str:
+ '''
+ Getter
+
+ Group that the user needs to be a member of if
+ `LIBGAMMA_DEVICE_REQUIRE_GROUP` is returned,
+ `None` if the name of the group `libgamma_group_gid`
+ cannot be determined
+ '''
+ cdef bytes bs
+ if libgamma_group_name is NULL:
+ return None
+ bs = libgamma_group_name
+ return bs.decode('utf-8', 'strict')
+
+
+def libgamma_native_set_group_name(name : str):
+ '''
+ Setter
+
+ Group that the user needs to be a member of if
+ `LIBGAMMA_DEVICE_REQUIRE_GROUP` is returned,
+ `None` if the name of the group `libgamma_group_gid`
+ cannot be determined
+ '''
+ cdef bytes bs
+ if name is None:
+ libgamma_group_name = <char *>NULL
+ return
+ bs = name.encode('utf-8') + bytes([0])
+ libgamma_group_name = bs
+
+
+def libgamma_native_perror(name : str, error_code : int):
+ '''
+ Prints an error to stderr in a `perror` fashion,
+ however this function will not translate the `libgamma`
+ errors into human-readable strings, it will simply
+ print the name of the error. If the value `error_code`
+ is the value of `LIBGAMMA_ERRNO_SET`, `perror` will be
+ used to print the current error stored in `errno`.
+ If `error_code` is non-negative (an `errno` value`), that
+ value will be stored in `errno` and `perror` will be
+ used to print it. Additionally, if the `error_code` is
+ the value of `LIBGAMMA_DEVICE_REQUIRE_GROUP` the
+ required group will be printed with its numerical value
+ and, if known, its name.
+
+ @param name The text to add at the beginning
+ @param value The error code, may be an `errno` value
+ '''
+ cdef bytes bs
+ bs = name.encode('utf-8') + bytes([0])
+ libgamma_perror(bs, <int>error_code)
+
+
+def libgamma_native_name_of_error(value : int) -> str:
+ '''
+ Returns the name of the definition associated with a `libgamma` error code
+
+ @param value The error code
+ @return The name of the definition associated with the error code,
+ `None` if the error code does not exist. The return string
+ should not be `free`:d
+ '''
+ cdef const char* name
+ cdef bytes bs
+ name = libgamma_name_of_error(<int>value)
+ if name is NULL:
+ return None
+ bs = name
+ return bs.decode('utf-8', 'strict')
+
+
+def libgamma_native_value_of_error(name : str) -> int:
+ '''
+ Return the value of a `libgamma` error definition refered to by name
+
+ @param name The name of the definition associated with the error code
+ @return The error code, zero if the name is `None`,
+ or does not refer to a `libgamma` error
+ '''
+ cdef bytes bs
+ if name is None:
+ return 0
+ bs = name.encode('utf-8') + bytes([0])
+ return int(libgamma_value_of_error(bs))
+