Browse code

fix bug and improve string handling

git-svn: trunk@1874

Tomasz Kojm authored on 2006/03/26 05:33:29
Showing 2 changed files
... ...
@@ -1,3 +1,8 @@
1
+Sat Mar 25 21:29:25 CET 2006 (tk)
2
+---------------------------------
3
+  * shared/output.c: fix bug reported by Alch <alch*users.sourceforge.net>
4
+		     and improve string handling
5
+
1 6
 Sat Mar 25 17:35:30 CET 2006 (tk)
2 7
 ---------------------------------
3 8
   * sigtool/sigtool.c: fix possible crash in build(), thanks to Sven
... ...
@@ -208,31 +208,21 @@ int logg(const char *str, ...)
208 208
 
209 209
 #if defined(USE_SYSLOG) && !defined(C_AIX)
210 210
     if(logg_syslog) {
211
-
212
-	/* due to a problem with superfluous control characters (which
213
-	 * vsnprintf() handles correctly) in (v)syslog we have to remove
214
-	 * them in a final string
215
-	 *
216
-	 * FIXME: substitute %% instead of _
217
-	 */
218 211
         _(str);
219 212
 	vsnprintf(vbuff, 1024, str, argscpy);
220 213
 	vbuff[1024] = 0;
221 214
 
222
-	while((pt = strchr(vbuff, '%')))
223
-	    *pt = '_';
224
-
225 215
 	if(vbuff[0] == '!') {
226
-	    syslog(LOG_ERR, vbuff + 1);
216
+	    syslog(LOG_ERR, "%s", vbuff + 1);
227 217
 	} else if(vbuff[0] == '^') {
228
-	    syslog(LOG_WARNING, vbuff + 1);
218
+	    syslog(LOG_WARNING, "%s", vbuff + 1);
229 219
 	} else if(vbuff[0] == '*') {
230 220
 	    if(logg_verbose) {
231
-		syslog(LOG_DEBUG, vbuff + 1);
221
+		syslog(LOG_DEBUG, "%s", vbuff + 1);
232 222
 	    }
233 223
 	} else if(vbuff[0] == '#') {
234
-	    syslog(LOG_INFO, vbuff + 1);
235
-	} else syslog(LOG_INFO, vbuff);
224
+	    syslog(LOG_INFO, "%s", vbuff + 1);
225
+	} else syslog(LOG_INFO, "%s", vbuff);
236 226
 
237 227
     }
238 228
 #endif
... ...
@@ -242,7 +232,7 @@ int logg(const char *str, ...)
242 242
         vsnprintf(vbuff, 1024, str, argsout);
243 243
 	vbuff[1024] = 0;
244 244
 	if(vbuff[0] != '#')
245
-	    mprintf(vbuff, str);
245
+	    mprintf("%s", vbuff);
246 246
     }
247 247
 
248 248
 #ifdef CL_THREAD_SAFE
... ...
@@ -259,6 +249,7 @@ void mprintf(const char *str, ...)
259 259
 {
260 260
 	va_list args;
261 261
 	FILE *fd;
262
+	char buff[512];
262 263
 
263 264
 
264 265
     if(mprintf_disabled) 
... ...
@@ -281,36 +272,31 @@ void mprintf(const char *str, ...)
281 281
  * quiet       stderr     no         no
282 282
  */
283 283
 
284
-
285 284
     va_start(args, str);
285
+    vsnprintf(buff, sizeof(buff), str, args);
286
+    va_end(args);
286 287
 
287
-    if(*str == '!') {
288
+    if(buff[0] == '!') {
288 289
        if(!mprintf_stdout)
289 290
            fd = stderr;
290
-	fprintf(fd, "ERROR: ");
291
-	vfprintf(fd, ++str, args);
292
-    } else if(*str == '@') {
291
+	fprintf(fd, "ERROR: %s", &buff[1]);
292
+    } else if(buff[0] == '@') {
293 293
        if(!mprintf_stdout)
294 294
            fd = stderr;
295
-	fprintf(fd, "ERROR: ");
296
-	vfprintf(fd, ++str, args);
295
+	fprintf(fd, "ERROR: %s", &buff[1]);
297 296
     } else if(!mprintf_quiet) {
298
-	if(*str == '^') {
297
+	if(buff[0] == '^') {
299 298
            if(!mprintf_stdout)
300 299
                fd = stderr;
301
-	    fprintf(fd, "WARNING: ");
302
-	    vfprintf(fd, ++str, args);
303
-	} else if(*str == '*') {
300
+	    fprintf(fd, "WARNING: %s", &buff[1]);
301
+	} else if(buff[0] == '*') {
304 302
 	    if(mprintf_verbose)
305
-		vfprintf(fd, ++str, args);
306
-	} else vfprintf(fd, str, args);
303
+		fprintf(fd, "%s", &buff[1]);
304
+	} else fprintf(fd, "%s", buff);
307 305
     }
308 306
 
309
-    va_end(args);
310
-
311 307
     if(fd == stdout)
312 308
 	fflush(stdout);
313
-
314 309
 }
315 310
 
316 311
 struct facstruct {