svn commit: samba r21740 - in branches/SAMBA_4_0/source/lib/util: .

tridge at samba.org tridge at samba.org
Wed Mar 7 10:00:15 GMT 2007


Author: tridge
Date: 2007-03-07 10:00:14 +0000 (Wed, 07 Mar 2007)
New Revision: 21740

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21740

Log:

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

Modified:
   branches/SAMBA_4_0/source/lib/util/dprintf.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/util/dprintf.c
===================================================================
--- branches/SAMBA_4_0/source/lib/util/dprintf.c	2007-03-07 05:29:12 UTC (rev 21739)
+++ branches/SAMBA_4_0/source/lib/util/dprintf.c	2007-03-07 10:00:14 UTC (rev 21740)
@@ -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,7 +55,23 @@
 		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 */
 		maxlen *= 2;



More information about the samba-cvs mailing list