X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib-python/blobdiff_plain/b51b6cf0b65c84c7b9e130719beede595cc1bfbd..HEAD:/defs.pxi diff --git a/defs.pxi b/defs.pxi index 10502f7..b14b855 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 @@ -42,8 +41,10 @@ cdef extern from 'stddef.h': cdef extern from 'string.h': void memcpy(void *p, void *q, size_t n) char *strerror(int err) + size_t strlen(char *p) -#----- Unix interface ------------------------------------------------------- +###-------------------------------------------------------------------------- +### Unix interface. cdef extern from 'sys/types.h': pass @@ -53,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: @@ -83,25 +85,30 @@ 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 + + object PyString_FromStringAndSize(char *p, Py_ssize_t len) + int PyString_AsStringAndSize(obj, char **p, Py_ssize_t *len) except -1 + int PyObject_AsReadBuffer(obj, void **buf, Py_ssize_t *len) except -1 + object PyInt_FromLong(long i) + object PyLong_FromUnsignedLong(unsigned long i) + char *PyString_AS_STRING(string) + int _PyString_Resize(PyObject **string, int size) except -1 + void PyErr_Clear() + void Py_INCREF(PyObject *obj) void Py_DECREF(PyObject *obj) -#----- mLib basic stuff ----------------------------------------------------- +###-------------------------------------------------------------------------- +### mLib basic stuff. cdef extern from 'mLib/alloc.h': char *xstrdup(char *p) @@ -118,12 +125,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) -#----- Universal hashing ---------------------------------------------------- +###-------------------------------------------------------------------------- +### Universal hashing. cdef extern from 'mLib/unihash.h': ctypedef struct unihash_info: @@ -133,7 +142,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: @@ -151,12 +161,45 @@ cdef extern from 'mLib/sym.h': void sym_mkiter(sym_iter *i, sym_table *t) void *sym_next(sym_iter *i) -#----- Atom stuff ----------------------------------------------------------- - -# --- Atoms --- -# -# Partly written in `real' C. +###-------------------------------------------------------------------------- +### 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_matchx(char *p, char *s, unsigned f) + void str_sanitize(char *d, char *p, size_t sz) + +cdef extern from 'mLib/versioncmp.h': + int _versioncmp "versioncmp"(char *va, char *vb) + +###-------------------------------------------------------------------------- +### 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 @@ -173,8 +216,7 @@ cdef extern from 'atom.h': atom *ATOM_A(obj) PyTypeObject atom_pytype -# --- Association tables --- - +## Association tables. cdef extern from 'mLib/assoc.h': ctypedef struct assoc_table: pass @@ -190,14 +232,16 @@ 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: @@ -218,7 +262,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: @@ -236,10 +281,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 @@ -264,8 +309,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 @@ -273,8 +317,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 @@ -286,8 +329,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 @@ -295,8 +337,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 @@ -308,8 +349,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 @@ -323,8 +363,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 @@ -349,17 +388,57 @@ 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) + int fwatch_update(fwatch *f, char *name) + int 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) + ctypedef void *cvp -#----- That's all, folks ---------------------------------------------------- +###----- That's all, folks --------------------------------------------------