From 86470d3889436017264a69d57fb2060a591955f4 Mon Sep 17 00:00:00 2001
From: Leslie Linden <none@none>
Date: Wed, 8 Jun 2011 15:46:34 -0700
Subject: [PATCH] Fixed to allow param blocks to exceed 64k, even though the
 size makes me wince. Modified viewer window to not create a navigation bar on
 exit if one doesn't yet exist.

Reviewed by Richard.
---
 indra/llui/tests/llurlmatch_test.cpp | 2 +-
 indra/llxuixml/llinitparam.cpp       | 2 +-
 indra/llxuixml/llinitparam.h         | 7 +++++--
 indra/newview/llviewerwindow.cpp     | 5 ++++-
 4 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp
index e09ef33d491..3cd61e574e6 100644
--- a/indra/llui/tests/llurlmatch_test.cpp
+++ b/indra/llui/tests/llurlmatch_test.cpp
@@ -95,7 +95,7 @@ namespace LLInitParam
 	{
 		const U8* my_addr = reinterpret_cast<const U8*>(this);
 		const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block);
-		mEnclosingBlockOffset = (U16)(my_addr - block_addr);
+		mEnclosingBlockOffset = 0x7FFFffff & ((U32)(my_addr - block_addr));
 	}
 
 	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 generation){ return true; }
diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index b3312798ddd..c024fd405e7 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -40,7 +40,7 @@ namespace LLInitParam
 	{
 		const U8* my_addr = reinterpret_cast<const U8*>(this);
 		const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block);
-		mEnclosingBlockOffset = (U16)(my_addr - block_addr);
+		mEnclosingBlockOffset = 0x7FFFffff & ((U32)(my_addr - block_addr));
 	}
 
 	//
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index a853999e945..35c889b69fa 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -34,6 +34,8 @@
 #include <boost/unordered_map.hpp>
 #include <boost/shared_ptr.hpp>
 
+#include "llerror.h"
+
 namespace LLInitParam
 {
 	template<typename T> const T& defaultValue() { static T value; return value; }
@@ -302,8 +304,9 @@ namespace LLInitParam
 	private:
 		friend class BaseBlock;
 
-		U16			mEnclosingBlockOffset;
-		bool		mIsProvided;
+		U32		mEnclosingBlockOffset:31;
+		U32		mIsProvided:1;
+
 	};
 
 	// various callbacks and constraints associated with an individual param
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 4ecb645337c..e97f0fcc2e9 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1979,7 +1979,10 @@ void LLViewerWindow::shutdownViews()
 	
 	// destroy the nav bar, not currently part of gViewerWindow
 	// *TODO: Make LLNavigationBar part of gViewerWindow
-	delete LLNavigationBar::getInstance();
+	if (LLNavigationBar::instanceExists())
+	{
+		delete LLNavigationBar::getInstance();
+	}
 
 	// destroy menus after instantiating navbar above, as it needs
 	// access to gMenuHolder
-- 
GitLab