From: KJK::Hyperion Date: Fri, 17 May 2002 01:55:34 +0000 (+0000) Subject: Fixed some embarassing errors X-Git-Tag: backups/DBXSL@12427~102 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=d24e468cb0e23a855a6690718d719c09fde00c2f;ds=sidebyside Fixed some embarassing errors svn path=/trunk/; revision=2961 --- diff --git a/posix/lib/psxdll/fcntl/fcntl.c b/posix/lib/psxdll/fcntl/fcntl.c index 2404587c07d..30a83dce1af 100644 --- a/posix/lib/psxdll/fcntl/fcntl.c +++ b/posix/lib/psxdll/fcntl/fcntl.c @@ -1,4 +1,4 @@ -/* $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 @@ -35,19 +35,29 @@ int fcntl(int fildes, int cmd, ...) /* lock the environment */ __PdxAcquirePdataLock(); + INFO("environment locked"); /* 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 || - __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); @@ -55,6 +65,7 @@ int fcntl(int fildes, int cmd, ...) /* 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); @@ -75,12 +86,17 @@ int fcntl(int fildes, int cmd, ...) { int nDupFileNo; __fildes_t *pfdDupDescriptor; + + INFO("requested operation: F_DUPFD"); /* allocate the duplicated descriptor */ nDupFileNo = __fdtable_entry_add(pftFdTable, nThirdArg, 0, &pfdDupDescriptor); if(nDupFileNo) + { + ERR("__fdtable_entry_add() failed, errno %d", errno); break; + } /* copy the open flags */ pfdDupDescriptor->OpenFlags = pfdDescriptor->OpenFlags; @@ -147,12 +163,14 @@ int fcntl(int fildes, int cmd, ...) case F_GETFD: { + INFO("requested operation: F_GETFD"); nRetVal = pfdDescriptor->FdFlags; break; } case F_SETFD: { + INFO("requested operation: F_SETFD"); pfdDescriptor->FdFlags = nThirdArg; nRetVal = 0; break; @@ -160,12 +178,14 @@ int fcntl(int fildes, int cmd, ...) case F_GETFL: { + INFO("requested operation: F_GETFL"); nRetVal = pfdDescriptor->OpenFlags; break; } case F_SETFL: { + INFO("requested operation: F_SETFL"); pfdDescriptor->OpenFlags = nThirdArg; nRetVal = 0; break; @@ -173,24 +193,28 @@ int fcntl(int fildes, int cmd, ...) case F_GETLK: { + INFO("requested operation: F_GETLK"); errno = EINVAL; break; } case F_SETLK: { + INFO("requested operation: F_SETLK"); errno = EINVAL; break; } case F_SETLKW: { + INFO("requested operation: F_SETLKW"); 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; @@ -198,6 +222,7 @@ int fcntl(int fildes, int cmd, ...) case F_DELFD: { + INFO("requested operation: F_DELFD"); /* invalid return pointer */ if(pThirdArg == 0) { @@ -214,6 +239,7 @@ int fcntl(int fildes, int cmd, ...) case F_GETALL: { + INFO("requested operation: F_GETALL"); /* invalid return pointer */ if(pThirdArg == 0) { @@ -224,10 +250,13 @@ int fcntl(int fildes, int cmd, ...) /* return a copy of the file descriptor */ memcpy((__fildes_t *)pThirdArg, pfdDescriptor, sizeof(*pfdDescriptor)); nRetVal = 0; + + break; } case F_SETALL: { + INFO("requested operation: F_SETALL"); /* invalid file descriptor to copy attributes from */ if(pThirdArg == 0) { @@ -238,10 +267,13 @@ int fcntl(int fildes, int cmd, ...) /* copy the attributes of file descriptor from the provided descriptor */ memcpy(pfdDescriptor, pThirdArg, sizeof(*pfdDescriptor)); nRetVal = 0; + + break; } case F_GETXP: { + INFO("requested operation: F_GETXP"); /* invalid return pointer */ if(pThirdArg == 0) { @@ -252,11 +284,13 @@ int fcntl(int fildes, int cmd, ...) /* return a pointer to the extra data associated to the descriptor */ *((void **)pThirdArg) = pfdDescriptor->ExtraData; nRetVal = 0; + break; } case F_SETXP: { + INFO("requested operation: F_SETXP"); /* set the pointer to the extra data associated */ pfdDescriptor->ExtraData = pThirdArg; nRetVal = 0; @@ -265,12 +299,14 @@ int fcntl(int fildes, int cmd, ...) case F_GETXS: { + INFO("requested operation: F_GETXS"); nRetVal = pfdDescriptor->ExtraDataSize; break; } case F_SETXS: { + INFO("requested operation: F_SETXS"); pfdDescriptor->ExtraDataSize = nThirdArg; nRetVal = 0; break; @@ -278,6 +314,7 @@ int fcntl(int fildes, int cmd, ...) case F_GETFH: { + INFO("requested operation: F_GETFH"); /* invalid return pointer */ if(pThirdArg == 0) { @@ -293,17 +330,20 @@ int fcntl(int fildes, int cmd, ...) case F_SETFH: { + INFO("requested operation: F_SETFH"); pfdDescriptor->FileHandle = pThirdArg; nRetVal = 0; break; } default: + INFO("invalid operation requested"); errno = EINVAL; } /* unlock the environment */ __PdxReleasePdataLock(); + INFO("environment unlocked"); return (nRetVal); } diff --git a/posix/lib/psxdll/fcntl/open.c b/posix/lib/psxdll/fcntl/open.c index ecc8043417e..922e7da1355 100644 --- a/posix/lib/psxdll/fcntl/open.c +++ b/posix/lib/psxdll/fcntl/open.c @@ -1,4 +1,4 @@ -/* $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 @@ -52,7 +52,6 @@ int _Wopen(const wchar_t *path, int oflag, ...) mode_t mFileMode; #endif int nFileNo; - __fdtable_t *pftTable; __fildes_t fdDescriptor; /* translate file access flag */ @@ -131,9 +130,9 @@ int _Wopen(const wchar_t *path, int oflag, ...) 0, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, nCreateDisposition, - FILE_SYNCHRONOUS_IO_NONALERT, + nCreateOptions | FILE_SYNCHRONOUS_IO_NONALERT, NULL, - nCreateOptions + 0 ); /* failure */ diff --git a/posix/lib/psxdll/misc/fdtable.c b/posix/lib/psxdll/misc/fdtable.c index e9c8d6e1361..5b28068e1a1 100644 --- a/posix/lib/psxdll/misc/fdtable.c +++ b/posix/lib/psxdll/misc/fdtable.c @@ -1,4 +1,4 @@ -/* $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 @@ -155,11 +155,14 @@ int __fdtable_entry_add(__fdtable_t * fdtable, int fileno, __fildes_t * fildes, ); /* ... 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) diff --git a/posix/lib/psxdll/unistd/getpid.c b/posix/lib/psxdll/unistd/getpid.c index 4a701b3f826..a336a155ccd 100644 --- a/posix/lib/psxdll/unistd/getpid.c +++ b/posix/lib/psxdll/unistd/getpid.c @@ -1,4 +1,4 @@ -/* $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 @@ -13,10 +13,32 @@ #include #include #include +#include pid_t getpid(void) { - 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 } /* EOF */ diff --git a/posix/lib/psxdll/unistd/write.c b/posix/lib/psxdll/unistd/write.c index 9182e26c6be..2afec8388c7 100644 --- a/posix/lib/psxdll/unistd/write.c +++ b/posix/lib/psxdll/unistd/write.c @@ -1,4 +1,4 @@ -/* $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 @@ -29,13 +29,18 @@ ssize_t write(int fildes, const void *buf, size_t nbyte) return (0); if(fcntl(fildes, F_GETALL, &fdDescriptor) == -1) + { + ERR("fcntl() failed, errno %d", errno); return (0); + } 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, @@ -51,6 +56,7 @@ ssize_t write(int fildes, const void *buf, size_t nbyte) if(!NT_SUCCESS(nErrCode)) { + ERR("NtWriteFile() failed with status 0x%08X", nErrCode); errno = __status_to_errno(nErrCode); return (0); }