[USETUP] Implement most of the "upgrade" page, where existing NTOS installations...
[reactos.git] / base / setup / usetup / drivesup.c
index b573430..b8561d7 100644 (file)
@@ -1,27 +1,9 @@
-/*
- *  ReactOS kernel
- *  Copyright (C) 2002 ReactOS Team
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
 /*
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS text-mode setup
- * FILE:            subsys/system/usetup/drivesup.c
+ * FILE:            base/setup/usetup/drivesup.c
  * PURPOSE:         Drive support functions
- * PROGRAMMER:      Eric Kohl
+ * PROGRAMMER:
  */
 
 /* INCLUDES *****************************************************************/
 
 NTSTATUS
 GetSourcePaths(
-    PUNICODE_STRING SourcePath,
-    PUNICODE_STRING SourceRootPath,
-    PUNICODE_STRING SourceRootDir)
+    OUT PUNICODE_STRING SourcePath,
+    OUT PUNICODE_STRING SourceRootPath,
+    OUT PUNICODE_STRING SourceRootDir)
 {
+    NTSTATUS Status;
     OBJECT_ATTRIBUTES ObjectAttributes;
-    UNICODE_STRING LinkName;
+    UNICODE_STRING LinkName = RTL_CONSTANT_STRING(L"\\SystemRoot");
     UNICODE_STRING SourceName;
-    WCHAR SourceBuffer[MAX_PATH] = {L'\0'};
+    WCHAR SourceBuffer[MAX_PATH] = L"";
     HANDLE Handle;
-    NTSTATUS Status;
     ULONG Length;
     PWCHAR Ptr;
 
-    RtlInitUnicodeString(&LinkName,
-                         L"\\SystemRoot");
-
     InitializeObjectAttributes(&ObjectAttributes,
                                &LinkName,
                                OBJ_CASE_INSENSITIVE,
@@ -63,35 +42,33 @@ GetSourcePaths(
     if (!NT_SUCCESS(Status))
         return Status;
 
-    SourceName.Length = 0;
-    SourceName.MaximumLength = MAX_PATH * sizeof(WCHAR);
-    SourceName.Buffer = SourceBuffer;
+    RtlInitEmptyUnicodeString(&SourceName, SourceBuffer, sizeof(SourceBuffer));
 
     Status = NtQuerySymbolicLinkObject(Handle,
                                        &SourceName,
                                        &Length);
     NtClose(Handle);
 
-    if (NT_SUCCESS(Status))
-    {
-        RtlCreateUnicodeString(SourcePath,
-                               SourceName.Buffer);
+    if (!NT_SUCCESS(Status))
+        return Status;
 
-        /* strip trailing directory */
-        Ptr = wcsrchr(SourceName.Buffer, L'\\');
-        if (Ptr)
-        {
-            RtlCreateUnicodeString(SourceRootDir, Ptr);
-            *Ptr = 0;
-        }
-        else
-            RtlCreateUnicodeString(SourceRootDir, L"");
+    RtlCreateUnicodeString(SourcePath,
+                           SourceName.Buffer);
 
-        RtlCreateUnicodeString(SourceRootPath,
-                               SourceName.Buffer);
+    /* Strip trailing directory */
+    Ptr = wcsrchr(SourceName.Buffer, OBJ_NAME_PATH_SEPARATOR);
+    if (Ptr)
+    {
+        RtlCreateUnicodeString(SourceRootDir, Ptr);
+        *Ptr = UNICODE_NULL;
+    }
+    else
+    {
+        RtlCreateUnicodeString(SourceRootDir, L"");
     }
 
-    NtClose(Handle);
+    RtlCreateUnicodeString(SourceRootPath,
+                           SourceName.Buffer);
 
     return STATUS_SUCCESS;
 }