diff options
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/lldate.cpp | 30 | ||||
| -rw-r--r-- | indra/llcommon/lldate.h | 1 | ||||
| -rw-r--r-- | indra/llcommon/lllslconstants.h | 13 | ||||
| -rw-r--r-- | indra/llcommon/llsdserialize_xml.cpp | 12 | ||||
| -rw-r--r-- | indra/llcommon/llstringtable.h | 10 | 
5 files changed, 60 insertions, 6 deletions
| diff --git a/indra/llcommon/lldate.cpp b/indra/llcommon/lldate.cpp index 7c0ac6c554..ca7e471bf2 100644 --- a/indra/llcommon/lldate.cpp +++ b/indra/llcommon/lldate.cpp @@ -254,6 +254,36 @@ bool LLDate::fromStream(std::istream& s)  	return true;  } +bool LLDate::fromYMDHMS(S32 year, S32 month, S32 day, S32 hour, S32 min, S32 sec) +{ +	struct apr_time_exp_t exp_time; +	 +	exp_time.tm_year = year - 1900; +	exp_time.tm_mon = month - 1; +	exp_time.tm_mday = day; +	exp_time.tm_hour = hour; +	exp_time.tm_min = min; +	exp_time.tm_sec = sec; + +	// zero out the unused fields +	exp_time.tm_usec = 0; +	exp_time.tm_wday = 0; +	exp_time.tm_yday = 0; +	exp_time.tm_isdst = 0; +	exp_time.tm_gmtoff = 0; + +	// generate a time_t from that +	apr_time_t time; +	if (apr_time_exp_gmt_get(&time, &exp_time) != APR_SUCCESS) +	{ +		return false; +	} +	 +	mSecondsSinceEpoch = time / LL_APR_USEC_PER_SEC; + +	return true; +} +  F64 LLDate::secondsSinceEpoch() const  {  	return mSecondsSinceEpoch; diff --git a/indra/llcommon/lldate.h b/indra/llcommon/lldate.h index 1f14093390..5b1ec9295f 100644 --- a/indra/llcommon/lldate.h +++ b/indra/llcommon/lldate.h @@ -101,6 +101,7 @@ public:  	 */  	bool fromString(const std::string& iso8601_date);  	bool fromStream(std::istream&); +	bool fromYMDHMS(S32 year, S32 month = 1, S32 day = 0, S32 hour = 0, S32 min = 0, S32 sec = 0);  	/**   	 * @brief Return the date in seconds since epoch. diff --git a/indra/llcommon/lllslconstants.h b/indra/llcommon/lllslconstants.h index a626e3f085..78f4435ed7 100644 --- a/indra/llcommon/lllslconstants.h +++ b/indra/llcommon/lllslconstants.h @@ -202,5 +202,18 @@ const U32	CHANGED_OWNER = 0x80;  const U32	CHANGED_REGION = 0x100;  const U32	CHANGED_TELEPORT = 0x200;  const U32	CHANGED_REGION_START = 0x400; +const U32   CHANGED_MEDIA = 0x800; + +// Possible error results +const U32 LSL_STATUS_OK                 = 0; +const U32 LSL_STATUS_MALFORMED_PARAMS   = 1000; +const U32 LSL_STATUS_TYPE_MISMATCH      = 1001; +const U32 LSL_STATUS_BOUNDS_ERROR       = 1002; +const U32 LSL_STATUS_NOT_FOUND          = 1003; +const U32 LSL_STATUS_NOT_SUPPORTED      = 1004; +const U32 LSL_STATUS_INTERNAL_ERROR     = 1999; + +// Start per-function errors below, starting at 2000: +const U32 LSL_STATUS_WHITELIST_FAILED   = 2001;  #endif diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp index c12ca350de..7e1c2e35e0 100644 --- a/indra/llcommon/llsdserialize_xml.cpp +++ b/indra/llcommon/llsdserialize_xml.cpp @@ -37,6 +37,7 @@  #include <deque>  #include "apr_base64.h" +#include <boost/regex.hpp>  extern "C"  { @@ -777,10 +778,17 @@ void LLSDXMLParser::Impl::endElementHandler(const XML_Char* name)  		case ELEMENT_BINARY:  		{ -			S32 len = apr_base64_decode_len(mCurrentContent.c_str()); +			// Regex is expensive, but only fix for whitespace in base64, +			// created by python and other non-linden systems - DEV-39358 +			// Fortunately we have very little binary passing now, +			// so performance impact shold be negligible. + poppy 2009-09-04 +			boost::regex r; +			r.assign("\\s"); +			std::string stripped = boost::regex_replace(mCurrentContent, r, ""); +			S32 len = apr_base64_decode_len(stripped.c_str());  			std::vector<U8> data;  			data.resize(len); -			len = apr_base64_decode_binary(&data[0], mCurrentContent.c_str()); +			len = apr_base64_decode_binary(&data[0], stripped.c_str());  			data.resize(len);  			value = data;  			break; diff --git a/indra/llcommon/llstringtable.h b/indra/llcommon/llstringtable.h index b13b016396..ec61ea1982 100644 --- a/indra/llcommon/llstringtable.h +++ b/indra/llcommon/llstringtable.h @@ -48,10 +48,12 @@  //# define STRING_TABLE_HASH_MAP 1  #endif -#if LL_WINDOWS -#include <hash_map> -#else -#include <ext/hash_map> +#if STRING_TABLE_HASH_MAP +# if LL_WINDOWS +#  include <hash_map> +# else +#  include <ext/hash_map> +# endif  #endif  const U32 MAX_STRINGS_LENGTH = 256; | 
