Author: mjansen
Date: Mon Aug 29 12:29:45 2016
New Revision: 72499
URL: 
http://svn.reactos.org/svn/reactos?rev=72499&view=rev
Log:
[ATL][SHELL32] Add basic support for _ATL_NO_EXCEPTIONS in CString, use it in shell32 so
that we can link without exception support. CORE-11841 #comment Please retest!
Added:
    trunk/reactos/sdk/lib/atl/atlexcept.h   (with props)
Modified:
    trunk/reactos/dll/win32/shell32/CMakeLists.txt
    trunk/reactos/sdk/lib/atl/atlsimpstr.h
Modified: trunk/reactos/dll/win32/shell32/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/CMakeLis…
==============================================================================
--- trunk/reactos/dll/win32/shell32/CMakeLists.txt      [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/CMakeLists.txt      [iso-8859-1] Mon Aug 29 12:29:45
2016
@@ -4,7 +4,7 @@
 add_subdirectory(shellmenu)
 add_subdirectory(shellrecyclebin)
-set_cpp(WITH_RUNTIME WITH_EXCEPTIONS)
+set_cpp(WITH_RUNTIME)
 spec2def(shell32.dll shell32.spec ADD_IMPORTLIB)
 if(NOT MSVC)
@@ -17,7 +17,8 @@
 add_definitions(
     -D_SHELL32_
-    -D_WINE)
+    -D_WINE
+    -D_ATL_NO_EXCEPTIONS)
 include_directories(
     ${REACTOS_SOURCE_DIR}/sdk/lib/atl
Added: trunk/reactos/sdk/lib/atl/atlexcept.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atlexcept.h?re…
==============================================================================
--- trunk/reactos/sdk/lib/atl/atlexcept.h       (added)
+++ trunk/reactos/sdk/lib/atl/atlexcept.h       [iso-8859-1] Mon Aug 29 12:29:45 2016
@@ -0,0 +1,38 @@
+
+#ifndef __ATLEXCEPT_H__
+#define __ATLEXCEPT_H__
+
+
+//FIXME: Enable when RaiseException is marked as NORETURN
+//DECLSPEC_NORETURN
+inline void AtlThrowImp(HRESULT hr)
+{
+#ifdef ATLTRACE
+    ATLTRACE(hr);
+#endif
+
+#ifdef _ATL_NO_EXCEPTIONS
+
+    ATLASSERT(false);
+
+    RaiseException(
+        hr == E_OUTOFMEMORY ? STATUS_NO_MEMORY : EXCEPTION_ILLEGAL_INSTRUCTION,
+        EXCEPTION_NONCONTINUABLE, 0, NULL
+        );
+
+#else
+
+    // FIXME: This is horribly wrong, we should implement CException!
+    throw;
+
+#endif
+
+}
+
+
+
+#ifndef AtlThrow
+#define AtlThrow(x) AtlThrowImp(x)
+#endif
+
+#endif
Propchange: trunk/reactos/sdk/lib/atl/atlexcept.h
------------------------------------------------------------------------------
    svn:eol-style = native
Modified: trunk/reactos/sdk/lib/atl/atlsimpstr.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atlsimpstr.h?r…
==============================================================================
--- trunk/reactos/sdk/lib/atl/atlsimpstr.h      [iso-8859-1] (original)
+++ trunk/reactos/sdk/lib/atl/atlsimpstr.h      [iso-8859-1] Mon Aug 29 12:29:45 2016
@@ -4,7 +4,7 @@
 #pragma once
 #include <atlcore.h>
-
+#include <atlexcept.h>
 namespace ATL
 {
@@ -485,7 +485,7 @@
         CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate(nLength,
sizeof(XCHAR));
         if (pNewData == NULL)
         {
-            throw; // ThrowMemoryException();
+            ThrowMemoryException();
         }
         int nCharsToCopy = ((nOldLength < nLength) ? nOldLength : nLength) + 1;
         CopyChars(PXSTR(pNewData->data()), nCharsToCopy,
@@ -550,7 +550,7 @@
         CStringData* pNewData = pStringMgr->Reallocate(pOldData, nLength,
sizeof(XCHAR));
         if (pNewData == NULL)
         {
-            throw; // ThrowMemoryException();
+            ThrowMemoryException();
         }
         Attach(pNewData);
@@ -562,7 +562,9 @@
         ATLASSERT(nLength <= GetData()->nAllocLength);
         if (nLength < 0 || nLength > GetData()->nAllocLength)
-            throw;
+        {
+            AtlThrow(E_INVALIDARG);
+        }
         GetData()->nDataLength = nLength;
         m_pszData[nLength] = 0;
@@ -583,7 +585,7 @@
             pNewData = pNewStringMgr->Allocate(pData->nDataLength, sizeof(XCHAR));
             if (pNewData == NULL)
             {
-                throw; // ThrowMemoryException();
+                ThrowMemoryException();
             }
             pNewData->nDataLength = pData->nDataLength;
@@ -594,6 +596,12 @@
         return pNewData;
     }
+
+    static void ThrowMemoryException()
+    {
+        AtlThrow(E_OUTOFMEMORY);
+    }
+
 };
 }