summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2007-03-07 10:00:14 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:49:21 -0500
commit793db3bc5073083e223d084437c6e751d422416d (patch)
tree3ea2e4896e4e1b7e2b7d76f1632434f7a51b4cc2
parent41a72a506fce51737992c8ea3201ef35dcafd73a (diff)
downloadsamba-793db3bc5073083e223d084437c6e751d422416d.tar.gz
samba-793db3bc5073083e223d084437c6e751d422416d.tar.bz2
samba-793db3bc5073083e223d084437c6e751d422416d.zip
r21740: this fixes the real cause of the large log files we had. The problem
was we were not checking the result of a convert_string() call, and it was giving -1. We then passed -1 to fwrite() on stdout, which on aix and macosx wrote all of available memory to stdout :) To fix this, replace non-printing chars with ? in d_printf if the string cannot be converted (This used to be commit d20102d363f4b9214e29296ad8ec45c8d95614b5)
-rw-r--r--source4/lib/util/dprintf.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/source4/lib/util/dprintf.c b/source4/lib/util/dprintf.c
index 79b90ec3e1..209fb8da36 100644
--- a/source4/lib/util/dprintf.c
+++ b/source4/lib/util/dprintf.c
@@ -30,6 +30,7 @@
*/
#include "includes.h"
+#include "system/locale.h"
_PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) _PRINTF_ATTRIBUTE(2,0)
{
@@ -54,6 +55,22 @@ again:
return -1;
}
clen = convert_string(CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen);
+ if (clen == -1) {
+ /* the string can't be converted - do the best we can,
+ filling in non-printing chars with '?' */
+ int i;
+ for (i=0;i<ret;i++) {
+ if (isprint(p[i]) || isspace(p[i])) {
+ fwrite(p+i, 1, 1, f);
+ } else {
+ fwrite("?", 1, 1, f);
+ }
+ }
+ SAFE_FREE(p);
+ SAFE_FREE(p2);
+ return ret;
+ }
+
if (clen >= maxlen) {
/* it didn't fit - try a larger buffer */