diff options
| -rw-r--r-- | src/pugixpath.cpp | 23 | 
1 files changed, 12 insertions, 11 deletions
| diff --git a/src/pugixpath.cpp b/src/pugixpath.cpp index 248e9a4..1bb2d70 100644 --- a/src/pugixpath.cpp +++ b/src/pugixpath.cpp @@ -43,8 +43,9 @@ typedef __int32 int32_t;  #if defined(_MSC_VER)  #	pragma warning(disable: 4127) // conditional expression is constant -#	pragma warning(disable: 4611) // interaction between '_setjmp' and C++ object destruction is non-portable  #	pragma warning(disable: 4324) // structure was padded due to __declspec(align()) +#	pragma warning(disable: 4611) // interaction between '_setjmp' and C++ object destruction is non-portable +#	pragma warning(disable: 4702) // unreachable code  #	pragma warning(disable: 4996) // this function or variable may be unsafe  #endif @@ -965,17 +966,14 @@ namespace pugi  	{  		struct memory_block  		{	 -			memory_block(): next(0), size(0) -			{ -			} -	  			memory_block* next; -			size_t size;  			char data[xpath_memory_block_size];  		};  		memory_block* _root; +		size_t _root_size; +  		memory_block _first;  	public: @@ -1007,8 +1005,11 @@ namespace pugi  			get_memory_deallocation_function()(alloc);  		} -		xpath_allocator(): _root(&_first) +		xpath_allocator()  		{ +			_root = &_first; +			_root_size = 0; +			_first.next = 0;  		}  		void* allocate(size_t size) @@ -1016,10 +1017,10 @@ namespace pugi  			// align size so that we're able to store pointers in subsequent blocks  			size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1); -			if (_root->size + size <= xpath_memory_block_size) +			if (_root_size + size <= xpath_memory_block_size)  			{ -				void* buf = _root->data + _root->size; -				_root->size += size; +				void* buf = _root->data + _root_size; +				_root_size += size;  				return buf;  			}  			else @@ -1031,9 +1032,9 @@ namespace pugi  				if (!block) return 0;  				block->next = _root; -				block->size = size;  				_root = block; +				_root_size = size;  				return block->data;  			} | 
