diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/auxiliary/functions.cc | 10 | ||||
| -rw-r--r-- | src/auxiliary/functions.h | 3 | ||||
| -rw-r--r-- | src/core/netclient.cc | 10 | ||||
| -rw-r--r-- | src/core/netconnection.cc | 14 | ||||
| -rw-r--r-- | src/core/netconnection.h | 2 | ||||
| -rw-r--r-- | src/filesystem/inifile.cc | 17 | ||||
| -rw-r--r-- | src/render/draw.cc | 3 | 
7 files changed, 43 insertions, 16 deletions
| diff --git a/src/auxiliary/functions.cc b/src/auxiliary/functions.cc index e9861ac..5edff56 100644 --- a/src/auxiliary/functions.cc +++ b/src/auxiliary/functions.cc @@ -122,4 +122,14 @@ const std::string lowercase(const std::string &text)  	return t;  } +void trim(std::string &text) +{ +	while (text.size() && text[0] == ' ') { +		text.erase(0, 1); +	} +	while (text.size() && text[text.size()-1] == ' ') { +		text.erase(text.size()-1, 1); +	} +} +  } diff --git a/src/auxiliary/functions.h b/src/auxiliary/functions.h index 90eb2ed..ceab0de 100644 --- a/src/auxiliary/functions.h +++ b/src/auxiliary/functions.h @@ -49,6 +49,9 @@ const std::string text_strip(const std::string &text);  /// return text, stripped of color codes and converted to lowercase  const std::string text_strip_lowercase(const std::string &text); +/// trim leading ad trailing spaces from a string +void trim(std::string &text); +  }  #endif // __INCLUDED_AUX_FUNCTIONS_H__ diff --git a/src/core/netclient.cc b/src/core/netclient.cc index 5254b23..310a64c 100644 --- a/src/core/netclient.cc +++ b/src/core/netclient.cc @@ -130,10 +130,10 @@ void NetClient::transmit(int serverfd)  		return;  	} -	char		zbuf[BLOCKSIZE]; +	unsigned char	zbuf[BLOCKSIZE];  	const char	*data = 0; -	unsigned long	compressed_size = BLOCKSIZE - 5; -	unsigned long 	uncompressed_size = sendq.size(); +	uLong		compressed_size = (uLong) BLOCKSIZE - 5; +	uLong 		uncompressed_size = (uLong) sendq.size();  	size_t		total_size = 0;  	memset(zbuf,0, sizeof(zbuf)); @@ -145,8 +145,8 @@ void NetClient::transmit(int serverfd)  	if ((status == Z_OK) && (compressed_size + 4 < sendq.size())) {  		// add a header to the compress packet -		data = zbuf; -		total_size = compressed_size + 4; +		data = (char *) zbuf; +		total_size = (size_t) (compressed_size + 4);  		zbuf[0] = '\xff';  		zbuf[1] = '\xff';  		zbuf[2] = compressed_size % 256; diff --git a/src/core/netconnection.cc b/src/core/netconnection.cc index a0a0497..fc2e5d0 100644 --- a/src/core/netconnection.cc +++ b/src/core/netconnection.cc @@ -164,13 +164,13 @@ void NetConnection::receive()  			zrecvbuf[received_compressed_size] = *c;  			received_compressed_size++; -			if (received_compressed_size == (size_t) compressed_size) { +			if (compressed_size == received_compressed_size) {  				// uncompress -				char zunbuf[BLOCKSIZE]; +				char zunbuf[BLOCKSIZE*2];  				memset(zunbuf, 0, sizeof(zunbuf)); -				unsigned long zunbuf_size = BLOCKSIZE - 1; +				uLong zunbuf_size = (uLong) BLOCKSIZE*2 - 1; -				int status = uncompress((Bytef *) zunbuf, &zunbuf_size, (Bytef *) zrecvbuf, compressed_size); +				int status = uncompress((Bytef *) zunbuf, &zunbuf_size, (Bytef *) zrecvbuf, (uLong) compressed_size);  				if (status != Z_OK) {  					con_warn << "zlib error " << status << " uncompressing incoming datablock!\n"; @@ -203,10 +203,14 @@ void NetConnection::receive()  				receive_compressed = true;  				received_compressed_size = 0; -				compressed_size = *(c+2) + (*(c+3) << 8); +				compressed_size = (uLong) (*(unsigned char *)(c+2) + (*(unsigned char *)(c+3) << 8));  				c += 3;  				bytes_received -= 3;  				memset(zrecvbuf, 0, sizeof(zrecvbuf)); +				if (compressed_size > BLOCKSIZE) { +					con_warn << "Incoming compressed datablock exceeds " << BLOCKSIZE << " bytes!\n"; +					receive_compressed = false; +				}  		} else if  (( *c == '\n') || (*c == '\r')) {   			if (messageblock.size()) { diff --git a/src/core/netconnection.h b/src/core/netconnection.h index d3c6cf7..ddc70f0 100644 --- a/src/core/netconnection.h +++ b/src/core/netconnection.h @@ -107,7 +107,7 @@ private:  	bool			receive_compressed;  	size_t			received_compressed_size; -	unsigned long		compressed_size; +	size_t			compressed_size;  	char			zrecvbuf[BLOCKSIZE];  }; diff --git a/src/filesystem/inifile.cc b/src/filesystem/inifile.cc index 337cf45..0cc690f 100644 --- a/src/filesystem/inifile.cc +++ b/src/filesystem/inifile.cc @@ -4,6 +4,7 @@     the terms of the GNU General Public License version 2  */ +#include "auxiliary/functions.h"  #include "math/mathlib.h"  #include "filesystem/filesystem.h"  #include "filesystem/inifile.h" @@ -83,21 +84,27 @@ bool IniFile::getline() {  				if (s.size() > 2 && s[0] == '[' && s[s.size()-1] == ']') {  					// condebug << "Inifile got section header " << s << std::endl;  					section_current = s.substr(1, s.size()-2); + +					aux::trim(section_current); +					aux::to_lowercase(section_current); +  					last_read_was_section = true;  					return true;  				} else {  					// key=value pair  					size_t found = s.find('='); -					if (found != std::string::npos) { -						// make lowercase +					if (found != std::string::npos && found > 0) { +						// make lowercase and strip spaces  						key_current = s.substr(0, found); -						while (key_current.size() && key_current[key_current.size()-1] == ' ') -							key_current.erase(key_current.size()-1, 1); +						aux::trim(key_current); +						aux::to_lowercase(key_current);  						if (key_current.size()) {  							value_current = s.substr(found+1, s.size() - found - 1); -							last_read_was_key = true; +							aux::trim (value_current); +							last_read_was_key = true;							 +							//con_debug << "IniFile got " << key_current << "=" << value_current << std::endl;  							return true;  						} diff --git a/src/render/draw.cc b/src/render/draw.cc index 351b1a6..cb16b89 100644 --- a/src/render/draw.cc +++ b/src/render/draw.cc @@ -230,6 +230,9 @@ void pass_prepare(float seconds)  			if (!entity->model()) {  				entity->entity_modelname.clear();  			} else { +				// set entity radius to model radius +				entity->entity_radius = entity->entity_model->radius(); +  				for (std::list<model::Light *>::iterator lit = entity->model()->model_light.begin(); lit != entity->model()->model_light.end(); lit++) {  					model::Light *light = (*lit); | 
