Fixed some embarassing errors
authorKJK::Hyperion <hackbunny@reactos.org>
Fri, 17 May 2002 01:55:34 +0000 (01:55 +0000)
committerKJK::Hyperion <hackbunny@reactos.org>
Fri, 17 May 2002 01:55:34 +0000 (01:55 +0000)
svn path=/trunk/; revision=2961

posix/lib/psxdll/fcntl/fcntl.c
posix/lib/psxdll/fcntl/open.c
posix/lib/psxdll/misc/fdtable.c
posix/lib/psxdll/unistd/getpid.c
posix/lib/psxdll/unistd/write.c

index 2404587..30a83dc 100644 (file)
@@ -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
  */
 /*
  * COPYRIGHT:   See COPYING in the top level directory
@@ -35,19 +35,29 @@ int fcntl(int fildes, int cmd, ...)
 
  /* 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);
@@ -55,6 +65,7 @@ int fcntl(int fildes, int cmd, ...)
 
  /* 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);
@@ -75,12 +86,17 @@ int fcntl(int fildes, int 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);
     break;
     break;
+   }
 
    /* copy the open flags */
    pfdDupDescriptor->OpenFlags = pfdDescriptor->OpenFlags;
 
    /* copy the open flags */
    pfdDupDescriptor->OpenFlags = pfdDescriptor->OpenFlags;
@@ -147,12 +163,14 @@ int fcntl(int fildes, int cmd, ...)
 
   case F_GETFD:
   {
 
   case F_GETFD:
   {
+   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;
@@ -160,12 +178,14 @@ int fcntl(int fildes, int cmd, ...)
 
   case F_GETFL:
   {
 
   case F_GETFL:
   {
+   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;
@@ -173,24 +193,28 @@ int fcntl(int fildes, int cmd, ...)
 
   case F_GETLK:
   {
 
   case F_GETLK:
   {
+   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;
@@ -198,6 +222,7 @@ int fcntl(int fildes, int cmd, ...)
 
   case F_DELFD:
   {
 
   case F_DELFD:
   {
+   INFO("requested operation: F_DELFD");
    /* invalid return pointer */
    if(pThirdArg == 0)
    {
    /* invalid return pointer */
    if(pThirdArg == 0)
    {
@@ -214,6 +239,7 @@ int fcntl(int fildes, int cmd, ...)
 
   case F_GETALL:
   {
 
   case F_GETALL:
   {
+   INFO("requested operation: F_GETALL");
    /* invalid return pointer */
    if(pThirdArg == 0)
    {
    /* 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;
    /* return a copy of the file descriptor */
    memcpy((__fildes_t *)pThirdArg, pfdDescriptor, sizeof(*pfdDescriptor));
    nRetVal = 0;
+   
+   break;
   }
 
   case F_SETALL:
   {
   }
 
   case F_SETALL:
   {
+   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)
    {
@@ -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;
    /* copy the attributes of file descriptor from the provided descriptor */
    memcpy(pfdDescriptor, pThirdArg, sizeof(*pfdDescriptor));
    nRetVal = 0;
+   
+   break;
   }
 
   case F_GETXP:
   {
   }
 
   case F_GETXP:
   {
+   INFO("requested operation: F_GETXP");
    /* invalid return pointer */
    if(pThirdArg == 0)
    {
    /* 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;
    /* return a pointer to the extra data associated to the descriptor */
    *((void **)pThirdArg) = pfdDescriptor->ExtraData;
    nRetVal = 0;
+   
    break;
   }
 
   case F_SETXP:
   {
    break;
   }
 
   case F_SETXP:
   {
+   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;
@@ -265,12 +299,14 @@ int fcntl(int fildes, int cmd, ...)
 
   case F_GETXS:
   {
 
   case F_GETXS:
   {
+   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;
@@ -278,6 +314,7 @@ int fcntl(int fildes, int cmd, ...)
 
   case F_GETFH:
   {
 
   case F_GETFH:
   {
+   INFO("requested operation: F_GETFH");
    /* invalid return pointer */
    if(pThirdArg == 0)
    {
    /* invalid return pointer */
    if(pThirdArg == 0)
    {
@@ -293,17 +330,20 @@ int fcntl(int fildes, int cmd, ...)
 
   case F_SETFH:
   {
 
   case F_SETFH:
   {
+   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");
 
  return (nRetVal);
 }
 
  return (nRetVal);
 }
index ecc8043..922e7da 100644 (file)
@@ -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
  */
 /*
  * 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;
  mode_t            mFileMode;
 #endif
  int               nFileNo;
- __fdtable_t      *pftTable;
  __fildes_t        fdDescriptor;
 
  /* translate file access flag */
  __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,
   0,
   FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
   nCreateDisposition,
-  FILE_SYNCHRONOUS_IO_NONALERT,
+  nCreateOptions | FILE_SYNCHRONOUS_IO_NONALERT,
   NULL,
   NULL,
-  nCreateOptions
+  0
  );
 
  /* failure */
  );
 
  /* failure */
index e9c8d6e..5b28068 100644 (file)
@@ -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
  */
 /*
  * 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 */
   );
 
   /* ... 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)
index 4a701b3..a336a15 100644 (file)
@@ -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
  */
 /*
  * 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>
+#include <psx/errno.h>
 
 pid_t getpid(void)
 {
 
 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 */
 }
 
 /* EOF */
index 9182e26..2afec83 100644 (file)
@@ -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
  */
 /*
  * 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)
   return (0);
 
  if(fcntl(fildes, F_GETALL, &fdDescriptor) == -1)
+ {
+  ERR("fcntl() failed, errno %d", errno);
   return (0);
   return (0);
+ }
 
  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,
@@ -51,6 +56,7 @@ ssize_t write(int fildes, const void *buf, size_t nbyte)
 
  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);
  }