diff options
author | June McEnroe <june@causal.agency> | 2020-10-29 11:34:56 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-10-29 11:35:34 -0400 |
commit | f17f882b5e748c71d9365d8769711d8ff8af015f (patch) | |
tree | 9eadef4e8d2cf8eb2bc010b0edd2a506e4f12286 /compat.c | |
parent | Refactor IMAP struct (diff) | |
download | imbox-f17f882b5e748c71d9365d8769711d8ff8af015f.tar.gz imbox-f17f882b5e748c71d9365d8769711d8ff8af015f.zip |
Rewrite compat and add configure script
Diffstat (limited to '')
-rw-r--r-- | compat.c (renamed from compat.h) | 73 |
1 files changed, 30 insertions, 43 deletions
diff --git a/compat.h b/compat.c index a40b732..347536d 100644 --- a/compat.h +++ b/compat.c @@ -25,20 +25,13 @@ * covered work. */ -#ifdef __linux__ - -#define _GNU_SOURCE - #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> -#define NO_READPASSPHRASE_H -#define RPP_STDIN 1 -static inline char * -readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags) { +char *readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags) { if (flags) { if (!fgets(buf, bufsiz, stdin)) return NULL; return strsep(&buf, "\n"); @@ -46,57 +39,51 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags) { return getpass(prompt); } -typedef int _readfn(void *, char *, int); -typedef int _writefn(void *, const char *, int); -typedef fpos_t _seekfn(void *, fpos_t, int); -typedef int _closefn(void *); +typedef int Read(void *, char *, int); +typedef int Write(void *, const char *, int); +typedef fpos_t Seek(void *, fpos_t, int); +typedef int Close(void *); -struct _funopen { +struct Funopen { void *cookie; - _readfn *readfn; - _writefn *writefn; - _closefn *closefn; + Read *readfn; + Write *writefn; + Close *closefn; }; -static inline ssize_t -_cookie_read(void *cookie, char *buf, size_t size) { - struct _funopen *funopen = cookie; - assert((size_t)(int)size == size); +static ssize_t cookieRead(void *cookie, char *buf, size_t size) { + struct Funopen *funopen = cookie; return funopen->readfn(funopen->cookie, buf, size); } -static inline ssize_t -_cookie_write(void *cookie, const char *buf, size_t size) { - struct _funopen *funopen = cookie; - assert((size_t)(int)size == size); +static ssize_t cookieWrite(void *cookie, const char *buf, size_t size) { + struct Funopen *funopen = cookie; return funopen->writefn(funopen->cookie, buf, size); } -static inline int -_cookie_close(void *cookie) { - struct _funopen *funopen = cookie; - int ret = (funopen->closefn ? funopen->closefn(funopen->cookie) : 0); +static int cookieClose(void *cookie) { + struct Funopen *funopen = cookie; + int ret = 0; + if (funopen->closefn) ret = funopen->closefn(funopen->cookie); free(cookie); return ret; } -static const cookie_io_functions_t _cookie_fns = { - .read = _cookie_read, - .write = _cookie_write, - .close = _cookie_close, -}; - -static inline FILE * -funopen( +FILE *funopen( const void *cookie, - _readfn *readfn, _writefn *writefn, _seekfn *seekfn, _closefn *closefn + Read *readfn, Write *writefn, Seek *seekfn, Close *closefn ) { - struct _funopen *funopen = malloc(sizeof(*funopen)); + struct Funopen *funopen = malloc(sizeof(*funopen)); if (!funopen) return NULL; + funopen->cookie = (void *)cookie; + funopen->readfn = readfn; + funopen->writefn = writefn; assert(!seekfn); - *funopen = (struct _funopen) { (void *)cookie, readfn, writefn, closefn }; - const char *mode = (!readfn ? "w" : !writefn ? "r" : "r+"); - return fopencookie(funopen, mode, _cookie_fns); + funopen->closefn = closefn; + cookie_io_functions_t fns = { + .read = (readfn ? cookieRead : NULL), + .write = (writefn ? cookieWrite : NULL), + .close = cookieClose, + }; + return fopencookie(funopen, (!readfn ? "w" : !writefn ? "r" : "r+"), fns); } - -#endif /* __linux__ */ |