00001 #ifndef _UTILS_H_
00002 #define _UTILS_H_
00003 #include <regex.h>
00004 #include <stdio.h>
00005 #include <stdarg.h>
00006
00007 typedef enum {
00008 PUL_ERR = 1,
00009 PUL_CRIT,
00010 PUL_WARN,
00011 PUL_INFO,
00012 PUL_DEBUG,
00013 PUL_VERB
00014 } pu_log_level_t;
00015
00016 int pasprintf(char **ret, const char *fmt, ...);
00017 int pvasprintf(char **ret, const char *fmt, va_list ap);
00018
00019 int pd_getline(char *buf, unsigned int bufsize, int *bufcur, int *buflen,
00020 int(*readfunc)(int, void *, unsigned int, char *errdesc, int errlen),
00021 int(*closefunc)(int, char *errdesc, int errlen), int readfd,
00022 char **line, char *errdesc, int errlen);
00023
00024
00025 int getmatchsub(const char *line, char **subp, const regmatch_t pmatch[],
00026 int n);
00027 int stream_server_accept(int port, void(*clfunc)(int fd, const char *addr,
00028 int port), char *errdesc, int errlen);
00029 int CCONV stream_server_connect(const char *dest, const char *svcname,
00030 int *fdp, int *cancelSocket, char *errdesc, int errdesclen);
00031
00032 int pu_write(int fd, const void *buf, unsigned int len, char *errdesc,
00033 int edlen);
00034 int pu_read(int fd, void *buf, unsigned int len, char *errdesc, int edlen);
00035 int pu_close(int fd, char *errdesc, int edlen);
00036 extern int logging_enabled;
00037 void pu_log_stream(FILE *);
00038 void pu_log(pu_log_level_t l, int s, const char *fmt, ...);
00039 int escape(const char *src, unsigned int srclen, char **dstp);
00040 int escape2(const char *src, unsigned int slen, char **dstp, int escbacks);
00041 int unescape(const char *src, char **dstp, unsigned int *dstlenp);
00042 int cancelConnect(int cancelSocket);
00043
00044 int byteArrayToString(unsigned char *bytes, int length, char *string);
00045 int stringToByteArray(char *string, unsigned char *bytes, int *length);
00046 int wordArrayToString(int *words, int length, char *string);
00047 int stringToWordArray(char *string, int *words, int *length);
00048
00049 #endif