| 310 | /************************************************************************/ |
| 311 | |
| 312 | int msIO_printf( const char *format, ... ) |
| 313 | |
| 314 | { |
| 315 | va_list args, args_copy; |
| 316 | int return_val; |
| 317 | msIOContext *context; |
| 318 | char workBuf[8000], *largerBuf = NULL; |
| 319 | |
| 320 | va_start( args, format ); |
| 321 | |
| 322 | #if !defined(HAVE_VSNPRINTF) |
| 323 | return_val = vsprintf( workBuf, format, args); |
| 324 | |
| 325 | if( return_val < 0 || return_val >= sizeof(workBuf) ) |
| 326 | { |
| 327 | va_end( args ); |
| 328 | msSetError(MS_MISCERR, "Possible buffer overrun.", "msIO_printf()"); |
| 329 | return -1; |
| 330 | } |
| 331 | |
| 332 | #else |
| 333 | |
| 334 | #ifdef va_copy |
| 335 | va_copy( args_copy, args ); |
| 336 | #else |
| 337 | args_copy = args; |
| 338 | #endif /* va_copy */ |
| 339 | |
| 340 | return_val = vsnprintf( workBuf, sizeof(workBuf), format, args ); |
| 341 | if (return_val == -1 || return_val >= sizeof(workBuf)-1) |
| 342 | { |
| 343 | return_val = _ms_vsprintf(&largerBuf, format, args_copy ); |
| 344 | } |
| 345 | va_end(args_copy); |
| 346 | |
| 347 | #endif /* HAVE_VSNPRINTF */ |
| 348 | |
| 349 | va_end( args ); |
| 350 | |
| 351 | if (return_val < 0) |
| 352 | return -1; |
| 353 | |
| 354 | context = msIO_getHandler( stdout ); |
| 355 | if( context == NULL ) |
| 356 | return -1; |
| 357 | |
| 358 | return_val = msIO_contextWrite( context, |
| 359 | largerBuf?largerBuf:workBuf, |
| 360 | return_val ); |
| 361 | msFree(largerBuf); |
| 362 | |
| 363 | return return_val; |
| 364 | } |
| 365 | |
| 366 | /************************************************************************/ |
| 367 | /* msIO_fprintf() */ |
no test coverage detected