svn path=/trunk/; revision=2961
-/* $Id: fcntl.c,v 1.4 2002/03/21 22:41:53 hyperion Exp $
+/* $Id: fcntl.c,v 1.5 2002/05/17 01:54:39 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
*/
/*
* COPYRIGHT: See COPYING in the top level directory
/* lock the environment */
__PdxAcquirePdataLock();
/* lock the environment */
__PdxAcquirePdataLock();
+ INFO("environment locked");
/* get the file descriptors table */
pftFdTable = &__PdxGetProcessData()->FdTable;
/* get the file descriptors table */
pftFdTable = &__PdxGetProcessData()->FdTable;
+ INFO("file descriptors table at 0x%08X", pftFdTable);
- /* fildes is an invalid, closed or uninitialized descriptor */
+ /* fildes is an invalid descriptor, or it's a closed or uninitialized
+ descriptor and the requested operation is not the creation of a new
+ descriptor */
if
(
fildes < 0 ||
fildes >= OPEN_MAX ||
if
(
fildes < 0 ||
fildes >= OPEN_MAX ||
- __fdtable_entry_isavail(pftFdTable, fildes) == 0 ||
- __fdtable_entry_get(pftFdTable, fildes) == 0
+ (
+ (cmd != F_NEWFD) &&
+ (
+ __fdtable_entry_isavail(pftFdTable, fildes) == 0 ||
+ __fdtable_entry_get(pftFdTable, fildes) == 0
+ )
+ )
+ INFO("invalid file descriptor");
errno = EBADF;
__PdxReleasePdataLock();
return (-1);
errno = EBADF;
__PdxReleasePdataLock();
return (-1);
/* get the file descriptor referenced by fildes */
pfdDescriptor = __fdtable_entry_get(pftFdTable, fildes);
/* get the file descriptor referenced by fildes */
pfdDescriptor = __fdtable_entry_get(pftFdTable, fildes);
+ INFO("file descriptor %d at 0x%08X", fildes, pftFdTable);
/* get third argument as integer */
va_start(vlArgs, cmd);
/* get third argument as integer */
va_start(vlArgs, cmd);
{
int nDupFileNo;
__fildes_t *pfdDupDescriptor;
{
int nDupFileNo;
__fildes_t *pfdDupDescriptor;
+
+ INFO("requested operation: F_DUPFD");
/* allocate the duplicated descriptor */
nDupFileNo = __fdtable_entry_add(pftFdTable, nThirdArg, 0, &pfdDupDescriptor);
if(nDupFileNo)
/* allocate the duplicated descriptor */
nDupFileNo = __fdtable_entry_add(pftFdTable, nThirdArg, 0, &pfdDupDescriptor);
if(nDupFileNo)
+ {
+ ERR("__fdtable_entry_add() failed, errno %d", errno);
/* copy the open flags */
pfdDupDescriptor->OpenFlags = pfdDescriptor->OpenFlags;
/* copy the open flags */
pfdDupDescriptor->OpenFlags = pfdDescriptor->OpenFlags;
+ INFO("requested operation: F_GETFD");
nRetVal = pfdDescriptor->FdFlags;
break;
}
case F_SETFD:
{
nRetVal = pfdDescriptor->FdFlags;
break;
}
case F_SETFD:
{
+ INFO("requested operation: F_SETFD");
pfdDescriptor->FdFlags = nThirdArg;
nRetVal = 0;
break;
pfdDescriptor->FdFlags = nThirdArg;
nRetVal = 0;
break;
+ INFO("requested operation: F_GETFL");
nRetVal = pfdDescriptor->OpenFlags;
break;
}
case F_SETFL:
{
nRetVal = pfdDescriptor->OpenFlags;
break;
}
case F_SETFL:
{
+ INFO("requested operation: F_SETFL");
pfdDescriptor->OpenFlags = nThirdArg;
nRetVal = 0;
break;
pfdDescriptor->OpenFlags = nThirdArg;
nRetVal = 0;
break;
+ INFO("requested operation: F_GETLK");
errno = EINVAL;
break;
}
case F_SETLK:
{
errno = EINVAL;
break;
}
case F_SETLK:
{
+ INFO("requested operation: F_SETLK");
errno = EINVAL;
break;
}
case F_SETLKW:
{
errno = EINVAL;
break;
}
case F_SETLKW:
{
+ INFO("requested operation: F_SETLKW");
errno = EINVAL;
break;
}
case F_NEWFD:
{
errno = EINVAL;
break;
}
case F_NEWFD:
{
+ INFO("requested operation: F_NEWFD");
/* allocate a new descriptor */
nRetVal = __fdtable_entry_add(pftFdTable, fildes, (__fildes_t *)pThirdArg, 0);
break;
/* allocate a new descriptor */
nRetVal = __fdtable_entry_add(pftFdTable, fildes, (__fildes_t *)pThirdArg, 0);
break;
+ INFO("requested operation: F_DELFD");
/* invalid return pointer */
if(pThirdArg == 0)
{
/* invalid return pointer */
if(pThirdArg == 0)
{
+ INFO("requested operation: F_GETALL");
/* invalid return pointer */
if(pThirdArg == 0)
{
/* invalid return pointer */
if(pThirdArg == 0)
{
/* return a copy of the file descriptor */
memcpy((__fildes_t *)pThirdArg, pfdDescriptor, sizeof(*pfdDescriptor));
nRetVal = 0;
/* return a copy of the file descriptor */
memcpy((__fildes_t *)pThirdArg, pfdDescriptor, sizeof(*pfdDescriptor));
nRetVal = 0;
+ INFO("requested operation: F_SETALL");
/* invalid file descriptor to copy attributes from */
if(pThirdArg == 0)
{
/* invalid file descriptor to copy attributes from */
if(pThirdArg == 0)
{
/* copy the attributes of file descriptor from the provided descriptor */
memcpy(pfdDescriptor, pThirdArg, sizeof(*pfdDescriptor));
nRetVal = 0;
/* copy the attributes of file descriptor from the provided descriptor */
memcpy(pfdDescriptor, pThirdArg, sizeof(*pfdDescriptor));
nRetVal = 0;
+ INFO("requested operation: F_GETXP");
/* invalid return pointer */
if(pThirdArg == 0)
{
/* invalid return pointer */
if(pThirdArg == 0)
{
/* return a pointer to the extra data associated to the descriptor */
*((void **)pThirdArg) = pfdDescriptor->ExtraData;
nRetVal = 0;
/* return a pointer to the extra data associated to the descriptor */
*((void **)pThirdArg) = pfdDescriptor->ExtraData;
nRetVal = 0;
+ INFO("requested operation: F_SETXP");
/* set the pointer to the extra data associated */
pfdDescriptor->ExtraData = pThirdArg;
nRetVal = 0;
/* set the pointer to the extra data associated */
pfdDescriptor->ExtraData = pThirdArg;
nRetVal = 0;
+ INFO("requested operation: F_GETXS");
nRetVal = pfdDescriptor->ExtraDataSize;
break;
}
case F_SETXS:
{
nRetVal = pfdDescriptor->ExtraDataSize;
break;
}
case F_SETXS:
{
+ INFO("requested operation: F_SETXS");
pfdDescriptor->ExtraDataSize = nThirdArg;
nRetVal = 0;
break;
pfdDescriptor->ExtraDataSize = nThirdArg;
nRetVal = 0;
break;
+ INFO("requested operation: F_GETFH");
/* invalid return pointer */
if(pThirdArg == 0)
{
/* invalid return pointer */
if(pThirdArg == 0)
{
+ INFO("requested operation: F_SETFH");
pfdDescriptor->FileHandle = pThirdArg;
nRetVal = 0;
break;
}
default:
pfdDescriptor->FileHandle = pThirdArg;
nRetVal = 0;
break;
}
default:
+ INFO("invalid operation requested");
errno = EINVAL;
}
/* unlock the environment */
__PdxReleasePdataLock();
errno = EINVAL;
}
/* unlock the environment */
__PdxReleasePdataLock();
+ INFO("environment unlocked");
-/* $Id: open.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
+/* $Id: open.c,v 1.3 2002/05/17 01:54:39 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
*/
/*
* COPYRIGHT: See COPYING in the top level directory
mode_t mFileMode;
#endif
int nFileNo;
mode_t mFileMode;
#endif
int nFileNo;
__fildes_t fdDescriptor;
/* translate file access flag */
__fildes_t fdDescriptor;
/* translate file access flag */
0,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
nCreateDisposition,
0,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
nCreateDisposition,
- FILE_SYNCHRONOUS_IO_NONALERT,
+ nCreateOptions | FILE_SYNCHRONOUS_IO_NONALERT,
-/* $Id: fdtable.c,v 1.3 2002/03/11 20:48:08 hyperion Exp $
+/* $Id: fdtable.c,v 1.4 2002/05/17 01:54:39 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
*/
/*
* COPYRIGHT: See COPYING in the top level directory
);
/* ... try to increase the size of the table */
);
/* ... try to increase the size of the table */
- pTemp = __realloc
- (
- fdtable->Descriptors,
- (nFileNo + 1) * sizeof(*fdtable->Descriptors)
- );
+ if(fdtable->AllocatedDescriptors * sizeof(*fdtable->Descriptors) == 0)
+ pTemp = __malloc((nFileNo + 1) * sizeof(*fdtable->Descriptors));
+ else
+ pTemp = __realloc
+ (
+ fdtable->Descriptors,
+ (nFileNo + 1) * sizeof(*fdtable->Descriptors)
+ );
/* reallocation failed */
if(pTemp == 0)
/* reallocation failed */
if(pTemp == 0)
-/* $Id: getpid.c,v 1.2 2002/02/20 09:17:58 hyperion Exp $
+/* $Id: getpid.c,v 1.3 2002/05/17 01:55:34 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
*/
/*
* COPYRIGHT: See COPYING in the top level directory
#include <ddk/ntddk.h>
#include <sys/types.h>
#include <unistd.h>
#include <ddk/ntddk.h>
#include <sys/types.h>
#include <unistd.h>
- return ((pid_t)NtCurrentTeb()->Cid.UniqueThread);
+ PROCESS_BASIC_INFORMATION pbiInfo;
+ NTSTATUS nErrCode;
+
+ nErrCode = NtQueryInformationProcess
+ (
+ NtCurrentProcess(),
+ ProcessBasicInformation,
+ &pbiInfo,
+ sizeof(pbiInfo),
+ NULL
+ );
+
+ if(!NT_SUCCESS(nErrCode))
+ {
+ errno = __status_to_errno(nErrCode);
+ return (0);
+ }
+
+ return (pbiInfo.UniqueProcessId);
+#if 0
+ return ((pid_t)NtCurrentTeb()->Cid.UniqueProcess);
+#endif
-/* $Id: write.c,v 1.3 2002/03/21 22:46:30 hyperion Exp $
+/* $Id: write.c,v 1.4 2002/05/17 01:54:39 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
*/
/*
* COPYRIGHT: See COPYING in the top level directory
return (0);
if(fcntl(fildes, F_GETALL, &fdDescriptor) == -1)
return (0);
if(fcntl(fildes, F_GETALL, &fdDescriptor) == -1)
+ {
+ ERR("fcntl() failed, errno %d", errno);
if((fdDescriptor.OpenFlags && O_APPEND) == O_APPEND)
{
TODO("move file pointer to the end");
}
if((fdDescriptor.OpenFlags && O_APPEND) == O_APPEND)
{
TODO("move file pointer to the end");
}
+ INFO("handle for descriptor %d is %d", fildes, fdDescriptor.FileHandle);
+
nErrCode = NtWriteFile
(
fdDescriptor.FileHandle,
nErrCode = NtWriteFile
(
fdDescriptor.FileHandle,
if(!NT_SUCCESS(nErrCode))
{
if(!NT_SUCCESS(nErrCode))
{
+ ERR("NtWriteFile() failed with status 0x%08X", nErrCode);
errno = __status_to_errno(nErrCode);
return (0);
}
errno = __status_to_errno(nErrCode);
return (0);
}