mirror of
https://github.com/reactos/reactos
synced 2025-10-07 08:52:45 +02:00
Compare commits
1 Commits
backups/un
...
ReactOS-0.
Author | SHA1 | Date | |
---|---|---|---|
|
eeff2a1e2c |
@@ -1,46 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Copyright (C) 2005 Casper S. Hornstrup
|
||||
|
||||
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
-->
|
||||
<project name="ReactOS.ApiStatus" default="publish">
|
||||
|
||||
<property name="reactos.dir" value="reactos" />
|
||||
<property name="apistatus.xsl" value="rapistatus.xsl" />
|
||||
<property name="apistatus.xml" value="rapistatus.xml" />
|
||||
<property name="apistatus.html" value="index2.html" />
|
||||
<include buildfile="config.include" />
|
||||
|
||||
<target name="publish">
|
||||
<delete dir="${reactos.dir}" if="${directory::exists(reactos.dir)}" />
|
||||
<exec program="svn" commandline="export -r HEAD ${source.url} ${reactos.dir}" />
|
||||
<exec program="rgenstat" commandline="reactos\apistatus.lst ${apistatus.xml}" />
|
||||
<style style="${apistatus.xsl}" destdir="${reactos.dir}" in="${apistatus.xml}" out="${apistatus.html}" />
|
||||
<copy todir="${publish.dir}" overwrite="true">
|
||||
<fileset basedir=".">
|
||||
<include name="${apistatus.xml}" />
|
||||
<include name="${apistatus.html}" />
|
||||
</fileset>
|
||||
</copy>
|
||||
<delete>
|
||||
<fileset basedir=".">
|
||||
<include name="${apistatus.xml}" />
|
||||
<include name="${apistatus.html}" />
|
||||
</fileset>
|
||||
</delete>
|
||||
<delete dir="${reactos.dir}" if="${directory::exists(reactos.dir)}" />
|
||||
</target>
|
||||
</project>
|
@@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2005 Casper S. Hornstrup
|
||||
|
||||
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
-->
|
||||
<project>
|
||||
<property name="source.url" value="svn://svn.reactos.com/trunk/reactos" />
|
||||
<property name="publish.dir" value="C:\api" />
|
||||
</project>
|
@@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" ?>
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
|
||||
<xsl:output method="html" indent="no"/>
|
||||
<!-- <xsl:output method="xml"/>-->
|
||||
<!-- Will not work: <xsl:strip-space elements="*"/> -->
|
||||
|
||||
<xsl:template match="/">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>
|
||||
ReactOS API Status
|
||||
</TITLE>
|
||||
<SCRIPT src="rapistatus.js"></SCRIPT>
|
||||
<LINK rel="stylesheet" type="text/css" href="rapistatus.css"></LINK>
|
||||
</HEAD>
|
||||
<BODY onLoad="onLoad();">
|
||||
<P>
|
||||
<H1>ReactOS API Status</H1>
|
||||
</P>
|
||||
<P>
|
||||
<TABLE>
|
||||
<TR>
|
||||
<TD> <INPUT type="checkbox" ID="implemented" onClick="selectImplemented();" checked="1"/> </TD>
|
||||
<TD> <IMG src="i.gif"/> </TD>
|
||||
<TD> Implemented </TD>
|
||||
<TD width="20"/>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD> <INPUT type="checkbox" ID="unimplemented" onClick="selectUnimplemented();" checked="1"/> </TD>
|
||||
<TD> <IMG src="u.gif"/> </TD>
|
||||
<TD> Unimplemented </TD>
|
||||
<TD width="20"/>
|
||||
</TR>
|
||||
</TABLE>
|
||||
</P>
|
||||
<DIV ID="ROOT">
|
||||
<xsl:apply-templates/>
|
||||
</DIV>
|
||||
<P>
|
||||
Legend :<BR/>
|
||||
<TABLE>
|
||||
<TR>
|
||||
<TD> <IMG src="c.gif"/> </TD>
|
||||
<TD> Component </TD>
|
||||
<TD> <IMG src="i.gif"/> </TD>
|
||||
<TD> Implemented </TD>
|
||||
<TD> <IMG src="sc.gif"/> </TD>
|
||||
<TD> Complete </TD>
|
||||
<TR>
|
||||
</TR>
|
||||
<TD> <IMG src="f.gif"/> </TD>
|
||||
<TD> Function </TD>
|
||||
<TD> <IMG src="u.gif"/> </TD>
|
||||
<TD> Unimplemented </TD>
|
||||
<TD></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
</P>
|
||||
</BODY>
|
||||
</HTML>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
<!-- component -->
|
||||
<xsl:template match="/components">
|
||||
<xsl:apply-templates select="component">
|
||||
<xsl:sort select="@name"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="components/component[@implemented_total or @unimplemented_total]">
|
||||
<DIV>
|
||||
<xsl:call-template name="ELEMENT">
|
||||
<xsl:with-param name="class">c</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:apply-templates>
|
||||
<xsl:with-param name="base"><xsl:value-of select="@base"/></xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</DIV>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
<!-- function -->
|
||||
<xsl:template match="functions">
|
||||
<xsl:param name="base"/>
|
||||
<xsl:apply-templates select="f">
|
||||
<xsl:sort select="@n"/>
|
||||
<xsl:with-param name="base"><xsl:value-of select="$base"/></xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="functions/f">
|
||||
<xsl:param name="base"/>
|
||||
<DIV>
|
||||
<xsl:call-template name="ELEMENT">
|
||||
<xsl:with-param name="class">f</xsl:with-param>
|
||||
<xsl:with-param name="base"><xsl:value-of select="$base"/></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:apply-templates/>
|
||||
</DIV>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
<!-- support templates -->
|
||||
|
||||
<xsl:template name="ELEMENT">
|
||||
<xsl:param name="class"/>
|
||||
<xsl:param name="base"/>
|
||||
<xsl:param name="image"/>
|
||||
<xsl:attribute name="class">
|
||||
<xsl:value-of select="$class"/>
|
||||
<xsl:text>_</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:call-template name="toggle"/>
|
||||
<xsl:choose>
|
||||
<xsl:when test="local-name() != 'component' and @i = 'true'">
|
||||
<img src="i.gif" class="i"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="local-name() != 'component' and @i = 'false'">
|
||||
<img src="u.gif" class="u"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="local-name() = 'component' and @complete >= 100">
|
||||
<img src="sc.gif"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@i"/><img src="tb.gif" with="12" height="12"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$image">
|
||||
<img src="{$image}.gif" class="t"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<img src="{$class}.gif" class="t"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:call-template name="name"/>
|
||||
<xsl:call-template name="n"/>
|
||||
<xsl:call-template name="file">
|
||||
<xsl:with-param name="base"><xsl:value-of select="$base"/></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="status"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="status">
|
||||
<xsl:if test="@complete and @complete != 0">
|
||||
<SPAN class="st">
|
||||
<img src="sc.gif"/>
|
||||
<xsl:text>: </xsl:text>
|
||||
<xsl:value-of select="@complete"/>
|
||||
<xsl:text>%</xsl:text>
|
||||
</SPAN>
|
||||
</xsl:if>
|
||||
<xsl:if test="@implemented_total">
|
||||
<SPAN class="st">
|
||||
<img src="i.gif"/>: <xsl:value-of select="@implemented_total"/>
|
||||
</SPAN>
|
||||
</xsl:if>
|
||||
<xsl:if test="@unimplemented_total">
|
||||
<SPAN class="st">
|
||||
<img src="u.gif"/>: <xsl:value-of select="@unimplemented_total"/>
|
||||
</SPAN>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="toggle">
|
||||
<xsl:choose>
|
||||
<xsl:when test="local-name() = 'component'">
|
||||
<IMG src="tp.gif" class="t"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<IMG src="tb.gif"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="name">
|
||||
<xsl:if test="@name">
|
||||
<SPAN class="l"><xsl:value-of select="@name"/></SPAN>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="n">
|
||||
<xsl:if test="@n">
|
||||
<SPAN class="l"><xsl:value-of select="@n"/></SPAN>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="file">
|
||||
<xsl:param name="base"/>
|
||||
<xsl:if test="@f">
|
||||
<SPAN class="h"><xsl:value-of select="$base"/><xsl:value-of select="@f"/></SPAN>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="publishPath" value="c:\iso" /> <!-- c:\iso or ftp://ftp.server.com/iso -->
|
||||
<add key="smtpServer" value="localhost" />
|
||||
<add key="errorEmail" value="mailbox@somewhere-on-the-net" />
|
||||
<add key="makeParameters" value="" />
|
||||
<add key="fastDisk" value="" />
|
||||
</appSettings>
|
||||
</configuration>
|
@@ -1,14 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: AssemblyTitle("ReactOS Sin Custom Revision Action")]
|
||||
[assembly: AssemblyDescription("ReactOS Sin Custom Revision Action")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("ReactOS Project")]
|
||||
[assembly: AssemblyProduct("React Operating System")]
|
||||
[assembly: AssemblyCopyright("Copyright 2005 ReactOS Project")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyDelaySign(false)]
|
||||
[assembly: AssemblyKeyFile("")]
|
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<project name="ReactOS.CustomRevisionAction" default="build">
|
||||
|
||||
<property name="output.dir" value="bin" />
|
||||
|
||||
<target name="build" description="Build component">
|
||||
<mkdir dir="${output.dir}" />
|
||||
<csc target="exe"
|
||||
output="${output.dir}\ReactOS.CustomRevisionAction.exe"
|
||||
optimize="true"
|
||||
debug="true"
|
||||
doc="${output.dir}\ReactOS.CustomRevisionAction.xml"
|
||||
warninglevel="0">
|
||||
<sources>
|
||||
<include name="*.cs" />
|
||||
</sources>
|
||||
</csc>
|
||||
</target>
|
||||
|
||||
</project>
|
File diff suppressed because it is too large
Load Diff
@@ -1,340 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Configuration;
|
||||
using System.Web.Mail;
|
||||
|
||||
namespace ReactOS.CustomRevisionAction
|
||||
{
|
||||
public class MainClass
|
||||
{
|
||||
/// <summary>
|
||||
/// Path to store published binaries at.
|
||||
/// </summary>
|
||||
private static string publishPath;
|
||||
|
||||
/// <summary>
|
||||
/// Whether or not to publish ISOs to a remote destination via FTP.
|
||||
/// </summary>
|
||||
private static bool PublishToRemoteFtpLocation
|
||||
{
|
||||
get
|
||||
{
|
||||
return publishPath.StartsWith("ftp://");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run the application.
|
||||
/// </summary>
|
||||
/// <param name="script">Script to run.</param>
|
||||
/// <param name="args">Arguments to pass to script.</param>
|
||||
/// <param name="workingDirectory">Working directory.</param>
|
||||
/// <param name="standardOutput">Receives standard output.</param>
|
||||
/// <param name="standardError">Receives standard error.</param>
|
||||
/// <returns>
|
||||
/// Exit code.
|
||||
/// </returns>
|
||||
private static int RunScript(string script,
|
||||
string args,
|
||||
string workingDirectory,
|
||||
out string standardOutput,
|
||||
out string standardError)
|
||||
{
|
||||
ProcessStartInfo scriptProcessStartInfo = new ProcessStartInfo(script,
|
||||
args);
|
||||
scriptProcessStartInfo.CreateNoWindow = true;
|
||||
/*
|
||||
* All standard streams must be redirected.
|
||||
* Otherwise DuplicateHandle() will fail.
|
||||
*/
|
||||
scriptProcessStartInfo.RedirectStandardInput = true;
|
||||
scriptProcessStartInfo.RedirectStandardError = true;
|
||||
scriptProcessStartInfo.RedirectStandardOutput = true;
|
||||
scriptProcessStartInfo.UseShellExecute = false;
|
||||
scriptProcessStartInfo.WorkingDirectory = workingDirectory;
|
||||
RedirectableProcess redirectableProcess = new RedirectableProcess(scriptProcessStartInfo);
|
||||
standardOutput = redirectableProcess.ProcessOutput;
|
||||
standardError = redirectableProcess.ProcessError;
|
||||
return redirectableProcess.ExitCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieve value of configuration from configuration file.
|
||||
/// </summary>
|
||||
/// <param name="name">Name of configuration option.</param>
|
||||
/// <param name="defaultValue">
|
||||
/// Default value to be returned if the option does not exist.
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// Value of configuration option or null if the option does not
|
||||
/// exist and no default value is provided.
|
||||
/// </returns>
|
||||
private static string GetConfigurationOption(string name,
|
||||
string defaultValue)
|
||||
{
|
||||
if (ConfigurationSettings.AppSettings[name] != null)
|
||||
return ConfigurationSettings.AppSettings[name];
|
||||
else
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send an email.
|
||||
/// </summary>
|
||||
/// <param name="subject">Subject of the email.</param>
|
||||
/// <param name="body">Content of the email.</param>
|
||||
private static void SendErrorMail(string subject, string body)
|
||||
{
|
||||
try
|
||||
{
|
||||
string smtpServer = GetConfigurationOption("smtpServer", "localhost");
|
||||
string toEmail = GetConfigurationOption("errorEmail", null);
|
||||
if (toEmail == null)
|
||||
return;
|
||||
string fromEmail = GetConfigurationOption("fromEmail", null);
|
||||
if (fromEmail == null)
|
||||
fromEmail = toEmail;
|
||||
MailMessage mm = new MailMessage();
|
||||
mm.Priority = MailPriority.Normal;
|
||||
mm.From = toEmail;
|
||||
mm.To = toEmail;
|
||||
mm.Subject = subject;
|
||||
mm.Body += body;
|
||||
mm.Body += "<br>";
|
||||
mm.BodyFormat = MailFormat.Html;
|
||||
SmtpMail.SmtpServer = smtpServer;
|
||||
SmtpMail.Send(mm);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fail with an error message.
|
||||
/// </summary>
|
||||
/// <param name="revision">Repository revision.</param>
|
||||
/// <param name="text">Error message.</param>
|
||||
private static void Fail(int revision,
|
||||
string text)
|
||||
{
|
||||
Console.WriteLine(text);
|
||||
Console.Error.WriteLine(text);
|
||||
SendErrorMail(String.Format("[{0}] ReactOS Publish Error", revision), text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fail with an error message.
|
||||
/// </summary>
|
||||
/// <param name="text">Error message.</param>
|
||||
private static void Fail(string text)
|
||||
{
|
||||
Console.WriteLine(text);
|
||||
Console.Error.WriteLine(text);
|
||||
SendErrorMail("ReactOS Publish Error", text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate filename of distribution.
|
||||
/// </summary>
|
||||
/// <param name="branch">Branch.</param>
|
||||
/// <param name="revision">Revision.</param>
|
||||
private static string GetDistributionFilename(string branch,
|
||||
int revision)
|
||||
{
|
||||
return String.Format("ReactOS-{0}-r{1}.iso",
|
||||
branch,
|
||||
revision);
|
||||
}
|
||||
|
||||
private static void SplitRemotePublishPath(string publishPath,
|
||||
out string server,
|
||||
out string directory)
|
||||
{
|
||||
string searchString = "://";
|
||||
int index = publishPath.IndexOf(searchString);
|
||||
if (index == -1)
|
||||
throw new InvalidOperationException();
|
||||
int endOfProtocolIndex = index + searchString.Length;
|
||||
string withoutProtocol = publishPath.Remove(0, endOfProtocolIndex);
|
||||
index = withoutProtocol.IndexOf("/");
|
||||
if (index == -1)
|
||||
{
|
||||
server = withoutProtocol;
|
||||
directory = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
server = withoutProtocol.Substring(0, index);
|
||||
directory = withoutProtocol.Remove(0, index + 1);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Copy ISO to the (remote) destination.
|
||||
/// </summary>
|
||||
/// <param name="sourceFilename">Name of source ISO file to copy.</param>
|
||||
/// <param name="branch">Branch.</param>
|
||||
/// <param name="revision">Revision.</param>
|
||||
/// <remarks>
|
||||
/// Structure is ftp://ftp.server.com/whereever/<branch>/ReactOS-<branch>-r<revision>.iso.
|
||||
/// </remarks>
|
||||
private static void CopyISOToRemoteFtpDestination(string sourceFilename,
|
||||
string branch,
|
||||
int revision)
|
||||
{
|
||||
string distributionFilename = GetDistributionFilename(branch,
|
||||
revision);
|
||||
string destinationFilename = Path.Combine(Path.GetDirectoryName(sourceFilename),
|
||||
distributionFilename);
|
||||
File.Move(sourceFilename, destinationFilename);
|
||||
string server;
|
||||
string directory;
|
||||
SplitRemotePublishPath(publishPath, out server, out directory);
|
||||
FtpClient ftpClient = new FtpClient(server, "anonymous", "sin@svn.reactos.com");
|
||||
ftpClient.Login();
|
||||
if (directory != "")
|
||||
ftpClient.ChangeDir(directory);
|
||||
/* Create destination directory if it does not already exist */
|
||||
if (!ftpClient.DirectoryExists(branch))
|
||||
ftpClient.MakeDir(branch);
|
||||
ftpClient.ChangeDir(branch);
|
||||
ftpClient.Upload(destinationFilename);
|
||||
ftpClient.Close();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Copy ISO to the (local) destination.
|
||||
/// </summary>
|
||||
/// <param name="sourceFilename">Name of source ISO file to copy.</param>
|
||||
/// <param name="branch">Branch.</param>
|
||||
/// <param name="revision">Revision.</param>
|
||||
/// <remarks>
|
||||
/// Structure is <branch>\ReactOS-<branch>-r<revision>.iso.
|
||||
/// </remarks>
|
||||
private static void CopyISOToLocalDestination(string sourceFilename,
|
||||
string branch,
|
||||
int revision)
|
||||
{
|
||||
string distributionFilename = GetDistributionFilename(branch,
|
||||
revision);
|
||||
string destinationDirectory = Path.Combine(publishPath,
|
||||
branch);
|
||||
string destinationFilename = Path.Combine(destinationDirectory,
|
||||
distributionFilename);
|
||||
if (!Directory.Exists(destinationDirectory))
|
||||
Directory.CreateDirectory(destinationDirectory);
|
||||
File.Copy(sourceFilename,
|
||||
destinationFilename);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Copy ISO to the destination.
|
||||
/// </summary>
|
||||
/// <param name="sourceFilename">Name of source ISO file to copy.</param>
|
||||
/// <param name="branch">Branch.</param>
|
||||
/// <param name="revision">Revision.</param>
|
||||
/// <remarks>
|
||||
/// Structure is <branch>\ReactOS-<branch>-r<revision>.iso.
|
||||
/// </remarks>
|
||||
private static void CopyISOToDestination(string sourceFilename,
|
||||
string branch,
|
||||
int revision)
|
||||
{
|
||||
if (PublishToRemoteFtpLocation)
|
||||
CopyISOToRemoteFtpDestination(sourceFilename, branch, revision);
|
||||
else
|
||||
CopyISOToLocalDestination(sourceFilename, branch, revision);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Publish a revision of ReactOS.
|
||||
/// </summary>
|
||||
/// <param name="text">Error message.</param>
|
||||
private static int Publish(string branch,
|
||||
int revision,
|
||||
string workingDirectory)
|
||||
{
|
||||
string make = "mingw32-make";
|
||||
string makeParameters = GetConfigurationOption("makeParameters", "");
|
||||
string reactosDirectory = Path.Combine(workingDirectory,
|
||||
"reactos");
|
||||
Console.WriteLine(String.Format("ReactOS directory is {0}",
|
||||
reactosDirectory));
|
||||
string standardOutput;
|
||||
string standardError;
|
||||
int exitCode = RunScript(make,
|
||||
makeParameters + " bootcd",
|
||||
reactosDirectory,
|
||||
out standardOutput,
|
||||
out standardError);
|
||||
if (exitCode != 0)
|
||||
{
|
||||
Fail(revision,
|
||||
String.Format("make bootcd failed: (error: {0}) {1}",
|
||||
standardError,
|
||||
standardOutput));
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
string sourceFilename = Path.Combine(reactosDirectory,
|
||||
"ReactOS.iso");
|
||||
if (File.Exists(sourceFilename))
|
||||
CopyISOToDestination(sourceFilename,
|
||||
branch,
|
||||
revision);
|
||||
else
|
||||
{
|
||||
Fail(revision,
|
||||
"make bootcd produced no ReactOS.iso");
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Program entry point.
|
||||
/// </summary>
|
||||
/// <param name="args">Arguments from command line.</param>
|
||||
/// <remarks>
|
||||
/// If exit code is 0, then the commit was processed successfully.
|
||||
/// If exit code is 1, then the commit was not processed successfully.
|
||||
/// </remarks>
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Environment.ExitCode = 1;
|
||||
|
||||
publishPath = ConfigurationSettings.AppSettings["publishPath"];
|
||||
if (publishPath == null)
|
||||
{
|
||||
Fail("PublishPath option not set.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Length < 3)
|
||||
{
|
||||
Fail("Usage: ReactOS.CustomRevisionAction action branch revision");
|
||||
return;
|
||||
}
|
||||
|
||||
string action = args[0]; /* bootcd */
|
||||
string branch = args[1];
|
||||
int revision = Int32.Parse(args[2]);
|
||||
|
||||
System.Environment.ExitCode = Publish(branch,
|
||||
revision,
|
||||
System.Environment.CurrentDirectory);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Fail(String.Format("Exception: {0}", ex));
|
||||
System.Environment.ExitCode = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,145 +0,0 @@
|
||||
/*
|
||||
* When using the ProcessStartInfo.RedirectStandardXxx properties there is a chance of
|
||||
* the parent and child process blocking due to a race condition. This class handles the
|
||||
* problem.
|
||||
* http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdiagnosticsprocessstartinfoclassredirectstandardoutputtopic.asp
|
||||
*/
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace ReactOS.CustomRevisionAction
|
||||
{
|
||||
/// <summary>
|
||||
/// Process that redirects standard output and standard error streams.
|
||||
/// </summary>
|
||||
public class RedirectableProcess
|
||||
{
|
||||
/// <summary>
|
||||
/// Process.
|
||||
/// </summary>
|
||||
private Process process;
|
||||
|
||||
/// <summary>
|
||||
/// Redirected standard error stream.
|
||||
/// </summary>
|
||||
private string processError;
|
||||
|
||||
/// <summary>
|
||||
/// Redirected standard output stream.
|
||||
/// </summary>
|
||||
private string processOutput;
|
||||
|
||||
/// <summary>
|
||||
/// Exit code.
|
||||
/// </summary>
|
||||
private int exitCode;
|
||||
|
||||
/// <summary>
|
||||
/// Redirected standard error stream.
|
||||
/// </summary>
|
||||
public string ProcessError
|
||||
{
|
||||
get
|
||||
{
|
||||
return processError;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Redirected standard output stream.
|
||||
/// </summary>
|
||||
public string ProcessOutput
|
||||
{
|
||||
get
|
||||
{
|
||||
return processOutput;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Exit code.
|
||||
/// </summary>
|
||||
public int ExitCode
|
||||
{
|
||||
get
|
||||
{
|
||||
return exitCode;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run an excutable and redirect standard error and/or standard output safely.
|
||||
/// </summary>
|
||||
public RedirectableProcess(ProcessStartInfo processStartInfo)
|
||||
{
|
||||
Run(processStartInfo, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run an excutable and redirect standard error and/or standard output safely.
|
||||
/// </summary>
|
||||
public RedirectableProcess(ProcessStartInfo processStartInfo, string input)
|
||||
{
|
||||
Run(processStartInfo, input);
|
||||
}
|
||||
|
||||
private void Run(ProcessStartInfo processStartInfo, string input)
|
||||
{
|
||||
process = new Process();
|
||||
process.StartInfo = processStartInfo;
|
||||
process.Start();
|
||||
if (processStartInfo.RedirectStandardInput && input != null)
|
||||
{
|
||||
process.StandardInput.AutoFlush = true;
|
||||
process.StandardInput.WriteLine(input);
|
||||
}
|
||||
Thread readStandardError = null;
|
||||
if (processStartInfo.RedirectStandardError)
|
||||
{
|
||||
readStandardError = new Thread(new ThreadStart(ReadStandardError));
|
||||
readStandardError.Start();
|
||||
}
|
||||
Thread readStandardOutput = null;
|
||||
if (processStartInfo.RedirectStandardOutput)
|
||||
{
|
||||
readStandardOutput = new Thread(new ThreadStart(ReadStandardOutput));
|
||||
readStandardOutput.Start();
|
||||
}
|
||||
if (processStartInfo.RedirectStandardError)
|
||||
{
|
||||
readStandardError.Join();
|
||||
}
|
||||
if (processStartInfo.RedirectStandardOutput)
|
||||
{
|
||||
readStandardOutput.Join();
|
||||
}
|
||||
process.WaitForExit();
|
||||
exitCode = process.ExitCode;
|
||||
process = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read standard error thread entry-point.
|
||||
/// </summary>
|
||||
private void ReadStandardError()
|
||||
{
|
||||
if (process != null)
|
||||
{
|
||||
processError = process.StandardError.ReadToEnd();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read standard output thread entry-point.
|
||||
/// </summary>
|
||||
private void ReadStandardOutput()
|
||||
{
|
||||
if (process != null)
|
||||
{
|
||||
processOutput = process.StandardOutput.ReadToEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
/* Rename to config.php */
|
||||
|
||||
define(ISO_BASE_URL, "http://www.server.com/iso/");
|
||||
define(ISO_PATH, "C:\\iso\\");
|
||||
|
||||
?>
|
@@ -1,230 +0,0 @@
|
||||
<?php
|
||||
|
||||
include ('config.php');
|
||||
|
||||
function dm_usort_cmp ($a, $b) {
|
||||
if ($a == $b) return 0;
|
||||
return ($a > $b) ? -1 : 1;
|
||||
}
|
||||
|
||||
function dm_usort_cmp_desc ($a, $b) {
|
||||
if ($a == $b) return 0;
|
||||
return ($a > $b) ? 1 : -1;
|
||||
}
|
||||
|
||||
function printHeader()
|
||||
{
|
||||
?>
|
||||
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>ReactOS Revison ISOs</title>
|
||||
<meta name="generator" content="Editpad">
|
||||
<meta name="keywords" content="OS, ReactOS, operating system">
|
||||
<meta name="author" content="ReactOS Project (ros-dev@reactos.com)">
|
||||
<style>
|
||||
.box
|
||||
{
|
||||
padding: 0px;
|
||||
background-color: #88aadd;
|
||||
border-left: 1px solid #f0f0f0;
|
||||
border-right: 1px solid #000000;
|
||||
border-top: 1px solid #f0f0f0;
|
||||
border-bottom: 1px solid #000000;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body bgcolor="#88aadd">
|
||||
<form method="post" action="">
|
||||
<?php
|
||||
}
|
||||
|
||||
function printMenu($revision)
|
||||
{
|
||||
?>
|
||||
<table border="0" class="box" cellpadding="5">
|
||||
<tr>
|
||||
<td height="2px">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td>
|
||||
<b>Branch:</b>
|
||||
</td>
|
||||
<td>
|
||||
<select name="branch" tabindex="1">
|
||||
<?php
|
||||
|
||||
$d = dir(ISO_PATH);
|
||||
$i = 0;
|
||||
$dirlist = array();
|
||||
while (false !== ($entry = $d->read())) {
|
||||
if ((strcasecmp($entry, ".") != 0) && (strcasecmp($entry, "..") != 0) && is_dir(ISO_PATH . "\\" . $entry) == "dir") {
|
||||
$dirlist[$i++] = $entry;
|
||||
}
|
||||
}
|
||||
$d->close();
|
||||
|
||||
if (is_array($dirlist)) {
|
||||
usort($dirlist, "dm_usort_cmp");
|
||||
reset($dirlist);
|
||||
while (list($key, $val) = each($dirlist)) {
|
||||
$branch = $val;
|
||||
if ($branch == $_POST["branch"] || (!isset($_POST["branch"]) && $branch == "trunk"))
|
||||
$selected = " selected";
|
||||
else
|
||||
$selected = "";
|
||||
echo "<option$selected>$branch</option>";
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<b>Revision:</b>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
echo "<input type=\"text\" name=\"revision\" size=\"10\" maxlength=\"10\" tabindex=\"2\" value=\"" . $revision . "\"></input>";
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<input type="submit" name="getiso" value="Download" tabindex="3" style="border: 1px solid #000000"></input>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="7">
|
||||
<hr size="2" width="100%" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<input type="submit" name="getnextiso" value="Next ISO" tabindex="4" style="border: 1px solid #000000"></input>
|
||||
</td>
|
||||
<td colspan="3" align="right">
|
||||
<input type="submit" name="getlatestiso" value="Latest ISO" tabindex="5" style="border: 1px solid #000000"></input>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="2px">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
function printFooter()
|
||||
{
|
||||
?>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
var revision = document.getElementById('revision');
|
||||
if (revision) revision.focus();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
}
|
||||
|
||||
function locateRevisionISO($branch, $revision, $latest)
|
||||
{
|
||||
$revision = intval($revision);
|
||||
$path = ISO_PATH . "\\" . $branch;
|
||||
$d = dir($path);
|
||||
$i = 0;
|
||||
$filelist = array();
|
||||
while (false !== ($entry = $d->read())) {
|
||||
if (is_dir($path . "\\" . $entry) != "dir")
|
||||
$filelist[$i++] = $entry;
|
||||
}
|
||||
$d->close();
|
||||
|
||||
if (is_array($filelist)) {
|
||||
$sortFunction = $latest ? "dm_usort_cmp" : "dm_usort_cmp_desc";
|
||||
usort($filelist, $sortFunction);
|
||||
reset($filelist);
|
||||
while (list($key, $filename) = each($filelist)) {
|
||||
if (ereg('ReactOS-' . $branch . '-r([0-9]*).iso', $filename, $regs))
|
||||
{
|
||||
$thisRevision = intval($regs[1]);
|
||||
if (($latest) && ($thisRevision < $revision))
|
||||
return $regs[1];
|
||||
else if ($thisRevision > $revision)
|
||||
return $regs[1];
|
||||
$lastRevision = $thisRevision;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
function getNextRevisionISO($branch, $revision)
|
||||
{
|
||||
return locateRevisionISO($branch, $revision, false);
|
||||
}
|
||||
|
||||
function getLatestRevisionISO($branch)
|
||||
{
|
||||
return locateRevisionISO($branch, 999999, true);
|
||||
}
|
||||
|
||||
function main()
|
||||
{
|
||||
$branch = $_POST["branch"];
|
||||
$revision = $_POST["revision"];
|
||||
|
||||
$filename = "ReactOS-" . $branch . "-r" . $revision . ".iso";
|
||||
if (file_exists(ISO_PATH . $branch . "\\" . $filename))
|
||||
{
|
||||
$location = ISO_BASE_URL . $branch . "/" . $filename;
|
||||
header("Location: $location");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
printHeader();
|
||||
printMenu($_POST["revision"]);
|
||||
echo "<br><b>No ISO exist for branch '" . $branch . "' and revision " . $revision . ".</b><br><br>";
|
||||
printFooter();
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($_POST["getiso"]) && !empty($_POST["branch"]) && !empty($_POST["revision"]) && is_numeric($_POST["revision"]))
|
||||
main();
|
||||
else if (!empty($_POST["getnextiso"]) && !empty($_POST["branch"]) && !empty($_POST["revision"]) && is_numeric($_POST["revision"]))
|
||||
{
|
||||
printHeader();
|
||||
printMenu(getNextRevisionISO($_POST["branch"], $_POST["revision"]));
|
||||
printFooter();
|
||||
}
|
||||
else if (!empty($_POST["getlatestiso"]) && !empty($_POST["branch"]))
|
||||
{
|
||||
printHeader();
|
||||
printMenu(getLatestRevisionISO($_POST["branch"]));
|
||||
printFooter();
|
||||
}
|
||||
else
|
||||
{
|
||||
printHeader();
|
||||
printMenu($_POST["revision"]);
|
||||
printFooter();
|
||||
}
|
||||
|
||||
?>
|
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="smtpServer" value="localhost" />
|
||||
<add key="errorEmail" value="mailbox@somewhere-on-the-net" />
|
||||
<add key="makeParameters" value="" />
|
||||
<add key="fastDisk" value="" />
|
||||
</appSettings>
|
||||
</configuration>
|
@@ -1,14 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: AssemblyTitle("ReactOS Sin Verifier")]
|
||||
[assembly: AssemblyDescription("ReactOS Sin Verifier")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("ReactOS Project")]
|
||||
[assembly: AssemblyProduct("React Operating System")]
|
||||
[assembly: AssemblyCopyright("Copyright 2005 ReactOS Project")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyDelaySign(false)]
|
||||
[assembly: AssemblyKeyFile("")]
|
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<project name="ReactOS.Verify" default="build">
|
||||
|
||||
<property name="output.dir" value="bin" />
|
||||
|
||||
<target name="build" description="Build component">
|
||||
<mkdir dir="${output.dir}" />
|
||||
<csc target="exe"
|
||||
output="${output.dir}\ReactOS.Verify.exe"
|
||||
optimize="true"
|
||||
debug="true"
|
||||
doc="${output.dir}\ReactOS.Verify.xml"
|
||||
warninglevel="0">
|
||||
<sources>
|
||||
<include name="*.cs" />
|
||||
</sources>
|
||||
</csc>
|
||||
</target>
|
||||
|
||||
</project>
|
@@ -1,279 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Configuration;
|
||||
using System.Web.Mail;
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace ReactOS.Verify
|
||||
{
|
||||
public class MainClass
|
||||
{
|
||||
/// <summary>
|
||||
/// Run the application.
|
||||
/// </summary>
|
||||
/// <param name="script">Script to run.</param>
|
||||
/// <param name="args">Arguments to pass to script.</param>
|
||||
/// <param name="workingDirectory">Working directory.</param>
|
||||
/// <param name="standardOutput">Receives standard output.</param>
|
||||
/// <param name="standardError">Receives standard error.</param>
|
||||
/// <returns>
|
||||
/// Exit code.
|
||||
/// </returns>
|
||||
private static int RunScript(string script,
|
||||
string args,
|
||||
string workingDirectory,
|
||||
StringDictionary environmentVarables,
|
||||
out string standardOutput,
|
||||
out string standardError)
|
||||
{
|
||||
ProcessStartInfo scriptProcessStartInfo = new ProcessStartInfo(script,
|
||||
args);
|
||||
scriptProcessStartInfo.CreateNoWindow = true;
|
||||
/*
|
||||
* All standard streams must be redirected.
|
||||
* Otherwise DuplicateHandle() will fail.
|
||||
*/
|
||||
scriptProcessStartInfo.RedirectStandardInput = true;
|
||||
scriptProcessStartInfo.RedirectStandardError = true;
|
||||
scriptProcessStartInfo.RedirectStandardOutput = true;
|
||||
scriptProcessStartInfo.UseShellExecute = false;
|
||||
scriptProcessStartInfo.WorkingDirectory = workingDirectory;
|
||||
if (environmentVarables != null)
|
||||
{
|
||||
foreach (DictionaryEntry de in environmentVarables)
|
||||
scriptProcessStartInfo.EnvironmentVariables.Add(de.Key as string, de.Value as string);
|
||||
}
|
||||
RedirectableProcess redirectableProcess = new RedirectableProcess(scriptProcessStartInfo);
|
||||
standardOutput = redirectableProcess.ProcessOutput;
|
||||
standardError = redirectableProcess.ProcessError;
|
||||
return redirectableProcess.ExitCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieve value of configuration from configuration file.
|
||||
/// </summary>
|
||||
/// <param name="name">Name of configuration option.</param>
|
||||
/// <param name="defaultValue">
|
||||
/// Default value to be returned if the option does not exist.
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// Value of configuration option or null if the option does not
|
||||
/// exist and no default value is provided.
|
||||
/// </returns>
|
||||
private static string GetConfigurationOption(string name,
|
||||
string defaultValue)
|
||||
{
|
||||
if (ConfigurationSettings.AppSettings[name] != null)
|
||||
{
|
||||
string s = ConfigurationSettings.AppSettings[name].Trim();
|
||||
return s.Equals(String.Empty) ? defaultValue : s;
|
||||
}
|
||||
else
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send an email.
|
||||
/// </summary>
|
||||
/// <param name="subject">Subject of the email.</param>
|
||||
/// <param name="body">Content of the email.</param>
|
||||
private static void SendErrorMail(string subject, string body)
|
||||
{
|
||||
try
|
||||
{
|
||||
string smtpServer = GetConfigurationOption("smtpServer", "localhost");
|
||||
string email = GetConfigurationOption("errorEmail", null);
|
||||
if (email == null)
|
||||
return;
|
||||
MailMessage mm = new MailMessage();
|
||||
mm.Priority = MailPriority.Normal;
|
||||
mm.From = email;
|
||||
mm.To = email;
|
||||
mm.Subject = subject;
|
||||
mm.Body += body;
|
||||
mm.Body += "<br>";
|
||||
mm.BodyFormat = MailFormat.Html;
|
||||
SmtpMail.SmtpServer = smtpServer;
|
||||
SmtpMail.Send(mm);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fail with an error message.
|
||||
/// </summary>
|
||||
/// <param name="text">Error message.</param>
|
||||
private static void Fail(string text)
|
||||
{
|
||||
Console.WriteLine(text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Paths to fast disk for temporary files.
|
||||
/// </summary>
|
||||
private static string TemporaryFastDisk
|
||||
{
|
||||
get
|
||||
{
|
||||
string temporaryFastDisk = GetConfigurationOption("temporaryFastDisk", null);
|
||||
if (temporaryFastDisk == null || temporaryFastDisk.Trim().Equals(String.Empty))
|
||||
return null;
|
||||
return temporaryFastDisk.Trim();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Paths to fast disk for intermediate files.
|
||||
/// </summary>
|
||||
private static string IntermediateFastDisk
|
||||
{
|
||||
get
|
||||
{
|
||||
string intermediateFastDisk = GetConfigurationOption("intermediateFastDisk", null);
|
||||
if (intermediateFastDisk == null || intermediateFastDisk.Trim().Equals(String.Empty))
|
||||
return null;
|
||||
return intermediateFastDisk.Trim();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Paths to fast disk for output files.
|
||||
/// </summary>
|
||||
private static string OutputFastDisk
|
||||
{
|
||||
get
|
||||
{
|
||||
string outputFastDisk = GetConfigurationOption("outputFastDisk", null);
|
||||
if (outputFastDisk == null || outputFastDisk.Trim().Equals(String.Empty))
|
||||
return null;
|
||||
return outputFastDisk.Trim();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return collection of environment variables.
|
||||
/// </summary>
|
||||
/// <returns>Collection of environment variables or null if there is none.</returns>
|
||||
private static StringDictionary GetEnvironmentVarables()
|
||||
{
|
||||
StringDictionary environmentVarables = new StringDictionary();
|
||||
if (TemporaryFastDisk != null)
|
||||
environmentVarables.Add("ROS_TEMPORARY", TemporaryFastDisk);
|
||||
if (IntermediateFastDisk != null)
|
||||
environmentVarables.Add("ROS_INTERMEDIATE", IntermediateFastDisk);
|
||||
if (OutputFastDisk != null)
|
||||
environmentVarables.Add("ROS_OUTPUT", OutputFastDisk);
|
||||
return environmentVarables;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run make.
|
||||
/// </summary>
|
||||
/// <param name="arguments">Arguments.</param>
|
||||
/// <param name="standardOutput">Receives standard output.</param>
|
||||
/// <param name="standardError">Receives standard error.</param>
|
||||
/// <returns>Make exit code.</returns>
|
||||
private static int RunMake(string arguments,
|
||||
out string standardOutput,
|
||||
out string standardError)
|
||||
{
|
||||
string make = "mingw32-make";
|
||||
string makeParameters = GetConfigurationOption("makeParameters", "");
|
||||
string reactosDirectory = Path.Combine(System.Environment.CurrentDirectory,
|
||||
"reactos");
|
||||
return RunScript(make,
|
||||
makeParameters + " " + arguments,
|
||||
reactosDirectory,
|
||||
GetEnvironmentVarables(),
|
||||
out standardOutput,
|
||||
out standardError);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verify a revision of ReactOS by building it all.
|
||||
/// </summary>
|
||||
private static int VerifyFull()
|
||||
{
|
||||
string standardOutput;
|
||||
string standardError;
|
||||
int exitCode = RunMake("bootcd",
|
||||
out standardOutput,
|
||||
out standardError);
|
||||
if (exitCode != 0)
|
||||
{
|
||||
Fail(String.Format("make bootcd failed: (error: {0}) {1}",
|
||||
standardError,
|
||||
standardOutput));
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
string reactosDirectory = Path.Combine(System.Environment.CurrentDirectory,
|
||||
"reactos");
|
||||
string isoFilename = Path.Combine(reactosDirectory,
|
||||
"ReactOS.iso");
|
||||
if (!File.Exists(isoFilename))
|
||||
Fail("make bootcd produced no ReactOS.iso");
|
||||
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verify a revision of ReactOS by building parts.
|
||||
/// </summary>
|
||||
/// <param name="components">Comma separated list of components to build.</param>
|
||||
private static int VerifyPartial(string components)
|
||||
{
|
||||
string standardOutput;
|
||||
string standardError;
|
||||
string componentParameters = "\"" + components.Replace(",", "\" \"") + "\"";
|
||||
int exitCode = RunMake(componentParameters,
|
||||
out standardOutput,
|
||||
out standardError);
|
||||
if (exitCode != 0)
|
||||
Fail(String.Format("make failed for targets {0}: (error: {1}) {2}",
|
||||
componentParameters,
|
||||
standardError,
|
||||
standardOutput));
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verify a revision of ReactOS.
|
||||
/// </summary>
|
||||
/// <param name="args">Arguments from command line.</param>
|
||||
private static int Verify(string[] args)
|
||||
{
|
||||
if (args.Length > 0)
|
||||
return VerifyPartial(args[0]);
|
||||
else
|
||||
return VerifyFull();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Program entry point.
|
||||
/// </summary>
|
||||
/// <param name="args">Arguments from command line.</param>
|
||||
/// <remarks>
|
||||
/// If exit code is 0, then the commit was processed successfully.
|
||||
/// If exit code is 1, then the commit was not processed successfully.
|
||||
/// </remarks>
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Environment.ExitCode = Verify(args);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
string text = String.Format("Exception: {0}", ex);
|
||||
SendErrorMail("ReactOS Verify Error", text);
|
||||
System.Environment.ExitCode = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,145 +0,0 @@
|
||||
/*
|
||||
* When using the ProcessStartInfo.RedirectStandardXxx properties there is a chance of
|
||||
* the parent and child process blocking due to a race condition. This class handles the
|
||||
* problem.
|
||||
* http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdiagnosticsprocessstartinfoclassredirectstandardoutputtopic.asp
|
||||
*/
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace ReactOS.Verify
|
||||
{
|
||||
/// <summary>
|
||||
/// Process that redirects standard output and standard error streams.
|
||||
/// </summary>
|
||||
public class RedirectableProcess
|
||||
{
|
||||
/// <summary>
|
||||
/// Process.
|
||||
/// </summary>
|
||||
private Process process;
|
||||
|
||||
/// <summary>
|
||||
/// Redirected standard error stream.
|
||||
/// </summary>
|
||||
private string processError;
|
||||
|
||||
/// <summary>
|
||||
/// Redirected standard output stream.
|
||||
/// </summary>
|
||||
private string processOutput;
|
||||
|
||||
/// <summary>
|
||||
/// Exit code.
|
||||
/// </summary>
|
||||
private int exitCode;
|
||||
|
||||
/// <summary>
|
||||
/// Redirected standard error stream.
|
||||
/// </summary>
|
||||
public string ProcessError
|
||||
{
|
||||
get
|
||||
{
|
||||
return processError;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Redirected standard output stream.
|
||||
/// </summary>
|
||||
public string ProcessOutput
|
||||
{
|
||||
get
|
||||
{
|
||||
return processOutput;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Exit code.
|
||||
/// </summary>
|
||||
public int ExitCode
|
||||
{
|
||||
get
|
||||
{
|
||||
return exitCode;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run an excutable and redirect standard error and/or standard output safely.
|
||||
/// </summary>
|
||||
public RedirectableProcess(ProcessStartInfo processStartInfo)
|
||||
{
|
||||
Run(processStartInfo, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run an excutable and redirect standard error and/or standard output safely.
|
||||
/// </summary>
|
||||
public RedirectableProcess(ProcessStartInfo processStartInfo, string input)
|
||||
{
|
||||
Run(processStartInfo, input);
|
||||
}
|
||||
|
||||
private void Run(ProcessStartInfo processStartInfo, string input)
|
||||
{
|
||||
process = new Process();
|
||||
process.StartInfo = processStartInfo;
|
||||
process.Start();
|
||||
if (processStartInfo.RedirectStandardInput && input != null)
|
||||
{
|
||||
process.StandardInput.AutoFlush = true;
|
||||
process.StandardInput.WriteLine(input);
|
||||
}
|
||||
Thread readStandardError = null;
|
||||
if (processStartInfo.RedirectStandardError)
|
||||
{
|
||||
readStandardError = new Thread(new ThreadStart(ReadStandardError));
|
||||
readStandardError.Start();
|
||||
}
|
||||
Thread readStandardOutput = null;
|
||||
if (processStartInfo.RedirectStandardOutput)
|
||||
{
|
||||
readStandardOutput = new Thread(new ThreadStart(ReadStandardOutput));
|
||||
readStandardOutput.Start();
|
||||
}
|
||||
if (processStartInfo.RedirectStandardError)
|
||||
{
|
||||
readStandardError.Join();
|
||||
}
|
||||
if (processStartInfo.RedirectStandardOutput)
|
||||
{
|
||||
readStandardOutput.Join();
|
||||
}
|
||||
process.WaitForExit();
|
||||
exitCode = process.ExitCode;
|
||||
process = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read standard error thread entry-point.
|
||||
/// </summary>
|
||||
private void ReadStandardError()
|
||||
{
|
||||
if (process != null)
|
||||
{
|
||||
processError = process.StandardError.ReadToEnd();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read standard output thread entry-point.
|
||||
/// </summary>
|
||||
private void ReadStandardOutput()
|
||||
{
|
||||
if (process != null)
|
||||
{
|
||||
processOutput = process.StandardOutput.ReadToEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,2 +0,0 @@
|
||||
*.ncb
|
||||
*.opt
|
102
msvc6/README.txt
102
msvc6/README.txt
@@ -1,102 +0,0 @@
|
||||
ReactOS Microsoft Visual C/C++ 6.0 IDE files
|
||||
|
||||
This is the Microsoft Visual C/C++ 6.0 project workspace and project
|
||||
files for a few of the ReactOS binaries. They are ONLY included as a
|
||||
convenience, and is NOT to be considered supported, or even correct.
|
||||
If you build a binary that misbehaves using these files, you _might_
|
||||
be able to get in touch with someone to fix the problem
|
||||
BUT DO NOT COUNT ON IT!
|
||||
|
||||
The only supported build system for ReactOS is the one documented at
|
||||
www.reactos.com.
|
||||
|
||||
------------------------------------------------------------------
|
||||
Please, before you start playing with this, read the whole of
|
||||
this document.
|
||||
|
||||
Before you can use these project files, you _need_ to make a successful
|
||||
build using the normal ReactOS build system. There are some vital files
|
||||
that needs to be created, and currently only the normal build creates these.
|
||||
|
||||
Once that is done, you need to generate the kernel-mode service "table"
|
||||
file by running nmake (from this point on you can use the "native"
|
||||
MSVC tools) from the directory MSVC6\iface\native.
|
||||
This will generate MSVC6\ntoskrnl\nt_zw_msvc.c, an MSVC compatible inline-
|
||||
assembler version of the file otherwise known as reactos\ntoskrnl\nt\zw.c.
|
||||
|
||||
Next, go to def_converter and run nmake. This builds the tool to convert
|
||||
the .def files for HAL and the kernel from the MinGW format to something
|
||||
more suitable for the MSVC linker, and also generates these .def files
|
||||
to their target location [1].
|
||||
|
||||
Now you should be set to fire up the IDE and load the project workspace.
|
||||
|
||||
|
||||
When building HAL or the kernel for the first time using these
|
||||
project files, just doing it the "normal" way _will not work_.
|
||||
The linker will complain about missing library, and it will fail.
|
||||
|
||||
The reason for this is a circular dependency between these two binaries.
|
||||
|
||||
Currently you need to follow these procedures [2]:
|
||||
|
||||
- Select hal as your active project.
|
||||
- Select Project/Settings.
|
||||
- Select the Link tab.
|
||||
- Select "General" from the Category drop-list.
|
||||
- Temporary remove the explicit linker library
|
||||
(e.g. "..\ntoskrnl\Debug\ntoskrnl.lib")
|
||||
- Select "Customize" from the Category drop-list.
|
||||
- Check the "Force file output" checkbox.
|
||||
- Build hal.
|
||||
- Uncheck "Force file output".
|
||||
- Put back the removed import library.
|
||||
- Now build the ntoskrnl. Do NOT try to build hal again until
|
||||
you have sucessfully built the kernel, and the linker has
|
||||
generated its import library!
|
||||
- Now you can "Clean" hal, and build it as usual.
|
||||
|
||||
If everything worked as expected, you should now have both ntoskrnl.exe
|
||||
and hal.dll freshly built.
|
||||
|
||||
|
||||
LIMITATIONS/DEVIATIONS (from the MinGW build):
|
||||
- Since there can only be one resource file/project, the kernel had
|
||||
to choose between either its version resource, or its message table.
|
||||
The messages won.
|
||||
- Do NOT open the .rc files in the IDE's resource editor. Chances are
|
||||
it will assume ownership over them and fill them up with at least
|
||||
conditional compilation macros.
|
||||
|
||||
|
||||
NOTES:
|
||||
|
||||
[1] This is needed due to differences in handling of decorated names
|
||||
in .def files. While both MinGW GCC and MSVC generates decorated names
|
||||
in the same way for at least plain cdecl and stdcall C functions, the
|
||||
MSVC linker expects names in the .def file to be either
|
||||
|
||||
- an exact match of the decorated name, in case it exports the
|
||||
decorated name from the linked binary, or
|
||||
- just the name without any decoration, in case it exports just the
|
||||
name of the symbol from the linked binary (to allow for e.g.
|
||||
GetProcAddress using the undecorated name) - but keeps the decorated
|
||||
names in the import library to handle and "redirect" linker requests
|
||||
for those decorated symbols, and point them to the undercorated names
|
||||
in the binary exporting them - so that a binary A, at link time,
|
||||
importing symbols from binary B of the form "_name@0" will resolve
|
||||
that symbol from the import library, but the linked binary A will
|
||||
reference it as just "name".
|
||||
|
||||
The ROS .def files contains a mix, "half-decorated", where the leading
|
||||
undescores are missing, but the trailing "@n" (for stdcall functions)
|
||||
are present.
|
||||
|
||||
|
||||
[2] Theoretically it could be possible to use a hal.lib generated by the
|
||||
following procedure, removing the need for the manual steps above.
|
||||
|
||||
cd MSVC6\hal\Debug
|
||||
lib \def:..\..\..\reactos\hal\hal\hal.def
|
||||
|
||||
but I have not tested it, and take no responsibility for its effectiveness.
|
@@ -1,41 +0,0 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "hal"=.\hal\hal.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "ntoskrnl"=.\ntoskrnl\ntoskrnl.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
@@ -1,64 +0,0 @@
|
||||
// Uses hard-coded filenames to require a minimum of input.
|
||||
// You think this file should be licensed? OK then,
|
||||
// Copyright (C) 2004, Mike Nordell. Use as you whish.
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
|
||||
const char szSrc1[] = "..\\..\\reactos\\ntoskrnl\\ntoskrnl.def";
|
||||
const char szDst1[] = "..\\ntoskrnl\\ntoskrnl.def";
|
||||
const char szSrc2[] = "..\\..\\reactos\\hal\\hal\\hal.def";
|
||||
const char szDst2[] = "..\\hal\\hal.def";
|
||||
|
||||
enum File
|
||||
{
|
||||
Kernel,
|
||||
HAL
|
||||
};
|
||||
|
||||
std::string do_kernel_replacements(std::string& s)
|
||||
{
|
||||
std::string s2 = s.c_str(); // to fixup size after replacements
|
||||
if (s2 == "ExAllocateFromPagedLookasideList") {
|
||||
s2 += "=ExiAllocateFromPagedLookasideList";
|
||||
} else
|
||||
if (s2 == "ExFreeToPagedLookasideList") {
|
||||
s2 += "=ExiFreeToPagedLookasideList";
|
||||
} else
|
||||
if (s2 == "MmLockPagableImageSection") {
|
||||
s2 += "=MmLockPagableDataSection";
|
||||
}
|
||||
return s2;
|
||||
}
|
||||
|
||||
void convert_def(const char* szSrc, const char* szDst, File file)
|
||||
{
|
||||
using namespace std;
|
||||
ifstream in(szSrc);
|
||||
ofstream out(szDst);
|
||||
string s;
|
||||
while (getline(in, s).good()) {
|
||||
if (!s.size()) {
|
||||
continue;
|
||||
}
|
||||
if (s[0] != ';') { // only replace non-comment lines
|
||||
if (s[0] == '@') {
|
||||
s.erase(0, 1);
|
||||
}
|
||||
replace(s.begin(), s.end(), '@', '\0');
|
||||
if (file == Kernel) {
|
||||
s = do_kernel_replacements(s);
|
||||
}
|
||||
}
|
||||
out << s << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
convert_def(szSrc1, szDst1, Kernel);
|
||||
convert_def(szSrc2, szDst2, HAL);
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1,19 +0,0 @@
|
||||
# $Id$
|
||||
#
|
||||
# ReactOS Operating System - .def converter for HAL and the kernel
|
||||
#
|
||||
|
||||
DEF_HAL = ..\hal\hal.def
|
||||
DEF_KRNL = ..\ntoskrnl\ntoskrnl.def
|
||||
CPPFLAGS = /GX
|
||||
|
||||
all: def_converter.exe $(DEF_HAL) $(DEF_KRNL)
|
||||
|
||||
$(DEF_HAL) : ..\..\reactos\hal\hal\hal.def
|
||||
def_converter.exe
|
||||
|
||||
$(DEF_KRNL) : ..\..\reactos\ntoskrnl\ntoskrnl.def
|
||||
def_converter.exe
|
||||
|
||||
def_converter.exe : def_converter.cpp
|
||||
|
@@ -1,3 +0,0 @@
|
||||
Debug
|
||||
Release
|
||||
hal.def
|
@@ -1,243 +0,0 @@
|
||||
# Microsoft Developer Studio Project File - Name="hal" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
||||
|
||||
CFG=hal - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "hal.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "hal.mak" CFG="hal - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "hal - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
|
||||
!MESSAGE "hal - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "hal - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HAL_EXPORTS" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /Ot /Og /Os /Ob1 /I "..\..\reactos\include" /I "..\..\reactos\hal\halx86\include" /I "..\..\reactos\ntoskrnl\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "i386" /D "__NTHAL__" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x41d /d "NDEBUG"
|
||||
# ADD RSC /l 0x417 /i "..\..\reactos\include" /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 /nologo /dll /machine:I386
|
||||
# ADD LINK32 ..\ntoskrnl\Release\ntoskrnl.lib /nologo /dll /machine:I386 /fixed:no
|
||||
# SUBTRACT LINK32 /pdb:none /force
|
||||
|
||||
!ELSEIF "$(CFG)" == "hal - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HAL_EXPORTS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Z7 /Od /I "..\..\reactos\include" /I "..\..\reactos\hal\halx86\include" /I "..\..\reactos\ntoskrnl\include" /D "_WINDOWS" /D "__NTHAL__" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "i386" /FD /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x41d /d "_DEBUG"
|
||||
# ADD RSC /l 0x417 /i "..\..\reactos\include" /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 ..\ntoskrnl\Debug\ntoskrnl.lib /nologo /dll /incremental:no /debug /machine:I386 /pdbtype:sept /fixed:no
|
||||
# SUBTRACT LINK32 /pdb:none
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "hal - Win32 Release"
|
||||
# Name "hal - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\adapter.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\beep.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\bus.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\display.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\dma.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\drive.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\enum.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\fmutex.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\fmutex_tmn.c
|
||||
# PROP Exclude_From_Build 1
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\halinit.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\halx86mp.rc
|
||||
# PROP Exclude_From_Build 1
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\halx86up.rc
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\irql.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\isa.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\kdbg.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\mca.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\misc.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\mp.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\mpsirql.c
|
||||
# PROP Exclude_From_Build 1
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\pci.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\portio.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\pwroff.c
|
||||
# PROP Exclude_From_Build 1
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\reboot.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\spinlock.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\spinlock_tmn.c
|
||||
# PROP Exclude_From_Build 1
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\sysbus.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\sysinfo.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\time.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\timer.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "include"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\include\bus.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\include\hal.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\reactos\hal\halx86\include\mps.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\hal.def
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
@@ -1,22 +0,0 @@
|
||||
# $Id$
|
||||
#
|
||||
# ReactOS Operating System - MSVC6 Zw functions stubs to call generator
|
||||
#
|
||||
|
||||
SYSTEM_CALLS_DB = ..\..\..\reactos\iface\native\sysfuncs.lst
|
||||
KERNEL_ZW_CALLS =..\..\ntoskrnl\nt_zw_msvc.c
|
||||
|
||||
all: genntdll.exe $(KERNEL_ZW_CALLS)
|
||||
|
||||
$(KERNEL_ZW_CALLS) : $(SYSTEM_CALLS_DB)
|
||||
genntdll.exe $(SYSTEM_CALLS_DB) foo1 foo2 $(KERNEL_ZW_CALLS)
|
||||
-@del foo1
|
||||
-@del foo2
|
||||
|
||||
genntdll.exe : genntdll.c
|
||||
|
||||
clean:
|
||||
-@del *.exe
|
||||
-@del *.obj
|
||||
-@del $(KERNEL_ZW_CALLS)
|
||||
|
@@ -1,4 +0,0 @@
|
||||
Debug
|
||||
Release
|
||||
nt_zw_msvc.c
|
||||
ntoskrnl.def
|
@@ -1,167 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2000 David Welch <welch@cwcom.net>
|
||||
*
|
||||
* Moved to MSVC-compatible inline assembler by Mike Nordell, 2003-12-25
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/ke/i386/bthread.S
|
||||
* PURPOSE: Trap handlers
|
||||
* PROGRAMMER: David Welch (david.welch@seh.ox.ac.uk)
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
|
||||
/* Values for contextflags */
|
||||
#define CONTEXT_i386 0x10000
|
||||
#ifndef CONTEXT_CONTROL
|
||||
#define CONTEXT_CONTROL (CONTEXT_i386 | 1)
|
||||
#endif
|
||||
#ifndef CONTEXT_INTEGER
|
||||
#define CONTEXT_INTEGER (CONTEXT_i386 | 2)
|
||||
#endif
|
||||
#ifndef CONTEXT_SEGMENTS
|
||||
#define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
|
||||
#endif
|
||||
#ifndef CONTEXT_FLOATING_POINT
|
||||
#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
|
||||
#endif
|
||||
#ifndef CONTEXT_DEBUG_REGISTERS
|
||||
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
|
||||
#endif
|
||||
#ifndef CONTEXT_FULL
|
||||
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
|
||||
#endif
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
void KeReturnFromSystemCallWithHook();
|
||||
|
||||
VOID PiBeforeBeginThread(CONTEXT c);
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
__declspec(naked)
|
||||
VOID PsBeginThread(PKSTART_ROUTINE StartRoutine, PVOID StartContext)
|
||||
{
|
||||
/*
|
||||
* This isn't really a function, we are called as the return address
|
||||
* of the context switch function
|
||||
*/
|
||||
|
||||
/*
|
||||
* Do the necessary prolog after a context switch
|
||||
*/
|
||||
__asm
|
||||
{
|
||||
call PiBeforeBeginThread
|
||||
|
||||
/*
|
||||
* Call the actual start of the thread
|
||||
*/
|
||||
// We must NOT use the arguments by name. VC then uses EBP-relative
|
||||
// addressing, and with an EBP of 0 you can imagine what happens.
|
||||
mov ebx, 4[esp] // StartRoutine
|
||||
mov eax, 8[esp] // StartContext
|
||||
push eax
|
||||
call ebx /* Call the start routine */
|
||||
add esp, 4
|
||||
|
||||
/*
|
||||
* Terminate the thread
|
||||
*/
|
||||
push eax
|
||||
call PsTerminateSystemThread
|
||||
add esp, 4
|
||||
|
||||
}
|
||||
|
||||
/* If that fails then bug check */
|
||||
KeBugCheck(0);
|
||||
|
||||
/* And if that fails then loop */
|
||||
for (;;)
|
||||
; // forever
|
||||
}
|
||||
|
||||
|
||||
__declspec(naked)
|
||||
VOID PsBeginThreadWithContextInternal(VOID)
|
||||
{
|
||||
/*
|
||||
* This isn't really a function, we are called as the return
|
||||
* address of a context switch
|
||||
*/
|
||||
|
||||
/*
|
||||
* Do the necessary prolog before the context switch
|
||||
*/
|
||||
__asm
|
||||
{
|
||||
call PiBeforeBeginThread
|
||||
|
||||
/*
|
||||
* Load the context flags.
|
||||
*/
|
||||
pop ebx
|
||||
|
||||
/*
|
||||
* Load the debugging registers
|
||||
*/
|
||||
test ebx, (CONTEXT_DEBUG_REGISTERS & ~CONTEXT_i386)
|
||||
jz L1
|
||||
pop eax __asm mov dr0, eax
|
||||
pop eax __asm mov dr1, eax
|
||||
pop eax __asm mov dr2, eax
|
||||
pop eax __asm mov dr3, eax
|
||||
pop eax __asm mov dr6, eax
|
||||
pop eax __asm mov dr7, eax
|
||||
jmp L3
|
||||
L1:
|
||||
add esp, 24
|
||||
L3:
|
||||
|
||||
/*
|
||||
* Load the floating point registers
|
||||
*/
|
||||
mov eax, HardwareMathSupport
|
||||
test eax,eax
|
||||
jz L2
|
||||
test ebx, (CONTEXT_FLOATING_POINT & ~CONTEXT_i386)
|
||||
jz L2
|
||||
frstor [esp]
|
||||
L2:
|
||||
add esp, 112
|
||||
|
||||
/* Load the rest of the thread's user mode context. */
|
||||
mov eax, 0
|
||||
jmp KeReturnFromSystemCallWithHook
|
||||
}
|
||||
}
|
||||
|
@@ -1,114 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2000 David Welch <welch@cwcom.net>
|
||||
*
|
||||
* Moved to MSVC-compatible inline assembler by Mike Nordell, 2003-12-26
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/*
|
||||
* FILE: ntoskrnl/ke/i386/vm86_sup.S
|
||||
* PURPOSE: V86 mode support
|
||||
* PROGRAMMER: David Welch (welch@cwcom.net)
|
||||
* UPDATE HISTORY:
|
||||
* Created 09/10/00
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
#include <internal/v86m.h>
|
||||
#include <ntos/tss.h>
|
||||
#include <internal/trap.h>
|
||||
#include <internal/ps.h>
|
||||
|
||||
#include <roscfg.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/i386/segment.h>
|
||||
|
||||
// no arg-list, but asm doesn't care anyway
|
||||
void KiInterruptDispatch();
|
||||
|
||||
|
||||
#define DEFINE_INT_HANDLER(N) \
|
||||
__declspec(naked) \
|
||||
void irq_handler_##N() \
|
||||
{ \
|
||||
__asm pushad \
|
||||
__asm push ds \
|
||||
__asm push es \
|
||||
__asm push fs \
|
||||
__asm mov eax, 0xceafbeef \
|
||||
__asm push eax \
|
||||
__asm mov ax, KERNEL_DS \
|
||||
__asm mov ds, ax \
|
||||
__asm mov es, ax \
|
||||
__asm mov ax, PCR_SELECTOR \
|
||||
__asm mov fs, ax \
|
||||
__asm push esp \
|
||||
__asm push N \
|
||||
__asm call KiInterruptDispatch \
|
||||
__asm pop eax \
|
||||
__asm pop eax \
|
||||
__asm pop eax \
|
||||
__asm pop fs \
|
||||
__asm pop es \
|
||||
__asm pop ds \
|
||||
__asm popad \
|
||||
__asm iretd
|
||||
// NOTE: The inline assembler can't deal with having the final brace,
|
||||
// ending the function, on the same line as an __asm, why there is
|
||||
// none here and it MUST be added when using the macro!
|
||||
|
||||
DEFINE_INT_HANDLER(0)
|
||||
}
|
||||
DEFINE_INT_HANDLER(1)
|
||||
}
|
||||
DEFINE_INT_HANDLER(2)
|
||||
}
|
||||
DEFINE_INT_HANDLER(3)
|
||||
}
|
||||
DEFINE_INT_HANDLER(4)
|
||||
}
|
||||
DEFINE_INT_HANDLER(5)
|
||||
}
|
||||
DEFINE_INT_HANDLER(6)
|
||||
}
|
||||
DEFINE_INT_HANDLER(7)
|
||||
}
|
||||
DEFINE_INT_HANDLER(8)
|
||||
}
|
||||
DEFINE_INT_HANDLER(9)
|
||||
}
|
||||
DEFINE_INT_HANDLER(10)
|
||||
}
|
||||
DEFINE_INT_HANDLER(11)
|
||||
}
|
||||
DEFINE_INT_HANDLER(12)
|
||||
}
|
||||
DEFINE_INT_HANDLER(13)
|
||||
}
|
||||
DEFINE_INT_HANDLER(14)
|
||||
}
|
||||
DEFINE_INT_HANDLER(15)
|
||||
}
|
||||
|
@@ -1,655 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2003 Mike Nordell
|
||||
* Based on multiboot.S (no copyright note present), but so heavily
|
||||
* modified that it bears close to no resemblance to the original work.
|
||||
*
|
||||
* MSVC compatible combination of plain C and inline assembler to:
|
||||
* 1 Relocated all the sections in the kernel - something I feel the
|
||||
* bootloader should have done, but multiboot being just a "raw image"
|
||||
* loader, it unfortunately had to be done here - in-place.
|
||||
* 2 Set up page directories and stuff.
|
||||
* 3 Load IDT, GDT and turn on paging, making us execute at the intended
|
||||
* target address (as if the image was PE-loaded and parsed into that addr.)
|
||||
* 4 Call _main, and let the rest of the startup run...
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
//
|
||||
// TODO: Fix the MP parts
|
||||
//
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
#include <pe.h>
|
||||
|
||||
#include <roscfg.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/ps.h>
|
||||
#include <internal/ldr.h>
|
||||
|
||||
|
||||
// some notes:
|
||||
// The MSVC linker (by defult) emits no special .bss section, but uses the data
|
||||
// section with a rawsize smaller than virtualsize. The "slack" is BSS.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// Some macros we need
|
||||
|
||||
// some stuff straight from freeloaders multiboot.h
|
||||
#define MULTIBOOT_HEADER_MAGIC (0x1BADB002)
|
||||
#define MULTIBOOT_HEADER_FLAGS (0x00010003)
|
||||
|
||||
#define TARGET_LOAD_ADDR 0x00200000
|
||||
#define BASE_TO_PHYS_DIST (KERNEL_BASE - TARGET_LOAD_ADDR)
|
||||
|
||||
#define V2P(x) (x - BASE_TO_PHYS_DIST)
|
||||
|
||||
|
||||
#ifdef MP
|
||||
|
||||
#define AP_MAGIC (0x12481020)
|
||||
|
||||
#endif /* MP */
|
||||
|
||||
|
||||
|
||||
void initialize_page_directory(void);
|
||||
|
||||
void* relocate_pointer_log_to_phys(const void* p)
|
||||
{
|
||||
// DON'T CALL this function until relocation of .data and/or .rdata,
|
||||
// is completed - but still be sure that we have not yet enabled paging!
|
||||
return (void*)((DWORD)p - BASE_TO_PHYS_DIST);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
|
||||
// Macro to emit one character to Bochs debug-port (0x9e).
|
||||
// We need to do it this way, since at this point of the startup, obviously
|
||||
// we have neither HAL nor DbgPrint support.
|
||||
#define BOCHS_OUT_CHAR(c1) __asm push eax __asm push edx __asm mov dx, 0xe9 __asm mov al, c1 __asm out dx, al __asm pop edx __asm pop eax
|
||||
|
||||
void boch_out_hex_digit(unsigned char ch1)
|
||||
{
|
||||
if (ch1 <= 9) { ch1 += '0'; } else { ch1 += 'a' - 10; }
|
||||
BOCHS_OUT_CHAR(ch1)
|
||||
}
|
||||
|
||||
void bochs_dump_hex(DWORD p)
|
||||
{
|
||||
unsigned char ch3 = (unsigned char)((p >> 28) & 0x0f);
|
||||
unsigned char cl3 = (unsigned char)((p >> 24) & 0x0f);
|
||||
unsigned char ch2 = (unsigned char)((p >> 20) & 0x0f);
|
||||
unsigned char cl2 = (unsigned char)((p >> 16) & 0x0f);
|
||||
unsigned char ch1 = (unsigned char)((p >> 12) & 0x0f);
|
||||
unsigned char cl1 = (unsigned char)((p >> 8) & 0x0f);
|
||||
unsigned char ch0 = (unsigned char)((p >> 4) & 0x0f);
|
||||
unsigned char cl0 = (unsigned char)((p >> 0) & 0x0f);
|
||||
BOCHS_OUT_CHAR('0') BOCHS_OUT_CHAR('x')
|
||||
boch_out_hex_digit(ch3);
|
||||
boch_out_hex_digit(cl3);
|
||||
boch_out_hex_digit(ch2);
|
||||
boch_out_hex_digit(cl2);
|
||||
boch_out_hex_digit(ch1);
|
||||
boch_out_hex_digit(cl1);
|
||||
boch_out_hex_digit(ch0);
|
||||
boch_out_hex_digit(cl0);
|
||||
BOCHS_OUT_CHAR('\n')
|
||||
}
|
||||
|
||||
static void bochs_out_string(const char* s /* logical address! */)
|
||||
{
|
||||
s = relocate_pointer_log_to_phys(s);
|
||||
__asm
|
||||
{
|
||||
pushad
|
||||
mov dx, 0xe9
|
||||
mov ebx, s
|
||||
L1:
|
||||
cmp byte ptr[ebx], 0
|
||||
je end
|
||||
mov al, [ebx]
|
||||
out dx, al
|
||||
inc ebx
|
||||
jmp L1
|
||||
end:
|
||||
popad
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define BOCHS_OUT_CHAR(c1)
|
||||
#define bochs_dump_hex(VAL)
|
||||
#define bochs_out_string(STR)
|
||||
|
||||
#endif // _DEBUG
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
typedef char kernel_page_t[4096];
|
||||
|
||||
// Use 4096 (pagesize) more bytes that actually needed for each *_holder,
|
||||
// to be able to make sure that the other stuff is page aligned.
|
||||
// No other way to do this portably... :-(
|
||||
//
|
||||
// TODO: Consider allocating just one large block of BSS memory here, align
|
||||
// just the first pointer, and then get the other ones just as offsets from
|
||||
// this (now-aligned) pointer. That way we could get away with wasting just
|
||||
// one page of memory, instead of 4 (like 16KB would matter... but still)
|
||||
static kernel_page_t* startup_pagedirectory_holder[1024 * 2];
|
||||
static kernel_page_t* lowmem_pagetable_holder[1024 * 2];
|
||||
static kernel_page_t* kernel_pagetable_holder[32*1024 + 1];
|
||||
static __int32 kpcr_pagetable_holder[4096/4 * 2];
|
||||
|
||||
#ifdef MP
|
||||
char apic_pagetable[4096];
|
||||
#endif /* MP */
|
||||
|
||||
__int32 unmap_me[4096/4];
|
||||
__int32 unmap_me2[4096/4];
|
||||
__int32 unmap_me3[4096/4];
|
||||
|
||||
__int32 init_stack[3*4096/4];
|
||||
int init_stack_top;
|
||||
|
||||
|
||||
__int32 trap_stack[3*4096/4];
|
||||
int trap_stack_top;
|
||||
|
||||
|
||||
|
||||
void _main();
|
||||
// lie a bit about types - since C is basically typeless anyway, it
|
||||
// doesn't really matter what type we say it is here...
|
||||
extern int KiGdtDescriptor;
|
||||
extern int KiIdtDescriptor;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* This is called by the realmode loader, with protected mode
|
||||
* enabled, paging disabled and the segment registers pointing
|
||||
* a 4Gb, 32-bit segment starting at zero.
|
||||
*
|
||||
* EAX = Multiboot magic or application processor magic
|
||||
*
|
||||
* EBX = Points to a structure in lowmem with data from the
|
||||
* loader
|
||||
*/
|
||||
#pragma intrinsic(memset)
|
||||
|
||||
|
||||
// We need to implement this ourself, to be able to get to it by short call's
|
||||
void our_memmove(void* pDest, const void* pSrc, DWORD size)
|
||||
{
|
||||
char* pD = (char*)pDest;
|
||||
const char* pS = (char*)pSrc;
|
||||
if (pDest < pSrc)
|
||||
{
|
||||
while (size--)
|
||||
{
|
||||
*pD++ = *pS++;
|
||||
}
|
||||
}
|
||||
else if (pSrc < pDest)
|
||||
{
|
||||
while (size--)
|
||||
{
|
||||
pD[size] = pS[size];
|
||||
}
|
||||
}
|
||||
}
|
||||
void dummy_placeholder(void)
|
||||
{
|
||||
// NOTE: This function MUST be placed JUST AFTER MultibootStub in memory.
|
||||
// Yes, it's BEFORE it in this file, but linkorder.txt fixes this for us.
|
||||
}
|
||||
|
||||
|
||||
// This one is needed, since the boot loader hasn't relocated us
|
||||
__declspec(naked)
|
||||
void MultibootStub()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
jmp _multiboot_entry
|
||||
// This sucks, I know...
|
||||
#define EMIT_DWORD(x) __asm __emit ((x) >> 0) & 0xff __asm _emit ((x) >> 8) & 0xff __asm _emit ((x) >> 16) & 0xff __asm _emit ((x) >> 24) & 0xff
|
||||
ALIGN 4
|
||||
EMIT_DWORD(MULTIBOOT_HEADER_MAGIC)
|
||||
EMIT_DWORD(MULTIBOOT_HEADER_FLAGS)
|
||||
EMIT_DWORD(-(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS))
|
||||
EMIT_DWORD(TARGET_LOAD_ADDR + 0x0400 + 0x04)
|
||||
// Now just make something up, since there is no way we can know, beforehand,
|
||||
// where any BSS data is...
|
||||
EMIT_DWORD((TARGET_LOAD_ADDR))
|
||||
EMIT_DWORD((TARGET_LOAD_ADDR + 1*1024*1024)) /* assume ntoskrnel.exe is < 1MB! */
|
||||
EMIT_DWORD((TARGET_LOAD_ADDR + 2*1024*1024)) /* just to have something, let's say BSS is 1MB too */
|
||||
/* This is *REALLY* ugly! If MultibootStub is *EVER* at */
|
||||
/* any other offset, this will crash like crazy! */
|
||||
/* 0x0400 is the file alignment of the binary (ntoskrnl.exe) */
|
||||
EMIT_DWORD((TARGET_LOAD_ADDR + 0x0400)) // entry_addr
|
||||
|
||||
_multiboot_entry:
|
||||
|
||||
cld // just for good measure
|
||||
}
|
||||
|
||||
{
|
||||
/* Save the multiboot or application processor magic */
|
||||
DWORD saved_eax;
|
||||
DWORD saved_ebx;
|
||||
__asm mov saved_eax, eax
|
||||
__asm mov saved_ebx, ebx
|
||||
|
||||
// bochs_out_string("MultibootStub()\n");
|
||||
|
||||
// OK, time to relocate the brute-loaded image in-place...
|
||||
// If we don't watch it, we will overwrite ourselves here - imagine
|
||||
// the fireworks! :-) That's why the function dummy_placeholder()
|
||||
// MUST be placed JUST JUST AFTER this function.
|
||||
|
||||
{
|
||||
PIMAGE_NT_HEADERS NtHeader = RtlImageNtHeader((PVOID)TARGET_LOAD_ADDR);
|
||||
PIMAGE_SECTION_HEADER Section = IMAGE_FIRST_SECTION(NtHeader);
|
||||
const int count = NtHeader->FileHeader.NumberOfSections;
|
||||
int i;
|
||||
Section += count - 1; // make it point to the last section
|
||||
// NOTE: We MUST walk the sections "backwards".
|
||||
for (i = count-1; i >= 0; --i, --Section)
|
||||
{
|
||||
DWORD dwSrc = TARGET_LOAD_ADDR + Section->PointerToRawData;
|
||||
DWORD dwDst = TARGET_LOAD_ADDR + Section->VirtualAddress;
|
||||
DWORD dwSiz = Section->SizeOfRawData;
|
||||
const char* pEndThisFunc;
|
||||
|
||||
if (dwSrc == dwDst)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//bochs_out_string("MultibootStub: relocating section\n");
|
||||
|
||||
if (Section->Characteristics & IMAGE_SCN_MEM_EXECUTE)
|
||||
{
|
||||
// can't get a pointer to a label from plain C :-(
|
||||
__asm mov pEndThisFunc, offset dummy_placeholder
|
||||
pEndThisFunc -= BASE_TO_PHYS_DIST;
|
||||
if (dwDst < (DWORD)pEndThisFunc)
|
||||
{
|
||||
// We must not move the code from under our feet!
|
||||
// This can only happen in the code segment - the first segment
|
||||
DWORD diff = (DWORD)pEndThisFunc - dwDst;
|
||||
dwDst += diff;
|
||||
dwSrc += diff;
|
||||
dwSiz -= diff;
|
||||
}
|
||||
}
|
||||
|
||||
// obviously we must use memmove, since memory can overlap
|
||||
our_memmove((void*)dwDst, (void*)dwSrc, dwSiz);
|
||||
|
||||
// While at it, we might as well zero any uninitialized data in the section...
|
||||
if (Section->SizeOfRawData < Section->Misc.VirtualSize)
|
||||
{
|
||||
memset((char*)(Section->VirtualAddress + Section->SizeOfRawData + TARGET_LOAD_ADDR),
|
||||
0,
|
||||
Section->Misc.VirtualSize - Section->SizeOfRawData);
|
||||
}
|
||||
}
|
||||
|
||||
// Now all sections are relocated to their intended in-memory layout,
|
||||
// but we are still running int the low TARGET_LOAD_ADDR memory.
|
||||
|
||||
{
|
||||
// Time to jump to the real startup, the entry-point function.
|
||||
// We must do this using assembler, since both eax and ebx are assumed
|
||||
// to hold some magic values.
|
||||
typedef VOID (STDCALL* pfn_t)(PPEB);
|
||||
pfn_t pfn = (pfn_t)(NtHeader->OptionalHeader.AddressOfEntryPoint + TARGET_LOAD_ADDR);
|
||||
#if 1
|
||||
__asm mov eax, saved_eax
|
||||
__asm mov ebx, saved_ebx
|
||||
__asm mov ecx, pfn
|
||||
__asm jmp ecx
|
||||
#else
|
||||
__asm mov ebx, saved_ebx
|
||||
(*pfn)((PPEB)saved_eax);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TMN: TODO: Convert this to the extent possible to plain C code
|
||||
// Due to the "magic" above, we enter this function with all kernel sections
|
||||
// properly relocated wrt. offsets from start-of-mem. But, we are still running
|
||||
// without paging, meaning that the address that is to be KERNEL_BASE+xyz is
|
||||
// currently still TARGET_LOAD_ADDR+xyz.
|
||||
// We get aways with a few of the functions call here since they are near calls
|
||||
// (PC-relative), but don't even _think_ about calling any other functions
|
||||
// until we have turned on paging!
|
||||
VOID STDCALL
|
||||
NtProcessStartup(
|
||||
IN PPEB Peb
|
||||
)
|
||||
{
|
||||
DWORD saved_ebx;
|
||||
DWORD saved_eax;
|
||||
__asm mov saved_ebx, ebx
|
||||
__asm mov saved_eax, eax
|
||||
|
||||
bochs_out_string("NtProcessStartup: Just entered\n");
|
||||
|
||||
#ifdef MP
|
||||
if (saved_eax != AP_MAGIC)
|
||||
{
|
||||
#endif /* MP */
|
||||
|
||||
bochs_out_string("NtProcessStartup: Calling initialize_page_directory()\n");
|
||||
|
||||
initialize_page_directory(); // Initialize the page directory
|
||||
|
||||
bochs_out_string("NtProcessStartup: Page directory initialized\n");
|
||||
|
||||
#ifdef MP
|
||||
|
||||
__asm
|
||||
{
|
||||
/*
|
||||
* Initialize the page table that maps the APIC register address space
|
||||
*/
|
||||
|
||||
/*
|
||||
* FIXME: APIC register address space can be non-standard so do the
|
||||
* mapping later
|
||||
*/
|
||||
mov esi, V2P(apic_pagetable)
|
||||
mov edi, 0
|
||||
mov eax, 0xFEC0001B
|
||||
mov [esi+edi], eax
|
||||
mov edi, 0x800
|
||||
mov eax, 0xFEE0001B
|
||||
mov [esi+edi], eax
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* MP */
|
||||
|
||||
{
|
||||
bochs_out_string("NtProcessStartup: Enabling paging...\n");
|
||||
|
||||
/*
|
||||
* Enable paging and set write protect
|
||||
* bit 31: PG, bit 16: WP
|
||||
*/
|
||||
__asm mov eax, cr0
|
||||
__asm or eax, 0x80010000
|
||||
__asm mov cr0, eax
|
||||
|
||||
bochs_out_string("NtProcessStartup: Paging enabled!\n");
|
||||
bochs_out_string("NtProcessStartup: But we're still at the \"low\" address\n");
|
||||
|
||||
/*
|
||||
* Do an absolute jump because we now want to execute above KERNEL_BASE
|
||||
*/
|
||||
__asm mov eax, offset l2_
|
||||
__asm jmp eax
|
||||
}
|
||||
|
||||
l2_:
|
||||
|
||||
bochs_out_string("We have now left \"low\" memory, and is flying at an altitude of...\n");
|
||||
bochs_out_string("OK, we're not flying, we're just executing above KERNEL_BASE\n");
|
||||
|
||||
/*
|
||||
* Load the GDTR and IDTR with new tables located above
|
||||
* KERNEL_BASE
|
||||
*/
|
||||
|
||||
#ifdef _DEBUG
|
||||
{
|
||||
DWORD val = (DWORD)&KiGdtDescriptor;
|
||||
bochs_out_string("&KiGdtDescriptor: ");
|
||||
bochs_dump_hex(val);
|
||||
|
||||
val = (DWORD)&KiIdtDescriptor;
|
||||
bochs_out_string("&KiIdtDescriptor: ");
|
||||
bochs_dump_hex(val);
|
||||
}
|
||||
#endif
|
||||
|
||||
bochs_out_string("Loading GDT and IDT...\n");
|
||||
|
||||
/* FIXME: Application processors should have their own GDT/IDT */
|
||||
__asm lgdt KiGdtDescriptor
|
||||
__asm lidt KiIdtDescriptor
|
||||
|
||||
bochs_out_string("GDT and IDT loaded\n");
|
||||
|
||||
__asm
|
||||
{
|
||||
/*
|
||||
* Reload the data segment registers
|
||||
*/
|
||||
mov eax, KERNEL_DS
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov gs, ax
|
||||
mov ss, ax
|
||||
mov eax, 0
|
||||
mov fs, ax
|
||||
}
|
||||
|
||||
bochs_out_string("NtProcessStartup: segment registers loaded\n");
|
||||
|
||||
#ifdef MP
|
||||
|
||||
if (saved_eax == AP_MAGIC)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/*
|
||||
* This is an application processor executing
|
||||
*/
|
||||
|
||||
/*
|
||||
* Initialize EFLAGS
|
||||
*/
|
||||
push 0
|
||||
popfd
|
||||
|
||||
/*
|
||||
* Call the application processor initialization code
|
||||
*/
|
||||
push 0
|
||||
push offset l7_
|
||||
push KERNEL_CS
|
||||
push KiSystemStartup
|
||||
retf
|
||||
|
||||
/*
|
||||
* Catch illegal returns from KiSystemStartup
|
||||
*/
|
||||
l7_:
|
||||
pop eax
|
||||
}
|
||||
|
||||
KeBugCheck(0);
|
||||
|
||||
for (;;)
|
||||
; /*forever */
|
||||
}
|
||||
|
||||
#endif /* MP */
|
||||
|
||||
bochs_out_string("Loading fs with PCR_SELECTOR\n");
|
||||
|
||||
/* Load the PCR selector */
|
||||
__asm mov eax, PCR_SELECTOR
|
||||
__asm mov fs, ax
|
||||
|
||||
bochs_out_string("Loading esp with init_stack_top : "); bochs_dump_hex((DWORD)&init_stack_top);
|
||||
bochs_out_string("Just for interest, init_stack is at: "); bochs_dump_hex((DWORD)init_stack);
|
||||
bochs_out_string("Meaing the init_stack in bytes is : "); bochs_dump_hex((DWORD)&init_stack_top - (DWORD)init_stack);
|
||||
|
||||
|
||||
/* Load the initial kernel stack */
|
||||
__asm mov esp, offset init_stack_top
|
||||
|
||||
bochs_out_string("Loaded esp with init_stack_top\n");
|
||||
|
||||
/*
|
||||
* Initialize EFLAGS
|
||||
*/
|
||||
__asm push 0
|
||||
__asm popfd
|
||||
|
||||
bochs_out_string("Loaded eflags\n");
|
||||
|
||||
/*
|
||||
* Call the main kernel initialization
|
||||
*/
|
||||
bochs_out_string("TMN: Calling _main...\n");
|
||||
|
||||
__asm
|
||||
{
|
||||
xor ebp,ebp
|
||||
push ebx
|
||||
push edx
|
||||
push offset l5_
|
||||
push KERNEL_CS
|
||||
push offset _main
|
||||
retf
|
||||
|
||||
/*
|
||||
* Catch illegal returns from main, try bug checking the system,
|
||||
* if that fails then loop forever.
|
||||
*/
|
||||
l5_:
|
||||
pop eax
|
||||
pop eax
|
||||
|
||||
} // end of __asm block
|
||||
|
||||
bochs_out_string("TMN: Back from _main ?! Let's crash!\n");
|
||||
|
||||
KeBugCheck(0);
|
||||
|
||||
for (;;)
|
||||
; /*forever */
|
||||
}
|
||||
|
||||
|
||||
void initialize_page_directory(void)
|
||||
{
|
||||
/*
|
||||
* Initialize the page directory
|
||||
*/
|
||||
|
||||
// First convert the pointers from the virtual address the compiler generated
|
||||
// code thinks we are at, to the currently active physical address we actually
|
||||
// got loaded into by the loader. At this point we have been relocated, so
|
||||
// that there is a 1:1 mapping between KERNEL_BASE+n and TARGET_LOAD_ADDR+n.
|
||||
|
||||
kernel_page_t** startup_pagedirectory = startup_pagedirectory_holder;
|
||||
kernel_page_t** lowmem_pagetable = lowmem_pagetable_holder;
|
||||
kernel_page_t** kernel_pagetable = kernel_pagetable_holder;
|
||||
__int32* kpcr_pagetable = kpcr_pagetable_holder;
|
||||
|
||||
bochs_out_string("startup_pagedirectory before reloc: ");
|
||||
bochs_dump_hex((DWORD)startup_pagedirectory);
|
||||
|
||||
startup_pagedirectory = (kernel_page_t**)relocate_pointer_log_to_phys(startup_pagedirectory);
|
||||
lowmem_pagetable = (kernel_page_t**)relocate_pointer_log_to_phys(lowmem_pagetable);
|
||||
kernel_pagetable = (kernel_page_t**)relocate_pointer_log_to_phys(kernel_pagetable);
|
||||
kpcr_pagetable = (__int32*) relocate_pointer_log_to_phys(kpcr_pagetable);
|
||||
|
||||
bochs_out_string("startup_pagedirectory after reloc : ");
|
||||
bochs_dump_hex((DWORD)startup_pagedirectory);
|
||||
|
||||
// Now align the pointers to PAGE_SIZE...
|
||||
startup_pagedirectory = (kernel_page_t**)(((ULONG_PTR)startup_pagedirectory + 4095) & ~4095);
|
||||
lowmem_pagetable = (kernel_page_t**)(((ULONG_PTR)lowmem_pagetable + 4095) & ~4095);
|
||||
kernel_pagetable = (kernel_page_t**)(((ULONG_PTR)kernel_pagetable + 4095) & ~4095);
|
||||
kpcr_pagetable = (__int32* ) (((ULONG_PTR)kpcr_pagetable + 4095) & ~4095);
|
||||
|
||||
#ifdef _DEBUG
|
||||
bochs_out_string("startup_pagedirectory aligned : ");
|
||||
bochs_dump_hex((DWORD)startup_pagedirectory);
|
||||
#endif
|
||||
|
||||
// Ugly macros, I know...
|
||||
#define DEST(PAGE) startup_pagedirectory[(PAGE) + 0xc00 / 4]
|
||||
#define SRC(PAGE) (kernel_page_t*)((char*)kernel_pagetable + (PAGE)*4096 + 0x7)
|
||||
|
||||
startup_pagedirectory[0] = (kernel_page_t*)((char*)lowmem_pagetable + 0x7);
|
||||
|
||||
{
|
||||
unsigned int i;
|
||||
for (i=0; i<32; ++i)
|
||||
{
|
||||
DEST(i) = SRC(i);
|
||||
}
|
||||
}
|
||||
|
||||
DEST( 64) = (kernel_page_t*)((char*)lowmem_pagetable + 0x7);
|
||||
DEST(192) = (kernel_page_t*)((char*)startup_pagedirectory + 0x7);
|
||||
#ifdef MP
|
||||
DEST(251) = (kernel_page_t*)((char*)apic_pagetable + 0x7);
|
||||
#endif /* MP */
|
||||
DEST(252) = (kernel_page_t*)((char*)kpcr_pagetable + 0x7);
|
||||
|
||||
|
||||
{
|
||||
unsigned int i;
|
||||
/* Initialize the page table that maps low memory */
|
||||
for (i=0; i<1024; ++i) {
|
||||
lowmem_pagetable[i] = (kernel_page_t*)(i*4096 + 7);
|
||||
}
|
||||
|
||||
/* Initialize the page table that maps kernel memory */
|
||||
for (i=0; i<6144/4 /* 1536 pages = 6MB */; ++i) {
|
||||
kernel_pagetable[i] = (kernel_page_t*)(i*4096 + TARGET_LOAD_ADDR + 0x7);
|
||||
}
|
||||
|
||||
/* Initialize the page table that maps the initial KPCR (at FF000000) */
|
||||
kpcr_pagetable[0] = 0x1007;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up the PDBR
|
||||
*/
|
||||
__asm mov eax, startup_pagedirectory
|
||||
__asm mov cr3, eax
|
||||
}
|
||||
|
@@ -1,110 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2000 David Welch <welch@cwcom.net>
|
||||
*
|
||||
* Moved to MSVC-compatible inline assembler by Mike Nordell, 2003-12-26
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/*
|
||||
* FILE: ntoskrnl/ke/i386/vm86_sup.S
|
||||
* PURPOSE: V86 mode support
|
||||
* PROGRAMMER: David Welch (welch@cwcom.net)
|
||||
* UPDATE HISTORY:
|
||||
* Created 09/10/00
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
#include <internal/v86m.h>
|
||||
#include <ntos/tss.h>
|
||||
//#include <ntos/service.h>
|
||||
#include <internal/trap.h>
|
||||
#include <internal/ps.h>
|
||||
|
||||
#include <roscfg.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/i386/segment.h>
|
||||
|
||||
|
||||
void KeReturnFromSystemCall();
|
||||
|
||||
/*
|
||||
* FUNCTION: KeStackSwitchAndRet
|
||||
* PURPOSE: Switch to a new stack and return from the first frame on
|
||||
* the new stack which was assumed to a stdcall function with
|
||||
* 8 bytes of arguments and which saved edi, esi and ebx.
|
||||
*/
|
||||
__declspec(naked)
|
||||
VOID STDCALL
|
||||
KeStackSwitchAndRet(PVOID NewStack)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
cli
|
||||
|
||||
mov esp, NewStack
|
||||
|
||||
sti
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
|
||||
pop ebp
|
||||
ret 8
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
VOID STDCALL
|
||||
KePushAndStackSwitchAndSysRet(ULONG Push, PVOID NewStack)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
cli
|
||||
|
||||
push 8[ebp]
|
||||
|
||||
mov ebx, fs:KPCR_CURRENT_THREAD
|
||||
mov KTHREAD_CALLBACK_STACK[ebx], esp
|
||||
mov esp, 12[ebp]
|
||||
|
||||
sti
|
||||
|
||||
push 0
|
||||
call KeLowerIrql
|
||||
|
||||
jmp KeReturnFromSystemCall
|
||||
}
|
||||
}
|
@@ -1,325 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2000 David Welch <welch@cwcom.net>
|
||||
*
|
||||
* Converted to MSVC-compatible inline assembler by Mike Nordell, 2003.
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/*
|
||||
* FILE: MSVC6/ntoskrnl/ke_i386_syscall.c
|
||||
* based on ntoskrnl/ke/i386/syscall.s
|
||||
* PURPOSE: syscall dispatching and support
|
||||
* PROGRAMMER: David Welch (welch@cwcom.net)
|
||||
* UPDATE HISTORY:
|
||||
* Created 09/10/00
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
#include <internal/v86m.h>
|
||||
#include <ntos/tss.h>
|
||||
//#include <ntos/service.h>
|
||||
#include <internal/trap.h>
|
||||
#include <internal/ps.h>
|
||||
|
||||
#include <roscfg.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/i386/segment.h>
|
||||
|
||||
|
||||
#define KernelMode (0)
|
||||
#define UserMode (1)
|
||||
|
||||
|
||||
// TMN: Replicated here to reduce mess-time
|
||||
#ifdef STATUS_INVALID_SYSTEM_SERVICE
|
||||
#undef STATUS_INVALID_SYSTEM_SERVICE
|
||||
#endif
|
||||
#define STATUS_INVALID_SYSTEM_SERVICE 0xc000001c
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
void KiServiceCheck (ULONG Nr);
|
||||
ULONG KiAfterSystemCallHook(ULONG NtStatus, PKTRAP_FRAME TrapFrame);
|
||||
VOID KiSystemCallHook(ULONG Nr, ...);
|
||||
|
||||
void KeReturnFromSystemCallWithHook();
|
||||
void KeReturnFromSystemCall();
|
||||
|
||||
|
||||
__declspec(naked)
|
||||
void interrupt_handler2e(void)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/* Construct a trap frame on the stack */
|
||||
|
||||
/* Error code */
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
push fs
|
||||
/* Load PCR selector into fs */
|
||||
mov ebx, PCR_SELECTOR
|
||||
mov fs, bx
|
||||
|
||||
/* Save the old exception list */
|
||||
mov ebx, fs:KPCR_EXCEPTION_LIST
|
||||
push ebx
|
||||
/* Set the exception handler chain terminator */
|
||||
mov dword ptr fs:KPCR_EXCEPTION_LIST, 0xffffffff
|
||||
/* Get a pointer to the current thread */
|
||||
mov esi, fs:KPCR_CURRENT_THREAD
|
||||
/* Save the old previous mode */
|
||||
xor ebx,ebx
|
||||
mov bl, ss:KTHREAD_PREVIOUS_MODE[esi]
|
||||
push ebx
|
||||
/* Set the new previous mode based on the saved CS selector */
|
||||
mov ebx, 0x24[esp]
|
||||
and ebx, 0x0000FFFF
|
||||
cmp ebx, KERNEL_CS
|
||||
#if 0
|
||||
// TODO: Verify implementation change and use this code path
|
||||
// to remove two conditional jumps.
|
||||
setnz bl
|
||||
mov ss:KTHREAD_PREVIOUS_MODE[esi], bl
|
||||
#else
|
||||
jne L1
|
||||
mov ss:KTHREAD_PREVIOUS_MODE[esi], KernelMode
|
||||
jmp L3
|
||||
L1:
|
||||
mov ss:KTHREAD_PREVIOUS_MODE[esi], UserMode
|
||||
L3:
|
||||
|
||||
#endif
|
||||
/* Save other registers */
|
||||
push eax
|
||||
push ecx
|
||||
push edx
|
||||
push ds
|
||||
push es
|
||||
push gs
|
||||
push 0 /* DR7 */
|
||||
push 0 /* DR6 */
|
||||
push 0 /* DR3 */
|
||||
push 0 /* DR2 */
|
||||
push 0 /* DR1 */
|
||||
push 0 /* DR0 */
|
||||
push 0 /* XXX: TempESP */
|
||||
push 0 /* XXX: TempCS */
|
||||
push 0 /* XXX: DebugPointer */
|
||||
push 0 /* XXX: DebugArgMark */
|
||||
mov ebx, 0x60[esp]
|
||||
push ebx /* DebugEIP */
|
||||
push ebp /* DebugEBP */
|
||||
|
||||
/* Load the segment registers */
|
||||
mov bx, KERNEL_DS
|
||||
mov ds, bx
|
||||
mov es, bx
|
||||
mov gs, bx
|
||||
|
||||
/*
|
||||
* Save the old trap frame pointer over where we would save the EDX
|
||||
* register.
|
||||
*/
|
||||
mov ebx, KTHREAD_TRAP_FRAME[esi]
|
||||
mov 0x3C[esp], ebx
|
||||
|
||||
/* Save a pointer to the trap frame in the TCB */
|
||||
mov KTHREAD_TRAP_FRAME[esi], esp
|
||||
|
||||
/* Set ES to kernel segment */
|
||||
mov bx, KERNEL_DS
|
||||
mov es, bx
|
||||
|
||||
/* Allocate new Kernel stack frame */
|
||||
mov ebp, esp
|
||||
|
||||
/* Users's current stack frame pointer is source */
|
||||
mov esi, edx
|
||||
|
||||
/* Determine system service table to use */
|
||||
cmp eax, 0x0fff
|
||||
ja new_useShadowTable
|
||||
|
||||
/* Check to see if EAX is valid/inrange */
|
||||
cmp eax, es:KeServiceDescriptorTable + 8
|
||||
jbe new_serviceInRange
|
||||
mov eax, STATUS_INVALID_SYSTEM_SERVICE
|
||||
jmp KeReturnFromSystemCall
|
||||
|
||||
new_serviceInRange:
|
||||
|
||||
/* Allocate room for argument list from kernel stack */
|
||||
mov ecx, es:KeServiceDescriptorTable + 12
|
||||
mov ecx, es:[ecx + eax * 4]
|
||||
sub esp, ecx
|
||||
|
||||
/* Copy the arguments from the user stack to the kernel stack */
|
||||
mov edi, esp
|
||||
cld
|
||||
repe movsb
|
||||
|
||||
/* DS is now also kernel segment */
|
||||
mov ds, bx
|
||||
|
||||
/* Call system call hook */
|
||||
push eax
|
||||
call KiSystemCallHook
|
||||
pop eax
|
||||
|
||||
/* Make the system service call */
|
||||
mov ecx, es:KeServiceDescriptorTable
|
||||
mov eax, es:[ecx + eax * 4]
|
||||
call eax
|
||||
|
||||
#if CHECKED
|
||||
/* Bump Service Counter */
|
||||
#endif
|
||||
|
||||
/* Deallocate the kernel stack frame */
|
||||
mov esp, ebp
|
||||
|
||||
/* Call the post system call hook and deliver any pending APCs */
|
||||
push ebp
|
||||
push eax
|
||||
call KiAfterSystemCallHook
|
||||
add esp, 8
|
||||
|
||||
jmp KeReturnFromSystemCall
|
||||
|
||||
new_useShadowTable:
|
||||
|
||||
sub eax, 0x1000
|
||||
|
||||
/* Check to see if EAX is valid/inrange */
|
||||
cmp eax, es:KeServiceDescriptorTableShadow + 24
|
||||
jbe new_shadowServiceInRange
|
||||
mov eax, STATUS_INVALID_SYSTEM_SERVICE
|
||||
jmp KeReturnFromSystemCall
|
||||
|
||||
new_shadowServiceInRange:
|
||||
|
||||
/* Allocate room for argument list from kernel stack */
|
||||
mov ecx, es:KeServiceDescriptorTableShadow + 28
|
||||
mov ecx, es:[ecx + eax * 4]
|
||||
sub esp, ecx
|
||||
|
||||
/* Copy the arguments from the user stack to the kernel stack */
|
||||
mov edi, esp
|
||||
cld
|
||||
repe movsb
|
||||
|
||||
/* DS is now also kernel segment */
|
||||
mov ds, bx
|
||||
|
||||
/* Call system call hook */
|
||||
// pushl %eax
|
||||
// call _KiSystemCallHook
|
||||
// popl %eax
|
||||
|
||||
/* Call service check routine */
|
||||
push eax
|
||||
call KiServiceCheck
|
||||
pop eax
|
||||
|
||||
/* Make the system service call */
|
||||
mov ecx, es:KeServiceDescriptorTableShadow + 16
|
||||
mov eax, es:[ecx + eax * 4]
|
||||
call eax
|
||||
|
||||
#if CHECKED
|
||||
/* Bump Service Counter */
|
||||
#endif
|
||||
|
||||
/* Deallocate the kernel stack frame */
|
||||
mov esp, ebp
|
||||
|
||||
// TMN: Added, to be able to separate this into different functions
|
||||
jmp KeReturnFromSystemCallWithHook
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KeReturnFromSystemCallWithHook()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/* Call the post system call hook and deliver any pending APCs */
|
||||
push esp
|
||||
push eax
|
||||
call KiAfterSystemCallHook
|
||||
add esp, 8
|
||||
|
||||
// TMN: Added, to be able to separate this into different functions
|
||||
jmp KeReturnFromSystemCall
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KeReturnFromSystemCall()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/* Restore the user context */
|
||||
/* Get a pointer to the current thread */
|
||||
mov esi, fs:0x124
|
||||
|
||||
/* Restore the old trap frame pointer */
|
||||
mov ebx, 0x3c[esp]
|
||||
mov KTHREAD_TRAP_FRAME[esi], ebx
|
||||
|
||||
/* Skip debug information and unsaved registers */
|
||||
add esp, 0x30
|
||||
pop gs
|
||||
pop es
|
||||
pop ds
|
||||
pop edx
|
||||
pop ecx
|
||||
add esp, 4 /* Don't restore eax */
|
||||
|
||||
/* Restore the old previous mode */
|
||||
pop ebx
|
||||
mov ss:KTHREAD_PREVIOUS_MODE[esi], bl
|
||||
|
||||
/* Restore the old exception handler list */
|
||||
pop ebx
|
||||
mov fs:KPCR_EXCEPTION_LIST, ebx
|
||||
|
||||
pop fs
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
pop ebp
|
||||
add esp, 4 /* Ignore error code */
|
||||
|
||||
iretd
|
||||
}
|
||||
}
|
@@ -1,468 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2000 David Welch <welch@cwcom.net>
|
||||
*
|
||||
* Moved to MSVC-compatible inline assembler by Mike Nordell, 2003-12-26
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/*
|
||||
* FILE: ntoskrnl/ke/i386/vm86_sup.S
|
||||
* PURPOSE: V86 mode support
|
||||
* PROGRAMMER: David Welch (welch@cwcom.net)
|
||||
* UPDATE HISTORY:
|
||||
* Created 09/10/00
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
#include <internal/v86m.h>
|
||||
#include <ntos/tss.h>
|
||||
#include <internal/trap.h>
|
||||
#include <internal/ps.h>
|
||||
|
||||
#include <roscfg.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/i386/segment.h>
|
||||
|
||||
|
||||
void KiV86Complete(void);
|
||||
void KiTrapHandler(void);
|
||||
void KiDoubleFaultHandler(void);
|
||||
|
||||
extern int KiPcrInitDone;
|
||||
|
||||
/*
|
||||
* Epilog for exception handlers
|
||||
*/
|
||||
__declspec(naked)
|
||||
void KiTrapEpilog()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
cmp eax, 1 /* Check for v86 recovery */
|
||||
jne _KiTrapRet
|
||||
jmp KiV86Complete
|
||||
_KiTrapRet:
|
||||
/* Skip debug information and unsaved registers */
|
||||
add esp, 0x30
|
||||
pop gs
|
||||
pop es
|
||||
pop ds
|
||||
pop edx
|
||||
pop ecx
|
||||
pop eax
|
||||
|
||||
/* Restore the old previous mode */
|
||||
pop ebx
|
||||
mov ss:KTHREAD_PREVIOUS_MODE[esi], bl
|
||||
|
||||
/* Restore the old exception handler list */
|
||||
pop ebx
|
||||
mov fs:KPCR_EXCEPTION_LIST, ebx
|
||||
|
||||
pop fs
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
pop ebp
|
||||
add esp, 4 /* Ignore error code */
|
||||
|
||||
iretd
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrapProlog()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push edi
|
||||
push fs
|
||||
|
||||
/*
|
||||
* Check that the PCR exists, very early in the boot process it may
|
||||
* not
|
||||
*/
|
||||
cmp ss:KiPcrInitDone, 0
|
||||
je L5_
|
||||
|
||||
/* Load the PCR selector into fs */
|
||||
mov ebx, PCR_SELECTOR
|
||||
mov fs, bx
|
||||
|
||||
/* Save the old exception list */
|
||||
mov ebx, fs:KPCR_EXCEPTION_LIST
|
||||
push ebx
|
||||
|
||||
/* Put the exception handler chain terminator */
|
||||
mov dword ptr fs:KPCR_EXCEPTION_LIST, 0xffffffff
|
||||
|
||||
/* Get a pointer to the current thread */
|
||||
mov edi, fs:KPCR_CURRENT_THREAD
|
||||
|
||||
/* The current thread may be NULL early in the boot process */
|
||||
cmp edi, 0
|
||||
je L4_
|
||||
|
||||
/* Save the old previous mode */
|
||||
xor ebx, ebx
|
||||
mov bl, ss:KTHREAD_PREVIOUS_MODE[edi]
|
||||
push ebx
|
||||
|
||||
/* Set the new previous mode based on the saved CS selector */
|
||||
mov ebx, 0x24[esp]
|
||||
and ebx, 0x0000FFFF
|
||||
cmp ebx, KERNEL_CS
|
||||
jne L1_
|
||||
mov ss:KTHREAD_PREVIOUS_MODE[edi], KernelMode
|
||||
jmp L3_
|
||||
L1_:
|
||||
mov ss:KTHREAD_PREVIOUS_MODE[edi], UserMode
|
||||
L3_:
|
||||
|
||||
/* Save other registers */
|
||||
push eax
|
||||
push ecx
|
||||
push edx
|
||||
push ds
|
||||
push es
|
||||
push gs
|
||||
push 0 /* DR7 */
|
||||
push 0 /* DR6 */
|
||||
push 0 /* DR3 */
|
||||
push 0 /* DR2 */
|
||||
push 0 /* DR1 */
|
||||
push 0 /* DR0 */
|
||||
push 0 /* XXX: TempESP */
|
||||
push 0 /* XXX: TempCS */
|
||||
push 0 /* XXX: DebugPointer */
|
||||
push 0 /* XXX: DebugArgMark */
|
||||
mov ebx, 0x60[esp]
|
||||
push ebx /* XXX: DebugEIP */
|
||||
push ebp /* XXX: DebugEBP */
|
||||
|
||||
/* Load the segment registers */
|
||||
mov ebx, KERNEL_DS
|
||||
mov ds, bx
|
||||
mov es, bx
|
||||
mov gs, bx
|
||||
|
||||
/* Set ES to kernel segment */
|
||||
mov bx, KERNEL_DS
|
||||
mov es, bx
|
||||
|
||||
mov ebx, esp
|
||||
mov ebp, esp
|
||||
|
||||
/* Save the old trap frame. */
|
||||
cmp edi, 0
|
||||
je L7_
|
||||
mov edx, ss:KTHREAD_TRAP_FRAME[edi]
|
||||
push edx
|
||||
jmp L8_
|
||||
L7_:
|
||||
push 0
|
||||
L8_:
|
||||
|
||||
/* Save a pointer to the trap frame in the current KTHREAD */
|
||||
cmp edi, 0
|
||||
je L6_
|
||||
mov ss:KTHREAD_TRAP_FRAME[edi], ebx
|
||||
L6_:
|
||||
|
||||
/* Call the C exception handler */
|
||||
push esi
|
||||
push ebx
|
||||
call KiTrapHandler
|
||||
add esp, 8
|
||||
|
||||
/* Get a pointer to the current thread */
|
||||
mov esi, fs:KPCR_CURRENT_THREAD
|
||||
|
||||
/* Restore the old trap frame pointer */
|
||||
pop ebx
|
||||
mov KTHREAD_TRAP_FRAME[esi], ebx
|
||||
|
||||
/* Return to the caller */
|
||||
jmp KiTrapEpilog
|
||||
|
||||
/* Handle the no-pcr case out of line */
|
||||
L5_:
|
||||
push 0
|
||||
|
||||
/* Handle the no-thread case out of line */
|
||||
L4_:
|
||||
push 0
|
||||
jmp L3_
|
||||
|
||||
} // end of __asm block
|
||||
}
|
||||
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap0()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/* No error code */
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 0
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap1()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/* No error code */
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 1
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap2()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 2
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap3()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 3
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap4()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 4
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap5()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 5
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap6()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 6
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap7()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 7
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap8()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
call KiDoubleFaultHandler
|
||||
iretd
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap9()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 9
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap10()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 10
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap11()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 11
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap12()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 12
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap13()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 13
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap14()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 14
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap15()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 15
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrap16()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 16
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiTrapUnknown()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push 0
|
||||
push ebp
|
||||
push ebx
|
||||
push esi
|
||||
mov esi, 255
|
||||
jmp KiTrapProlog
|
||||
}
|
||||
}
|
||||
|
||||
/* EOF */
|
@@ -1,217 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2000 David Welch <welch@cwcom.net>
|
||||
*
|
||||
* Moved to MSVC-compatible inline assembler by Mike Nordell, 2003-12-26
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/*
|
||||
* FILE: ntoskrnl/ke/i386/vm86_sup.S
|
||||
* PURPOSE: V86 mode support
|
||||
* PROGRAMMER: David Welch (welch@cwcom.net)
|
||||
* UPDATE HISTORY:
|
||||
* Created 09/10/00
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
#include <internal/v86m.h>
|
||||
#include <ntos/tss.h>
|
||||
//#include <ntos/service.h>
|
||||
#include <internal/trap.h>
|
||||
#include <internal/ps.h>
|
||||
|
||||
#include <roscfg.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/i386/segment.h>
|
||||
|
||||
|
||||
extern KSPIN_LOCK PiThreadListLock;
|
||||
extern ULONG PiNrThreadsAwaitingReaping;
|
||||
extern ULONG MmGlobalKernelPageDirectory[1024];
|
||||
|
||||
VOID STDCALL PiWakeupReaperThread(VOID);
|
||||
VOID KeSetBaseGdtSelector(ULONG Entry, PVOID Base);
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTIONS: Switches to another thread's context
|
||||
* ARGUMENTS:
|
||||
* Thread = Thread to switch to
|
||||
* OldThread = Thread to switch from
|
||||
*/
|
||||
__declspec(naked)
|
||||
VOID
|
||||
Ki386ContextSwitch(struct _KTHREAD* NewThread, struct _KTHREAD* OldThread)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
/* Save callee save registers. */
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
cli /* This is a critical section for this processor. */
|
||||
|
||||
/* Get the pointer to the new thread. */
|
||||
mov ebx, NewThread
|
||||
|
||||
/*
|
||||
* Set the base of the TEB selector to the base of the TEB for
|
||||
* this thread.
|
||||
*/
|
||||
push ebx
|
||||
push KTHREAD_TEB[ebx]
|
||||
push TEB_SELECTOR
|
||||
call KeSetBaseGdtSelector
|
||||
add esp, 8
|
||||
pop ebx
|
||||
|
||||
/*
|
||||
* Load the PCR selector.
|
||||
*/
|
||||
mov eax, PCR_SELECTOR
|
||||
mov fs, ax
|
||||
|
||||
/*
|
||||
* Set the current thread information in the PCR.
|
||||
*/
|
||||
mov fs:KPCR_CURRENT_THREAD, ebx
|
||||
|
||||
/*
|
||||
* Set the current LDT
|
||||
*/
|
||||
xor eax, eax
|
||||
mov edi, ETHREAD_THREADS_PROCESS[ebx]
|
||||
test word ptr KPROCESS_LDT_DESCRIPTOR0[edi], 0xFFFF
|
||||
jz L4
|
||||
|
||||
push KPROCESS_LDT_DESCRIPTOR1[edi]
|
||||
push KPROCESS_LDT_DESCRIPTOR0[edi]
|
||||
push LDT_SELECTOR
|
||||
call KeSetGdtSelector
|
||||
add esp, 12
|
||||
|
||||
mov eax, LDT_SELECTOR
|
||||
|
||||
L4:
|
||||
lldt ax
|
||||
|
||||
/*
|
||||
* Load up the iomap offset for this thread in
|
||||
* preparation for setting it below.
|
||||
*/
|
||||
mov eax, KPROCESS_IOPM_OFFSET[edi]
|
||||
|
||||
/*
|
||||
* FIXME: Save debugging state.
|
||||
*/
|
||||
|
||||
/*
|
||||
* FIXME: Save floating point state.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Switch stacks
|
||||
*/
|
||||
mov ebx, 12[ebp]
|
||||
mov KTHREAD_KERNEL_STACK[ebx], esp
|
||||
mov ebx, 8[ebp]
|
||||
mov esp, KTHREAD_KERNEL_STACK[ebx]
|
||||
mov edi, KTHREAD_STACK_LIMIT[ebx]
|
||||
|
||||
/*
|
||||
* Set the stack pointer in this processors TSS
|
||||
*/
|
||||
mov esi, fs:KPCR_TSS
|
||||
|
||||
/*
|
||||
* Set current IOPM offset in the TSS
|
||||
*/
|
||||
mov KTSS_IOMAPBASE[esi], ax
|
||||
|
||||
mov eax, KTHREAD_INITIAL_STACK[ebx]
|
||||
mov KTSS_ESP0[esi], eax
|
||||
|
||||
/*
|
||||
* Change the address space
|
||||
*/
|
||||
mov ebx, ETHREAD_THREADS_PROCESS[ebx]
|
||||
mov eax, KPROCESS_DIRECTORY_TABLE_BASE[ebx]
|
||||
mov cr3, eax
|
||||
|
||||
/*
|
||||
* Set up the PDE for the top of the new stack.
|
||||
*/
|
||||
mov ebx, 0
|
||||
L2:
|
||||
mov esi, edi
|
||||
shr esi, 22
|
||||
mov eax, 0xF03C0000[esi*4]
|
||||
cmp eax, 0
|
||||
jne L1
|
||||
mov eax, MmGlobalKernelPageDirectory[esi*4]
|
||||
mov 0xF03C0000[esi*4], eax
|
||||
L1:
|
||||
add edi, 4096
|
||||
inc ebx
|
||||
cmp ebx, (MM_STACK_SIZE / 4096)
|
||||
jl L2
|
||||
|
||||
/*
|
||||
* FIXME: Restore floating point state
|
||||
*/
|
||||
|
||||
/*
|
||||
* FIXME: Restore debugging state
|
||||
*/
|
||||
|
||||
/*
|
||||
* Exit the critical section
|
||||
*/
|
||||
sti
|
||||
}
|
||||
|
||||
KeReleaseSpinLockFromDpcLevel(&PiThreadListLock);
|
||||
|
||||
if (PiNrThreadsAwaitingReaping) {
|
||||
PiWakeupReaperThread();
|
||||
}
|
||||
|
||||
__asm
|
||||
{
|
||||
/*
|
||||
* Restore the saved register and exit
|
||||
*/
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
|
||||
pop ebp
|
||||
ret
|
||||
}
|
||||
}
|
@@ -1,256 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2000 David Welch <welch@cwcom.net>
|
||||
*
|
||||
* Moved to MSVC-compatible inline assembler by Mike Nordell, 2003-12-25
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/*
|
||||
* FILE: ntoskrnl/ke/i386/vm86_sup.S
|
||||
* PURPOSE: V86 mode support
|
||||
* PROGRAMMER: David Welch (welch@cwcom.net)
|
||||
* UPDATE HISTORY:
|
||||
* Created 09/10/00
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
#include <internal/v86m.h>
|
||||
#include <ntos/tss.h>
|
||||
#include <internal/trap.h>
|
||||
#include <internal/ps.h>
|
||||
|
||||
#include <roscfg.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/ps.h>
|
||||
|
||||
|
||||
// Taken from ntoskrnl/include/internal/v86m.h, since that one must be fixed
|
||||
// a bit before it could be used from here.
|
||||
#define KV86M_REGISTERS_EBP (0x0)
|
||||
#define KV86M_REGISTERS_EDI (0x4)
|
||||
#define KV86M_REGISTERS_ESI (0x8)
|
||||
#define KV86M_REGISTERS_EDX (0xC)
|
||||
#define KV86M_REGISTERS_ECX (0x10)
|
||||
#define KV86M_REGISTERS_EBX (0x14)
|
||||
#define KV86M_REGISTERS_EAX (0x18)
|
||||
#define KV86M_REGISTERS_DS (0x1C)
|
||||
#define KV86M_REGISTERS_ES (0x20)
|
||||
#define KV86M_REGISTERS_FS (0x24)
|
||||
#define KV86M_REGISTERS_GS (0x28)
|
||||
#define KV86M_REGISTERS_EIP (0x2C)
|
||||
#define KV86M_REGISTERS_CS (0x30)
|
||||
#define KV86M_REGISTERS_EFLAGS (0x34)
|
||||
#define KV86M_REGISTERS_ESP (0x38)
|
||||
#define KV86M_REGISTERS_SS (0x3C)
|
||||
|
||||
|
||||
void KiV86Complete();
|
||||
|
||||
|
||||
/*
|
||||
* Starts in v86 mode with the registers set to the
|
||||
* specified values.
|
||||
*/
|
||||
|
||||
__declspec(naked)
|
||||
VOID Ki386RetToV86Mode(KV86M_REGISTERS* InRegs,
|
||||
KV86M_REGISTERS* OutRegs)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/*
|
||||
* Setup a stack frame
|
||||
*/
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
pushad /* Save registers */
|
||||
|
||||
mov ebx, InRegs
|
||||
|
||||
/*
|
||||
* Save ebp
|
||||
*/
|
||||
push ebp
|
||||
|
||||
/*
|
||||
* Save a pointer to IN_REGS which the v86m exception handler will
|
||||
* use to handle exceptions
|
||||
*/
|
||||
push ebx
|
||||
|
||||
/*
|
||||
* Since we are going to fiddle with the stack pointer this must be
|
||||
* a critical section for this processor
|
||||
*/
|
||||
|
||||
/*
|
||||
* Save the old initial stack
|
||||
*/
|
||||
mov esi, fs:KPCR_CURRENT_THREAD
|
||||
mov edi, KTHREAD_INITIAL_STACK[esi]
|
||||
push edi
|
||||
|
||||
/*
|
||||
* We also need to set the stack in the kthread structure
|
||||
*/
|
||||
mov KTHREAD_INITIAL_STACK[esi], esp
|
||||
|
||||
/*
|
||||
* The stack used for handling exceptions from v86 mode in this thread
|
||||
* will be the current stack adjusted so we don't overwrite the
|
||||
* existing stack frames
|
||||
*/
|
||||
mov esi, fs:KPCR_TSS
|
||||
mov KTSS_ESP0[esi], esp
|
||||
|
||||
/*
|
||||
* Create the stack frame for an iret to v86 mode
|
||||
*/
|
||||
push KV86M_REGISTERS_GS[ebx]
|
||||
push KV86M_REGISTERS_FS[ebx]
|
||||
push KV86M_REGISTERS_DS[ebx]
|
||||
push KV86M_REGISTERS_ES[ebx]
|
||||
push KV86M_REGISTERS_SS[ebx]
|
||||
push KV86M_REGISTERS_ESP[ebx]
|
||||
push KV86M_REGISTERS_EFLAGS[ebx]
|
||||
push KV86M_REGISTERS_CS[ebx]
|
||||
push KV86M_REGISTERS_EIP[ebx]
|
||||
|
||||
/*
|
||||
* Setup the CPU registers
|
||||
*/
|
||||
mov eax, KV86M_REGISTERS_EAX[ebx]
|
||||
mov ecx, KV86M_REGISTERS_ECX[ebx]
|
||||
mov edx, KV86M_REGISTERS_EDX[ebx]
|
||||
mov esi, KV86M_REGISTERS_ESI[ebx]
|
||||
mov edi, KV86M_REGISTERS_EDI[ebx]
|
||||
mov ebp, KV86M_REGISTERS_EBP[ebx]
|
||||
mov ebx, KV86M_REGISTERS_EBX[ebx]
|
||||
|
||||
/*
|
||||
* Go to v86 mode
|
||||
*/
|
||||
iretd
|
||||
|
||||
/*
|
||||
* Handle the completion of a vm86 routine. We are called from
|
||||
* an exception handler with the registers at the point of the
|
||||
* exception on the stack.
|
||||
*/
|
||||
|
||||
jmp KiV86Complete // TMN: Function-splitting
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void KiV86Complete()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/* Restore the original ebp */
|
||||
mov ebp, TF_ORIG_EBP[esp]
|
||||
|
||||
/* Get a pointer to the OUT_REGS structure */
|
||||
mov ebx, 12[ebp] // OutRegs
|
||||
|
||||
/* Skip debug information and unsaved registers */
|
||||
add esp, 0x30
|
||||
|
||||
/* Ignore 32-bit segment registers */
|
||||
add esp, 12
|
||||
|
||||
/* Save the vm86 registers into the OUT_REGS structure */
|
||||
pop dword ptr KV86M_REGISTERS_EDX[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_ECX[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_EAX[ebx]
|
||||
|
||||
/* Restore the old previous mode */
|
||||
pop eax
|
||||
mov ss:KTHREAD_PREVIOUS_MODE[esi], al
|
||||
|
||||
/* Restore the old exception handler list */
|
||||
pop eax
|
||||
mov fs:KPCR_EXCEPTION_LIST, eax
|
||||
|
||||
/* Ignore the 32-bit fs register */
|
||||
add esp, 4
|
||||
|
||||
pop dword ptr KV86M_REGISTERS_EDI[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_ESI[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_EBX[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_EBP[ebx]
|
||||
|
||||
/* Ignore error code */
|
||||
add esp, 4
|
||||
|
||||
pop dword ptr KV86M_REGISTERS_EIP[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_CS[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_EFLAGS[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_ESP[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_SS[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_ES[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_DS[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_FS[ebx]
|
||||
pop dword ptr KV86M_REGISTERS_GS[ebx]
|
||||
|
||||
/*
|
||||
* We are going to fiddle with the stack so this must be a critical
|
||||
* section for this process
|
||||
*/
|
||||
cli
|
||||
|
||||
/*
|
||||
* Restore the initial stack
|
||||
*/
|
||||
pop eax
|
||||
mov esi, fs:KPCR_TSS
|
||||
mov KTSS_ESP0[esi], eax
|
||||
|
||||
/*
|
||||
* We also need to set the stack in the kthread structure
|
||||
*/
|
||||
mov esi, fs:KPCR_CURRENT_THREAD
|
||||
mov edi, KTHREAD_INITIAL_STACK[esi]
|
||||
mov KTHREAD_INITIAL_STACK[esi], eax
|
||||
|
||||
/* Exit the critical section */
|
||||
sti
|
||||
|
||||
/* Ignore IN_REGS pointer */
|
||||
add esp, 4
|
||||
|
||||
/* Ignore ebp restored above */
|
||||
add esp, 4
|
||||
|
||||
/* Return to caller */
|
||||
popad
|
||||
mov esp, ebp
|
||||
pop ebp
|
||||
ret
|
||||
|
||||
} // end of __asm block
|
||||
}
|
@@ -1,15 +0,0 @@
|
||||
; This file is vital. It tells the linker how to order some functions
|
||||
; and some data, that unfortunately is assumed to be at low location
|
||||
; and in known order to eachother respectively?
|
||||
|
||||
MultibootStub
|
||||
our_memmove
|
||||
dummy_placeholder
|
||||
NtProcessStartup@4
|
||||
initialize_page_directory
|
||||
relocate_pointer_log_to_phys
|
||||
; Order some data that there is some assumptions about...
|
||||
init_stack
|
||||
init_stack_top
|
||||
trap_stack
|
||||
trap_stack_top
|
@@ -1,126 +0,0 @@
|
||||
#include <ddk/ntddk.h>
|
||||
|
||||
|
||||
void MmSafeCopyToUserRestart();
|
||||
void MmSafeCopyToUserUnsafeStart();
|
||||
void MmSafeCopyFromUserUnsafeStart();
|
||||
void MmSafeCopyFromUserRestart();
|
||||
|
||||
/*
|
||||
* NTSTATUS MmSafeCopyFromUser(PVOID Dest, PVOID Src,
|
||||
* ULONG NumberOfBytes)
|
||||
*/
|
||||
__declspec(naked)
|
||||
NTSTATUS MmSafeCopyFromUser(PVOID Dest, const VOID *Src, ULONG Count)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
|
||||
push esi
|
||||
push edi
|
||||
push ecx
|
||||
|
||||
mov edi, 8[ebp]
|
||||
mov esi, 12[ebp]
|
||||
mov ecx, 16[ebp]
|
||||
|
||||
/*
|
||||
* Default return code
|
||||
*/
|
||||
xor eax,eax
|
||||
|
||||
jmp MmSafeCopyFromUserUnsafeStart
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
__declspec(naked)
|
||||
void MmSafeCopyFromUserUnsafeStart()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/*
|
||||
* This is really a synthetic instruction since if we incur a
|
||||
* pagefault then eax will be set to an appropiate STATUS code
|
||||
*/
|
||||
cld
|
||||
rep movsb
|
||||
|
||||
jmp MmSafeCopyFromUserRestart
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void MmSafeCopyFromUserRestart()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
pop ecx
|
||||
pop edi
|
||||
pop esi
|
||||
|
||||
pop ebp
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
* NTSTATUS MmSafeCopyToUser(PVOID Dest, PVOID Src,
|
||||
* ULONG NumberOfBytes)
|
||||
*/
|
||||
NTSTATUS MmSafeCopyToUser(PVOID Dest, const VOID *Src, ULONG Count)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
mov esp,ebp
|
||||
|
||||
push esi
|
||||
push edi
|
||||
push ecx
|
||||
|
||||
mov edi, 8[ebp]
|
||||
mov esi, 12[ebp]
|
||||
mov ecx, 16[ebp]
|
||||
|
||||
/*
|
||||
* Default return code
|
||||
*/
|
||||
xor eax,eax
|
||||
|
||||
jmp MmSafeCopyToUserUnsafeStart
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void MmSafeCopyToUserUnsafeStart()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
/*
|
||||
* This is really a synthetic instruction since if we incur a
|
||||
* pagefault then eax will be set to an appropiate STATUS code
|
||||
*/
|
||||
cld
|
||||
rep movsb
|
||||
jmp MmSafeCopyToUserRestart
|
||||
}
|
||||
}
|
||||
|
||||
__declspec(naked)
|
||||
void MmSafeCopyToUserRestart()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
pop ecx
|
||||
pop edi
|
||||
pop esi
|
||||
|
||||
pop ebp
|
||||
ret
|
||||
}
|
||||
}
|
@@ -1,574 +0,0 @@
|
||||
/* $Id$
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/mm/mminit.c
|
||||
* PURPOSE: kernel memory managment initialization functions
|
||||
* PROGRAMMER: David Welch (welch@cwcom.net)
|
||||
* UPDATE HISTORY:
|
||||
* Created 9/4/98
|
||||
*/
|
||||
|
||||
/* INCLUDES *****************************************************************/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <roscfg.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/mm.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/io.h>
|
||||
#include <internal/ps.h>
|
||||
#include <internal/pool.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <internal/debug.h>
|
||||
|
||||
/* GLOBALS *****************************************************************/
|
||||
|
||||
/*
|
||||
* Size of extended memory (kb) (fixed for now)
|
||||
*/
|
||||
#define EXTENDED_MEMORY_SIZE (3*1024*1024)
|
||||
|
||||
/*
|
||||
* Compiler defined symbols
|
||||
*/
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
|
||||
#pragma intrinsic(strcmp)
|
||||
|
||||
static PIMAGE_SECTION_HEADER FindSection(const char* szSeg)
|
||||
{
|
||||
PIMAGE_NT_HEADERS NtHeader = RtlImageNtHeader((PVOID)KERNEL_BASE);
|
||||
PIMAGE_SECTION_HEADER Section = IMAGE_FIRST_SECTION(NtHeader);
|
||||
const int count = NtHeader->FileHeader.NumberOfSections;
|
||||
int i;
|
||||
for (i = 0; i < count; ++i, ++Section)
|
||||
{
|
||||
if (!strcmp(szSeg, Section->Name))
|
||||
{
|
||||
return Section;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void* FindSegmentStart(const char* szSeg)
|
||||
{
|
||||
PIMAGE_SECTION_HEADER Section = FindSection(szSeg);
|
||||
if (Section)
|
||||
{
|
||||
return (void*)(KERNEL_BASE + Section->VirtualAddress);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void* FindSegmentEnd(const char* szSeg)
|
||||
{
|
||||
PIMAGE_SECTION_HEADER Section = FindSection(szSeg);
|
||||
if (Section)
|
||||
{
|
||||
return (void*)(KERNEL_BASE + Section->VirtualAddress + Section->Misc.VirtualSize);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
|
||||
static BOOLEAN IsThisAnNtAsSystem = FALSE;
|
||||
static MM_SYSTEM_SIZE MmSystemSize = MmSmallSystem;
|
||||
|
||||
static MEMORY_AREA* kernel_text_desc = NULL;
|
||||
static MEMORY_AREA* kernel_init_desc = NULL;
|
||||
static MEMORY_AREA* kernel_map_desc = NULL;
|
||||
static MEMORY_AREA* kernel_kpcr_desc = NULL;
|
||||
static MEMORY_AREA* kernel_data_desc = NULL;
|
||||
static MEMORY_AREA* kernel_param_desc = NULL;
|
||||
static MEMORY_AREA* kernel_pool_desc = NULL;
|
||||
static MEMORY_AREA* kernel_shared_data_desc = NULL;
|
||||
static MEMORY_AREA* kernel_mapped_low_mem_desc = NULL;
|
||||
static MEMORY_AREA* MiKernelMapDescriptor = NULL;
|
||||
static MEMORY_AREA* MiPagedPoolDescriptor = NULL;
|
||||
|
||||
PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress;
|
||||
|
||||
PVOID MiNonPagedPoolStart;
|
||||
ULONG MiNonPagedPoolLength;
|
||||
PVOID MiKernelMapStart;
|
||||
ULONG MiKernelMapLength;
|
||||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
BOOLEAN STDCALL MmIsThisAnNtAsSystem(VOID)
|
||||
{
|
||||
return(IsThisAnNtAsSystem);
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
MM_SYSTEM_SIZE STDCALL MmQuerySystemSize(VOID)
|
||||
{
|
||||
return(MmSystemSize);
|
||||
}
|
||||
|
||||
VOID MiShutdownMemoryManager(VOID)
|
||||
{
|
||||
}
|
||||
|
||||
VOID INIT_FUNCTION
|
||||
MmInitVirtualMemory(ULONG LastKernelAddress,
|
||||
ULONG KernelLength)
|
||||
/*
|
||||
* FUNCTION: Intialize the memory areas list
|
||||
* ARGUMENTS:
|
||||
* bp = Pointer to the boot parameters
|
||||
* kernel_len = Length of the kernel
|
||||
*/
|
||||
{
|
||||
PVOID BaseAddress;
|
||||
ULONG Length;
|
||||
ULONG ParamLength = KernelLength;
|
||||
NTSTATUS Status;
|
||||
PHYSICAL_ADDRESS BoundaryAddressMultiple;
|
||||
//ULONG i;
|
||||
|
||||
DPRINT("MmInitVirtualMemory(%x, %x)\n",LastKernelAddress, KernelLength);
|
||||
|
||||
BoundaryAddressMultiple.QuadPart = 0;
|
||||
LastKernelAddress = PAGE_ROUND_UP(LastKernelAddress);
|
||||
|
||||
MmInitMemoryAreas();
|
||||
|
||||
/* Don't change the start of kernel map. Pte's must always exist for this region. */
|
||||
MiKernelMapStart = (char*)LastKernelAddress + PAGE_SIZE;
|
||||
MiKernelMapLength = MM_KERNEL_MAP_SIZE;
|
||||
|
||||
MiNonPagedPoolStart = (char*)MiKernelMapStart + MiKernelMapLength + PAGE_SIZE;
|
||||
MiNonPagedPoolLength = MM_NONPAGED_POOL_SIZE;
|
||||
|
||||
MmPagedPoolBase = (char*)MiNonPagedPoolStart + MiNonPagedPoolLength + PAGE_SIZE;
|
||||
MmPagedPoolSize = MM_PAGED_POOL_SIZE;
|
||||
|
||||
MiInitKernelMap();
|
||||
MiInitializeNonPagedPool();
|
||||
|
||||
/*
|
||||
* Setup the system area descriptor list
|
||||
*/
|
||||
BaseAddress = (PVOID)0xf0000000;
|
||||
MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
0x400000,
|
||||
0,
|
||||
&kernel_map_desc,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
BaseAddress = (PVOID)KPCR_BASE;
|
||||
MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
PAGE_SIZE * MAXIMUM_PROCESSORS,
|
||||
0,
|
||||
&kernel_kpcr_desc,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
BaseAddress = (PVOID)0xd0000000;
|
||||
MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
0x100000,
|
||||
0,
|
||||
&kernel_mapped_low_mem_desc,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
BaseAddress = (PVOID)KERNEL_BASE;
|
||||
Length = PAGE_ROUND_UP(((ULONG)FindSegmentEnd(".text"))) - KERNEL_BASE;
|
||||
ParamLength = ParamLength - Length;
|
||||
|
||||
/*
|
||||
* No need to lock the address space at this point since no
|
||||
* other threads are running.
|
||||
*/
|
||||
MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
Length,
|
||||
0,
|
||||
&kernel_text_desc,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
// TODO: Here we REALLY should iterate the PE's sections and set protection
|
||||
// accordingly for each and every one of them.
|
||||
|
||||
// NOTE This code ONLY works because of the assumption that the .text
|
||||
// segment is the first in the PE, and the .reloc segment is the last.
|
||||
// Link in a way to make this assumtion false, and the kernel won't work.
|
||||
BaseAddress = (PVOID)PAGE_ROUND_UP(((ULONG)FindSegmentEnd(".text")));
|
||||
Length = PAGE_ROUND_UP(((ULONG)FindSegmentStart(".reloc"))) - (ULONG_PTR)BaseAddress;
|
||||
ParamLength = ParamLength - Length;
|
||||
DPRINT1("Data Length %x\n",Length);
|
||||
DPRINT1("Data BaseAddress %x\n",BaseAddress);
|
||||
|
||||
/*
|
||||
* No need to lock the address space at this point since we are
|
||||
* the only thread running.
|
||||
*/
|
||||
// For GCC-compiled, kernel_data_desc contains:
|
||||
// .data, .edata, .idata, .bss and .rsrc. E.i. all but .text and .reloc
|
||||
MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
Length,
|
||||
0,
|
||||
&kernel_data_desc,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
// BaseAddress = (PVOID)PAGE_ROUND_UP(((ULONG)FindSegmentEnd(".edata")));
|
||||
BaseAddress = (PVOID)PAGE_ROUND_UP(((ULONG)FindSegmentStart(".reloc")));
|
||||
Length = LastKernelAddress - (ULONG)BaseAddress;
|
||||
// For GCC-compiled, kernel_param_desc contains .reloc
|
||||
MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
Length,
|
||||
0,
|
||||
&kernel_param_desc,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
BaseAddress = MiNonPagedPoolStart;
|
||||
MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
MiNonPagedPoolLength,
|
||||
0,
|
||||
&kernel_pool_desc,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
BaseAddress = MiKernelMapStart;
|
||||
Status = MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
MiKernelMapLength,
|
||||
0,
|
||||
&MiKernelMapDescriptor,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
BaseAddress = MmPagedPoolBase;
|
||||
Status = MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_PAGED_POOL,
|
||||
&BaseAddress,
|
||||
MmPagedPoolSize,
|
||||
0,
|
||||
&MiPagedPoolDescriptor,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
MmInitializePagedPool();
|
||||
|
||||
/*
|
||||
* Create the kernel mapping of the user/kernel shared memory.
|
||||
*/
|
||||
BaseAddress = (PVOID)KI_USER_SHARED_DATA;
|
||||
Length = PAGE_SIZE;
|
||||
MmCreateMemoryArea(NULL,
|
||||
MmGetKernelAddressSpace(),
|
||||
MEMORY_AREA_SYSTEM,
|
||||
&BaseAddress,
|
||||
Length,
|
||||
0,
|
||||
&kernel_shared_data_desc,
|
||||
FALSE,
|
||||
FALSE,
|
||||
BoundaryAddressMultiple);
|
||||
|
||||
Status = MmRequestPageMemoryConsumer(MC_NPPOOL, TRUE,
|
||||
&MmSharedDataPagePhysicalAddress);
|
||||
Status = MmCreateVirtualMapping(NULL,
|
||||
(PVOID)KI_USER_SHARED_DATA,
|
||||
PAGE_READWRITE,
|
||||
MmSharedDataPagePhysicalAddress,
|
||||
TRUE);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DbgPrint("Unable to create virtual mapping\n");
|
||||
KEBUGCHECK(0);
|
||||
}
|
||||
RtlZeroMemory(BaseAddress, Length);
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
MmInitializeMemoryConsumer(MC_USER, MmTrimUserMemory);
|
||||
}
|
||||
|
||||
|
||||
VOID INIT_FUNCTION
|
||||
MmInit1(ULONG FirstKrnlPhysAddr,
|
||||
ULONG LastKrnlPhysAddr,
|
||||
ULONG LastKernelAddress,
|
||||
PADDRESS_RANGE BIOSMemoryMap,
|
||||
ULONG AddressRangeCount,
|
||||
ULONG MaxMem)
|
||||
/*
|
||||
* FUNCTION: Initalize memory managment
|
||||
*/
|
||||
{
|
||||
ULONG i;
|
||||
ULONG kernel_len;
|
||||
#ifndef MP
|
||||
extern unsigned int unmap_me, unmap_me2, unmap_me3;
|
||||
#endif
|
||||
|
||||
DPRINT("MmInit1(FirstKrnlPhysAddr, %x, LastKrnlPhysAddr %x, LastKernelAddress %x)\n",
|
||||
FirstKrnlPhysAddr,
|
||||
LastKrnlPhysAddr,
|
||||
LastKernelAddress);
|
||||
|
||||
|
||||
if ((BIOSMemoryMap != NULL) && (AddressRangeCount > 0))
|
||||
{
|
||||
// If we have a bios memory map, recalulate the memory size
|
||||
ULONG last = 0;
|
||||
for (i = 0; i < AddressRangeCount; i++)
|
||||
{
|
||||
if (BIOSMemoryMap[i].Type == 1
|
||||
&& (BIOSMemoryMap[i].BaseAddrLow + BIOSMemoryMap[i].LengthLow + PAGE_SIZE -1) / PAGE_SIZE > last)
|
||||
{
|
||||
last = (BIOSMemoryMap[i].BaseAddrLow + BIOSMemoryMap[i].LengthLow + PAGE_SIZE -1) / PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
if ((last - 256) * 4 > KeLoaderBlock.MemHigher)
|
||||
{
|
||||
KeLoaderBlock.MemHigher = (last - 256) * 4;
|
||||
}
|
||||
}
|
||||
|
||||
if (KeLoaderBlock.MemHigher >= (MaxMem - 1) * 1024)
|
||||
{
|
||||
KeLoaderBlock.MemHigher = (MaxMem - 1) * 1024;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: Set this based on the system command line
|
||||
*/
|
||||
MmSystemRangeStart = (PVOID)KERNEL_BASE; // 0xC0000000
|
||||
MmUserProbeAddress = (PVOID)0x7fff0000;
|
||||
MmHighestUserAddress = (PVOID)0x7ffeffff;
|
||||
|
||||
MmInitGlobalKernelPageDirectory();
|
||||
|
||||
/*
|
||||
* Initialize memory managment statistics
|
||||
*/
|
||||
MmStats.NrTotalPages = 0;
|
||||
MmStats.NrSystemPages = 0;
|
||||
MmStats.NrUserPages = 0;
|
||||
MmStats.NrReservedPages = 0;
|
||||
MmStats.NrUserPages = 0;
|
||||
MmStats.NrFreePages = 0;
|
||||
MmStats.NrLockedPages = 0;
|
||||
MmStats.PagingRequestsInLastMinute = 0;
|
||||
MmStats.PagingRequestsInLastFiveMinutes = 0;
|
||||
MmStats.PagingRequestsInLastFifteenMinutes = 0;
|
||||
|
||||
/*
|
||||
* Initialize the kernel address space
|
||||
*/
|
||||
MmInitializeKernelAddressSpace();
|
||||
|
||||
/*
|
||||
* Unmap low memory
|
||||
*/
|
||||
#ifndef MP
|
||||
/* In SMP mode we unmap the low memory in MmInit3.
|
||||
The APIC needs the mapping of the first pages
|
||||
while the processors are starting up. */
|
||||
MmDeletePageTable(NULL, 0);
|
||||
#endif
|
||||
/*
|
||||
* Free all pages not used for kernel memory
|
||||
* (we assume the kernel occupies a continuous range of physical
|
||||
* memory)
|
||||
*/
|
||||
DPRINT("first krnl %x\nlast krnl %x\n",FirstKrnlPhysAddr,
|
||||
LastKrnlPhysAddr);
|
||||
|
||||
/*
|
||||
* Free physical memory not used by the kernel
|
||||
*/
|
||||
MmStats.NrTotalPages = KeLoaderBlock.MemHigher/4;
|
||||
if (!MmStats.NrTotalPages)
|
||||
{
|
||||
DbgPrint("Memory not detected, default to 8 MB\n");
|
||||
MmStats.NrTotalPages = 2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* add 1MB for standard memory (not extended) */
|
||||
MmStats.NrTotalPages += 256;
|
||||
}
|
||||
#ifdef BIOS_MEM_FIX
|
||||
MmStats.NrTotalPages += 16;
|
||||
#endif
|
||||
DbgPrint("Used memory %dKb\n", (MmStats.NrTotalPages * PAGE_SIZE) / 1024);
|
||||
|
||||
LastKernelAddress = (ULONG)MmInitializePageList((PVOID)FirstKrnlPhysAddr,
|
||||
(PVOID)LastKrnlPhysAddr,
|
||||
MmStats.NrTotalPages,
|
||||
PAGE_ROUND_UP(LastKernelAddress),
|
||||
BIOSMemoryMap,
|
||||
AddressRangeCount);
|
||||
kernel_len = LastKrnlPhysAddr - FirstKrnlPhysAddr;
|
||||
|
||||
/*
|
||||
* Create a trap for null pointer references and protect text
|
||||
* segment
|
||||
*/
|
||||
CHECKPOINT;
|
||||
#if defined(_MSC_VER)
|
||||
DPRINT(".text start: %x, .data start: %x\n",
|
||||
(int)FindSegmentStart(".text"),
|
||||
(int)FindSegmentStart(".data"));
|
||||
|
||||
{
|
||||
const char* pCode = FindSegmentStart(".text");
|
||||
const char* pData = FindSegmentEnd(".text");
|
||||
while (pCode < pData)
|
||||
{
|
||||
MmSetPageProtect(NULL, (PVOID)pCode, PAGE_EXECUTE_READ);
|
||||
pCode += PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
#else
|
||||
DPRINT("_text_start__ %x _init_end__ %x\n",(int)&_text_start__,(int)&_init_end__);
|
||||
for (i=PAGE_ROUND_DOWN(((int)&_text_start__));
|
||||
i<PAGE_ROUND_UP(((int)&_init_end__));i=i+PAGE_SIZE)
|
||||
{
|
||||
MmSetPageProtect(NULL,
|
||||
(PVOID)i,
|
||||
PAGE_EXECUTE_READ);
|
||||
}
|
||||
#endif
|
||||
|
||||
DPRINT("Invalidating between %x and %x\n",
|
||||
LastKernelAddress, 0xc0600000);
|
||||
for (i=(LastKernelAddress); i<0xc0600000; i+=PAGE_SIZE)
|
||||
{
|
||||
MmRawDeleteVirtualMapping((PVOID)(i));
|
||||
}
|
||||
|
||||
DPRINT("Invalidating between %x and %x\n",
|
||||
0xd0100000, 0xd0400000);
|
||||
for (i=0xd0100000; i<0xd0400000; i+=PAGE_SIZE)
|
||||
{
|
||||
MmRawDeleteVirtualMapping((PVOID)(i));
|
||||
}
|
||||
|
||||
DPRINT("Almost done MmInit()\n");
|
||||
#ifndef MP
|
||||
/* FIXME: This is broken in SMP mode */
|
||||
#if !defined(_MSC_VER) // FIXME: I don't trust using this from MSVC yet!
|
||||
MmDeleteVirtualMapping(NULL, (PVOID)&unmap_me, TRUE, NULL, NULL);
|
||||
MmDeleteVirtualMapping(NULL, (PVOID)&unmap_me2, TRUE, NULL, NULL);
|
||||
MmDeleteVirtualMapping(NULL, (PVOID)&unmap_me3, TRUE, NULL, NULL);
|
||||
#endif // _MSC_VER
|
||||
#endif
|
||||
/*
|
||||
* Intialize memory areas
|
||||
*/
|
||||
MmInitVirtualMemory(LastKernelAddress, kernel_len);
|
||||
|
||||
MmInitializeMdlImplementation();
|
||||
}
|
||||
|
||||
VOID INIT_FUNCTION
|
||||
MmInit2(VOID)
|
||||
{
|
||||
MmInitializeRmapList();
|
||||
MmInitializePageOp();
|
||||
MmInitSectionImplementation();
|
||||
MmInitPagingFile();
|
||||
}
|
||||
|
||||
VOID INIT_FUNCTION
|
||||
MmInit3(VOID)
|
||||
{
|
||||
/*
|
||||
* Unmap low memory
|
||||
*/
|
||||
#ifdef MP
|
||||
/* In SMP mode we can unmap the low memory
|
||||
if all processors are started. */
|
||||
MmDeletePageTable(NULL, 0);
|
||||
#endif
|
||||
MmInitZeroPageThread();
|
||||
MmCreatePhysicalMemorySection();
|
||||
MiInitBalancerThread();
|
||||
|
||||
/*
|
||||
* Initialise the modified page writer.
|
||||
*/
|
||||
MmInitMpwThread();
|
||||
|
||||
/* FIXME: Read parameters from memory */
|
||||
}
|
||||
|
||||
VOID STATIC
|
||||
MiFreeInitMemoryPage(PVOID Context, MEMORY_AREA* MemoryArea, PVOID Address,
|
||||
PHYSICAL_ADDRESS PhysAddr, SWAPENTRY SwapEntry,
|
||||
BOOLEAN Dirty)
|
||||
{
|
||||
assert(SwapEntry == 0);
|
||||
if (PhysAddr.QuadPart != 0)
|
||||
{
|
||||
MmReleasePageMemoryConsumer(MC_NPPOOL, PhysAddr);
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
MiFreeInitMemory(VOID)
|
||||
{
|
||||
#if defined(_MSC_VER)
|
||||
DPRINT1("Can not yet free .init memory for MSVC compiled kernel\n");
|
||||
#else
|
||||
MmLockAddressSpace(MmGetKernelAddressSpace());
|
||||
MmFreeMemoryArea(MmGetKernelAddressSpace(),
|
||||
(PVOID)&_init_start__,
|
||||
PAGE_ROUND_UP((ULONG)&_init_end__) - (ULONG)_init_start__,
|
||||
MiFreeInitMemoryPage,
|
||||
NULL);
|
||||
MmUnlockAddressSpace(MmGetKernelAddressSpace());
|
||||
#endif
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@@ -1,299 +0,0 @@
|
||||
/*
|
||||
* ReactOS kernel
|
||||
* Copyright (C) 2000 David Welch <welch@cwcom.net>
|
||||
*
|
||||
* Moved to MSVC-compatible inline assembler by Mike Nordell, 2003-12-26
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/*
|
||||
* FILE: ntoskrnl/ke/i386/vm86_sup.S
|
||||
* PURPOSE: V86 mode support
|
||||
* PROGRAMMER: David Welch (welch@cwcom.net)
|
||||
* UPDATE HISTORY:
|
||||
* Created 09/10/00
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/status.h>
|
||||
#include <internal/i386/segment.h>
|
||||
#include <internal/i386/fpu.h>
|
||||
#include <internal/ps.h>
|
||||
#include <ddk/defines.h>
|
||||
#include <internal/v86m.h>
|
||||
#include <ntos/tss.h>
|
||||
//#include <ntos/service.h>
|
||||
#include <internal/trap.h>
|
||||
#include <internal/ps.h>
|
||||
|
||||
#include <roscfg.h>
|
||||
#include <internal/ntoskrnl.h>
|
||||
#include <internal/i386/segment.h>
|
||||
|
||||
|
||||
#define EXCEPTION_UNWINDING 0x02
|
||||
|
||||
#define EREC_FLAGS 0x04
|
||||
|
||||
#define ExceptionContinueExecution 0
|
||||
#define ExceptionContinueSearch 1
|
||||
#define ExceptionNestedException 2
|
||||
#define ExceptionCollidedUnwind 3
|
||||
|
||||
//.globl _RtlpExecuteHandlerForException
|
||||
//.globl _RtlpExecuteHandlerForUnwind
|
||||
|
||||
#define CONTEXT_FLAGS 0x00
|
||||
#define CONTEXT_SEGGS 0x8C
|
||||
#define CONTEXT_SEGFS 0x90
|
||||
#define CONTEXT_SEGES 0x94
|
||||
#define CONTEXT_SEGDS 0x98
|
||||
#define CONTEXT_EDI 0x9C
|
||||
#define CONTEXT_ESI 0xA0
|
||||
#define CONTEXT_EBX 0xA4
|
||||
#define CONTEXT_EDX 0xA8
|
||||
#define CONTEXT_ECX 0xAC
|
||||
#define CONTEXT_EAX 0xB0
|
||||
#define CONTEXT_EBP 0xB4
|
||||
#define CONTEXT_EIP 0xB8
|
||||
#define CONTEXT_SEGCS 0xBC
|
||||
#define CONTEXT_EFLAGS 0xC0
|
||||
#define CONTEXT_ESP 0xC4
|
||||
#define CONTEXT_SEGSS 0xC8
|
||||
|
||||
|
||||
#define RCC_CONTEXT 0x08
|
||||
|
||||
|
||||
VOID STDCALL
|
||||
AsmDebug(ULONG Value);
|
||||
|
||||
|
||||
// EAX = value to print
|
||||
__declspec(naked)
|
||||
void do_debug()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
pusha
|
||||
push eax
|
||||
call AsmDebug
|
||||
popa
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#define REH_ERECORD 0x08
|
||||
#define REH_RFRAME 0x0C
|
||||
#define REH_CONTEXT 0x10
|
||||
#define REH_DCONTEXT 0x14
|
||||
#define REH_EROUTINE 0x18
|
||||
|
||||
// Parameters:
|
||||
// None
|
||||
// Registers:
|
||||
// [EBP+08h] - PEXCEPTION_RECORD ExceptionRecord
|
||||
// [EBP+0Ch] - PEXCEPTION_REGISTRATION RegistrationFrame
|
||||
// [EBP+10h] - PVOID Context
|
||||
// [EBP+14h] - PVOID DispatcherContext
|
||||
// [EBP+18h] - PEXCEPTION_HANDLER ExceptionRoutine
|
||||
// EDX - Address of protecting exception handler
|
||||
// Returns:
|
||||
// EXCEPTION_DISPOSITION
|
||||
// Notes:
|
||||
// Setup the protecting exception handler and call the exception
|
||||
// handler in the right context.
|
||||
__declspec(naked)
|
||||
void RtlpExecuteHandler()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push REH_RFRAME[ebp]
|
||||
|
||||
push edx
|
||||
push fs:0x0
|
||||
mov fs:0x0, esp
|
||||
|
||||
// Prepare to call the exception handler
|
||||
push REH_DCONTEXT[ebp]
|
||||
push REH_CONTEXT[ebp]
|
||||
push REH_RFRAME[ebp]
|
||||
push REH_ERECORD[ebp]
|
||||
|
||||
// Now call the exception handler
|
||||
mov eax, REH_EROUTINE[ebp]
|
||||
call eax
|
||||
|
||||
cmp fs:0x0, -1
|
||||
jne reh_stack_looks_ok
|
||||
|
||||
// This should not happen
|
||||
push 0
|
||||
push 0
|
||||
push 0
|
||||
push 0
|
||||
call RtlAssert
|
||||
|
||||
reh_loop:
|
||||
jmp reh_loop
|
||||
|
||||
reh_stack_looks_ok:
|
||||
mov esp, fs:0x0
|
||||
|
||||
// Return to the 'front-end' for this function
|
||||
pop dword ptr fs:0x0
|
||||
mov esp, ebp
|
||||
pop ebp
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
#endif // 0
|
||||
|
||||
#define REP_ERECORD 0x04
|
||||
#define REP_RFRAME 0x08
|
||||
#define REP_CONTEXT 0x0C
|
||||
#define REP_DCONTEXT 0x10
|
||||
|
||||
// Parameters:
|
||||
// [ESP+04h] - PEXCEPTION_RECORD ExceptionRecord
|
||||
// [ESP+08h] - PEXCEPTION_REGISTRATION RegistrationFrame
|
||||
// [ESP+0Ch] - PCONTEXT Context
|
||||
// [ESP+10h] - PVOID DispatcherContext
|
||||
// Registers:
|
||||
// None
|
||||
// Returns:
|
||||
// EXCEPTION_DISPOSITION
|
||||
// Notes:
|
||||
// This exception handler protects the exception handling
|
||||
// mechanism by detecting nested exceptions.
|
||||
__declspec(naked)
|
||||
void RtlpExceptionProtector()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, ExceptionContinueSearch
|
||||
mov ecx, REP_ERECORD[esp]
|
||||
test EREC_FLAGS[ecx], EXCEPTION_UNWINDING
|
||||
jnz rep_end
|
||||
|
||||
// Unwinding is not taking place, so return ExceptionNestedException
|
||||
|
||||
// Set DispatcherContext field to the exception registration for the
|
||||
// exception handler that executed when a nested exception occurred
|
||||
mov ecx, REP_DCONTEXT[esp]
|
||||
mov eax, REP_RFRAME[esp]
|
||||
mov [ecx], eax
|
||||
mov eax, ExceptionNestedException
|
||||
|
||||
rep_end:
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Parameters:
|
||||
// [ESP+04h] - PEXCEPTION_RECORD ExceptionRecord
|
||||
// [ESP+08h] - PEXCEPTION_REGISTRATION RegistrationFrame
|
||||
// [ESP+0Ch] - PCONTEXT Context
|
||||
// [ESP+10h] - PVOID DispatcherContext
|
||||
// [ESP+14h] - PEXCEPTION_HANDLER ExceptionHandler
|
||||
// Registers:
|
||||
// None
|
||||
// Returns:
|
||||
// EXCEPTION_DISPOSITION
|
||||
// Notes:
|
||||
// Front-end
|
||||
__declspec(naked)
|
||||
void RtlpExecuteHandlerForException()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov edx, RtlpExceptionProtector
|
||||
jmp RtlpExecuteHandler
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#define RUP_ERECORD 0x04
|
||||
#define RUP_RFRAME 0x08
|
||||
#define RUP_CONTEXT 0x0C
|
||||
#define RUP_DCONTEXT 0x10
|
||||
|
||||
// Parameters:
|
||||
// [ESP+04h] - PEXCEPTION_RECORD ExceptionRecord
|
||||
// [ESP+08h] - PEXCEPTION_REGISTRATION RegistrationFrame
|
||||
// [ESP+0Ch] - PCONTEXT Context
|
||||
// [ESP+10h] - PVOID DispatcherContext
|
||||
// Registers:
|
||||
// None
|
||||
// Returns:
|
||||
// EXCEPTION_DISPOSITION
|
||||
// Notes:
|
||||
// This exception handler protects the exception handling
|
||||
// mechanism by detecting collided unwinds.
|
||||
__declspec(naked)
|
||||
void RtlpUnwindProtector()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax, ExceptionContinueSearch
|
||||
mov RUP_ERECORD[esp], ecx
|
||||
test EREC_FLAGS[ecx], EXCEPTION_UNWINDING
|
||||
jz rup_end
|
||||
|
||||
// Unwinding is taking place, so return ExceptionCollidedUnwind
|
||||
|
||||
mov ecx, RUP_RFRAME[esp]
|
||||
mov edx, RUP_DCONTEXT[esp]
|
||||
|
||||
// Set DispatcherContext field to the exception registration for the
|
||||
// exception handler that executed when a collision occurred
|
||||
mov eax, RUP_RFRAME[ecx]
|
||||
mov [edx], eax
|
||||
mov eax, ExceptionCollidedUnwind
|
||||
|
||||
rup_end:
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Parameters:
|
||||
// [ESP+04h] - PEXCEPTION_RECORD ExceptionRecord
|
||||
// [ESP+08h] - PEXCEPTION_REGISTRATION RegistrationFrame
|
||||
// [ESP+0Ch] - PCONTEXT Context
|
||||
// [ESP+10h] - PVOID DispatcherContext
|
||||
// [ESP+14h] - PEXCEPTION_HANDLER ExceptionHandler
|
||||
// Registers:
|
||||
// None
|
||||
// Returns:
|
||||
// EXCEPTION_DISPOSITION
|
||||
__declspec(naked)
|
||||
void RtlpExecuteHandlerForUnwind()
|
||||
{
|
||||
__asm mov edx, RtlpUnwindProtector
|
||||
__asm jmp RtlpExecuteHandler
|
||||
}
|
||||
|
33
posix/apps/baresh/Makefile
Normal file
33
posix/apps/baresh/Makefile
Normal file
@@ -0,0 +1,33 @@
|
||||
# $Id: Makefile,v 1.1 2002/01/20 21:22:29 ea Exp $
|
||||
#
|
||||
# Tu run it in Win32 console mode, undefine __SUBSYSTEM_WINDOWS__
|
||||
# and pass "console" in the ld's --subsystem option.
|
||||
#
|
||||
#
|
||||
PATH_TO_TOP=../../../..
|
||||
|
||||
PATH_TO_PSX_TOP=../..
|
||||
|
||||
TARGET_NAME=sh
|
||||
|
||||
CFLAGS=-D__SUBSYSTEM_WINDOWS__
|
||||
|
||||
OBJECTS=$(TARGET_NAME).o
|
||||
|
||||
LIBRARIES=\
|
||||
$(PATH_TO_PSX_TOP)/lib/crt0w32.o \
|
||||
$(PATH_TO_PSX_TOP)/lib/psxdll/psxdll.a
|
||||
|
||||
$(TARGET_NAME): $(OBJECTS) $(LIBRARIES)
|
||||
$(CC) \
|
||||
$(CFLAGS) \
|
||||
$(OBJECTS) \
|
||||
$(LIBRARIES)\
|
||||
-o $@ \
|
||||
-Wl,--subsystem,windows\
|
||||
-nostartfiles \
|
||||
-nostdlib
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
# EOF
|
60
posix/apps/baresh/sh.c
Normal file
60
posix/apps/baresh/sh.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/* $Id: sh.c,v 1.1 2002/01/20 21:22:29 ea Exp $
|
||||
*
|
||||
* baresh - Bare Shell for the PSX subsystem.
|
||||
* Copyright (c) 2002 Emanuele Aliberti
|
||||
* License: GNU GPL v2
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
|
||||
#define INPUT_BUFFER_SIZE 128
|
||||
|
||||
int run=1;
|
||||
|
||||
void cmd_exit(char*buf)
|
||||
{
|
||||
run=0;
|
||||
}
|
||||
|
||||
void cmd_pwd(char * buf)
|
||||
{
|
||||
char pwd[1024];
|
||||
|
||||
getcwd(pwd,sizeof pwd);
|
||||
printf("%s\n",pwd);
|
||||
}
|
||||
|
||||
void cmd_ls(char*buf)
|
||||
{
|
||||
char pwd[1024];
|
||||
DIR * dir;
|
||||
struct dirent * entry;
|
||||
|
||||
getcwd(pwd,sizeof pwd);
|
||||
dir=opendir(pwd);
|
||||
while (NULL!=(entry=readdir(dir)))
|
||||
{
|
||||
printf("%s\n",entry->d_name);
|
||||
}
|
||||
closedir(dir);
|
||||
}
|
||||
|
||||
int main(int argc,char*argv[])
|
||||
{
|
||||
char buf[INPUT_BUFFER_SIZE];
|
||||
|
||||
while (run)
|
||||
{
|
||||
printf("# ");
|
||||
if (gets(buf))
|
||||
{
|
||||
if (!strcmp("exit",buf)) cmd_exit(buf);
|
||||
else if (!strcmp("pwd",buf)) cmd_pwd(buf);
|
||||
else if (!strcmp("ls",buf)) cmd_ls(buf);
|
||||
else printf("%s: unknown command\n",argv[0]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/* EOF */
|
74
posix/include/aio.h
Normal file
74
posix/include/aio.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/* $Id: aio.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* aio.h
|
||||
*
|
||||
* asynchronous input and output (REALTIME). Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __AIO_H_INCLUDED__
|
||||
#define __AIO_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef struct _tag_aiocb
|
||||
{
|
||||
int aio_fildes; /* file descriptor */
|
||||
off_t aio_offset; /* file offset */
|
||||
volatile void* aio_buf; /* location of buffer */
|
||||
size_t aio_nbytes; /* length of transfer */
|
||||
int aio_reqprio; /* request priority offset */
|
||||
struct sigevent aio_sigevent; /* signal number and value */
|
||||
int aio_lio_opcode; /* operation to be performed */
|
||||
} aiocb;
|
||||
|
||||
/* CONSTANTS */
|
||||
#define AIO_CANCELED 0
|
||||
#define AIO_NOTCANCELED 1
|
||||
#define AIO_ALLDONE 2
|
||||
|
||||
#define LIO_WAIT 0
|
||||
#define LIO_NOWAIT 1
|
||||
#define LIO_READ 2
|
||||
#define LIO_WRITE 3
|
||||
#define LIO_NOP 4
|
||||
|
||||
/* PROTOTYPES */
|
||||
int aio_cancel(int, struct aiocb *);
|
||||
int aio_error(const struct aiocb *);
|
||||
int aio_fsync(int, struct aiocb *);
|
||||
int aio_read(struct aiocb *);
|
||||
ssize_t aio_return(struct aiocb *);
|
||||
int aio_suspend(const struct aiocb *const[], int, const struct timespec *);
|
||||
int aio_write(struct aiocb *);
|
||||
int lio_listio(int, struct aiocb *const[], int, struct sigevent *);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __AIO_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
56
posix/include/arpa/inet.h
Normal file
56
posix/include/arpa/inet.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/* $Id: inet.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* arpa/inet.h
|
||||
*
|
||||
* definitions for internet operations. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __ARPA_INET_H_INCLUDED__
|
||||
#define __ARPA_INET_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <netinet/in.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
uint32_t htonl(uint32_t hostlong);
|
||||
uint16_t htons(uint16_t hostshort);
|
||||
uint32_t ntohl(uint32_t netlong);
|
||||
uint16_t ntohs(uint16_t netshort);
|
||||
|
||||
in_addr_t inet_addr(const char *cp);
|
||||
in_addr_t inet_lnaof(struct in_addr in);
|
||||
struct in_addr inet_makeaddr(in_addr_t net, in_addr_t lna);
|
||||
in_addr_t inet_netof(struct in_addr in);
|
||||
in_addr_t inet_network(const char *cp);
|
||||
char *inet_ntoa(struct in_addr in);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __ARPA_INET_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
65
posix/include/assert.h
Normal file
65
posix/include/assert.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/* $Id: assert.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* assert.h
|
||||
*
|
||||
* verify program assertion. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __ASSERT_H_INCLUDED__
|
||||
#define __ASSERT_H_INCLUDED__
|
||||
|
||||
/* types */
|
||||
|
||||
/* constants */
|
||||
|
||||
/* prototypes */
|
||||
|
||||
/* macros */
|
||||
#ifdef NDEBUG
|
||||
#define assert(ignore) ((void) 0)
|
||||
#else /* !NDEBUG */
|
||||
|
||||
#define assert(expression) \
|
||||
#ifdef __PSXDLL__
|
||||
|
||||
/* headers for internal usage by psxdll.dll and ReactOS */
|
||||
#include <psxdll/stdio.h>
|
||||
#include <psxdll/stdlib.h>
|
||||
|
||||
#else /* ! __PSXDLL__ */
|
||||
|
||||
/* standard POSIX headers */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#endif
|
||||
|
||||
if(!(expression)) \
|
||||
{ \
|
||||
fputs("__FILE__, line __LINE__: assertion \"expression\" failed\n", stderr); \
|
||||
abort(); \
|
||||
}
|
||||
|
||||
#endif /* NDEBUG */
|
||||
|
||||
#endif /* __ASSERT_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
63
posix/include/cpio.h
Normal file
63
posix/include/cpio.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/* $Id: cpio.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* cpio.h
|
||||
*
|
||||
* cpio archive values. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __CPIO_H_INCLUDED__
|
||||
#define __CPIO_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
#define C_IRUSR (0000400) /* read by owner */
|
||||
#define C_IWUSR (0000200) /* write by owner */
|
||||
#define C_IXUSR (0000100) /* execute by owner */
|
||||
#define C_IRGRP (0000040) /* read by group */
|
||||
#define C_IWGRP (0000020) /* write by group */
|
||||
#define C_IXGRP (0000010) /* execute by group */
|
||||
#define C_IROTH (0000004) /* read by others */
|
||||
#define C_IWOTH (0000002) /* write by others */
|
||||
#define C_IXOTH (0000001) /* execute by others */
|
||||
#define C_ISUID (0004000) /* set user ID */
|
||||
#define C_ISGID (0002000) /* set group ID */
|
||||
#define C_ISVTX (0001000) /* on directories, restricted deletion flag */
|
||||
#define C_ISDIR (0040000) /* directory */
|
||||
#define C_ISFIFO (0010000) /* FIFO */
|
||||
#define C_ISREG (0100000) /* regular file */
|
||||
#define C_ISBLK (0060000) /* block special */
|
||||
#define C_ISCHR (0020000) /* character special */
|
||||
#define C_ISCTG (0110000) /* reserved */
|
||||
#define C_ISLNK (0120000) /* symbolic link */
|
||||
#define C_ISSOCK (0140000) /* socket */
|
||||
|
||||
#define MAGIC "070707"
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __CPIO_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
61
posix/include/ctype.h
Normal file
61
posix/include/ctype.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/* $Id: ctype.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* ctype.h
|
||||
*
|
||||
* character types. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __CTYPE_H_INCLUDED__
|
||||
#define __CTYPE_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int isalnum(int);
|
||||
int isalpha(int);
|
||||
int isascii(int);
|
||||
int iscntrl(int);
|
||||
int isdigit(int);
|
||||
int isgraph(int);
|
||||
int islower(int);
|
||||
int isprint(int);
|
||||
int ispunct(int);
|
||||
int isspace(int);
|
||||
int isupper(int);
|
||||
int isxdigit(int);
|
||||
int toascii(int);
|
||||
int tolower(int);
|
||||
int toupper(int);
|
||||
|
||||
/* MACROS */
|
||||
/* FIXME: the standard isn't clear about these */
|
||||
#define _toupper(c) (toupper(c))
|
||||
#define _tolower(c) (tolower(c))
|
||||
|
||||
#endif /* __CTYPE_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
70
posix/include/dirent.h
Normal file
70
posix/include/dirent.h
Normal file
@@ -0,0 +1,70 @@
|
||||
/* $Id: dirent.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* dirent.h
|
||||
*
|
||||
* format of directory entries. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __DIRENT_H_INCLUDED__
|
||||
#define __DIRENT_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <sys/types.h>
|
||||
#include <stddef.h>
|
||||
|
||||
/* TYPES */
|
||||
typedef void DIR;
|
||||
|
||||
struct dirent
|
||||
{
|
||||
ino_t d_ino; /* file serial number */
|
||||
char *d_name; /* name of entry */
|
||||
};
|
||||
|
||||
/* for Unicode filenames */
|
||||
struct _Wdirent
|
||||
{
|
||||
ino_t d_ino; /* file serial number */
|
||||
wchar_t *d_name; /* name of entry */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int closedir(DIR *);
|
||||
DIR *opendir(const char *);
|
||||
struct dirent *readdir(DIR *);
|
||||
int readdir_r(DIR *, struct dirent *, struct dirent **);
|
||||
void rewinddir(DIR *);
|
||||
void seekdir(DIR *, long int);
|
||||
long int telldir(DIR *);
|
||||
|
||||
/* for Unicode filenames */
|
||||
DIR *_Wopendir(const wchar_t *);
|
||||
struct _Wdirent *_Wreaddir(DIR *);
|
||||
int _Wreaddir_r(DIR *, struct _Wdirent *, struct _Wdirent **);
|
||||
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __DIRENT_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
58
posix/include/dlfcn.h
Normal file
58
posix/include/dlfcn.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/* $Id: dlfcn.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* dlfcn.h
|
||||
*
|
||||
* dynamic linking. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __DLFCN_H_INCLUDED__
|
||||
#define __DLFCN_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
#define RTLD_LAZY (0x00000000) /* Relocations are performed at an \
|
||||
implementation-dependent time. */
|
||||
#define RTLD_NOW (0x00000001) /* Relocations are performed when \
|
||||
the object is loaded. */
|
||||
|
||||
#define RTLD_GLOBAL (0x00000010) /* All symbols are available for \
|
||||
relocation processing of other \
|
||||
modules. */
|
||||
#define RTLD_LOCAL (0x00000020) /* All symbols are not made available \
|
||||
for relocation processing by other \
|
||||
modules. */
|
||||
|
||||
#define RTLD_NEXT ((void *)(-1))
|
||||
|
||||
/* PROTOTYPES */
|
||||
void *dlopen(const char *, int);
|
||||
void *dlsym(void *, const char *);
|
||||
int dlclose(void *);
|
||||
char *dlerror(void);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __DLFCN_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
123
posix/include/errno.h
Normal file
123
posix/include/errno.h
Normal file
@@ -0,0 +1,123 @@
|
||||
/* $Id: errno.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* errno.h
|
||||
*
|
||||
* system error numbers. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __ERRNO_H_INCLUDED__
|
||||
#define __ERRNO_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
#define E2BIG ( 1) /* Argument list too long. */
|
||||
#define EACCES ( 2) /* Permission denied. */
|
||||
#define EADDRINUSE ( 3) /* Address in use. */
|
||||
#define EADDRNOTAVAIL ( 4) /* Address not available. */
|
||||
#define EAFNOSUPPORT ( 5) /* Address family not supported. */
|
||||
#define EAGAIN ( 6) /* Resource unavailable, try again */
|
||||
#define EALREADY ( 7) /* Connection already in progress. */
|
||||
#define EBADF ( 8) /* Bad file descriptor. */
|
||||
#define EBADMSG ( 9) /* Bad message. */
|
||||
#define EBUSY (10) /* Device or resource busy. */
|
||||
#define ECANCELED (11) /* Operation canceled. */
|
||||
#define ECHILD (12) /* No child processes. */
|
||||
#define ECONNABORTED (13) /* Connection aborted. */
|
||||
#define ECONNREFUSED (14) /* Connection refused. */
|
||||
#define ECONNRESET (15) /* Connection reset. */
|
||||
#define EDEADLK (16) /* Resource deadlock would occur. */
|
||||
#define EDESTADDRREQ (17) /* Destination address required. */
|
||||
#define EDOM (18) /* Mathematics argument out of domain of function. */
|
||||
#define EDQUOT (19) /* Reserved. */
|
||||
#define EEXIST (20) /* File exists. */
|
||||
#define EFAULT (21) /* Bad address. */
|
||||
#define EFBIG (22) /* File too large. */
|
||||
#define EHOSTUNREACH (23) /* Host is unreachable. */
|
||||
#define EIDRM (24) /* Identifier removed. */
|
||||
#define EILSEQ (25) /* Illegal byte sequence. */
|
||||
#define EINPROGRESS (26) /* Operation in progress. */
|
||||
#define EINTR (27) /* Interrupted function. */
|
||||
#define EINVAL (28) /* Invalid argument. */
|
||||
#define EIO (29) /* I/O error. */
|
||||
#define EISCONN (30) /* Socket is connected. */
|
||||
#define EISDIR (31) /* Is a directory. */
|
||||
#define ELOOP (32) /* Too many levels of symbolic links. */
|
||||
#define EMFILE (33) /* Too many open files. */
|
||||
#define EMLINK (34) /* Too many links. */
|
||||
#define EMSGSIZE (35) /* Message too large. */
|
||||
#define EMULTIHOP (36) /* Reserved. */
|
||||
#define ENAMETOOLONG (37) /* Filename too long. */
|
||||
#define ENETDOWN (38) /* Network is down. */
|
||||
#define ENETUNREACH (39) /* Network unreachable. */
|
||||
#define ENFILE (40) /* Too many files open in system. */
|
||||
#define ENOBUFS (41) /* No buffer space available. */
|
||||
#define ENODATA (42) /* No message is available on the STREAM head read queue. */
|
||||
#define ENODEV (43) /* No such device. */
|
||||
#define ENOENT (44) /* No such file or directory. */
|
||||
#define ENOEXEC (45) /* Executable file format error. */
|
||||
#define ENOLCK (46) /* No locks available. */
|
||||
#define ENOLINK (47) /* Reserved. */
|
||||
#define ENOMEM (48) /* Not enough space. */
|
||||
#define ENOMSG (49) /* No message of the desired type. */
|
||||
#define ENOPROTOOPT (50) /* Protocol not available. */
|
||||
#define ENOSPC (51) /* No space left on device. */
|
||||
#define ENOSR (52) /* No STREAM resources. */
|
||||
#define ENOSTR (53) /* Not a STREAM. */
|
||||
#define ENOSYS (54) /* Function not supported. */
|
||||
#define ENOTCONN (55) /* The socket is not connected. */
|
||||
#define ENOTDIR (56) /* Not a directory. */
|
||||
#define ENOTEMPTY (57) /* Directory not empty. */
|
||||
#define ENOTSOCK (58) /* Not a socket. */
|
||||
#define ENOTSUP (59) /* Not supported. */
|
||||
#define ENOTTY (60) /* Inappropriate I/O control operation. */
|
||||
#define ENXIO (61) /* No such device or address. */
|
||||
#define EOPNOTSUPP (62) /* Operation not supported on socket. */
|
||||
#define EOVERFLOW (63) /* Value too large to be stored in data type. */
|
||||
#define EPERM (64) /* Operation not permitted. */
|
||||
#define EPIPE (65) /* Broken pipe. */
|
||||
#define EPROTO (66) /* Protocol error. */
|
||||
#define EPROTONOSUPPORT (67) /* Protocol not supported. */
|
||||
#define EPROTOTYPE (68) /* Socket type not supported. */
|
||||
#define ERANGE (69) /* Result too large. */
|
||||
#define EROFS (70) /* Read-only file system. */
|
||||
#define ESPIPE (71) /* Invalid seek. */
|
||||
#define ESRCH (72) /* No such process. */
|
||||
#define ESTALE (73) /* Reserved. */
|
||||
#define ETIME (74) /* Streamioctl()timeout. */
|
||||
#define ETIMEDOUT (75) /* Connection timed out. */
|
||||
#define ETXTBSY (76) /* Text file busy. */
|
||||
#define EWOULDBLOCK (77) /* Operation would block */
|
||||
#define EXDEV (78) /* Cross-device link. */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int * __PdxGetThreadErrNum(void); /* returns a pointer to the current thread's errno */
|
||||
|
||||
/* MACROS */
|
||||
#define errno (*__PdxGetThreadErrNum())
|
||||
|
||||
#endif /* __ERRNO_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
149
posix/include/fcntl.h
Normal file
149
posix/include/fcntl.h
Normal file
@@ -0,0 +1,149 @@
|
||||
/* $Id: fcntl.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* fcntl.h
|
||||
*
|
||||
* file control options. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __FCNTL_H_INCLUDED__
|
||||
#define __FCNTL_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
/*
|
||||
the structure flock describes a file lock
|
||||
*/
|
||||
struct flock
|
||||
{
|
||||
short l_type; /* type of lock; F_RDLCK, F_WRLCK, F_UNLCK */
|
||||
short l_whence; /* flag for starting offset */
|
||||
off_t l_start; /* relative offset in bytes */
|
||||
off_t l_len; /* size; if 0 then until EOF */
|
||||
pid_t l_pid; /* process ID of the process holding the lock;
|
||||
returned with F_GETLK */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
/*
|
||||
values for cmd used by fcntl()
|
||||
*/
|
||||
enum __fcntl_cmd
|
||||
{
|
||||
F_DUPFD, /* duplicate file descriptor */
|
||||
F_GETFD, /* get file descriptor flags */
|
||||
F_SETFD, /* set file descriptor flags */
|
||||
F_GETFL, /* get file status flags and file access modes */
|
||||
F_SETFL, /* Set file status flags */
|
||||
F_GETLK, /* get record locking information */
|
||||
F_SETLK, /* set record locking information */
|
||||
F_SETLKW, /* set record locking information; wait if blocked */
|
||||
/* ReactOS-specific */
|
||||
F_NEWFD, /* create new file descriptor */
|
||||
F_DELFD, /* delete file descriptor */
|
||||
F_GETALL, /* get a copy of the internal descriptor object */
|
||||
F_SETALL, /* initialize internal descriptor object */
|
||||
F_GETXP, /* get file descriptor extra data pointer */
|
||||
F_SETXP, /* set file descriptor extra data pointer */
|
||||
F_GETXS, /* get file descriptor extra data size */
|
||||
F_SETXS, /* set file descriptor extra data size */
|
||||
F_GETFH, /* get file handle */
|
||||
F_SETFH /* set file handle */
|
||||
};
|
||||
|
||||
/*
|
||||
file descriptor flags used for fcntl()
|
||||
*/
|
||||
/* Close the file descriptor upon execution of an exec family function. */
|
||||
#define FD_CLOEXEC (0x00000001)
|
||||
|
||||
/*
|
||||
values for l_type used for record locking with fcntl()
|
||||
*/
|
||||
/* Shared or read lock. */
|
||||
#define F_RDLCK (1)
|
||||
/* Unlock. */
|
||||
#define F_UNLCK (2)
|
||||
/* Exclusive or write lock. */
|
||||
#define F_WRLCK (3)
|
||||
|
||||
/*
|
||||
file flags used for open()
|
||||
*/
|
||||
/* Create file if it does not exist. */
|
||||
#define O_CREAT (0x00000001)
|
||||
/* Exclusive use flag. */
|
||||
#define O_EXCL (0x00000002)
|
||||
/* Do not assign controlling terminal. */
|
||||
#define O_NOCTTY (0x00000004)
|
||||
/* Truncate flag. */
|
||||
#define O_TRUNC (0x00000008)
|
||||
/* ReactOS-specific */
|
||||
/* File must be a directory */
|
||||
#define _O_DIRFILE (0x00000010)
|
||||
|
||||
/*
|
||||
file status flags used for open() and fcntl()
|
||||
*/
|
||||
/* Set append mode. */
|
||||
#define O_APPEND (0x00000100)
|
||||
/* Write according to synchronised I/O data integrity completion. */
|
||||
#define O_DSYNC (0x00000200)
|
||||
/* Non-blocking mode. */
|
||||
#define O_NONBLOCK (0x00000400)
|
||||
/* Synchronised read I/O operations. */
|
||||
#define O_RSYNC (0x00000800)
|
||||
/* Write according to synchronised I/O file integrity completion. */
|
||||
#define O_SYNC (0x00001000)
|
||||
|
||||
/*
|
||||
file access modes used for open() and fcntl()
|
||||
*/
|
||||
/* Open for reading only. */
|
||||
#define O_RDONLY (0x01000000)
|
||||
/* Open for reading and writing. */
|
||||
#define O_RDWR (0x02000000)
|
||||
/* Open for writing only. */
|
||||
#define O_WRONLY (0x04000000)
|
||||
|
||||
/*
|
||||
mask for use with file access modes
|
||||
*/
|
||||
#define O_ACCMODE (O_RDONLY | O_RDWR | O_WRONLY)
|
||||
|
||||
/* PROTOTYPES */
|
||||
int creat(const char *, mode_t);
|
||||
int fcntl(int, int, ...);
|
||||
int open(const char *, int, ...);
|
||||
|
||||
int _Wcreat(const wchar_t *, mode_t);
|
||||
int _Wopen(const wchar_t *, int, ...);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __FCNTL_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
93
posix/include/fmtmsg.h
Normal file
93
posix/include/fmtmsg.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/* $Id: fmtmsg.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* fmtmsg.h
|
||||
*
|
||||
* message display structures. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __FMTMSG_H_INCLUDED__
|
||||
#define __FMTMSG_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
/* Major Classifications */
|
||||
/* NOTE: these are unique values, not flags. Their bits can overlap, but
|
||||
cannot overlap with those of other categories */
|
||||
#define MM_HARD (0x00000001) /* Source of the condition is hardware. */
|
||||
#define MM_SOFT (0x00000002) /* Source of the condition is software. */
|
||||
#define MM_FIRM (0x00000003) /* Source of the condition is firmware. */
|
||||
|
||||
/* Message Source Subclassifications */
|
||||
/* NOTE: these are unique values, not flags. Their bits can overlap, but
|
||||
cannot overlap with those of other categories */
|
||||
#define MM_APPL (0x00000010) /* Condition detected by application. */
|
||||
#define MM_UTIL (0x00000020) /* Condition detected by utility. */
|
||||
#define MM_OPSYS (0x00000030) /* Condition detected by operating system. */
|
||||
|
||||
/* Status Subclassifications */
|
||||
/* NOTE: these are unique values, not flags. Their bits can overlap, but
|
||||
cannot overlap with those of other categories */
|
||||
#define MM_RECOVER (0x00000100) /* Recoverable error. */
|
||||
#define MM_NRECOV (0x00000200) /* Non-recoverable error. */
|
||||
|
||||
/* Display Subclassifications */
|
||||
/* NOTE: these, unlike other classification constants, are flags. Their
|
||||
bits must be distinct */
|
||||
#define MM_PRINT (0x00001000) /* Display message on standard error. */
|
||||
#define MM_CONSOLE (0x00002000) /* Display message on system console. */
|
||||
|
||||
/* Identifiers for the levels of severity */
|
||||
#define MM_NOSEV (0) /* No severity level provided for the message. */
|
||||
#define MM_INFO (1) /* Informative message. */
|
||||
#define MM_WARNING (2) /* Application has detected unusual non-error \
|
||||
condition. */
|
||||
#define MM_ERROR (3) /* Application has encountered a non-fatal fault. */
|
||||
#define MM_HALT (4) /* Error causing application to halt. */
|
||||
|
||||
/* Null values and identifiers */
|
||||
#define MM_NULLLBL ((char *)0) /* Null label */
|
||||
#define MM_NULLSEV (0) /* Null severity */
|
||||
#define MM_NULLMC (0L) /* Null class */
|
||||
#define MM_NULLTXT ((char *)0) /* Null text */
|
||||
#define MM_NULLACT ((char *)0) /* Null action */
|
||||
#define MM_NULLTAG ((char *)0) /* Null tag */
|
||||
|
||||
/* Return values */
|
||||
#define MM_OK ( 0) /* The function succeeded. */
|
||||
#define MM_NOTOK (-1) /* The function failed completely. */
|
||||
#define MM_NOMSG (-2) /* The function was unable to generate a message on \
|
||||
standard error, but otherwise succeeded. */
|
||||
#define MM_NOCON (-3) /* The function was unable to generate a console \
|
||||
message, but otherwise succeeded. */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int fmtmsg(long, const char*, int, const char*, const char*, const char*);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __FMTMSG_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
66
posix/include/fnmatch.h
Normal file
66
posix/include/fnmatch.h
Normal file
@@ -0,0 +1,66 @@
|
||||
/* $Id: fnmatch.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* fnmatch.h
|
||||
*
|
||||
* filename-matching types. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __FNMATCH_H_INCLUDED__
|
||||
#define __FNMATCH_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#ifdef __PSXDLL__
|
||||
|
||||
/* headers for internal usage by psxdll.dll and ReactOS */
|
||||
|
||||
#else /* ! __PSXDLL__ */
|
||||
|
||||
/* standard POSIX headers */
|
||||
|
||||
#endif
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
/* Flags */
|
||||
#define FNM_PATHNAME (0x00000001) /* Slash in string only matches slash \
|
||||
in pattern. */
|
||||
#define FNM_PERIOD (0x00000002) /* Leading period in string must be \
|
||||
exactly matched by period in \
|
||||
pattern. */
|
||||
#define FNM_NOESCAPE (0x00000004) /* Disable backslash escaping. */
|
||||
|
||||
/* Return values */
|
||||
#define FNM_NOMATCH (1) /* The string does not match the specified \
|
||||
pattern. */
|
||||
#define FNM_NOSYS (2) /* The implementation does not support this \
|
||||
function. */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int fnmatch(const char *, const char *, int);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __FNMATCH_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
73
posix/include/ftw.h
Normal file
73
posix/include/ftw.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/* $Id: ftw.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* ftw.h
|
||||
*
|
||||
* file tree traversal. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __FTW_H_INCLUDED__
|
||||
#define __FTW_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
struct FTW
|
||||
{
|
||||
int base;
|
||||
int level;
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
/* Values of the third argument to the application-supplied function
|
||||
that is passed as the second argument to ftw() and nftw() */
|
||||
#define FTW_F (1) /* File. */
|
||||
#define FTW_D (2) /* Directory. */
|
||||
#define FTW_DNR (3) /* Directory without read permission. */
|
||||
#define FTW_DP (4) /* Directory with subdirectories visited. */
|
||||
#define FTW_NS (5) /* Unknown type, stat() failed. */
|
||||
#define FTW_SL (6) /* Symbolic link. */
|
||||
#define FTW_SLN (7) /* Symbolic link that names a non-existent file. */
|
||||
|
||||
/* Values of the fourth argument to nftw() */
|
||||
#define FTW_PHYS (0x00000001) /* Physical walk, does not follow symbolic \
|
||||
links. Otherwise, nftw() will follow \
|
||||
links but will not walk down any path \
|
||||
that crosses itself. */
|
||||
#define FTW_MOUNT (0x00000002) /* The walk will not cross a mount point. */
|
||||
#define FTW_DEPTH (0x00000004) /* All subdirectories will be visited before \
|
||||
the directory itself. */
|
||||
#define FTW_CHDIR (0x00000008) /* The walk will change to each directory \
|
||||
before reading it. */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int ftw(const char *,
|
||||
int (*)(const char *, const struct stat *, int), int);
|
||||
int nftw(const char *, int (*)
|
||||
(const char *, const struct stat *, int, struct FTW*),
|
||||
int, int);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __FTW_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
73
posix/include/glob.h
Normal file
73
posix/include/glob.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/* $Id: glob.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* glob.h
|
||||
*
|
||||
* pathname pattern-matching types. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __GLOB_H_INCLUDED__
|
||||
#define __GLOB_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef struct __tagglob_t
|
||||
{
|
||||
size_t gl_pathc; /* count of paths matched by pattern */
|
||||
char **gl_pathv; /* pointer to a list of matched pathnames */
|
||||
size_t gl_offs; /* slots to reserve at the beginning of gl_pathv */
|
||||
} glob_t;
|
||||
|
||||
/* CONSTANTS */
|
||||
/* Values for the flags argument */
|
||||
#define GLOB_APPEND (0x00000001) /* Append generated pathnames to \
|
||||
those previously obtained. */
|
||||
#define GLOB_DOOFFS (0x00000002) /* Specify how many null pointers to \
|
||||
add to the beginning of */
|
||||
#define GLOB_ERR (0x00000004) /* Cause glob() to return on error. */
|
||||
#define GLOB_MARK (0x00000008) /* Each pathname that is a directory \
|
||||
that matches pattern has a slash \
|
||||
appended. */
|
||||
#define GLOB_NOCHECK (0x00000010) /* If pattern does not match any pathname, \
|
||||
then return a list consisting of only \
|
||||
pattern. */
|
||||
#define GLOB_NOESCAPE (0x00000020) /* Disable backslash escaping. */
|
||||
#define GLOB_NOSORT (0x00000040) /* Do not sort the pathnames returned. */
|
||||
|
||||
/* Error return values */
|
||||
#define GLOB_ABORTED (-1) /* The scan was stopped because GLOB_ERR was set \
|
||||
or errfunc returned non-zero. */
|
||||
#define GLOB_NOMATCH (-2) /* The pattern does not match any existing pathname, \
|
||||
and GLOB_NOCHECK was not set in flags. */
|
||||
#define GLOB_NOSPACE (-3) /* An attempt to allocate memory failed. */
|
||||
#define GLOB_NOSYS (-4) /* The implementation does not support this function. */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int glob(const char *, int, int (*)(const char *, int), glob_t *);
|
||||
void globfree (glob_t *);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __GLOB_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
59
posix/include/grp.h
Normal file
59
posix/include/grp.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/* $Id: grp.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* grp.h
|
||||
*
|
||||
* group structure. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __GRP_H_INCLUDED__
|
||||
#define __GRP_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
struct group
|
||||
{
|
||||
char *gr_name; /* the name of the group */
|
||||
gid_t gr_gid; /* numerical group ID */
|
||||
char **gr_mem; /* pointer to a null-terminated array of character
|
||||
pointers to member names */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
struct group *getgrgid(gid_t);
|
||||
struct group *getgrnam(const char *);
|
||||
int getgrgid_r(gid_t, struct group *, char *,
|
||||
size_t, struct group **);
|
||||
int getgrnam_r(const char *, struct group *, char *,
|
||||
size_t , struct group **);
|
||||
struct group *getgrent(void);
|
||||
void endgrent(void);
|
||||
void setgrent(void);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __GRP_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
47
posix/include/iconv.h
Normal file
47
posix/include/iconv.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/* $Id: iconv.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* iconv.h
|
||||
*
|
||||
* codeset conversion facility. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __ICONV_H_INCLUDED__
|
||||
#define __ICONV_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef (void *) iconv_t;
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
iconv_t iconv_open(const char *, const char *);
|
||||
size_t iconv(iconv_t, char **, size_t *, char **, size_t *);
|
||||
int iconv_close(iconv_t);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __ICONV_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
60
posix/include/inttypes.h
Normal file
60
posix/include/inttypes.h
Normal file
@@ -0,0 +1,60 @@
|
||||
/* $Id: inttypes.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* inttypes.h
|
||||
*
|
||||
* fixed size integral types. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __INTTYPES_H_INCLUDED__
|
||||
#define __INTTYPES_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
/* signed */
|
||||
typedef signed char int8_t; /* 8-bit signed integral type. */
|
||||
typedef signed short int int16_t; /* 16-bit signed integral type. */
|
||||
typedef signed long int int32_t; /* 32-bit signed integral type. */
|
||||
typedef signed long long int64_t; /* 64-bit signed integral type. */
|
||||
|
||||
/* unsigned */
|
||||
typedef unsigned char uint8_t; /* 8-bit unsigned integral type. */
|
||||
typedef unsigned short int uint16_t; /* 16-bit unsigned integral type. */
|
||||
typedef unsigned long int uint32_t; /* 32-bit unsigned integral type. */
|
||||
typedef unsigned long long uint64_t; /* 64-bit unsigned integral type. */
|
||||
|
||||
/* pointer-sized */
|
||||
typedef signed long int intptr_t; /* Signed integral type large enough
|
||||
to hold any pointer. */
|
||||
typedef unsigned long int uintptr_t; /* Unsigned integral type large
|
||||
enough to hold any pointer. */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __INTTYPES_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
54
posix/include/iso646.h
Normal file
54
posix/include/iso646.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/* $Id: iso646.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* iso646.h
|
||||
*
|
||||
* alternative spellings. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __ISO646_H_INCLUDED__
|
||||
#define __ISO646_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
#define and &&
|
||||
#define and_eq &=
|
||||
#define bitand &
|
||||
#define bitor |
|
||||
#define compl ~
|
||||
#define not !
|
||||
#define not_eq !=
|
||||
#define or ||
|
||||
#define or_eq |=
|
||||
#define xor ^
|
||||
#define xor_eq ^=
|
||||
|
||||
#endif /* __ISO646_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
52
posix/include/libgen.h
Normal file
52
posix/include/libgen.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/* $Id: libgen.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* libgen.h
|
||||
*
|
||||
* definitions for pattern matching functions. Conforming to the Single
|
||||
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __LIBGEN_H_INCLUDED__
|
||||
#define __LIBGEN_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <stddef.h>
|
||||
|
||||
/* OBJECTS */
|
||||
extern char *__loc1; /* LEGACY */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
char *basename(char *);
|
||||
char *dirname(char *);
|
||||
char *regcmp(const char *, ...); /* LEGACY */
|
||||
char *regex(const char *, const char *, ...); /* LEGACY */
|
||||
|
||||
wchar_t *_Wbasename(wchar_t *);
|
||||
wchar_t *_Wdirname(wchar_t *);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __LIBGEN_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
45
posix/include/limits.h
Normal file
45
posix/include/limits.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/* $Id: limits.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* limits.h
|
||||
*
|
||||
* implementation-dependent constants. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __LIMITS_H_INCLUDED__
|
||||
#define __LIMITS_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
/* TODO */
|
||||
#define OPEN_MAX (256)
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __LIMITS_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
65
posix/include/math.h
Normal file
65
posix/include/math.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/* $Id: math.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* math.h
|
||||
*
|
||||
* mathematical declarations. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __MATH_H_INCLUDED__
|
||||
#define __MATH_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#ifdef __PSXDLL__
|
||||
|
||||
/* headers for internal usage by psxdll.dll and ReactOS */
|
||||
|
||||
#else /* ! __PSXDLL__ */
|
||||
|
||||
/* standard POSIX headers */
|
||||
|
||||
#endif
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
#define M_E ((double) 2.7182818285) /* Value of e */
|
||||
#define M_LOG2E ((double) 1.4426950419) /* Value of log2(e) */
|
||||
#define M_LOG10E ((double) 0.4342944819) /* Value of log10(e) */
|
||||
#define M_LN2 ((double)-0.6931471806) /* Value of loge2 */
|
||||
#define M_LN10 ((double) 2.3025850929) /* Value of loge10 */
|
||||
#define M_PI ((double) 3.1415926536) /* Value of Pi */
|
||||
#define M_PI_2 ((double) 1.5707963268) /* Value of Pi/2 */
|
||||
#define M_PI_4 ((double) 0.7853981634) /* Value of Pi/4 */
|
||||
#define M_1_PI ((double) 0.3183098862) /* Value of 1/Pi */
|
||||
#define M_2_PI ((double) 0.6366197724) /* Value of 2/Pi */
|
||||
#define M_2_SQRTPI ((double) 1.1283791671) /* Value of 2/Sqrt(Pi) */
|
||||
#define M_SQRT2 ((double) 1.4142135624) /* Value of Sqrt(2) */
|
||||
#define M_SQRT1_2 ((double) 0.7071067812) /* Value of Sqrt(1/2) */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __MATH_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/netinet/in.h
Normal file
43
posix/include/netinet/in.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: in.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* netinet/in.h
|
||||
*
|
||||
* Internet Protocol family. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __NETINET_IN_H_INCLUDED__
|
||||
#define __NETINET_IN_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __NETINET_IN_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
146
posix/include/psx/debug.h
Normal file
146
posix/include/psx/debug.h
Normal file
@@ -0,0 +1,146 @@
|
||||
/* $Id: debug.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/debug.h
|
||||
*
|
||||
* debugging utilities
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_DEBUG_H_INCLUDED__
|
||||
#define __PSX_DEBUG_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#ifdef __PSX_DEBUG_TO_STDERR__
|
||||
#include <stdio.h>
|
||||
#else /* !defined(__PSX_DEBUG_TO_STDERR__) */
|
||||
#include <ddk/ntddk.h>
|
||||
#endif /* defined(__PSX_DEBUG_TO_STDERR__) */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#define __PSX_MODULE__ "psxdll.dll"
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
#ifdef __PSX_DEBUG_TO_STDERR__
|
||||
|
||||
#if 0
|
||||
#define DEBUGOUT(MODULE,TYPE,ARGS...) \
|
||||
do{ \
|
||||
fprintf(stderr,"%s:%s:%s:%d:%s():\n\t",(MODULE),(TYPE),__FILE__,__LINE__,__FUNCTION__); \
|
||||
fprintf(stderr,ARGS); \
|
||||
fprintf("\n"); \
|
||||
} \
|
||||
while(0)
|
||||
#endif
|
||||
|
||||
#define DEBUGOUT(MODULE,TYPE,ARGS...) \
|
||||
do{ \
|
||||
printf("%s:%s:%s:%d:%s():\n\t",(MODULE),(TYPE),__FILE__,__LINE__,__FUNCTION__); \
|
||||
printf(ARGS); \
|
||||
printf("\n"); \
|
||||
} \
|
||||
while(0)
|
||||
|
||||
|
||||
#else /* !defined(__PSX_DEBUG_TO_STDERR__) */
|
||||
|
||||
#define DEBUGOUT(MODULE,TYPE,ARGS...) \
|
||||
do{ \
|
||||
DbgPrint("%s:%s:%s:%d:%s():\n\t",(MODULE),(TYPE),__FILE__,__LINE__,__FUNCTION__); \
|
||||
DbgPrint(ARGS); \
|
||||
DbgPrint("\n"); \
|
||||
} \
|
||||
while(0)
|
||||
|
||||
#endif /* defined(__PSX_DEBUG_TO_STDERR__) */
|
||||
|
||||
#define DEBUGOUTIF(CONDITION,MODULE,TYPE,ARGS...) \
|
||||
if((CONDITION)) \
|
||||
{ \
|
||||
DEBUGOUT((MODULE),(TYPE),ARGS); \
|
||||
}
|
||||
|
||||
#else /* defined(NDEBUG) */
|
||||
|
||||
#define DEBUGOUTIF(c,m,t,args...)
|
||||
#define DEBUGOUT(m,t,args...)
|
||||
|
||||
#endif /* !defined(NDEBUG) */
|
||||
|
||||
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_HINTS__)
|
||||
#define HINT(args...) DEBUGOUT(__PSX_MODULE__,"HINT",args)
|
||||
#define HINTIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"HINT",args)
|
||||
#else
|
||||
#define HINT(args...)
|
||||
#define HINTIF(c,args...)
|
||||
#endif
|
||||
|
||||
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_INFOS__)
|
||||
#define INFO(args...) DEBUGOUT(__PSX_MODULE__,"INFO",args)
|
||||
#define INFOIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"INFO",args)
|
||||
#else
|
||||
#define INFO(args...)
|
||||
#define INFOIF(c,args...)
|
||||
#endif
|
||||
|
||||
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_WARNS__)
|
||||
#define WARN(args...) DEBUGOUT(__PSX_MODULE__,"WARN",args)
|
||||
#define WARNIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"WARN",args)
|
||||
#else
|
||||
#define WARN(args...)
|
||||
#define WARNIF(c,args...)
|
||||
#endif
|
||||
|
||||
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_ERRS__)
|
||||
#define ERR(args...) DEBUGOUT(__PSX_MODULE__,"ERR",args)
|
||||
#define ERRIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"ERR",args)
|
||||
#else
|
||||
#define ERR(args...)
|
||||
#define ERRIF(c,args...)
|
||||
#endif
|
||||
|
||||
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_TODOS__)
|
||||
#define TODO(args...) DEBUGOUT(__PSX_MODULE__,"TODO",args)
|
||||
#define TODOIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"TODO",args)
|
||||
#else
|
||||
#define TODO(args...)
|
||||
#define TODOIF(c,args...)
|
||||
#endif
|
||||
|
||||
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_FIXMES__)
|
||||
#define FIXME(args...) DEBUGOUT(__PSX_MODULE__,"FIXME",args)
|
||||
#define FIXMEIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"FIXME",args)
|
||||
#else
|
||||
#define FIXME(args...)
|
||||
#define FIXMEIF(c,args...)
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __PSX_DEBUG_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
57
posix/include/psx/dirent.h
Normal file
57
posix/include/psx/dirent.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/* $Id: dirent.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/dirent.h
|
||||
*
|
||||
* internal dirent.h
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_DIRENT_H_INCLUDED__
|
||||
#define __PSX_DIRENT_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <ddk/ntddk.h>
|
||||
#include <dirent.h>
|
||||
#include <psx/safeobj.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
struct __internal_DIR
|
||||
{
|
||||
__magic_t signature; /* signature to verify object's validity across calls */
|
||||
union __any_dirent{
|
||||
struct dirent de_ansi;
|
||||
struct _Wdirent de_unicode;
|
||||
} ent; /* storage for return buffer of readdir() */
|
||||
int fildes; /* file descriptor of the directory */
|
||||
FILE_DIRECTORY_INFORMATION info; /* directory entry information */
|
||||
WCHAR name[MAX_PATH]; /* filename buffer */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
#define __IDIR_MAGIC MAGIC('I', 'D', 'I', 'R')
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __PSX_DIRENT_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
53
posix/include/psx/dlfcn.h
Normal file
53
posix/include/psx/dlfcn.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/* $Id: dlfcn.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/dlfcn.h
|
||||
*
|
||||
* internal dlfcn.h
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_DLFCN_H_INCLUDED__
|
||||
#define __PSX_DLFCN_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <psx/errno.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
/* internal representation for loaded DLLs */
|
||||
/* TODO: get rid of this. The handle should be enough, with a proper PE loader */
|
||||
struct __dlobj
|
||||
{
|
||||
int global; /* if non-zero, all the other fields have no meaning */
|
||||
void *handle; /* pointer to the module mapping */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
void __dl_set_last_error(int);
|
||||
|
||||
/* MACROS */
|
||||
#define __dl_get_reloc_flag(m) ((m) & (RTLD_LAZY | RTLD_NOW))
|
||||
#define __dl_get_scope_flag(m) ((m) & (RTLD_GLOBAL | RTLD_LOCAL))
|
||||
|
||||
#endif /* __PSX_DLFCN_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
45
posix/include/psx/errno.h
Normal file
45
posix/include/psx/errno.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/* $Id: errno.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/errno.h
|
||||
*
|
||||
* internal errno.h
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_ERRNO_H_INCLUDED__
|
||||
#define __PSX_ERRNO_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <errno.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
#define __status_to_errno(s) (s)
|
||||
#define __set_errno_from_status(s) (errno = __status_to_errno((s)))
|
||||
|
||||
#endif /* __PSX_ERRNO_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
72
posix/include/psx/fdtable.h
Normal file
72
posix/include/psx/fdtable.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/* $Id: fdtable.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/fdtable.h
|
||||
*
|
||||
* POSIX+ subsystem file descriptor table data structure
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_FDTABLE_H_INCLUDED__
|
||||
#define __PSX_FDTABLE_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <limits.h>
|
||||
#include <inttypes.h>
|
||||
#include <psx/safeobj.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef struct __tagfildes_t
|
||||
{
|
||||
void *FileHandle;
|
||||
int OpenFlags;
|
||||
int FdFlags;
|
||||
size_t ExtraDataSize;
|
||||
void *ExtraData;
|
||||
} __fildes_t;
|
||||
|
||||
typedef struct __tagfdtable_t
|
||||
{
|
||||
__magic_t Signature;
|
||||
int32_t LowestUnusedFileNo;
|
||||
int32_t UsedDescriptors;
|
||||
int32_t AllocatedDescriptors;
|
||||
uint32_t DescriptorsBitmap[OPEN_MAX / 32];
|
||||
__fildes_t *Descriptors;
|
||||
} __fdtable_t;
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int __fdtable_init(__fdtable_t *);
|
||||
int __fdtable_free(__fdtable_t *);
|
||||
|
||||
int __fdtable_entry_isavail(__fdtable_t *, int);
|
||||
int __fdtable_entry_nextavail(__fdtable_t *, int);
|
||||
int __fdtable_entry_add(__fdtable_t *, int, __fildes_t *, __fildes_t **);
|
||||
int __fdtable_entry_remove(__fdtable_t *, int);
|
||||
__fildes_t *__fdtable_entry_get(__fdtable_t *, int);
|
||||
|
||||
/* MACROS */
|
||||
#define __FDTABLE_MAGIC MAGIC('F', 'D', 'T', 'B')
|
||||
|
||||
#endif /* __PSX_FDTABLE_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
45
posix/include/psx/interlock.h
Normal file
45
posix/include/psx/interlock.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/* $Id: interlock.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/interlock.h
|
||||
*
|
||||
* inter-locked increment/decrement
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_INTERLOCK_H_INCLUDED__
|
||||
#define __PSX_INTERLOCK_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int __interlock_inc(int *);
|
||||
int __interlock_dec(int *);
|
||||
int __interlock_add(int *, int);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __PSX_INTERLOCK_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
112
posix/include/psx/path.h
Normal file
112
posix/include/psx/path.h
Normal file
@@ -0,0 +1,112 @@
|
||||
/* $Id: path.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/path.h
|
||||
*
|
||||
* POSIX+ subsystem path functions
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_PATH_H_INCLUDED__
|
||||
#define __PSX_PATH_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <ddk/ntddk.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
BOOLEAN
|
||||
__PdxPosixPathGetNextComponent_U
|
||||
(
|
||||
IN UNICODE_STRING PathName,
|
||||
IN OUT PUNICODE_STRING PathComponent,
|
||||
OUT PBOOLEAN TrailingDelimiter OPTIONAL
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
__PdxPosixPathResolve_U
|
||||
(
|
||||
IN UNICODE_STRING PathName,
|
||||
OUT PUNICODE_STRING ResolvedPathName,
|
||||
IN WCHAR PathDelimiter OPTIONAL
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
__PdxPosixPathGetNextComponent_A
|
||||
(
|
||||
IN ANSI_STRING PathName,
|
||||
IN OUT PANSI_STRING PathComponent,
|
||||
OUT PBOOLEAN TrailingDelimiter OPTIONAL
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
__PdxPosixPathResolve_A
|
||||
(
|
||||
IN ANSI_STRING PathName,
|
||||
OUT PANSI_STRING ResolvedPathName,
|
||||
IN CHAR PathDelimiter OPTIONAL
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
__PdxPosixPathNameToNtPathName
|
||||
(
|
||||
IN PWCHAR PosixPath,
|
||||
OUT PUNICODE_STRING NativePath,
|
||||
IN PUNICODE_STRING CurDir OPTIONAL,
|
||||
IN PUNICODE_STRING RootDir OPTIONAL
|
||||
);
|
||||
|
||||
/* MACROS */
|
||||
/* returns non-zero if the argument is a path delimiter */
|
||||
#define IS_CHAR_DELIMITER_U(WCH) (((WCH) == L'/') || ((WCH) == L'\\'))
|
||||
#define IS_CHAR_DELIMITER_A(CH) (((CH) == '/') || ((CH) == '\\'))
|
||||
|
||||
/* returns non-zero if the argument is an empty path component */
|
||||
#define IS_COMPONENT_EMPTY_U(WCOMPONENT) (WCOMPONENT.Length == 0)
|
||||
#define IS_COMPONENT_EMPTY_A(COMPONENT) (COMPONENT.Length == 0)
|
||||
|
||||
/* returns non-zero if the argument is "." */
|
||||
#define IS_COMPONENT_DOT_U(WCOMPONENT) \
|
||||
((WCOMPONENT.Length == sizeof(WCHAR)) && (WCOMPONENT.Buffer[0] == L'.'))
|
||||
|
||||
#define IS_COMPONENT_DOT_A(COMPONENT) \
|
||||
((COMPONENT.Length == 1) && (COMPONENT.Buffer[0] == '.'))
|
||||
|
||||
/* returns non-zero if the argument is ".." */
|
||||
#define IS_COMPONENT_DOTDOT_U(WCOMPONENT) \
|
||||
( \
|
||||
(WCOMPONENT.Length == (sizeof(WCHAR) * 2)) && \
|
||||
(WCOMPONENT.Buffer[0] == L'.') && \
|
||||
(WCOMPONENT.Buffer[1] == L'.') \
|
||||
)
|
||||
|
||||
#define IS_COMPONENT_DOTDOT_A(COMPONENT) \
|
||||
( \
|
||||
(COMPONENT.Length == 2) && \
|
||||
(COMPONENT.Buffer[0] == '.') && \
|
||||
(COMPONENT.Buffer[1] == '.') \
|
||||
)
|
||||
|
||||
#endif /* __PSX_PATH_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
71
posix/include/psx/pdata.h
Normal file
71
posix/include/psx/pdata.h
Normal file
@@ -0,0 +1,71 @@
|
||||
/* $Id: pdata.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/pdata.h
|
||||
*
|
||||
* POSIX+ subsystem process environment data structure
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_PDATA_H_INCLUDED__
|
||||
#define __PSX_PDATA_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ntdll/rtl.h>
|
||||
#include <limits.h>
|
||||
#include <psx/fdtable.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef struct __tagPDX_PDATA
|
||||
{
|
||||
UNICODE_STRING NativePathBuffer;
|
||||
UNICODE_STRING CurDir;
|
||||
UNICODE_STRING RootPath;
|
||||
HANDLE RootHandle;
|
||||
__fdtable_t *FdTable;
|
||||
} __PDX_PDATA, * __PPDX_PDATA;
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
#define __PdxAcquirePdataLock() (RtlAcquirePebLock())
|
||||
#define __PdxReleasePdataLock() (RtlReleasePebLock())
|
||||
|
||||
#define __PdxSetProcessData()(PPDATA) ((void)((NtCurrentPeb()->SubSystemData) = (PPDATA)))
|
||||
#define __PdxGetProcessData() ((__PPDX_PDATA)(&(NtCurrentPeb()->SubSystemData)))
|
||||
|
||||
#define __PdxGetNativePathBuffer() ((PUNICODE_STRING)(&(__PdxGetProcessData()->NativePathBuffer)))
|
||||
#define __PdxGetCurDir() ((PUNICODE_STRING)(&(__PdxGetProcessData()->CurDir)))
|
||||
#define __PdxGetRootPath() ((PUNICODE_STRING)(&(__PdxGetProcessData()->RootPath)))
|
||||
#define __PdxGetRootHandle() ((HANDLE)(__PdxGetProcessData()->RootHandle))
|
||||
#define __PdxGetFdTable() ((__fdtable_t *)(__PdxGetProcessData()->FdTable))
|
||||
|
||||
#define __PdxSetNativePathBuffer(BUF) ((void)((__PdxGetProcessData()->NativePathBuffer) = (BUF)))
|
||||
#define __PdxSetCurDir(CURDIR) ((void)((__PdxGetProcessData()->CurDir) = (CURDIR)))
|
||||
#define __PdxSetRootPath(ROOTPATH) ((void)((__PdxGetProcessData()->RootPath) = (ROOTPATH)))
|
||||
#define __PdxSetRootHandle(ROOTHANDLE) ((void)((__PdxGetProcessData()->RootHandle) = (ROOTHANDLE)))
|
||||
#define __PdxSetFdTable(FDTABLE) ((void)((__PdxGetProcessData()->FdTable) = (FDTABLE)))
|
||||
|
||||
#endif /* __PSX_PDATA_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
61
posix/include/psx/pthread.h
Normal file
61
posix/include/psx/pthread.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/* $Id: pthread.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/pthread.h
|
||||
*
|
||||
* internal pthread.h
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_PTHREAD_H_INCLUDED__
|
||||
#define __PSX_PTHREAD_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <psx/safeobj.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
struct __mutexattr
|
||||
{
|
||||
__magic_t signature;
|
||||
int pshared;
|
||||
int protocol;
|
||||
int type;
|
||||
};
|
||||
|
||||
struct __mutex
|
||||
{
|
||||
__magic_t signature;
|
||||
void * handle;
|
||||
int protocol;
|
||||
int type;
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
#define __PTHREAD_MUTEX_MAGIC (MAGIC('P', 'T', 'M', 'X'))
|
||||
#define __PTHREAD_MUTEX_ATTR_MAGIC (MAGIC('P', 'T', 'M', 'A'))
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __PSX_PTHREAD_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
59
posix/include/psx/safeobj.h
Normal file
59
posix/include/psx/safeobj.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/* $Id: safeobj.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/safeobj.h
|
||||
*
|
||||
* types and definitions for safe checking of user-provided objects
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_SAFEOBJ_H_INCLUDED__
|
||||
#define __PSX_SAFEOBJ_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <inttypes.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef uint32_t __magic_t;
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int __safeobj_validate(void *, __magic_t);
|
||||
|
||||
/* MACROS */
|
||||
/* builds a magic number from 4 characters */
|
||||
#define MAGIC(a,b,c,d) ( \
|
||||
(((uint32_t)(uint8_t)(a)) << 24) | \
|
||||
(((uint32_t)(uint8_t)(b)) << 16) | \
|
||||
(((uint32_t)(uint8_t)(c)) << 8) | \
|
||||
(((uint32_t)(uint8_t)(d)) << 0) \
|
||||
)
|
||||
|
||||
/* retrieves a comma-separated list of the 4 characters in a magic number */
|
||||
#define MAGIC_DECOMPOSE(m) \
|
||||
((uint8_t)(m >> 24)), \
|
||||
((uint8_t)(m >> 16)), \
|
||||
((uint8_t)(m >> 8)), \
|
||||
((uint8_t)(m >> 0))
|
||||
|
||||
#endif /* __PSX_SAFEOBJ_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
51
posix/include/psx/stdlib.h
Normal file
51
posix/include/psx/stdlib.h
Normal file
@@ -0,0 +1,51 @@
|
||||
/* $Id: stdlib.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* psx/stdlib.h
|
||||
*
|
||||
* internal stdlib.h
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PSX_STDLIB_H_INCLUDED__
|
||||
#define __PSX_STDLIB_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ntos/heap.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
/* FIXME? Windows NT's ntdll doesn't export RtlGetProcessHeap() */
|
||||
#define RtlGetProcessHeap() ((HANDLE)NtCurrentPeb()->ProcessHeap)
|
||||
|
||||
#define __malloc(SIZE) (RtlAllocateHeap(RtlGetProcessHeap(), 0, (SIZE)))
|
||||
#define __realloc(PTR,SIZE) (RtlReAllocateHeap(RtlGetProcessHeap(), 0, (PTR), (SIZE)))
|
||||
#define __free(PTR) (RtlFreeHeap(RtlGetProcessHeap(), 0, (PTR)))
|
||||
|
||||
#endif /* __PSX_STDLIB_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
83
posix/include/psx/template.h
Normal file
83
posix/include/psx/template.h
Normal file
@@ -0,0 +1,83 @@
|
||||
/* $Id: template.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
How to create a new header file from this template:
|
||||
- copy the template in the new file (never edit this file directly, unless
|
||||
that's what you want)
|
||||
- search for the string "EDITME" in the file, and follow the instructions
|
||||
- remove this comment block, all blocks containing DELETEME, and all EDITME
|
||||
instructions
|
||||
- save your file, and Have Fun! (TM)
|
||||
*/
|
||||
/* $ Id $ (EDITME: replace "$ Id $" with "$Id: template.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $")
|
||||
*/
|
||||
/*
|
||||
* psx/template.h (EDITME: replace with the real name of the header)
|
||||
*
|
||||
* template for POSIX headers (EDITME: replace this line with the real file
|
||||
* description)
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by John Doe <john.doe@mail.com> (EDITME: your name and e-mail go
|
||||
* here)
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
Tags are used to prevent double inclusion of C header files. This
|
||||
technique should be documented in all good C manuals
|
||||
|
||||
How to generate an unique tag for your header:
|
||||
- uppercase the name of the header, where "name" is the filename and
|
||||
the optional relative path (e.g. "stdio.h", "sys/types.h")
|
||||
- replace all non-alphanumeric characters in the obtained name with an
|
||||
underscore character ("_")
|
||||
- prepend a double underscore ("__"), and append the string "_INCLUDED__"
|
||||
- replace all occurrences of "__PSX_TEMPLATE_H_INCLUDED__" in this file
|
||||
with your tag
|
||||
|
||||
Example tags:
|
||||
sys/types.h -> SYS/TYPES.H -> SYS_TYPES_H -> __SYS_TYPES_H_INCLUDED__
|
||||
iso646.h -> ISO646.H -> ISO646_H -> __ISO646_H_INCLUDED__
|
||||
|
||||
(REMOVEME)
|
||||
*/
|
||||
#ifndef __PSX_TEMPLATE_H_INCLUDED__ /* EDITME: replace macro with unique tag */
|
||||
#define __PSX_TEMPLATE_H_INCLUDED__ /* EDITME: replace macro with unique tag */
|
||||
/*
|
||||
Explanation of the sections:
|
||||
INCLUDES #include directives should be grouped here
|
||||
OBJECTS declare global variables here
|
||||
TYPES types, structures and unions here
|
||||
CONSTANTS symbolic constants (simple #define's), enums, constants
|
||||
PROTOTYPES ANSI C function prototypes
|
||||
MACROS parametrized macros
|
||||
|
||||
(REMOVEME)
|
||||
*/
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __PSX_TEMPLATE_H_INCLUDED__ */ /* EDITME: replace macro with unique tag */
|
||||
|
||||
/* EOF */
|
||||
|
141
posix/include/pthread.h
Normal file
141
posix/include/pthread.h
Normal file
@@ -0,0 +1,141 @@
|
||||
/* $Id: pthread.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* pthread.h
|
||||
*
|
||||
* threads. Conforming to the Single UNIX(r) Specification Version 2,
|
||||
* System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PTHREAD_H_INCLUDED__
|
||||
#define __PTHREAD_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <sched.h>
|
||||
#include <time.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
#define PTHREAD_MUTEX_NORMAL (1)
|
||||
#define PTHREAD_MUTEX_ERRORCHECK (2)
|
||||
#define PTHREAD_MUTEX_RECURSIVE (3)
|
||||
|
||||
#define PTHREAD_MUTEX_DEFAULT (PTHREAD_MUTEX_NORMAL)
|
||||
|
||||
#define PTHREAD_PROCESS_PRIVATE (1)
|
||||
#define PTHREAD_PROCESS_SHARED (2)
|
||||
|
||||
#define PTHREAD_PRIO_NONE (1)
|
||||
|
||||
/* PROTOTYPES */
|
||||
int pthread_attr_destroy(pthread_attr_t *);
|
||||
int pthread_attr_getdetachstate(const pthread_attr_t *, int *);
|
||||
int pthread_attr_getguardsize(const pthread_attr_t *, size_t *);
|
||||
int pthread_attr_getinheritsched(const pthread_attr_t *, int *);
|
||||
int pthread_attr_getschedparam(const pthread_attr_t *,
|
||||
struct sched_param *);
|
||||
int pthread_attr_getschedpolicy(const pthread_attr_t *, int *);
|
||||
int pthread_attr_getscope(const pthread_attr_t *, int *);
|
||||
int pthread_attr_getstackaddr(const pthread_attr_t *, void **);
|
||||
int pthread_attr_getstacksize(const pthread_attr_t *, size_t *);
|
||||
int pthread_attr_init(pthread_attr_t *);
|
||||
int pthread_attr_setdetachstate(pthread_attr_t *, int);
|
||||
int pthread_attr_setguardsize(pthread_attr_t *, size_t);
|
||||
int pthread_attr_setinheritsched(pthread_attr_t *, int);
|
||||
int pthread_attr_setschedparam(pthread_attr_t *,
|
||||
const struct sched_param *);
|
||||
int pthread_attr_setschedpolicy(pthread_attr_t *, int);
|
||||
int pthread_attr_setscope(pthread_attr_t *, int);
|
||||
int pthread_attr_setstackaddr(pthread_attr_t *, void *);
|
||||
int pthread_attr_setstacksize(pthread_attr_t *, size_t);
|
||||
int pthread_cancel(pthread_t);
|
||||
void pthread_cleanup_push(void (*)(void *), void *);
|
||||
void pthread_cleanup_pop(int);
|
||||
int pthread_cond_broadcast(pthread_cond_t *);
|
||||
int pthread_cond_destroy(pthread_cond_t *);
|
||||
int pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *);
|
||||
int pthread_cond_signal(pthread_cond_t *);
|
||||
int pthread_cond_timedwait(pthread_cond_t *,
|
||||
pthread_mutex_t *, const struct timespec *);
|
||||
int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
|
||||
int pthread_condattr_destroy(pthread_condattr_t *);
|
||||
int pthread_condattr_getpshared(const pthread_condattr_t *, int *);
|
||||
int pthread_condattr_init(pthread_condattr_t *);
|
||||
int pthread_condattr_setpshared(pthread_condattr_t *, int);
|
||||
int pthread_create(pthread_t *, const pthread_attr_t *,
|
||||
void *(*)(void *), void *);
|
||||
int pthread_detach(pthread_t);
|
||||
int pthread_equal(pthread_t, pthread_t);
|
||||
void pthread_exit(void *);
|
||||
int pthread_getconcurrency(void);
|
||||
int pthread_getschedparam(pthread_t, int *, struct sched_param *);
|
||||
void *pthread_getspecific(pthread_key_t);
|
||||
int pthread_join(pthread_t, void **);
|
||||
int pthread_key_create(pthread_key_t *, void (*)(void *));
|
||||
int pthread_key_delete(pthread_key_t);
|
||||
int pthread_mutex_destroy(pthread_mutex_t *);
|
||||
int pthread_mutex_getprioceiling(const pthread_mutex_t *, int *);
|
||||
int pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *);
|
||||
int pthread_mutex_lock(pthread_mutex_t *);
|
||||
int pthread_mutex_setprioceiling(pthread_mutex_t *, int, int *);
|
||||
int pthread_mutex_trylock(pthread_mutex_t *);
|
||||
int pthread_mutex_unlock(pthread_mutex_t *);
|
||||
int pthread_mutexattr_destroy(pthread_mutexattr_t *);
|
||||
int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *,
|
||||
int *);
|
||||
int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *, int *);
|
||||
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *, int *);
|
||||
int pthread_mutexattr_gettype(const pthread_mutexattr_t *, int *);
|
||||
int pthread_mutexattr_init(pthread_mutexattr_t *);
|
||||
int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, int);
|
||||
int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int);
|
||||
int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
|
||||
int pthread_mutexattr_settype(pthread_mutexattr_t *, int);
|
||||
int pthread_once(pthread_once_t *, void (*)(void));
|
||||
int pthread_rwlock_destroy(pthread_rwlock_t *);
|
||||
int pthread_rwlock_init(pthread_rwlock_t *,
|
||||
const pthread_rwlockattr_t *);
|
||||
int pthread_rwlock_rdlock(pthread_rwlock_t *);
|
||||
int pthread_rwlock_tryrdlock(pthread_rwlock_t *);
|
||||
int pthread_rwlock_trywrlock(pthread_rwlock_t *);
|
||||
int pthread_rwlock_unlock(pthread_rwlock_t *);
|
||||
int pthread_rwlock_wrlock(pthread_rwlock_t *);
|
||||
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
|
||||
int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *,
|
||||
int *);
|
||||
int pthread_rwlockattr_init(pthread_rwlockattr_t *);
|
||||
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int);
|
||||
pthread_t
|
||||
pthread_self(void);
|
||||
int pthread_setcancelstate(int, int *);
|
||||
int pthread_setcanceltype(int, int *);
|
||||
int pthread_setconcurrency(int);
|
||||
int pthread_setschedparam(pthread_t, int ,
|
||||
const struct sched_param *);
|
||||
int pthread_setspecific(pthread_key_t, const void *);
|
||||
void pthread_testcancel(void);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __PTHREAD_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
60
posix/include/pwd.h
Normal file
60
posix/include/pwd.h
Normal file
@@ -0,0 +1,60 @@
|
||||
/* $Id: pwd.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* pwd.h
|
||||
*
|
||||
* password structure. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __PWD_H_INCLUDED__
|
||||
#define __PWD_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
struct passwd
|
||||
{
|
||||
char *pw_name; /* user's login name */
|
||||
uid_t pw_uid; /* numerical user ID */
|
||||
gid_t pw_gid; /* numerical group ID */
|
||||
char *pw_dir; /* initial working directory */
|
||||
char *pw_shell; /* program to use as shell */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
struct passwd *getpwnam(const char *);
|
||||
struct passwd *getpwuid(uid_t);
|
||||
int getpwnam_r(const char *, struct passwd *, char *,
|
||||
size_t, struct passwd **);
|
||||
int getpwuid_r(uid_t, struct passwd *, char *,
|
||||
size_t, struct passwd **);
|
||||
void endpwent(void);
|
||||
struct passwd *getpwent(void);
|
||||
void setpwent(void);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __PWD_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
62
posix/include/sched.h
Normal file
62
posix/include/sched.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/* $Id: sched.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sched.h
|
||||
*
|
||||
* execution scheduling (REALTIME). Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SCHED_H_INCLUDED__
|
||||
#define __SCHED_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <time.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
struct sched_param
|
||||
{
|
||||
int sched_priority; /* process execution scheduling priority */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
/* First in-first out (FIFO) scheduling policy */
|
||||
#define SCHED_FIFO (1)
|
||||
/* Round robin scheduling policy */
|
||||
#define SCHED_RR (2)
|
||||
/* Another scheduling policy */
|
||||
#define SCHED_OTHER (3)
|
||||
|
||||
/* PROTOTYPES */
|
||||
int sched_get_priority_max(int);
|
||||
int sched_get_priority_min(int);
|
||||
int sched_getparam(pid_t, struct sched_param *);
|
||||
int sched_getscheduler(pid_t);
|
||||
int sched_rr_get_interval(pid_t, struct timespec *);
|
||||
int sched_setparam(pid_t, const struct sched_param *);
|
||||
int sched_setscheduler(pid_t, int, const struct sched_param *);
|
||||
int sched_yield(void);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SCHED_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
359
posix/include/signal.h
Normal file
359
posix/include/signal.h
Normal file
@@ -0,0 +1,359 @@
|
||||
/* $Id: signal.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* signal.h
|
||||
*
|
||||
* signals. Conforming to the Single UNIX(r) Specification Version 2,
|
||||
* System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SIGNAL_H_INCLUDED__
|
||||
#define __SIGNAL_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <time.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
/* pre-declaration of time.h types to suppress warnings caused by circular
|
||||
dependencies */
|
||||
struct timespec;
|
||||
|
||||
typedef int sig_atomic_t; /* Integral type of an object that can be
|
||||
accessed as an atomic entity, even in the
|
||||
presence of asynchronous interrupts */ /* FIXME? */
|
||||
|
||||
typedef struct __tagsigset_t
|
||||
{
|
||||
int _dummy;
|
||||
} sigset_t; /* Integral or structure type of an object used to represent
|
||||
sets of signals. */ /* TODO */
|
||||
|
||||
union sigval
|
||||
{
|
||||
int sival_int; /* integer signal value */
|
||||
void* sival_ptr; /* pointer signal value */
|
||||
};
|
||||
|
||||
struct sigevent
|
||||
{
|
||||
int sigev_notify; /* notification type */
|
||||
int sigev_signo; /* signal number */
|
||||
union sigval sigev_value; /* signal value */
|
||||
void (* sigev_notify_function)(union sigval); /* notification function */
|
||||
pthread_attr_t * sigev_notify_attributes; /* notification attributes */
|
||||
};
|
||||
|
||||
|
||||
typedef struct __tagsiginfo_t
|
||||
{
|
||||
int si_signo; /* signal number */
|
||||
int si_errno; /* if non-zero, an errno value associated with
|
||||
this signal, as defined in <errno.h> */
|
||||
int si_code; /* signal code */
|
||||
pid_t si_pid; /* sending process ID */
|
||||
uid_t si_uid; /* real user ID of sending process */
|
||||
void *si_addr; /* address of faulting instruction */
|
||||
int si_status; /* exit value or signal */
|
||||
long si_band; /* band event for SIGPOLL */
|
||||
union sigval si_value; /* signal value */
|
||||
} siginfo_t;
|
||||
|
||||
struct sigaction
|
||||
{
|
||||
void (* sa_handler)(int); /* what to do on receipt of signal */
|
||||
sigset_t sa_mask; /* set of signals to be blocked during
|
||||
execution of the signal handling
|
||||
function */
|
||||
int sa_flags; /* special flags */
|
||||
void (* sa_sigaction)(int, siginfo_t *, void *);
|
||||
/* pointer to signal handler function
|
||||
or one of the macros SIG_IGN or SIG_DFL */
|
||||
};
|
||||
|
||||
typedef struct __tagstack_t
|
||||
{
|
||||
void *ss_sp; /* stack base or pointer */
|
||||
size_t ss_size; /* stack size */
|
||||
int ss_flags; /* flags */
|
||||
} stack_t;
|
||||
|
||||
struct sigstack
|
||||
{
|
||||
int ss_onstack; /* non-zero when signal stack is in use */
|
||||
void *ss_sp; /* signal stack pointer */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
/* Request for default signal handling. */
|
||||
#define SIG_DFL ((void (*)(int))(0))
|
||||
/* Return value from signal() in case of error. */
|
||||
#define SIG_ERR ((void (*)(int))(1))
|
||||
/* Request that signal be held. */
|
||||
#define SIG_HOLD ((void (*)(int))(2))
|
||||
/* Request that signal be ignored. */
|
||||
#define SIG_IGN ((void (*)(int))(3))
|
||||
|
||||
/* No asynchronous notification will be delivered when the event of
|
||||
interest occurs. */
|
||||
#define SIGEV_NONE (0)
|
||||
/* A queued signal, with an application-defined value, will be generated
|
||||
when the event of interest occurs. */
|
||||
#define SIGEV_SIGNAL (1)
|
||||
/* A notification function will be called to perform notification. */
|
||||
#define SIGEV_THREAD (2)
|
||||
|
||||
/* TODO: realtime features not supported yet */
|
||||
#define SIGRTMIN (-1)
|
||||
#define SIGRTMAX (-1)
|
||||
|
||||
/* Process abort signal. */
|
||||
#define SIGABRT ( 1)
|
||||
/* Alarm clock. */
|
||||
#define SIGALRM ( 2)
|
||||
/* Erroneous arithmetic operation. */
|
||||
#define SIGFPE ( 3)
|
||||
/* Hangup. */
|
||||
#define SIGHUP ( 4)
|
||||
/* Illegal instruction. */
|
||||
#define SIGILL ( 5)
|
||||
/* Terminal interrupt signal. */
|
||||
#define SIGINT ( 6)
|
||||
/* Kill (cannot be caught or ignored). */
|
||||
#define SIGKILL ( 7)
|
||||
/* Write on a pipe with no one to read it. */
|
||||
#define SIGPIPE ( 8)
|
||||
/* Terminal quit signal. */
|
||||
#define SIGQUIT ( 9)
|
||||
/* Invalid memory reference. */
|
||||
#define SIGSEGV (10)
|
||||
/* Termination signal. */
|
||||
#define SIGTERM (11)
|
||||
/* User-defined signal 1. */
|
||||
#define SIGUSR1 (12)
|
||||
/* User-defined signal 2. */
|
||||
#define SIGUSR2 (13)
|
||||
/* Child process terminated or stopped. */
|
||||
#define SIGCHLD (14)
|
||||
/* Continue executing, if stopped. */
|
||||
#define SIGCONT (15)
|
||||
/* Stop executing (cannot be caught or ignored). */
|
||||
#define SIGSTOP (16)
|
||||
/* Terminal stop signal. */
|
||||
#define SIGTSTP (17)
|
||||
/* Background process attempting read. */
|
||||
#define SIGTTIN (18)
|
||||
/* Background process attempting write. */
|
||||
#define SIGTTOU (19)
|
||||
/* Access to an undefined portion of a memory object. */
|
||||
#define SIGBUS (20)
|
||||
/* Pollable event. */
|
||||
#define SIGPOLL (21)
|
||||
/* Profiling timer expired. */
|
||||
#define SIGPROF (22)
|
||||
/* Bad system call. */
|
||||
#define SIGSYS (23)
|
||||
/* Trace/breakpoint trap. */
|
||||
#define SIGTRAP (24)
|
||||
/* High bandwidth data is available at a socket. */
|
||||
#define SIGURG (25)
|
||||
/* Virtual timer expired. */
|
||||
#define SIGVTALRM (26)
|
||||
/* CPU time limit exceeded. */
|
||||
#define SIGXCPU (27)
|
||||
/* File size limit exceeded. */
|
||||
#define SIGXFSZ (28)
|
||||
|
||||
/* FIXME: the following constants need to be reviewed */
|
||||
/* Do not generate SIGCHLD when children stop. */
|
||||
#define SA_NOCLDSTOP (0x00000001)
|
||||
/* The resulting set is the union of the current set and the signal set
|
||||
pointed to by the argument set. */
|
||||
#define SA_ONSTACK (0x00000002)
|
||||
/* Causes signal dispositions to be set to SIG_DFL on entry to signal
|
||||
handlers. */
|
||||
#define SA_RESETHAND (0x00000004)
|
||||
/* Causes certain functions to become restartable. */
|
||||
#define SA_RESTART (0x00000008)
|
||||
/* Causes extra information to be passed to signal handlers at the time
|
||||
of receipt of a signal. */
|
||||
#define SA_SIGINFO (0x00000010)
|
||||
/* Causes implementations not to create zombie processes on child death. */
|
||||
#define SA_NOCLDWAIT (0x00000020)
|
||||
/* Causes signal not to be automatically blocked on entry to signal
|
||||
handler. */
|
||||
#define SA_NODEFER (0x00000040)
|
||||
|
||||
/* FIXME: the following constants need to be reviewed */
|
||||
/* The resulting set is the intersection of the current set and the
|
||||
complement of the signal set pointed to by the argument set. */
|
||||
#define SIG_BLOCK (1)
|
||||
/* The resulting set is the signal set pointed to by the argument
|
||||
set. */
|
||||
#define SIG_UNBLOCK (2)
|
||||
/* Causes signal delivery to occur on an alternate stack. */
|
||||
#define SIG_SETMASK (3)
|
||||
|
||||
/* FIXME: the following constants need to be reviewed */
|
||||
/* Process is executing on an alternate signal stack. */
|
||||
#define SS_ONSTACK (1)
|
||||
/* Alternate signal stack is disabled. */
|
||||
#define SS_DISABLE (2)
|
||||
|
||||
/* Minimum stack size for a signal handler. */ /* FIXME */
|
||||
#define MINSIGSTKSZ (0)
|
||||
/* Default size in bytes for the alternate signal stack. */ /* FIXME */
|
||||
#define SIGSTKSZ (0)
|
||||
|
||||
/*
|
||||
signal-specific reasons why the signal was generated
|
||||
*/
|
||||
/* SIGILL */
|
||||
/* illegal opcode */
|
||||
#define ILL_ILLOPC (1)
|
||||
/* illegal operand */
|
||||
#define ILL_ILLOPN (2)
|
||||
/* illegal addressing mode */
|
||||
#define ILL_ILLADR (3)
|
||||
/* illegal trap */
|
||||
#define ILL_ILLTRP (4)
|
||||
/* privileged opcode */
|
||||
#define ILL_PRVOPC (5)
|
||||
/* privileged register */
|
||||
#define ILL_PRVREG (6)
|
||||
/* coprocessor error */
|
||||
#define ILL_COPROC (7)
|
||||
/* internal stack error */
|
||||
#define ILL_BADSTK (8)
|
||||
|
||||
/* SIGFPE */
|
||||
/* integer divide by zero */
|
||||
#define FPE_INTDIV
|
||||
/* integer overflow */
|
||||
#define FPE_INTOVF
|
||||
/* floating point divide by zero */
|
||||
#define FPE_FLTDIV
|
||||
/* floating point overflow */
|
||||
#define FPE_FLTOVF
|
||||
/* floating point underflow */
|
||||
#define FPE_FLTUND
|
||||
/* floating point inexact result */
|
||||
#define FPE_FLTRES
|
||||
/* invalid floating point operation */
|
||||
#define FPE_FLTINV
|
||||
/* subscript out of range */
|
||||
#define FPE_FLTSUB
|
||||
|
||||
/* SIGSEGV */
|
||||
/* address not mapped to object */
|
||||
#define SEGV_MAPERR
|
||||
/* invalid permissions for mapped object */
|
||||
#define SEGV_ACCERR
|
||||
|
||||
/* SIGBUS */
|
||||
/* invalid address alignment */
|
||||
#define BUS_ADRALN
|
||||
/* non-existent physical address */
|
||||
#define BUS_ADRERR
|
||||
/* object specific hardware error */
|
||||
#define BUS_OBJERR
|
||||
|
||||
/* SIGTRAP */
|
||||
/* process breakpoint */
|
||||
#define TRAP_BRKPT
|
||||
/* process trace trap */
|
||||
#define TRAP_TRACE
|
||||
|
||||
/* SIGCHLD */
|
||||
/* child has exited */
|
||||
#define CLD_EXITED
|
||||
/* child has terminated abnormally and did not create a core file */
|
||||
#define CLD_KILLED
|
||||
/* child has terminated abnormally and created a core file */
|
||||
#define CLD_DUMPED
|
||||
/* traced child has trapped */
|
||||
#define CLD_TRAPPED
|
||||
/* child has stopped */
|
||||
#define CLD_STOPPED
|
||||
/* stopped child has continued */
|
||||
#define CLD_CONTINUED
|
||||
|
||||
/* SIGPOLL */
|
||||
/* data input available */
|
||||
#define POLL_IN
|
||||
/* output buffers available */
|
||||
#define POLL_OUT
|
||||
/* input message available */
|
||||
#define POLL_MSG
|
||||
/* I/O error */
|
||||
#define POLL_ERR
|
||||
/* high priority input available */
|
||||
#define POLL_PRI
|
||||
/* device disconnected */
|
||||
#define POLL_HUP
|
||||
/* signal sent by kill() */
|
||||
#define SI_USER
|
||||
/* signal sent by the sigqueue() */
|
||||
#define SI_QUEUE
|
||||
/* signal generated by expiration of a timer set by timer_settime() */
|
||||
#define SI_TIMER
|
||||
/* signal generated by completion of an asynchronous I/O request */
|
||||
#define SI_ASYNCIO
|
||||
/* signal generated by arrival of a message on an empty message queue */
|
||||
#define SI_MESGQ
|
||||
|
||||
/* PROTOTYPES */
|
||||
void (*bsd_signal(int, void (*)(int)))(int);
|
||||
int kill(pid_t, int);
|
||||
int killpg(pid_t, int);
|
||||
int pthread_kill(pthread_t, int);
|
||||
int pthread_sigmask(int, const sigset_t *, sigset_t *);
|
||||
int raise(int);
|
||||
int sigaction(int, const struct sigaction *, struct sigaction *);
|
||||
int sigaddset(sigset_t *, int);
|
||||
int sigaltstack(const stack_t *, stack_t *);
|
||||
int sigdelset(sigset_t *, int);
|
||||
int sigemptyset(sigset_t *);
|
||||
int sigfillset(sigset_t *);
|
||||
int sighold(int);
|
||||
int sigignore(int);
|
||||
int siginterrupt(int, int);
|
||||
int sigismember(const sigset_t *, int);
|
||||
void (*signal(int, void (*)(int)))(int);
|
||||
int sigpause(int);
|
||||
int sigpending(sigset_t *);
|
||||
int sigprocmask(int, const sigset_t *, sigset_t *);
|
||||
int sigqueue(pid_t, int, const union sigval);
|
||||
int sigrelse(int);
|
||||
void (*sigset(int, void (*)(int)))(int);
|
||||
int sigstack(struct sigstack *ss,
|
||||
struct sigstack *oss); /* LEGACY */
|
||||
int sigsuspend(const sigset_t *);
|
||||
int sigtimedwait(const sigset_t *, siginfo_t *,
|
||||
const struct timespec *);
|
||||
int sigwait(const sigset_t *set, int *sig);
|
||||
int sigwaitinfo(const sigset_t *, siginfo_t *);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SIGNAL_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
57
posix/include/stdarg.h
Normal file
57
posix/include/stdarg.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/* $Id: stdarg.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* stdarg.h
|
||||
*
|
||||
* handle variable argument list. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __STDARG_H_INCLUDED__
|
||||
#define __STDARG_H_INCLUDED__
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef char* va_list;
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
/* taken from mingw's stdarg.h */
|
||||
|
||||
/* Amount of space required in an argument list (ie. the stack) for an
|
||||
argument of type t. */
|
||||
#define __va_argsiz(t) \
|
||||
(((sizeof(t) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
|
||||
|
||||
#define va_start(ap, pN) \
|
||||
((ap) = ((va_list) (&pN) + __va_argsiz(pN)))
|
||||
|
||||
#define va_end(ap) ((void)0)
|
||||
|
||||
#define va_arg(ap, t) \
|
||||
(((ap) = (ap) + __va_argsiz(t)), \
|
||||
*((t*) (void*) ((ap) - __va_argsiz(t))))
|
||||
|
||||
#endif /* __STDARG_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
50
posix/include/stddef.h
Normal file
50
posix/include/stddef.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/* $Id: stddef.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* stddef.h
|
||||
*
|
||||
* standard type definitions. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __STDDEF_H_INCLUDED__
|
||||
#define __STDDEF_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <sys/types.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef signed long int ptrdiff_t;
|
||||
typedef unsigned short int wchar_t;
|
||||
|
||||
/* CONSTANTS */
|
||||
#ifndef NULL
|
||||
#define NULL ((void *)(0)) /* Null pointer constant. */
|
||||
#endif
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
#define offsetof(t,m) ((size_t) &((t *)0)->m)
|
||||
|
||||
#endif /* __STDDEF_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
165
posix/include/stdio.h
Normal file
165
posix/include/stdio.h
Normal file
@@ -0,0 +1,165 @@
|
||||
/* $Id: stdio.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* stdio.h
|
||||
*
|
||||
* standard buffered input/output. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __STDIO_H_INCLUDED__
|
||||
#define __STDIO_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <stddef.h>
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* OBJECTS */
|
||||
extern char *optarg;
|
||||
extern int opterr;
|
||||
extern int optind; /* LEGACY */
|
||||
extern int optopt;
|
||||
|
||||
/* TYPES */
|
||||
typedef struct __tagFILE
|
||||
{
|
||||
int _dummy;
|
||||
} FILE;
|
||||
|
||||
typedef struct __tagfpos_t
|
||||
{
|
||||
int _dummy;
|
||||
} fpos_t;
|
||||
|
||||
|
||||
/* CONSTANTS */
|
||||
/* Size of <stdio.h> buffers. */
|
||||
#define BUFSIZ (0x10000)
|
||||
|
||||
/* Maximum size in bytes of the longest filename string that the implementation
|
||||
guarantees can be opened. */
|
||||
#define FILENAME_MAX (255)
|
||||
|
||||
/* Number of streams which the implementation guarantees can be open
|
||||
simultaneously. The value will be at least eight. */
|
||||
#define FOPEN_MAX (8)
|
||||
|
||||
/* Input/output fully buffered. */
|
||||
#define _IOFBF (1)
|
||||
/* Input/output line buffered. */
|
||||
#define _IOLBF (2)
|
||||
/* Input/output unbuffered. */
|
||||
#define _IONBF (3)
|
||||
|
||||
/* Maximum size of character array to hold ctermid() output. */
|
||||
#define L_ctermid (255)
|
||||
/* Maximum size of character array to hold cuserid() output. (LEGACY) */
|
||||
#define L_cuserid (255)
|
||||
/* Maximum size of character array to hold tmpnam() output. */
|
||||
#define L_tmpnam (255)
|
||||
|
||||
/* Minimum number of unique filenames generated by tmpnam(). Maximum number
|
||||
of times an application can call tmpnam() reliably. The value of TMP_MAX
|
||||
will be at least 10,000. */
|
||||
#define TMP_MAX (0xFFFF)
|
||||
|
||||
/* End-of-file return value. */
|
||||
#define EOF (-1)
|
||||
|
||||
/* default directory prefix for tempnam() */
|
||||
#define P_tmpdir "/tmp/"
|
||||
|
||||
/* Standard error output stream. */
|
||||
#define stderr ((FILE *)STDERR_FILENO)
|
||||
/* Standard input stream. */
|
||||
#define stdin ((FILE *)STDIN_FILENO)
|
||||
/* Standard output stream. */
|
||||
#define stdout ((FILE *)STDOUT_FILENO)
|
||||
|
||||
/* PROTOTYPES */
|
||||
void clearerr(FILE *);
|
||||
char *ctermid(char *);
|
||||
char *cuserid(char *); /* LEGACY */
|
||||
int fclose(FILE *);
|
||||
FILE *fdopen(int, const char *);
|
||||
int feof(FILE *);
|
||||
int ferror(FILE *);
|
||||
int fflush(FILE *);
|
||||
int fgetc(FILE *);
|
||||
int fgetpos(FILE *, fpos_t *);
|
||||
char *fgets(char *, int, FILE *);
|
||||
int fileno(FILE *);
|
||||
void flockfile(FILE *);
|
||||
FILE *fopen(const char *, const char *);
|
||||
int fprintf(FILE *, const char *, ...);
|
||||
int fputc(int, FILE *);
|
||||
int fputs(const char *, FILE *);
|
||||
size_t fread(void *, size_t, size_t, FILE *);
|
||||
FILE *freopen(const char *, const char *, FILE *);
|
||||
int fscanf(FILE *, const char *, ...);
|
||||
int fseek(FILE *, long int, int);
|
||||
int fseeko(FILE *, off_t, int);
|
||||
int fsetpos(FILE *, const fpos_t *);
|
||||
long int ftell(FILE *);
|
||||
off_t ftello(FILE *);
|
||||
int ftrylockfile(FILE *);
|
||||
void funlockfile(FILE *);
|
||||
size_t fwrite(const void *, size_t, size_t, FILE *);
|
||||
int getc(FILE *);
|
||||
int getchar(void);
|
||||
int getc_unlocked(FILE *);
|
||||
int getchar_unlocked(void);
|
||||
int getopt(int, char * const[], const char *); /* LEGACY */
|
||||
char *gets(char *);
|
||||
int getw(FILE *);
|
||||
int pclose(FILE *);
|
||||
void perror(const char *);
|
||||
FILE *popen(const char *, const char *);
|
||||
int printf(const char *, ...);
|
||||
int putc(int, FILE *);
|
||||
int putchar(int);
|
||||
int putc_unlocked(int, FILE *);
|
||||
int putchar_unlocked(int);
|
||||
int puts(const char *);
|
||||
int putw(int, FILE *);
|
||||
int remove(const char *);
|
||||
int rename(const char *, const char *);
|
||||
void rewind(FILE *);
|
||||
int scanf(const char *, ...);
|
||||
void setbuf(FILE *, char *);
|
||||
int setvbuf(FILE *, char *, int, size_t);
|
||||
int snprintf(char *, size_t, const char *, ...);
|
||||
int sprintf(char *, const char *, ...);
|
||||
int sscanf(const char *, const char *, int, ...);
|
||||
char *tempnam(const char *, const char *);
|
||||
FILE *tmpfile(void);
|
||||
char *tmpnam(char *);
|
||||
int ungetc(int, FILE *);
|
||||
int vfprintf(FILE *, const char *, va_list);
|
||||
int vprintf(const char *, va_list);
|
||||
int vsnprintf(char *, size_t, const char *, va_list);
|
||||
int vsprintf(char *, const char *, va_list);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __STDIO_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
130
posix/include/stdlib.h
Normal file
130
posix/include/stdlib.h
Normal file
@@ -0,0 +1,130 @@
|
||||
/* $Id: stdlib.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* stdlib.h
|
||||
*
|
||||
* standard library definitions. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __STDLIB_H_INCLUDED__
|
||||
#define __STDLIB_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <stddef.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
typedef struct __tagdiv_t
|
||||
{
|
||||
int quot; /* quotient */
|
||||
int rem; /* remainder */
|
||||
} div_t;
|
||||
|
||||
typedef struct __tagldiv_t
|
||||
{
|
||||
long int quot; /* quotient */
|
||||
long int rem; /* remainder */
|
||||
} ldiv_t;
|
||||
|
||||
/* CONSTANTS */
|
||||
#define EXIT_FAILURE (-1) /* Unsuccessful termination for exit(), evaluates \
|
||||
to a non-zero value. */
|
||||
#define EXIT_SUCCESS (0) /* Successful termination for exit(), evaluates to 0. */
|
||||
|
||||
/* FIXME */
|
||||
#define RAND_MAX (32767) /* Maximum value returned by rand(), at least 32,767. */
|
||||
|
||||
/* FIXME */
|
||||
#define MB_CUR_MAX (1) /* Integer expression whose value is the maximum number \
|
||||
of bytes in a character specified by the current \
|
||||
locale. */
|
||||
|
||||
/* PROTOTYPES */
|
||||
long a64l(const char *);
|
||||
void abort(void);
|
||||
int abs(int);
|
||||
int atexit(void (*)(void));
|
||||
double atof(const char *);
|
||||
int atoi(const char *);
|
||||
long int atol(const char *);
|
||||
void *bsearch(const void *, const void *, size_t, size_t,
|
||||
int (*)(const void *, const void *));
|
||||
void *calloc(size_t, size_t);
|
||||
div_t div(int, int);
|
||||
double drand48(void);
|
||||
char *ecvt(double, int, int *, int *);
|
||||
double erand48(unsigned short int[3]);
|
||||
void exit(int);
|
||||
char *fcvt (double, int, int *, int *);
|
||||
void free(void *);
|
||||
char *gcvt(double, int, char *);
|
||||
char *getenv(const char *);
|
||||
int getsubopt(char **, char *const *, char **);
|
||||
int grantpt(int);
|
||||
char *initstate(unsigned int, char *, size_t);
|
||||
long int jrand48(unsigned short int[3]);
|
||||
char *l64a(long);
|
||||
long int labs(long int);
|
||||
void lcong48(unsigned short int[7]);
|
||||
ldiv_t ldiv(long int, long int);
|
||||
long int lrand48(void);
|
||||
void *malloc(size_t);
|
||||
int mblen(const char *, size_t);
|
||||
size_t mbstowcs(wchar_t *, const char *, size_t);
|
||||
int mbtowc(wchar_t *, const char *, size_t);
|
||||
char *mktemp(char *);
|
||||
int mkstemp(char *);
|
||||
long int mrand48(void);
|
||||
long int nrand48(unsigned short int [3]);
|
||||
char *ptsname(int);
|
||||
int putenv(char *);
|
||||
void qsort(void *, size_t, size_t, int (*)(const void *,
|
||||
const void *));
|
||||
int rand(void);
|
||||
int rand_r(unsigned int *);
|
||||
long random(void);
|
||||
void *realloc(void *, size_t);
|
||||
char *realpath(const char *, char *);
|
||||
unsigned short int seed48(unsigned short int[3]);
|
||||
void setkey(const char *);
|
||||
char *setstate(const char *);
|
||||
void srand(unsigned int);
|
||||
void srand48(long int);
|
||||
void srandom(unsigned);
|
||||
double strtod(const char *, char **);
|
||||
long int strtol(const char *, char **, int);
|
||||
unsigned long int
|
||||
strtoul(const char *, char **, int);
|
||||
int system(const char *);
|
||||
int ttyslot(void); /* LEGACY */
|
||||
int unlockpt(int);
|
||||
void *valloc(size_t); /* LEGACY */
|
||||
size_t wcstombs(char *, const wchar_t *, size_t);
|
||||
int wctomb(char *, wchar_t);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __STDLIB_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
69
posix/include/string.h
Normal file
69
posix/include/string.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/* $Id: string.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* string.h
|
||||
*
|
||||
* string operations. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __STRING_H_INCLUDED__ /* replace with the appropriate tag */
|
||||
#define __STRING_H_INCLUDED__ /* replace with the appropriate tag */
|
||||
|
||||
/* INCLUDES */
|
||||
#include <stddef.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
void *memccpy(void *, const void *, int, size_t);
|
||||
void *memchr(const void *, int, size_t);
|
||||
int memcmp(const void *, const void *, size_t);
|
||||
void *memcpy(void *, const void *, size_t);
|
||||
void *memmove(void *, const void *, size_t);
|
||||
void *memset(void *, int, size_t);
|
||||
char *strcat(char *, const char *);
|
||||
char *strchr(const char *, int);
|
||||
int strcmp(const char *, const char *);
|
||||
int strcoll(const char *, const char *);
|
||||
char *strcpy(char *, const char *);
|
||||
size_t strcspn(const char *, const char *);
|
||||
char *strdup(const char *);
|
||||
char *strerror(int);
|
||||
size_t strlen(const char *);
|
||||
char *strncat(char *, const char *, size_t);
|
||||
int strncmp(const char *, const char *, size_t);
|
||||
char *strncpy(char *, const char *, size_t);
|
||||
char *strpbrk(const char *, const char *);
|
||||
char *strrchr(const char *, int);
|
||||
size_t strspn(const char *, const char *);
|
||||
char *strstr(const char *, const char *);
|
||||
char *strtok(char *, const char *);
|
||||
char *strtok_r(char *, const char *, char **);
|
||||
size_t strxfrm(char *, const char *, size_t);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __STRING_H_INCLUDED__ */ /* replace with the appropriate tag */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/ipc.h
Normal file
43
posix/include/sys/ipc.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: ipc.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/ipc.h
|
||||
*
|
||||
* interprocess communication access structure. Conforming to the Single
|
||||
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_IPC_H_INCLUDED__
|
||||
#define __SYS_IPC_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_IPC_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/mman.h
Normal file
43
posix/include/sys/mman.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: mman.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/mman.h
|
||||
*
|
||||
* memory management declarations. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_SOCKET_H_INCLUDED__
|
||||
#define __SYS_SOCKET_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_SOCKET_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/msg.h
Normal file
43
posix/include/sys/msg.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: msg.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/msg.h
|
||||
*
|
||||
* message queue structures. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_SOCKET_H_INCLUDED__
|
||||
#define __SYS_SOCKET_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_SOCKET_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/resource.h
Normal file
43
posix/include/sys/resource.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: resource.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/resource.h
|
||||
*
|
||||
* definitions for XSI resource operations. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_RESOURCE_H_INCLUDED__
|
||||
#define __SYS_RESOURCE_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_RESOURCE_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/sem.h
Normal file
43
posix/include/sys/sem.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: sem.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/sem.h
|
||||
*
|
||||
* semaphore facility. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_SEM_H_INCLUDED__
|
||||
#define __SYS_SEM_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_SEM_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/shm.h
Normal file
43
posix/include/sys/shm.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: shm.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/shm.h
|
||||
*
|
||||
* shared memory facility. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_SHM_H_INCLUDED__
|
||||
#define __SYS_SHM_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_SHM_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/socket.h
Normal file
43
posix/include/sys/socket.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: socket.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/socket.h
|
||||
*
|
||||
* Internet Protocol family. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_SOCKET_H_INCLUDED__
|
||||
#define __SYS_SOCKET_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_SOCKET_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
122
posix/include/sys/stat.h
Normal file
122
posix/include/sys/stat.h
Normal file
@@ -0,0 +1,122 @@
|
||||
/* $Id: stat.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/stat.h
|
||||
*
|
||||
* data returned by the stat() function. Conforming to the Single
|
||||
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_STAT_H_INCLUDED__
|
||||
#define __SYS_STAT_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <sys/types.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
struct stat
|
||||
{
|
||||
dev_t st_dev; /* ID of device containing file */
|
||||
ino_t st_ino; /* file serial number */
|
||||
mode_t st_mode; /* mode of file (see below) */
|
||||
nlink_t st_nlink; /* number of links to the file */
|
||||
uid_t st_uid; /* user ID of file */
|
||||
gid_t st_gid; /* group ID of file */
|
||||
dev_t st_rdev; /* device ID (if file is character or block special) */
|
||||
off_t st_size; /* file size in bytes (if file is a regular file) */
|
||||
time_t st_atime; /* time of last access */
|
||||
time_t st_mtime; /* time of last data modification */
|
||||
time_t st_ctime; /* time of last status change */
|
||||
blksize_t st_blksize; /* a filesystem-specific preferred I/O block size for
|
||||
this object. In some filesystem types, this may
|
||||
vary from file to file */
|
||||
blkcnt_t st_blocks; /* number of blocks allocated for this object */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
/*
|
||||
file type
|
||||
*/
|
||||
#define S_IFBLK (1) /* block special */
|
||||
#define S_IFCHR (2) /* character special */
|
||||
#define S_IFIFO (3) /* FIFO special */
|
||||
#define S_IFREG (4) /* regular */
|
||||
#define S_IFDIR (5) /* directory */
|
||||
#define S_IFLNK (6) /* symbolic link */
|
||||
|
||||
/* type of file */
|
||||
#define S_IFMT (S_IFBLK | S_IFCHR | S_IFIFO | S_IFREG | S_IFDIR | S_IFLNK)
|
||||
|
||||
/*
|
||||
file mode bits
|
||||
*/
|
||||
#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) /* read, write, execute/search by owner */
|
||||
#define S_IRUSR (0x00000001) /* read permission, owner */
|
||||
#define S_IWUSR (0x00000002) /* write permission, owner */
|
||||
#define S_IXUSR (0x00000004) /* execute/search permission, owner */
|
||||
|
||||
#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) /* read, write, execute/search by group */
|
||||
#define S_IRGRP (0x00000010) /* read permission, group */
|
||||
#define S_IWGRP (0x00000020) /* write permission, group */
|
||||
#define S_IXGRP (0x00000040) /* execute/search permission, group */
|
||||
|
||||
#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) /* read, write, execute/search by others */
|
||||
#define S_IROTH (0x00000100) /* read permission, others */
|
||||
#define S_IWOTH (0x00000200) /* write permission, others */
|
||||
#define S_IXOTH (0x00000400) /* execute/search permission, others */
|
||||
|
||||
#define S_ISUID (0x00001000) /* set-user-ID on execution */
|
||||
#define S_ISGID (0x00002000) /* set-group-ID on execution */
|
||||
#define S_ISVTX (0x00004000) /* on directories, restricted deletion flag */
|
||||
|
||||
/*
|
||||
the following macros will test whether a file is of the specified type
|
||||
*/
|
||||
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
|
||||
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
|
||||
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
||||
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
||||
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
|
||||
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
|
||||
|
||||
/* shared memory, semaphores and message queues are unlikely to be ever
|
||||
implemented as files */
|
||||
#define S_TYPEISMQ(buf) (0) /* Test for a message queue */
|
||||
#define S_TYPEISSEM(buf) (0) /* Test for a semaphore */
|
||||
#define S_TYPEISSHM(buf) (0) /* Test for a shared memory object */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int chmod(const char *, mode_t);
|
||||
int fchmod(int, mode_t);
|
||||
int fstat(int, struct stat *);
|
||||
int lstat(const char *, struct stat *);
|
||||
int mkdir(const char *, mode_t);
|
||||
int mkfifo(const char *, mode_t);
|
||||
int mknod(const char *, mode_t, dev_t);
|
||||
int stat(const char *, struct stat *);
|
||||
mode_t umask(mode_t);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_STAT_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/statvfs.h
Normal file
43
posix/include/sys/statvfs.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: statvfs.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/statvfs.h
|
||||
*
|
||||
* VFS Filesystem information structure. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_STATVFS_H_INCLUDED__
|
||||
#define __SYS_STATVFS_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_STATVFS_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/time.h
Normal file
43
posix/include/sys/time.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: time.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/time.h
|
||||
*
|
||||
* time types. Conforming to the Single UNIX(r) Specification Version 2,
|
||||
* System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_TIME_H_INCLUDED__
|
||||
#define __SYS_TIME_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_TIME_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/timeb.h
Normal file
43
posix/include/sys/timeb.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: timeb.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/timeb.h
|
||||
*
|
||||
* additional definitions for date and time. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_TIMEB_H_INCLUDED__
|
||||
#define __SYS_TIMEB_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_TIMEB_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/times.h
Normal file
43
posix/include/sys/times.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: times.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/times.h
|
||||
*
|
||||
* file access and modification times structure. Conforming to the Single
|
||||
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_TIMES_H_INCLUDED__
|
||||
#define __SYS_TIMES_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_TIMES_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
83
posix/include/sys/types.h
Normal file
83
posix/include/sys/types.h
Normal file
@@ -0,0 +1,83 @@
|
||||
/* $Id: types.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/types.h
|
||||
*
|
||||
* data types. Conforming to the Single UNIX(r) Specification Version 2,
|
||||
* System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_TYPES_H_INCLUDED__
|
||||
#define __SYS_TYPES_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <inttypes.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
/* FIXME: all these types need to be checked */
|
||||
typedef unsigned long int blkcnt_t; /* Used for file block counts */
|
||||
typedef unsigned long int blksize_t; /* Used for block sizes */
|
||||
typedef long long clock_t; /* Used for system times in clock ticks or CLOCKS_PER_SEC */
|
||||
typedef int clockid_t; /* Used for clock ID type in the clock and timer functions. */
|
||||
typedef int dev_t; /* Used for device IDs. */
|
||||
typedef long long fsblkcnt_t; /* Used for file system block counts */
|
||||
typedef long long fsfilcnt_t; /* Used for file system file counts */
|
||||
typedef int gid_t; /* Used for group IDs. */
|
||||
typedef int id_t; /* Used as a general identifier; can be used to contain at least a
|
||||
pid_t, uid_t or a gid_t. */
|
||||
typedef uint64_t ino_t; /* Used for file serial numbers. */
|
||||
typedef int key_t; /* Used for interprocess communication. */
|
||||
typedef int mode_t; /* Used for some file attributes. */
|
||||
typedef int nlink_t; /* Used for link counts. */
|
||||
typedef int64_t off_t; /* Used for file sizes. */
|
||||
typedef unsigned long int pid_t; /* Used for process IDs and process group IDs. */
|
||||
|
||||
/* pthread types */
|
||||
typedef void * pthread_cond_t; /* Used for condition variables. */
|
||||
typedef void * pthread_condattr_t; /* Used to identify a condition attribute object. */
|
||||
typedef void * pthread_key_t; /* Used for thread-specific data keys. */
|
||||
typedef void * pthread_attr_t; /* Used to identify a thread attribute object. */
|
||||
|
||||
typedef void * pthread_mutex_t;
|
||||
typedef void * pthread_mutexattr_t;
|
||||
|
||||
typedef void * pthread_once_t; /* Used for dynamic package initialisation. */
|
||||
typedef void * pthread_rwlock_t; /* Used for read-write locks. */
|
||||
typedef void * pthread_rwlockattr_t; /* Used for read-write lock attributes. */
|
||||
typedef unsigned long int pthread_t; /* Used to identify a thread. */
|
||||
|
||||
typedef unsigned long int size_t; /* Used for sizes of objects. */
|
||||
typedef long int ssize_t; /* Used for a count of bytes or an error indication. */
|
||||
typedef long long suseconds_t; /* Used for time in microseconds */
|
||||
typedef unsigned long int time_t; /* Used for time in seconds. */
|
||||
typedef void * timer_t; /* Used for timer ID returned by timer_create(). */
|
||||
typedef int uid_t; /* Used for user IDs. */
|
||||
typedef unsigned long long useconds_t; /* Used for time in microseconds. */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_TYPES_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/uio.h
Normal file
43
posix/include/sys/uio.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: uio.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/uio.h
|
||||
*
|
||||
* definitions for vector I/O operations. Conforming to the Single UNIX(r)
|
||||
* Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_UIO_H_INCLUDED__
|
||||
#define __SYS_UIO_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_UIO_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/un.h
Normal file
43
posix/include/sys/un.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: un.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/un.h
|
||||
*
|
||||
* declarations for definitions for UNIX-domain sockets. Conforming to the
|
||||
* Single UNIX(r) Specification Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_UN_H_INCLUDED__
|
||||
#define __SYS_UN_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_UN_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
54
posix/include/sys/utsname.h
Normal file
54
posix/include/sys/utsname.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/* $Id: utsname.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/utsname.h
|
||||
*
|
||||
* system name structure. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_UTSNAME_H_INCLUDED__
|
||||
#define __SYS_UTSNAME_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
struct utsname
|
||||
{
|
||||
char sysname[255]; /* name of this implementation of the operating system */
|
||||
char nodename[255]; /* name of this node within an implementation-dependent
|
||||
communications network */
|
||||
char release[255]; /* current release level of this implementation */
|
||||
char version[255]; /* current version level of this release */
|
||||
char machine[255]; /* name of the hardware type on which the system is
|
||||
running */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
int uname(struct utsname *);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_UTSNAME_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
43
posix/include/sys/wait.h
Normal file
43
posix/include/sys/wait.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/* $Id: wait.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* sys/wait.h
|
||||
*
|
||||
* declarations for waiting. Conforming to the Single UNIX(r) Specification
|
||||
* Version 2, System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __SYS_WAIT_H_INCLUDED__
|
||||
#define __SYS_WAIT_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __SYS_WAIT_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
114
posix/include/time.h
Normal file
114
posix/include/time.h
Normal file
@@ -0,0 +1,114 @@
|
||||
/* $Id: time.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* time.h
|
||||
*
|
||||
* time types. Conforming to the Single UNIX(r) Specification Version 2,
|
||||
* System Interface & Headers Issue 5
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef __TIME_H_INCLUDED__
|
||||
#define __TIME_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <signal.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* OBJECTS */
|
||||
//extern static int getdate_err; /* FIXME */
|
||||
extern int daylight;
|
||||
extern long int timezone;
|
||||
extern char *tzname[];
|
||||
|
||||
/* TYPES */
|
||||
/* pre-declaration of signal.h types to suppress warnings caused by circular
|
||||
dependencies */
|
||||
struct sigevent;
|
||||
|
||||
struct tm
|
||||
{
|
||||
int tm_sec; /* seconds [0,61] */
|
||||
int tm_min; /* minutes [0,59] */
|
||||
int tm_hour; /* hour [0,23] */
|
||||
int tm_mday; /* day of month [1,31] */
|
||||
int tm_mon; /* month of year [0,11] */
|
||||
int tm_year; /* years since 1900 */
|
||||
int tm_wday; /* day of week [0,6] (Sunday = 0) */
|
||||
int tm_yday; /* day of year [0,365] */
|
||||
int tm_isdst; /* daylight savings flag */
|
||||
};
|
||||
|
||||
struct timespec
|
||||
{
|
||||
time_t tv_sec; /* seconds */
|
||||
long tv_nsec; /* nanoseconds */
|
||||
};
|
||||
|
||||
struct itimerspec
|
||||
{
|
||||
struct timespec it_interval; /* timer period */
|
||||
struct timespec it_value; /* timer expiration */
|
||||
};
|
||||
|
||||
/* CONSTANTS */
|
||||
/* FIXME: all the constants are wrong */
|
||||
/* Number of clock ticks per second returned by the times() function (LEGACY). */
|
||||
#define CLK_TCK (1)
|
||||
/* A number used to convert the value returned by the clock() function into
|
||||
seconds. */
|
||||
#define CLOCKS_PER_SEC (1)
|
||||
/* The identifier of the systemwide realtime clock. */
|
||||
#define CLOCK_REALTIME (0)
|
||||
/* Flag indicating time is absolute with respect to the clock associated with a
|
||||
timer. */
|
||||
#define TIMER_ABSTIME (1)
|
||||
|
||||
/* PROTOTYPES */
|
||||
char *asctime(const struct tm *);
|
||||
char *asctime_r(const struct tm *, char *);
|
||||
clock_t clock(void);
|
||||
int clock_getres(clockid_t, struct timespec *);
|
||||
int clock_gettime(clockid_t, struct timespec *);
|
||||
int clock_settime(clockid_t, const struct timespec *);
|
||||
char *ctime(const time_t *);
|
||||
char *ctime_r(const time_t *, char *);
|
||||
double difftime(time_t, time_t);
|
||||
struct tm *getdate(const char *);
|
||||
struct tm *gmtime(const time_t *);
|
||||
struct tm *gmtime_r(const time_t *, struct tm *);
|
||||
struct tm *localtime(const time_t *);
|
||||
struct tm *localtime_r(const time_t *, struct tm *);
|
||||
time_t mktime(struct tm *);
|
||||
int nanosleep(const struct timespec *, struct timespec *);
|
||||
size_t strftime(char *, size_t, const char *, const struct tm *);
|
||||
char *strptime(const char *, const char *, struct tm *);
|
||||
time_t time(time_t *);
|
||||
int timer_create(clockid_t, struct sigevent *, timer_t *);
|
||||
int timer_delete(timer_t);
|
||||
int timer_gettime(timer_t, struct itimerspec *);
|
||||
int timer_getoverrun(timer_t);
|
||||
int timer_settime(timer_t, int, const struct itimerspec *,
|
||||
struct itimerspec *);
|
||||
void tzset(void);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __TIME_H_INCLUDED__ */ /* replace with the appropriate tag */
|
||||
|
||||
/* EOF */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user