git-svn: trunk@1874
Tomasz Kojm authored on 2006/03/26 05:33:29... | ... |
@@ -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 { |