- Part one of major RTL cleanup. Merge duplicated code and stick everything in lib...
[reactos.git] / reactos / lib / ntdll / rtl / version.c
similarity index 53%
rename from reactos/lib/ntdll/rtl/process.c
rename to reactos/lib/ntdll/rtl/version.c
index f689f2b..70c11c4 100644 (file)
 
 /* FUNCTIONS ****************************************************************/
 
-
-PPEB
-STDCALL
-RtlpCurrentPeb(VOID)
-{
-    return NtCurrentPeb();
-}
-
-
-/*
+/**********************************************************************
+ * NAME                                                        EXPORTED
+ *     RtlGetNtProductType
+ *
+ * DESCRIPTION
+ *     Retrieves the OS product type.
+ *
+ * ARGUMENTS
+ *     ProductType     Pointer to the product type variable.
+ *
+ * RETURN VALUE
+ *     TRUE if successful, otherwise FALSE
+ *
+ * NOTE
+ *     ProductType can be one of the following values:
+ *       1     Workstation (Winnt)
+ *       2     Server (Lanmannt)
+ *       3     Advanced Server (Servernt)
+ *
+ * REVISIONS
+ *     2000-08-10 ekohl
+ *
  * @implemented
  */
-VOID STDCALL
-RtlAcquirePebLock(VOID)
+
+BOOLEAN STDCALL
+RtlGetNtProductType(PNT_PRODUCT_TYPE ProductType)
 {
-   PPEB Peb = NtCurrentPeb ();
-   Peb->FastPebLockRoutine (Peb->FastPebLock);
+  *ProductType = SharedUserData->NtProductType;
+  return(TRUE);
 }
 
-
-/*
+/**********************************************************************
+ * NAME                                                        EXPORTED
+ *     RtlGetNtVersionNumbers
+ *
+ * DESCRIPTION
+ *     Get the version numbers of the run time library.
+ *
+ * ARGUMENTS
+ *     major [OUT]     Destination for the Major version
+ *     minor [OUT]     Destination for the Minor version
+ *     build [OUT]     Destination for the Build version
+ *
+ * RETURN VALUE
+ *     Nothing.
+ *
+ * NOTE
+ *     Introduced in Windows XP (NT5.1)
+ *
  * @implemented
  */
-VOID STDCALL
-RtlReleasePebLock(VOID)
+
+void STDCALL
+RtlGetNtVersionNumbers(LPDWORD major, LPDWORD minor, LPDWORD build)
 {
-   PPEB Peb = NtCurrentPeb ();
-   Peb->FastPebUnlockRoutine (Peb->FastPebLock);
+       PPEB pPeb = NtCurrentPeb();
+
+       if (major)
+       {
+               /* msvcrt.dll as released with XP Home fails in DLLMain() if the
+                * major version is not 5. So, we should never set a version < 5 ...
+                * This makes sense since this call didn't exist before XP anyway.
+                */
+               *major = pPeb->OSMajorVersion < 5 ? 5 : pPeb->OSMajorVersion;
+       }
+
+       if (minor)
+       {
+               if (pPeb->OSMinorVersion <= 5)
+                       *minor = pPeb->OSMinorVersion < 1 ? 1 : pPeb->OSMinorVersion;
+               else
+                       *minor = pPeb->OSMinorVersion;
+       }
+
+       if (build)
+       {
+               /* FIXME: Does anybody know the real formula? */
+               *build = (0xF0000000 | pPeb->OSBuildNumber);
+       }
 }
 
-
 /*
 * @implemented
 */
@@ -90,19 +141,4 @@ RtlGetVersion(RTL_OSVERSIONINFOW *Info)
    return STATUS_INVALID_PARAMETER;
 }
 
-/*
- * @implemented
- */
-VOID 
-STDCALL 
-RtlExitUserThread(NTSTATUS Status)
-{
-    /* Call the Loader and tell him to notify the DLLs */
-    LdrShutdownThread();
-    
-    /* Shut us down */
-    NtCurrentTeb()->FreeStackOnTermination = TRUE;
-    NtTerminateThread(NtCurrentThread(), Status);
-}
-
 /* EOF */