diff options
Diffstat (limited to 'src/server/shared')
| -rw-r--r-- | src/server/shared/Debugging/Errors.cpp | 16 | ||||
| -rw-r--r-- | src/server/shared/Debugging/Errors.h | 4 | ||||
| -rw-r--r-- | src/server/shared/Packets/ByteBuffer.h | 6 |
3 files changed, 22 insertions, 4 deletions
diff --git a/src/server/shared/Debugging/Errors.cpp b/src/server/shared/Debugging/Errors.cpp index 0621cfa5b6d..8b1b9454850 100644 --- a/src/server/shared/Debugging/Errors.cpp +++ b/src/server/shared/Debugging/Errors.cpp @@ -21,6 +21,7 @@ #include <cstdio> #include <cstdlib> #include <thread> +#include <cstdarg> namespace Trinity { @@ -32,6 +33,21 @@ void Assert(char const* file, int line, char const* function, char const* messag exit(1); } +void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) +{ + va_list args; + va_start(args, format); + + fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s ", file, line, function, message); + vfprintf(stderr, format, args); + fprintf(stderr, "\n"); + fflush(stderr); + + va_end(args); + *((volatile int*)NULL) = 0; + exit(1); +} + void Fatal(char const* file, int line, char const* function, char const* message) { fprintf(stderr, "\n%s:%i in %s FATAL ERROR:\n %s\n", diff --git a/src/server/shared/Debugging/Errors.h b/src/server/shared/Debugging/Errors.h index 218acfa453e..e6da19eb00d 100644 --- a/src/server/shared/Debugging/Errors.h +++ b/src/server/shared/Debugging/Errors.h @@ -23,8 +23,8 @@ namespace Trinity { - DECLSPEC_NORETURN void Assert(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; + DECLSPEC_NORETURN void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) ATTR_NORETURN ATTR_PRINTF(5, 6); DECLSPEC_NORETURN void Fatal(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; @@ -42,7 +42,7 @@ namespace Trinity #define ASSERT_END #endif -#define WPAssert(cond) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, #cond); } while(0) ASSERT_END +#define WPAssert(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, #cond, ##__VA_ARGS__); } while(0) ASSERT_END #define WPFatal(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END #define WPError(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END #define WPWarning(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index f7d27697f24..d65b6c58a51 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -118,7 +118,6 @@ class ByteBuffer template <typename T> void append(T value) { static_assert(std::is_fundamental<T>::value, "append(compound)"); - FlushBits(); EndianConvert(value); append((uint8 *)&value, sizeof(value)); } @@ -128,9 +127,10 @@ class ByteBuffer if (_bitpos == 8) return; + _bitpos = 8; + append((uint8 *)&_curbitval, sizeof(uint8)); _curbitval = 0; - _bitpos = 8; } bool WriteBit(uint32 bit) @@ -583,6 +583,8 @@ class ByteBuffer ASSERT(size() < 10000000); + FlushBits(); + if (_storage.size() < _wpos + cnt) _storage.resize(_wpos + cnt); std::memcpy(&_storage[_wpos], src, cnt); |
