Index: Utils/StringUtils.cpp
===================================================================
--- Utils/StringUtils.cpp	(revision 18381)
+++ Utils/StringUtils.cpp	(working copy)
@@ -205,10 +205,22 @@
 	}
 }
 
+class CClipboardCloseBracket {
+public:
+	CClipboardCloseBracket() {}
+	~CClipboardCloseBracket();
+};
+
+CClipboardCloseBracket~CClipboardCloseBracket()
+{
+	CloseClipboard();
+}
+
 bool CStringUtils::WriteAsciiStringToClipboard(const CStringA& sClipdata, LCID lcid, HWND hOwningWnd)
 {
 	if (OpenClipboard(hOwningWnd))
 	{
+		CClipboardCloseBracket clipboardBracket;
 		EmptyClipboard();
 		HGLOBAL hClipboardData;
 		hClipboardData = GlobalAlloc(GMEM_DDESHARE, sClipdata.GetLength()+1);
@@ -234,28 +246,23 @@
 							}
 							GlobalUnlock(hlocmem);
 						}
-						CloseClipboard();
 						return true;
 					}
 				}
 				else
 				{
-					CloseClipboard();
 					return false;
 				}
 			}
 			else
 			{
-				CloseClipboard();
 				return false;
 			}
 		}
 		else
 		{
-			CloseClipboard();
 			return false;
 		}
-		CloseClipboard();
 		return false;
 	}
 	return false;
@@ -265,6 +272,7 @@
 {
 	if (OpenClipboard(hOwningWnd))
 	{
+		CClipboardCloseBracket clipboardBracket;
 		EmptyClipboard();
 		HGLOBAL hClipboardData;
 		hClipboardData = GlobalAlloc(GMEM_DDESHARE, (sClipdata.GetLength()+1)*sizeof(WCHAR));
@@ -293,45 +301,36 @@
 								{
 									if (SetClipboardData(CF_TEXT, hClipboardDataA) != NULL)
 									{
-										CloseClipboard();
 										return true;
 									}
 								}
 								else
 								{
-									CloseClipboard();
 									return false;
 								}
 							}
 							else
 							{
-								CloseClipboard();
 								return false;
 							}
 						}
-
-						CloseClipboard();
 						return false;
 					}
 				}
 				else
 				{
-					CloseClipboard();
 					return false;
 				}
 			}
 			else
 			{
-				CloseClipboard();
 				return false;
 			}
 		}
 		else
 		{
-			CloseClipboard();
 			return false;
 		}
-		CloseClipboard();
 		return false;
 	}
 	return false;
@@ -344,6 +343,7 @@
 		return false;
 	if (OpenClipboard(hOwningWnd))
 	{
+		CClipboardCloseBracket clipboardBracket;
 		EmptyClipboard();
 		HGLOBAL hClipboardData;
 		hClipboardData = GlobalAlloc(GMEM_DDESHARE, sClipdata.GetLength()+1);
@@ -358,33 +358,27 @@
 				{
 					if (SetClipboardData(cFormat,hClipboardData)==NULL)
 					{
-						CloseClipboard();
 						return false;
 					}
 					if (SetClipboardData(CF_TEXT,hClipboardData)==NULL)
 					{
-						CloseClipboard();
 						return false;
 					}
 				}
 				else
 				{
-					CloseClipboard();
 					return false;
 				}
 			}
 			else
 			{
-				CloseClipboard();
 				return false;
 			}
 		}
 		else
 		{
-			CloseClipboard();
 			return false;
 		}
-		CloseClipboard();
 		return true;
 	}
 	return false;
