diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-10-26 23:40:33 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-10-26 23:40:33 +0000 |
commit | e2cb50af45be6683d02ab48a6648816ee3d52ab1 (patch) | |
tree | d60faac9acd5caa0810be2beea5b9952faf0a88e /source/lib/slprintf.c | |
parent | fae161b9051c3ea8aa129bdb3df11d215007723d (diff) | |
download | samba-e2cb50af45be6683d02ab48a6648816ee3d52ab1.tar.gz samba-e2cb50af45be6683d02ab48a6648816ee3d52ab1.tar.xz samba-e2cb50af45be6683d02ab48a6648816ee3d52ab1.zip |
added a vsnprintf() implementation from cvslock. See the notes on the
license at the top of lib/snprintf.c
I've always been slightly uneasy about our half-baked vslprintf()
implementation and the risks on platforms that don't have vsnprintf()
so when I saw this code in another GPLd package I wanted it for Samba.
Diffstat (limited to 'source/lib/slprintf.c')
-rw-r--r-- | source/lib/slprintf.c | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/source/lib/slprintf.c b/source/lib/slprintf.c index acdcfee38fd..a755bf1bc58 100644 --- a/source/lib/slprintf.c +++ b/source/lib/slprintf.c @@ -29,7 +29,6 @@ extern int DEBUGLEVEL; pass 1023 for n */ int vslprintf(char *str, int n, char *format, va_list ap) { -#ifdef HAVE_VSNPRINTF int ret = vsnprintf(str, n, format, ap); if (ret > n || ret < 0) { str[n] = 0; @@ -37,50 +36,6 @@ int vslprintf(char *str, int n, char *format, va_list ap) } str[ret] = 0; return ret; -#else - static char *buf; - static int len=8000; - int ret; - - /* this code is NOT a proper vsnprintf() implementation. It - relies on the fact that all calls to slprintf() in Samba - pass strings which have already been through pstrcpy() or - fstrcpy() and never more than 2 strings are - concatenated. This means the above buffer is absolutely - ample and can never be overflowed. - - In the future we would like to replace this with a proper - vsnprintf() implementation but right now we need a solution - that is secure and portable. This is it. */ - - if (!buf) { - buf = malloc(len); - if (!buf) { - /* can't call debug or we would recurse */ - exit(1); - } - } - - vsprintf(buf, format, ap); - ret = strlen(buf); - - if (ret < 0) { - str[0] = 0; - return -1; - } - - if (ret < n) { - n = ret; - } else if (ret > n) { - ret = -1; - } - - buf[n] = 0; - - memcpy(str, buf, n+1); - - return ret; -#endif } #ifdef HAVE_STDARG_H |