⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lfile.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
字号:
/* $Id: lfile.c 21253 2006-03-08 21:33:04Z audit $
 *
 * COPYRIGHT:       See COPYING in the top level directory
 * PROJECT:         ReactOS system libraries
 * FILE:            lib/kernel32/file/lfile.c
 * PURPOSE:         Find functions
 * PROGRAMMER:      Ariadne ( ariadne@xs4all.nl)
 * UPDATE HISTORY:
 *                  Created 01/11/98
 */

#include <k32.h>

#define NDEBUG
#include "../include/debug.h"


/*
 * @implemented
 */
long
STDCALL
_hread(
	HFILE	hFile,
	LPVOID	lpBuffer,
	long	lBytes
	)
{
	DWORD	NumberOfBytesRead;

	if ( !ReadFile(
		(HANDLE) hFile,
		(LPVOID) lpBuffer,
		(DWORD) lBytes,
		& NumberOfBytesRead,
		NULL) )
	{
		return HFILE_ERROR;
	}
	return NumberOfBytesRead;
}


/*
 * @implemented
 */
long
STDCALL
_hwrite (
	HFILE	hFile,
	LPCSTR	lpBuffer,
	long	lBytes
	)
{
	DWORD	NumberOfBytesWritten;

	if (lBytes == 0)
	{
		if ( !SetEndOfFile((HANDLE) hFile ) )
		{
			return HFILE_ERROR;
		}
		return 0;
	}
	if ( !WriteFile(
		(HANDLE) hFile,
		(LPVOID) lpBuffer,
		(DWORD) lBytes,
		& NumberOfBytesWritten,
		NULL) )
	{
		return HFILE_ERROR;
	}
	return NumberOfBytesWritten;
}


/*
 * @implemented
 */
HFILE
STDCALL
_lopen (
	LPCSTR	lpPathName,
	int	iReadWrite
	)
{
	DWORD dwAccessMask = 0;
	DWORD dwShareMode = 0;

	if ( (iReadWrite & OF_READWRITE ) == OF_READWRITE )
		dwAccessMask = GENERIC_READ | GENERIC_WRITE;
	else if ( (iReadWrite & OF_READ ) == OF_READ )
		dwAccessMask = GENERIC_READ;
	else if ( (iReadWrite & OF_WRITE ) == OF_WRITE )
		dwAccessMask = GENERIC_WRITE;

	if ((iReadWrite & OF_SHARE_DENY_READ) == OF_SHARE_DENY_READ)
		dwShareMode = FILE_SHARE_WRITE;
	else if ((iReadWrite & OF_SHARE_DENY_WRITE) == OF_SHARE_DENY_WRITE )
		dwShareMode = FILE_SHARE_READ;
	else if ((iReadWrite & OF_SHARE_EXCLUSIVE) == OF_SHARE_EXCLUSIVE)
		dwShareMode = 0;
	else
		/* OF_SHARE_DENY_NONE, OF_SHARE_COMPAT and everything else */
                dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;

	return (HFILE) CreateFileA(
			lpPathName,
			dwAccessMask,
			dwShareMode,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL,
			NULL);
}


/*
 * @implemented
 */
HFILE
STDCALL
_lcreat (
	LPCSTR	lpPathName,
	int	iAttribute
	)
{
	iAttribute &= FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM;
	return (HFILE) CreateFileA(
			lpPathName,
			GENERIC_READ | GENERIC_WRITE,
			(FILE_SHARE_READ | FILE_SHARE_WRITE),
			NULL,
			CREATE_ALWAYS,
			iAttribute,
			NULL);
}


/*
 * @implemented
 */
int
STDCALL
_lclose (
	HFILE	hFile
	)
{
	if (CloseHandle ((HANDLE)hFile))
	{
		return 0;
	}
	return HFILE_ERROR;
}


/*
 * @implemented
 */
LONG
STDCALL
_llseek(
	HFILE	hFile,
	LONG	lOffset,
	int	iOrigin
	)
{
	return SetFilePointer (
			(HANDLE) hFile,
			lOffset,
			NULL,
			(DWORD) iOrigin);
}

/* EOF */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -