[CONSRV]
[reactos.git] / win32ss / user / consrv / conoutput.c
index 50b3116..719a534 100644 (file)
@@ -489,58 +489,60 @@ DoWriteConsole(IN PCSR_API_MESSAGE ApiMessage,
                                NULL,
                                NULL))
             {
+                /* Fail */
                 ConioUnlockScreenBuffer(Buff);
                 return STATUS_NO_MEMORY;
             }
         }
 
         /* Wait until we un-pause the console */
-        ConioUnlockScreenBuffer(Buff);
-        return STATUS_PENDING;
+        Status = STATUS_PENDING;
     }
-
-    if(WriteConsoleRequest->Unicode)
+    else
     {
-        Length = WideCharToMultiByte(Console->OutputCodePage, 0,
-                                     (PWCHAR)WriteConsoleRequest->Buffer,
-                                     WriteConsoleRequest->NrCharactersToWrite,
-                                     NULL, 0, NULL, NULL);
-        Buffer = RtlAllocateHeap(GetProcessHeap(), 0, Length);
-        if (Buffer)
+        if(WriteConsoleRequest->Unicode)
         {
-            WideCharToMultiByte(Console->OutputCodePage, 0,
-                                (PWCHAR)WriteConsoleRequest->Buffer,
-                                WriteConsoleRequest->NrCharactersToWrite,
-                                Buffer, Length, NULL, NULL);
+            Length = WideCharToMultiByte(Console->OutputCodePage, 0,
+                                         (PWCHAR)WriteConsoleRequest->Buffer,
+                                         WriteConsoleRequest->NrCharactersToWrite,
+                                         NULL, 0, NULL, NULL);
+            Buffer = RtlAllocateHeap(GetProcessHeap(), 0, Length);
+            if (Buffer)
+            {
+                WideCharToMultiByte(Console->OutputCodePage, 0,
+                                    (PWCHAR)WriteConsoleRequest->Buffer,
+                                    WriteConsoleRequest->NrCharactersToWrite,
+                                    Buffer, Length, NULL, NULL);
+            }
+            else
+            {
+                Status = STATUS_NO_MEMORY;
+            }
         }
         else
         {
-            Status = STATUS_NO_MEMORY;
+            Buffer = (PCHAR)WriteConsoleRequest->Buffer;
         }
-    }
-    else
-    {
-        Buffer = (PCHAR)WriteConsoleRequest->Buffer;
-    }
 
-    if (Buffer)
-    {
-        if (NT_SUCCESS(Status))
+        if (Buffer)
         {
-            Status = ConioWriteConsole(Console, Buff, Buffer,
-                                       WriteConsoleRequest->NrCharactersToWrite, TRUE);
             if (NT_SUCCESS(Status))
             {
-                Written = WriteConsoleRequest->NrCharactersToWrite;
+                Status = ConioWriteConsole(Console, Buff, Buffer,
+                                           WriteConsoleRequest->NrCharactersToWrite, TRUE);
+                if (NT_SUCCESS(Status))
+                {
+                    Written = WriteConsoleRequest->NrCharactersToWrite;
+                }
+            }
+            if (WriteConsoleRequest->Unicode)
+            {
+                RtlFreeHeap(GetProcessHeap(), 0, Buffer);
             }
         }
-        if (WriteConsoleRequest->Unicode)
-        {
-            RtlFreeHeap(GetProcessHeap(), 0, Buffer);
-        }
-    }
 
-    WriteConsoleRequest->NrCharactersWritten = Written;
+        WriteConsoleRequest->NrCharactersWritten = Written;
+    }
 
     ConioUnlockScreenBuffer(Buff);
     return Status;