39 char _buffer[BUFFER_LEN]; |
39 char _buffer[BUFFER_LEN]; |
40 int _indent_level; |
40 int _indent_level; |
41 int _cur; |
41 int _cur; |
42 |
42 |
43 void vappend(const char* format, va_list ap) ATTRIBUTE_PRINTF(2, 0) { |
43 void vappend(const char* format, va_list ap) ATTRIBUTE_PRINTF(2, 0) { |
44 int res = vsnprintf(&_buffer[_cur], BUFFER_LEN - _cur, format, ap); |
44 int res = os::vsnprintf(&_buffer[_cur], BUFFER_LEN - _cur, format, ap); |
45 if (res != -1) { |
45 if (res > BUFFER_LEN) { |
46 _cur += res; |
|
47 } else { |
|
48 DEBUG_ONLY(warning("buffer too small in LineBuffer");) |
46 DEBUG_ONLY(warning("buffer too small in LineBuffer");) |
49 _buffer[BUFFER_LEN -1] = 0; |
47 _buffer[BUFFER_LEN -1] = 0; |
50 _cur = BUFFER_LEN; // vsnprintf above should not add to _buffer if we are called again |
48 _cur = BUFFER_LEN; // vsnprintf above should not add to _buffer if we are called again |
|
49 } else if (res != -1) { |
|
50 _cur += res; |
51 } |
51 } |
52 } |
52 } |
53 |
53 |
54 public: |
54 public: |
55 explicit LineBuffer(int indent_level): _indent_level(indent_level), _cur(0) { |
55 explicit LineBuffer(int indent_level): _indent_level(indent_level), _cur(0) { |