X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Futils.h;h=2de1df6b68edae85f8c1e8b0d8c313e09cda41e0;hb=0b6f220fc8ac58b6404e2d45eed52629d549860f;hp=d74d09d84d26f20388b6ef091dc194276b30e4a8;hpb=f0bbedf750f1530ec05bf2b8122479c924bbf2fe;p=ashd.git diff --git a/lib/utils.h b/lib/utils.h index d74d09d..2de1df6 100644 --- a/lib/utils.h +++ b/lib/utils.h @@ -1,14 +1,20 @@ #ifndef _UTILS_H #define _UTILS_H +#include +#include + +#define max(a, b) (((b) > (a))?(b):(a)) +#define min(a, b) (((b) < (a))?(b):(a)) + #define smalloc(size) ({void *__result__; ((__result__ = malloc(size)) == NULL)?({exit(-1); (void *)0;}):__result__;}) #define srealloc(ptr, size) ({void *__result__; ((__result__ = realloc((ptr), (size))) == NULL)?({exit(-1); (void *)0;}):__result__;}) #define szmalloc(size) memset(smalloc(size), 0, size) -#define sstrdup(str) ({char *__strbuf__ = (str); strcpy(smalloc(strlen(__strbuf__) + 1), __strbuf__);}) +#define sstrdup(str) ({const char *__strbuf__ = (str); strcpy(smalloc(strlen(__strbuf__) + 1), __strbuf__);}) #define omalloc(o) ((o) = szmalloc(sizeof(*(o)))) #define bufinit(buf) memset(&(buf), 0, sizeof(buf)) -#define buffree(buf) do { if((buf).b != NULL) {free((buf).b);} } while(0) +#define buffree(buf) do { if((buf).b != NULL) {free((buf).b);} bufinit(buf); } while(0) #define sizebuf(buf, wanted) (_sizebuf((struct buffer *)&(buf), (wanted), sizeof(*((buf).b)))) #define bufadd(buf, new) \ do { \ @@ -23,12 +29,19 @@ do { \ memcpy((buf).b + (buf).d, (new), (__bufcat_size__) * sizeof(*((buf).b))); \ (buf).d += __bufcat_size__; \ } while(0) -#define bufcatstr2(buf, str) \ +#define bufcatstr(buf, str) \ do { \ char *__buf__; \ __buf__ = (str); \ bufcat((buf), __buf__, strlen(__buf__)); \ } while(0) +#define bufcatstr2(buf, str) \ +do { \ + char *__buf__; \ + __buf__ = (str); \ + bufcat((buf), __buf__, strlen(__buf__) + 1); \ +} while(0) +#define bufeat(buf, len) memmove((buf).b, (buf).b + (len), (buf).d -= (len)) struct buffer { void *b; @@ -47,6 +60,29 @@ struct charvbuf { size_t s, d; }; +struct btree { + struct btree *l, *r; + int h; + void *d; +}; + void _sizebuf(struct buffer *buf, size_t wanted, size_t el); +char *decstr(char **p, size_t *len); +char *vsprintf2(char *format, va_list al); +char *sprintf2(char *format, ...); +char *sprintf3(char *format, ...); +off_t atoo(char *n); +char **tokenize(char *src); +void freeca(char **ca); +int calen(char **a); +void bvprintf(struct charbuf *buf, char *format, va_list al); +void bprintf(struct charbuf *buf, char *format, ...); +void replstr(char **p, char *n); +char *base64encode(char *data, size_t datalen); +char *base64decode(char *data, size_t *datalen); +int bbtreedel(struct btree **tree, void *item, int (*cmp)(void *, void *)); +void freebtree(struct btree **tree, void (*ffunc)(void *)); +int bbtreeput(struct btree **tree, void *item, int (*cmp)(void *, void *)); +void *btreeget(struct btree *tree, void *key, int (*cmp)(void *, void *)); #endif