X-Git-Url: https://git.distorted.org.uk/~mdw/mLib-python/blobdiff_plain/6a6bd8fac21d06b426006a5e92f6e2696590a435..803869bc2d77e95aade23e04bf110dfef4092b2e:/defs.pxi diff --git a/defs.pxi b/defs.pxi index 69f4adb..86cd72e 100644 --- a/defs.pxi +++ b/defs.pxi @@ -1,31 +1,30 @@ -# -*-pyrex-*- -# -# $Id$ -# -# Basic definitions, used all over -# -# (c) 2005 Straylight/Edgeware -# - -#----- Licensing notice ----------------------------------------------------- -# -# This file is part of the Python interface to mLib. -# -# mLib/Python is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# mLib/Python is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with mLib/Python; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#----- C library ------------------------------------------------------------ +### -*-pyrex-*- +### +### Basic definitions, used all over +### +### (c) 2005 Straylight/Edgeware +### + +###----- Licensing notice --------------------------------------------------- +### +### This file is part of the Python interface to mLib. +### +### mLib/Python is free software; you can redistribute it and/or modify +### it under the terms of the GNU General Public License as published by +### the Free Software Foundation; either version 2 of the License, or +### (at your option) any later version. +### +### mLib/Python is distributed in the hope that it will be useful, +### but WITHOUT ANY WARRANTY; without even the implied warranty of +### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +### GNU General Public License for more details. +### +### You should have received a copy of the GNU General Public License +### along with mLib/Python; if not, write to the Free Software Foundation, +### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +###-------------------------------------------------------------------------- +### C library. cdef extern from 'errno.h': int errno @@ -44,7 +43,8 @@ cdef extern from 'string.h': char *strerror(int err) size_t strlen(char *p) -#----- Unix interface ------------------------------------------------------- +###-------------------------------------------------------------------------- +### Unix interface. cdef extern from 'sys/types.h': pass @@ -54,6 +54,7 @@ cdef extern from 'sys/time.h': int tv_usec cdef extern from 'sys/socket.h': + ctypedef int socklen_t struct sockaddr: int sa_family enum: @@ -84,25 +85,36 @@ cdef extern from 'netdb.h': char *h_addr int h_errno -#----- Python --------------------------------------------------------------- +###-------------------------------------------------------------------------- +### Python. cdef extern from 'Python.h': - object PyString_FromStringAndSize(char *p, int len) - int PyString_AsStringAndSize(obj, char **p, int *len) except -1 - int PyObject_AsReadBuffer(obj, void **buf, int *len) except -1 - int PyObject_TypeCheck(obj, ty) - object PyInt_FromLong(long i) - object PyLong_FromUnsignedLong(unsigned long i) - ctypedef struct PyObject: pass ctypedef struct PyTypeObject: pass + + int PyObject_AsReadBuffer(obj, void **buf, Py_ssize_t *len) except -1 + IF PYVERSION >= (3,): + object PyUnicode_DecodeUTF8Stateful(const char *s, Py_ssize_t sz, + const char *errors, + Py_ssize_t *used_out) + + object PyInt_FromLong(long i) + object PyLong_FromUnsignedLong(unsigned long i) + + void PyErr_Clear() + void Py_INCREF(PyObject *obj) void Py_DECREF(PyObject *obj) -#----- mLib basic stuff ----------------------------------------------------- + PyTypeObject *Py_TYPE(PyObject *obj) + Py_ssize_t Py_SIZE(PyObject *obj) + Py_ssize_t Py_REFCNT(PyObject *obj) + +###-------------------------------------------------------------------------- +### mLib basic stuff. cdef extern from 'mLib/alloc.h': char *xstrdup(char *p) @@ -119,12 +131,14 @@ cdef extern from 'mLib/dstr.h': void DCREATE(dstr *d) void dstr_destroy(dstr *d) -#----- CRC32 ---------------------------------------------------------------- +###-------------------------------------------------------------------------- +### CRC32. cdef extern from 'mLib/crc32.h': - uint32 c_crc32 "crc32" (uint32 a, void *p, int sz) + uint32 _crc32 "crc32" (uint32 a, void *p, int sz) -#----- Universal hashing ---------------------------------------------------- +###-------------------------------------------------------------------------- +### Universal hashing. cdef extern from 'mLib/unihash.h': ctypedef struct unihash_info: @@ -134,7 +148,8 @@ cdef extern from 'mLib/unihash.h': uint32 unihash_hash(unihash_info *i, uint32 a, void *p, int sz) unihash_info unihash_global -#----- Symbol tables -------------------------------------------------------- +###-------------------------------------------------------------------------- +### Symbol tables. cdef extern from 'mLib/sym.h': ctypedef struct sym_table: @@ -152,22 +167,78 @@ cdef extern from 'mLib/sym.h': void sym_mkiter(sym_iter *i, sym_table *t) void *sym_next(sym_iter *i) -#----- String utilities ----------------------------------------------------- +###-------------------------------------------------------------------------- +### String utilities. cdef extern from 'mLib/str.h': enum: STRF_QUOTE + STRF_PREFIX char *str_qword(char **pp, unsigned f) size_t str_qsplit(char *p, char **v, size_t c, char **rest, unsigned f) - int str_match(char *p, char *s) + bint str_matchx(char *p, char *s, unsigned f) void str_sanitize(char *d, char *p, size_t sz) -#----- Atom stuff ----------------------------------------------------------- - -# --- Atoms --- -# -# Partly written in `real' C. - +cdef extern from 'mLib/versioncmp.h': + int _versioncmp "versioncmp" (char *va, char *vb) + +###-------------------------------------------------------------------------- +### Binary encoding functions. + +cdef extern from 'mLib/codec.h': + ctypedef struct codec + ctypedef struct codec_class: + char *name + codec *(*encoder)(unsigned f, char *ind, unsigned max) + codec *(*decoder)(unsigned f) + ctypedef struct codec_ops: + codec_class *c + int (*code)(codec *c, const void *p, size_t, dstr *d) + void (*destroy)(codec *c) + ctypedef struct codec: + codec_ops *ops + enum: + _CDCF_LOWERC "CDCF_LOWERC" + _CDCF_IGNCASE "CDCF_IGNCASE" + _CDCF_NOEQPAD "CDCF_NOEQPAD" + _CDCF_IGNEQPAD "CDCF_IGNEQPAD" + _CDCF_IGNEQMID "CDCF_IGNEQMID" + _CDCF_IGNZPAD "CDCF_IGNZPAD" + _CDCF_IGNNEWL "CDCF_IGNNEWL" + _CDCF_IGNSPC "CDCF_IGNSPC" + _CDCF_IGNINVCH "CDCF_IGNINVCH" + _CDCF_IGNJUNK "CDCF_IGNJUNK" + enum: + _CDCERR_OK "CDCERR_OK" + _CDCERR_INVCH "CDCERR_INVCH" + _CDCERR_INVEQPAD "CDCERR_INVEQPAD" + _CDCERR_INVZPAD "CDCERR_INVZPAD" + char *_codec_strerror "codec_strerror" (int err) + +###-------------------------------------------------------------------------- +### Form-urlencoding functions. + +cdef extern from 'mLib/url.h': + struct url_ectx: + unsigned f + struct url_dctx: + char *p + unsigned f + enum: + URLF_STRICT + URLF_LAX + URLF_SEMI + void url_initenc(url_ectx *ctx) + void url_enc(url_ectx *ctx, dstr *d, char *name, char *value) + void url_initdec(url_dctx *ctx, char *p) + int url_dec(url_dctx *ctx, dstr *n, dstr *v) + +###-------------------------------------------------------------------------- +### Atom stuff. + +## Atoms. +## +## Partly written in `real' C. cdef extern from 'atom.h': ctypedef struct atom: pass @@ -179,13 +250,12 @@ cdef extern from 'atom.h': void atom_mkiter(atom_iter *i, atom_table *t) atom *atom_next(atom_iter *) void atom_pysetup() - atom_pywrap(atom *a) - atom_pyintern(obj) - atom *ATOM_A(obj) + object atom_pywrap(atom *a) + object atom_pyintern(object obj) + atom *ATOM_A(object obj) PyTypeObject atom_pytype -# --- Association tables --- - +## Association tables. cdef extern from 'mLib/assoc.h': ctypedef struct assoc_table: pass @@ -201,20 +271,24 @@ cdef extern from 'mLib/assoc.h': void assoc_mkiter(assoc_iter *i, assoc_table *t) void *assoc_next(assoc_iter *i) -#----- Double-ended arrays -------------------------------------------------- +###-------------------------------------------------------------------------- +### Double-ended arrays. cdef extern from 'array.h': void da_pysetup() PyTypeObject da_pytype PyTypeObject daiter_pytype -#----- Line buffer ---------------------------------------------------------- +###-------------------------------------------------------------------------- +### Line buffer. cdef extern from 'mLib/lbuf.h': cdef struct lbuf: - int f - int delim + unsigned f + unsigned delim + size_t len size_t sz + char *buf enum: LBUF_ENABLE _LBUF_CRLF "LBUF_CRLF" @@ -229,7 +303,8 @@ cdef extern from 'mLib/lbuf.h': void (*func)(char *s, size_t len, void *arg), void *arg) void lbuf_destroy(lbuf *b) -#----- Packet buffer -------------------------------------------------------- +###-------------------------------------------------------------------------- +### Packet buffer. cdef extern from 'mLib/pkbuf.h': ctypedef struct pkbuf: @@ -247,10 +322,10 @@ cdef extern from 'mLib/pkbuf.h': void *arg) void pkbuf_destroy(pkbuf *b) -#----- Select stuff --------------------------------------------------------- - -# --- Basics --- +###-------------------------------------------------------------------------- +### Select stuff. +## Basics. cdef extern from 'mLib/sel.h': ctypedef struct sel_state: pass @@ -275,8 +350,7 @@ cdef extern from 'mLib/sel.h': void sel_rmtimer(sel_timer *t) int sel_select(sel_state *s) except * -# --- Non-blocking connection --- - +### Non-blocking connection. cdef extern from 'mLib/conn.h': ctypedef struct conn: pass @@ -284,8 +358,7 @@ cdef extern from 'mLib/conn.h': void (*func)(int fd, void *arg), void *arg) void conn_kill(conn *c) -# --- Background name resolver --- - +## Background name resolver. cdef extern from 'mLib/bres.h': ctypedef struct bres_client: pass @@ -297,8 +370,7 @@ cdef extern from 'mLib/bres.h': void bres_exec(char *null) void bres_init(sel_state *s) -# --- In-band signal handling --- - +## In-band signal handling. cdef extern from 'mLib/sig.h': ctypedef struct sig: pass @@ -306,8 +378,7 @@ cdef extern from 'mLib/sig.h': void sig_remove(sig *s) void sig_init(sel_state *s) -# --- Line buffer --- - +## Line buffer. cdef extern from 'mLib/selbuf.h': ctypedef struct selbuf: sel_file reader @@ -319,8 +390,7 @@ cdef extern from 'mLib/selbuf.h': void (*func)(char *s, size_t len, void *arg), void *arg) void selbuf_destroy(selbuf *b) -# --- Packet buffer --- - +## Packet buffer. cdef extern from 'mLib/selpk.h': ctypedef struct selpk: sel_file reader @@ -334,8 +404,7 @@ cdef extern from 'mLib/selpk.h': void *arg) void selpk_destroy(selpk *b) -# --- Ident client --- - +## Ident client. cdef extern from 'mLib/ident.h': ctypedef struct ident_request: pass @@ -360,17 +429,64 @@ cdef extern from 'mLib/ident.h': void *arg) void ident_abort(ident_request *rq) -#----- Error reporting ------------------------------------------------------ +###-------------------------------------------------------------------------- +### Error reporting. cdef extern from 'mLib/quis.h': void _ego "ego"(char *prog) char *_quis "quis"() + cdef extern from 'mLib/report.h': void _moan "moan"(char *f, char *msg) -#----- Internal utilities --------------------------------------------------- +###-------------------------------------------------------------------------- +### File comparison. + +cdef extern from 'mLib/fwatch.h': + ctypedef struct fwatch: + pass + void fwatch_init(fwatch *f, char *name) + void fwatch_initfd(fwatch *f, int fd) + bint fwatch_update(fwatch *f, char *name) + bint fwatch_updatefd(fwatch *f, int fd) + +###-------------------------------------------------------------------------- +### File descriptor hacking. + +cdef extern from 'mLib/fdflags.h': + int _fdflags "fdflags"(int fd, + unsigned fbic, unsigned fxor, + unsigned fdbic, unsigned fdxor) + +cdef extern from 'mLib/fdpass.h': + int fdpass_send(int sock, int fd, void *p, size_t sz) + int fdpass_recv(int sock, int *fd, void *p, size_t sz) + +cdef extern from 'mLib/mdup.h': + ctypedef struct mdup_fd: + int cur + int want + int _mdup "mdup"(mdup_fd *v, size_t n) + +###-------------------------------------------------------------------------- +### Daemon utilities. + +cdef extern from 'mLib/daemonize.h': + int _daemonize "daemonize"() + void _detachtty "detachtty"() + +###-------------------------------------------------------------------------- +### Internal utilities. cdef extern from 'grim.h': int PSIZEOF(void *x) - -#----- That's all, folks ---------------------------------------------------- + object BIN_FROMSTRLEN(const void *p, Py_ssize_t sz) + void *BIN_PTR(object bin) + void BIN_SETLEN(object bin, Py_ssize_t sz) + int TEXT_CHECK(object p) + char *TEXT_PTR(str s) + void TEXT_PTRLEN(str s, const char **p, Py_ssize_t *sz) + str TEXT_FROMSTR(const char *p) + str TEXT_FROMSTRLEN(const char *p, Py_ssize_t sz) + +###----- That's all, folks --------------------------------------------------