core/sm_stringutil.cpp
changeset 2806 686c283b08fc
parent 2799 f41db9ce560d
child 3002 409a6de13f09
     1.1 --- a/core/sm_stringutil.cpp	Thu Sep 17 13:08:18 2009 -0400
     1.2 +++ b/core/sm_stringutil.cpp	Sat Sep 26 17:12:23 2009 -0400
     1.3 @@ -1580,3 +1580,50 @@
     1.4  	return str;
     1.5  }
     1.6  
     1.7 +size_t UTIL_DecodeHexString(unsigned char *buffer, size_t maxlength, const char *hexstr)
     1.8 +{
     1.9 +	size_t written = 0;
    1.10 +	size_t length = strlen(hexstr);
    1.11 +
    1.12 +	for (size_t i = 0; i < length; i++)
    1.13 +	{
    1.14 +		if (written >= maxlength)
    1.15 +			break;
    1.16 +		buffer[written++] = hexstr[i];
    1.17 +		if (hexstr[i] == '\\' && hexstr[i + 1] == 'x')
    1.18 +		{
    1.19 +			if (i + 3 >= length)
    1.20 +				continue;
    1.21 +			/* Get the hex part. */
    1.22 +			char s_byte[3];
    1.23 +			int r_byte;
    1.24 +			s_byte[0] = hexstr[i + 2];
    1.25 +			s_byte[1] = hexstr[i + 3];
    1.26 +			s_byte[2] = '\0';
    1.27 +			/* Read it as an integer */
    1.28 +			sscanf(s_byte, "%x", &r_byte);
    1.29 +			/* Save the value */
    1.30 +			buffer[written - 1] = r_byte;
    1.31 +			/* Adjust index */
    1.32 +			i += 3;
    1.33 +		}
    1.34 +	}
    1.35 +
    1.36 +	return written;
    1.37 +}
    1.38 +
    1.39 +char *UTIL_ToLowerCase(const char *str)
    1.40 +{
    1.41 +	size_t len = strlen(str);
    1.42 +	char *buffer = new char[len + 1];
    1.43 +	for (size_t i = 0; i < len; i++)
    1.44 +	{
    1.45 +		if (str[i] >= 'A' && str[i] <= 'Z')
    1.46 +			buffer[i] = tolower(str[i]);
    1.47 +		else
    1.48 +			buffer[i] = str[i];
    1.49 +	}
    1.50 +	buffer[len] = '\0';
    1.51 +	return buffer;
    1.52 +}
    1.53 +