00001 #ifndef IO_BUF__OBUF__H__ 00002 #define IO_BUF__OBUF__H__ 00003 00004 #include <stdarg.h> 00005 #include <iobuf/common.h> 00006 00017 typedef int (*obuf_fn)(int, const void*, unsigned long); 00018 00020 struct obuf 00021 { 00023 iobuf io; 00025 unsigned bufpos; 00027 unsigned count; 00029 obuf_fn writefn; 00030 }; 00032 typedef struct obuf obuf; 00033 00034 extern obuf outbuf; 00035 extern obuf errbuf; 00036 00037 extern const char obuf_dec_digits[10]; 00038 extern const char obuf_hex_lcase_digits[16]; 00039 extern const char obuf_hex_ucase_digits[16]; 00040 00042 #define OBUF_CREATE O_CREAT 00043 00044 #define OBUF_EXCLUSIVE O_EXCL 00045 00046 #define OBUF_TRUNCATE O_TRUNC 00047 00048 #define OBUF_APPEND O_APPEND 00049 00050 int obuf_init(obuf* out, int fd, obuf_fn fn, unsigned flags, unsigned bufsize); 00051 int obuf_open(obuf* out, const char* filename, int oflags, int mode, unsigned bufsize); 00052 int obuf_close(obuf* out); 00054 #define obuf_error(out) iobuf_error(&(out)->io) 00055 00056 #define obuf_closed(out) iobuf_closed(&(out)->io) 00057 00058 #define obuf_timedout(out) iobuf_timedout(&((out)->io)) 00059 int obuf_flush(obuf* out); 00060 int obuf_sync(obuf* out); 00061 int obuf_write_large(obuf* out, const char* data, unsigned datalen); 00062 int obuf_write(obuf* out, const char* data, unsigned datalen); 00063 int obuf_seek(obuf* out, unsigned offset); 00065 #define obuf_rewind(out) obuf_seek(out,0) 00066 00067 #define obuf_tell(out) ((out)->io.offset+(out)->bufpos) 00068 00069 int obuf_pad(obuf* out, unsigned width, char ch); 00070 int obuf_endl(obuf* out); 00071 int obuf_putc(obuf* out, char ch); 00073 #define obuf_puts(out,str) obuf_write(out,str,strlen(str)) 00074 int obuf_put2s(obuf* out, const char* s1, const char* s2); 00075 int obuf_put3s(obuf* out, const char* s1, const char* s2, const char* s3); 00076 int obuf_put4s(obuf* out, const char* s1, const char* s2, const char* s3, 00077 const char* s4); 00078 int obuf_put5s(obuf* out, const char* s1, const char* s2, const char* s3, 00079 const char* s4, const char* s5); 00080 int obuf_put6s(obuf* out, const char* s1, const char* s2, const char* s3, 00081 const char* s4, const char* s5, const char* s6); 00082 int obuf_put7s(obuf* out, const char* s1, const char* s2, const char* s3, 00083 const char* s4, const char* s5, const char* s6, const char* s7); 00084 int obuf_putns(obuf* out, unsigned int count, ...); 00085 int obuf_putf(obuf* out, const char* format, ...); 00086 int obuf_putfv(obuf* out, const char* format, va_list ap); 00088 #define obuf_putstr(out,str) obuf_write(out,(str)->s,(str)->len) 00089 int obuf_putsflush(obuf* out, const char* s); 00090 int obuf_puti(obuf* out, long data); 00091 int obuf_putiw(obuf* out, long data, unsigned width, char pad); 00092 int obuf_putu(obuf* out, unsigned long data); 00093 int obuf_putuw(obuf* out, unsigned long data, unsigned width, char pad); 00094 int obuf_putill(obuf* out, long long data); 00095 int obuf_putiwll(obuf* out, long long data, unsigned width, char pad); 00096 int obuf_putull(obuf* out, unsigned long long data); 00097 int obuf_putuwll(obuf* out, unsigned long long data, unsigned width, char pad); 00098 int obuf_putx(obuf* out, unsigned long data); 00099 int obuf_putxw(obuf* out, unsigned long data, unsigned width, char pad); 00100 int obuf_putX(obuf* out, unsigned long data); 00101 int obuf_putXw(obuf* out, unsigned long data, unsigned width, char pad); 00102 int obuf_putxll(obuf* out, unsigned long long data); 00103 int obuf_putxwll(obuf* out, unsigned long long data, unsigned width, char pad); 00104 int obuf_putXll(obuf* out, unsigned long long data); 00105 int obuf_putXwll(obuf* out, unsigned long long data, unsigned width, char pad); 00106 int obuf_putsnumw(obuf* out, long num, unsigned width, char pad, 00107 unsigned base, const char* digits); 00108 int obuf_putunumw(obuf* out, unsigned long num, unsigned width, char pad, 00109 unsigned base, const char* digits); 00110 int obuf_putsllnumw(obuf* out, long long num, unsigned width, char pad, 00111 unsigned base, const char* digits); 00112 int obuf_putullnumw(obuf* out, unsigned long long num, unsigned width, char pad, 00113 unsigned base, const char* digits); 00114 int obuf_putnetstring(obuf* out, const char* data, unsigned datalen); 00115 int obuf_sign_pad(obuf* out, int sign, unsigned width, char pad); 00118 #endif