From 25c57a0b1b6e251acb7f911a3a2917003b4aa22b Mon Sep 17 00:00:00 2001 From: leitner Date: Fri, 14 Oct 2005 15:33:21 +0000 Subject: [PATCH] implement Nikola's idea to remove limit number of strings in errmsg --- CHANGES | 1 + buffer/errmsg_cvt.c | 39 ----------------------------------- buffer/errmsg_info.c | 27 ++---------------------- buffer/errmsg_infosys.c | 6 ++---- buffer/errmsg_puts.c | 41 +++++++++++++++++++++++++++++++++++++ buffer/errmsg_warn.c | 27 ++---------------------- buffer/errmsg_warnsys.c | 6 ++---- buffer/errmsg_write.c | 20 ++++++++++++++++++ buffer/errmsg_writesys.c | 44 ---------------------------------------- t.c | 2 +- 10 files changed, 71 insertions(+), 142 deletions(-) delete mode 100644 buffer/errmsg_cvt.c create mode 100644 buffer/errmsg_puts.c create mode 100644 buffer/errmsg_write.c delete mode 100644 buffer/errmsg_writesys.c diff --git a/CHANGES b/CHANGES index 32bb06a..289d75d 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,7 @@ further Windoze support (test/io5.c works, gatling still doesn't) This is just to get gatling to work, I may remove it again after that. + implement Nikola's idea to remove limit number of strings in errmsg 0.24: fix scan_to_sa (Tim Lorenz) diff --git a/buffer/errmsg_cvt.c b/buffer/errmsg_cvt.c deleted file mode 100644 index be350cf..0000000 --- a/buffer/errmsg_cvt.c +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include -#ifdef __MINGW32__ -#include "windows.h" - -struct iovec { - LPCVOID iov_base; - DWORD iov_len; -}; -#else -#include -#endif -#include "errmsg.h" -#include "str.h" - -/* the people who defined stdarg.h need to be taken behind the barn and shot */ -int errmsg_cvt(struct iovec* x,const char* message, va_list a) { - int i,j; - j=0; - if (argv0) { - x[0].iov_base=(char*)argv0; - x[0].iov_len=str_len(argv0); - x[1].iov_base=": "; - x[1].iov_len=2; - j=2; - } - x[j].iov_base=(char*)message; x[j].iov_len=str_len(message); ++j; - - for (i=0; j<22; ++i) { - const char* t=va_arg(a,const char*); - if (!t) break; - x[j].iov_base=(char*)t; - x[j].iov_len=str_len(t); - ++j; - } - x[j].iov_base="\n"; - x[j].iov_len=1; - return j+1; -} diff --git a/buffer/errmsg_info.c b/buffer/errmsg_info.c index b2a4c8e..d0f8487 100644 --- a/buffer/errmsg_info.c +++ b/buffer/errmsg_info.c @@ -1,34 +1,11 @@ #include #include -#ifdef __MINGW32__ -#include "windows.h" -#include - -struct iovec { - LPCVOID iov_base; - DWORD iov_len; -}; -#else -#include -#endif #include "errmsg.h" +#include "errmsg_int.h" #include "str.h" -extern int errmsg_cvt(struct iovec* x,const char* message, va_list a); - void errmsg_info(const char* message, ...) { - struct iovec x[23]; va_list a; va_start(a,message); -#ifdef __MINGW32__ - { - int i,j; - j=errmsg_cvt(x,message,a); - for (i=0; i #include #include "errmsg.h" +#include "errmsg_int.h" #include "str.h" #include #include -extern void errmsg_writesys(int fd,const char* message,va_list list); - void errmsg_infosys(const char* message, ...) { va_list a; va_start(a,message); - errmsg_writesys(1,message,a); - va_end(a); + errmsg_write(1,strerror(errno),message,a); } diff --git a/buffer/errmsg_puts.c b/buffer/errmsg_puts.c new file mode 100644 index 0000000..7b24a6d --- /dev/null +++ b/buffer/errmsg_puts.c @@ -0,0 +1,41 @@ +#include "errmsg.h" +#include "errmsg_int.h" +#include + +#ifdef __MINGW32__ + +void errmsg_puts(int fd,const char* s) { + return write(fd,s,str_len(s)); +} + +void errmsg_flush(int fd) { + return 0; +} + +#else +#include + +enum { COUNT=25 }; +static struct iovec x[COUNT]; +static int l; + +void errmsg_puts(int fd,const char* s) { + x[l].iov_base=(char*)s; + x[l].iov_len=str_len(s); + if (++l==COUNT) errmsg_flush(fd); +} + +void errmsg_flush(int fd) { + int n=l; + l=0; + if (n) writev(fd,x,n); +} +#endif + +void errmsg_start(int fd) { + if (argv0) { + errmsg_puts(fd,argv0); + errmsg_puts(fd,": "); + } +} + diff --git a/buffer/errmsg_warn.c b/buffer/errmsg_warn.c index 5fc7ce5..590e0ba 100644 --- a/buffer/errmsg_warn.c +++ b/buffer/errmsg_warn.c @@ -1,34 +1,11 @@ #include #include -#ifdef __MINGW32__ -#include "windows.h" -#include - -struct iovec { - LPCVOID iov_base; - DWORD iov_len; -}; -#else -#include -#endif #include "errmsg.h" +#include "errmsg_int.h" #include "str.h" -extern int errmsg_cvt(struct iovec* x,const char* message, va_list a); - void errmsg_warn(const char* message, ...) { - struct iovec x[23]; va_list a; va_start(a,message); -#ifdef __MINGW32__ - { - int i,j; - j=errmsg_cvt(x,message,a); - for (i=0; i #include #include "errmsg.h" +#include "errmsg_int.h" #include "str.h" #include #include -extern void errmsg_writesys(int fd,const char* message,va_list list); - void errmsg_warnsys(const char* message, ...) { va_list a; va_start(a,message); - errmsg_writesys(2,message,a); - va_end(a); + errmsg_write(2,strerror(errno),message,a); } diff --git a/buffer/errmsg_write.c b/buffer/errmsg_write.c new file mode 100644 index 0000000..5f58d1a --- /dev/null +++ b/buffer/errmsg_write.c @@ -0,0 +1,20 @@ +#include +#include "errmsg.h" +#include "errmsg_int.h" + +void errmsg_write(int fd,const char* err,const char* message,va_list list) { + errmsg_start(fd); + errmsg_puts(fd,message); + for (;;) { + const char* s=va_arg(list,const char*); + if (!s) break; + errmsg_puts(fd,s); + } + va_end(list); + if (err) { + errmsg_puts(fd,": "); + errmsg_puts(fd,err); + } + errmsg_puts(fd,"\n"); + errmsg_flush(fd); +} diff --git a/buffer/errmsg_writesys.c b/buffer/errmsg_writesys.c deleted file mode 100644 index ddcdf04..0000000 --- a/buffer/errmsg_writesys.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#ifdef __MINGW32__ -#include "windows.h" -#include - -struct iovec { - LPCVOID iov_base; - DWORD iov_len; -}; -#else -#include -#endif -#include "errmsg.h" -#include "str.h" -#include -#include - -extern int errmsg_cvt(struct iovec* x,const char* message, va_list a); - -void errmsg_writesys(int fd,const char* message,va_list list) { - struct iovec x[25]; - int i; - i=errmsg_cvt(x,message,list); - - x[i-1].iov_base=": "; - x[i-1].iov_len=2; - - x[i].iov_base=strerror(errno); - x[i].iov_len=str_len(x[i].iov_base); - - x[i+1].iov_base="\n"; - x[i+1].iov_len=1; - -#ifdef __MINGW32__ - { - int j; - for (j=0; j