From c77444a8215748633812e67adea8c7ff66a5480d Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 16 Apr 2010 20:40:01 +0100
Subject: Fix http://opensimulator.org/mantis/view.php?id=4657 where
OpenSim.Grid.UserServer.exe fails on startup if no previous config probably
appears to occur because mono 2.4.2.3 (and possibly later) erroneously
returns a value of 0 for BufferWidth and BufferHeight in some circumstances
---
OpenSim/Framework/Console/LocalConsole.cs | 63 +++++++++++++++++++++++--------
OpenSim/Framework/Util.cs | 2 +-
2 files changed, 48 insertions(+), 17 deletions(-)
(limited to 'OpenSim')
diff --git a/OpenSim/Framework/Console/LocalConsole.cs b/OpenSim/Framework/Console/LocalConsole.cs
index be936b6..a3036d0 100644
--- a/OpenSim/Framework/Console/LocalConsole.cs
+++ b/OpenSim/Framework/Console/LocalConsole.cs
@@ -38,7 +38,7 @@ namespace OpenSim.Framework.Console
{
///
/// A console that uses cursor control and color
- ///
+ ///
public class LocalConsole : CommandConsole
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -100,24 +100,40 @@ namespace OpenSim.Framework.Console
private int SetCursorTop(int top)
{
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
- // to set a cursor row position with a currently invalid column, mono will throw an exception.
- // Therefore, we need to make sure that the column position is valid first.
+ // to set a cursor row position with a currently invalid column, mono will throw an exception.
+ // Therefore, we need to make sure that the column position is valid first.
int left = System.Console.CursorLeft;
if (left < 0)
+ {
System.Console.CursorLeft = 0;
- else if (left >= System.Console.BufferWidth)
- System.Console.CursorLeft = System.Console.BufferWidth - 1;
+ }
+ else
+ {
+ int bw = System.Console.BufferWidth;
+
+ // On Mono 2.4.2.3 (and possibly above), the buffer value is sometimes erroneously zero (Mantis 4657)
+ if (bw > 0 && left >= bw)
+ System.Console.CursorLeft = bw - 1;
+ }
if (top < 0)
+ {
top = 0;
- if (top >= System.Console.BufferHeight)
- top = System.Console.BufferHeight - 1;
+ }
+ else
+ {
+ int bh = System.Console.BufferHeight;
+
+ // On Mono 2.4.2.3 (and possibly above), the buffer value is sometimes erroneously zero (Mantis 4657)
+ if (bh > 0 && top >= bh)
+ top = bh - 1;
+ }
System.Console.CursorTop = top;
return top;
- }
+ }
///
/// Set the cursor column.
@@ -129,23 +145,38 @@ namespace OpenSim.Framework.Console
///
///
/// The new cursor column.
- ///
+ ///
private int SetCursorLeft(int left)
{
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
- // to set a cursor column position with a currently invalid row, mono will throw an exception.
- // Therefore, we need to make sure that the row position is valid first.
+ // to set a cursor column position with a currently invalid row, mono will throw an exception.
+ // Therefore, we need to make sure that the row position is valid first.
int top = System.Console.CursorTop;
if (top < 0)
+ {
System.Console.CursorTop = 0;
- else if (top >= System.Console.BufferHeight)
- System.Console.CursorTop = System.Console.BufferHeight - 1;
+ }
+ else
+ {
+ int bh = System.Console.BufferHeight;
+ // On Mono 2.4.2.3 (and possibly above), the buffer value is sometimes erroneously zero (Mantis 4657)
+ if (bh > 0 && top >= bh)
+ System.Console.CursorTop = bh - 1;
+ }
if (left < 0)
+ {
left = 0;
- if (left >= System.Console.BufferWidth)
- left = System.Console.BufferWidth - 1;
+ }
+ else
+ {
+ int bw = System.Console.BufferWidth;
+
+ // On Mono 2.4.2.3 (and possibly above), the buffer value is sometimes erroneously zero (Mantis 4657)
+ if (bw > 0 && left >= bw)
+ left = bw - 1;
+ }
System.Console.CursorLeft = left;
@@ -183,7 +214,7 @@ namespace OpenSim.Framework.Console
System.Console.Write("{0}", prompt);
SetCursorTop(new_y);
- SetCursorLeft(new_x);
+ SetCursorLeft(new_x);
}
}
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 48435cb..ec33b5e 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1441,4 +1441,4 @@ namespace OpenSim.Framework
return (diff >= 0) ? diff : (diff + EnvironmentTickCountMask + 1);
}
}
-}
+}
\ No newline at end of file
--
cgit v1.1