| 828 | } |
| 829 | |
| 830 | static const char * debug_format_message( const char * format, va_list vargs ) |
| 831 | { |
| 832 | char * buf; |
| 833 | int result; |
| 834 | int sz = 80; |
| 835 | for ( ; ; ) |
| 836 | { |
| 837 | va_list args; |
| 838 | buf = (char *)malloc( sz ); |
| 839 | if ( !buf ) |
| 840 | return 0; |
| 841 | #ifndef va_copy |
| 842 | args = vargs; |
| 843 | #else |
| 844 | va_copy( args, vargs ); |
| 845 | #endif |
| 846 | #if defined(_MSC_VER) && (_MSC_VER <= 1310) |
| 847 | result = _vsnprintf( buf, sz, format, args ); |
| 848 | #else |
| 849 | result = vsnprintf( buf, sz, format, args ); |
| 850 | #endif |
| 851 | va_end( args ); |
| 852 | if ( 0 <= result && result < sz ) |
| 853 | return buf; |
| 854 | free( buf ); |
| 855 | if ( result < 0 ) |
| 856 | return 0; |
| 857 | sz = result + 1; |
| 858 | } |
| 859 | } |
| 860 | |
| 861 | static void debug_error( const char * format, ... ) |
| 862 | { |