blob: 61b4a09ab12fbb11f5f47709309cbc238fc63016 [file] [log] [blame]
/*
* Win32 kernel functions
*
* Copyright 1995 Martin von Loewis and Cameron Heide
*/
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include "windows.h"
#include "winerror.h"
#include "kernel32.h"
/***********************************************************************
* GetFileType (KERNEL32.222)
*
* GetFileType currently only supports stdin, stdout, and stderr, which
* are considered to be of type FILE_TYPE_CHAR.
*/
DWORD GetFileType(HANDLE hFile)
{
DWORD file_type;
if(hFile < 3)
{
file_type = 2; /* FILE_TYPE_CHAR */
}
else
{
file_type = 0; /* FILE_TYPE_UNKNOWN */
}
return file_type;
}
/***********************************************************************
* GetStdHandle (KERNEL32.276)
*/
HANDLE GetStdHandle(DWORD nStdHandle)
{
switch(nStdHandle)
{
case -10/*STD_INPUT_HANDLE*/:return (HANDLE)0;
case -11/*STD_OUTPUT_HANDLE*/:return (HANDLE)1;
case -12/*STD_ERROR_HANDLE*/:return (HANDLE)2;
}
return (HANDLE)-1;
}
/***********************************************************************
* SetFilePointer (KERNEL32.492)
*
* Luckily enough, this function maps almost directly into an lseek
* call, the exception being the use of 64-bit offsets.
*/
DWORD SetFilePointer(HANDLE hFile, LONG distance, LONG *highword,
DWORD method)
{
int rc;
if(highword != NULL)
{
if(*highword != 0)
{
printf("SetFilePointer: 64-bit offsets not yet supported.\n");
return -1;
}
}
rc = lseek(hFile, distance, method);
if(rc == -1)
SetLastError(ErrnoToLastError(errno));
return rc;
}
/***********************************************************************
* WriteFile (KERNEL32.578)
*
* WriteFile isn't very useful at this point since only standard
* handles are permitted, but it lets us see runtime errors at least.
*/
BOOL WriteFile(HANDLE hFile, LPVOID lpBuffer, DWORD numberOfBytesToWrite,
LPDWORD numberOfBytesWritten, LPOVERLAPPED lpOverlapped)
{
int written;
if(hFile < 3)
{
written = write(hFile, lpBuffer, numberOfBytesToWrite);
if(numberOfBytesWritten)
*numberOfBytesWritten = written;
}
return 1;
}