POSIX+ says goodbye and leaves. It used to be fun, now it's just painful
[reactos.git] / posix / lib / psxdll / fcntl / fcntl.c
diff --git a/posix/lib/psxdll/fcntl/fcntl.c b/posix/lib/psxdll/fcntl/fcntl.c
deleted file mode 100644 (file)
index 30a83dc..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/* $Id: fcntl.c,v 1.5 2002/05/17 01:54:39 hyperion Exp $
- */
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS POSIX+ Subsystem
- * FILE:        subsys/psx/lib/psxdll/fcntl/fcntl.c
- * PURPOSE:     File control
- * PROGRAMMER:  KJK::Hyperion <noog@libero.it>
- * UPDATE HISTORY:
- *              13/02/2002: Created
- *              15/02/2002: Implemented fcntl() (KJK::Hyperion)
- */
-
-#include <ddk/ntddk.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdarg.h>
-#include <psx/errno.h>
-#include <psx/stdlib.h>
-#include <psx/fdtable.h>
-#include <psx/pdata.h>
-#include <psx/debug.h>
-
-int fcntl(int fildes, int cmd, ...)
-{
- __fdtable_t *pftFdTable;
- __fildes_t  *pfdDescriptor;
- NTSTATUS     nErrCode;
- int          nRetVal;
- int          nThirdArg;
- void        *pThirdArg;
- va_list      vlArgs;
-
- /* 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 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 ||
-  (
-   (cmd != F_NEWFD) &&
-   (
-    __fdtable_entry_isavail(pftFdTable, fildes) == 0 ||
-    __fdtable_entry_get(pftFdTable, fildes) == 0
-   )
-  )
- )
- {
-  INFO("invalid file descriptor");
-  errno = EBADF;
-  __PdxReleasePdataLock();
-  return (-1);
- }
-
- /* 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);
- nThirdArg = va_arg(vlArgs, int);
- va_end(vlArgs);
-
- /* get third argument as pointer */
- va_start(vlArgs, cmd);
- pThirdArg = va_arg(vlArgs, void *);
- va_end(vlArgs);
-
- /* initialize return value */
- nRetVal = -1;
-
- switch(cmd)
- {
-  case F_DUPFD:
-  {
-   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;
-
-   /* clear the FD_CLOEXEC flag */
-   pfdDupDescriptor->FdFlags = pfdDescriptor->FdFlags & ~FD_CLOEXEC;
-
-   /* duplicate the extra data */
-   if(pfdDescriptor->ExtraDataSize != 0 && pfdDescriptor->ExtraData != 0)
-   {
-    /* allocate space for the duplicated extra data */
-    pfdDupDescriptor->ExtraDataSize = pfdDescriptor->ExtraDataSize;
-    pfdDupDescriptor->ExtraData = __malloc(pfdDupDescriptor->ExtraDataSize);
-
-    /* failure */
-    if(pfdDupDescriptor->ExtraData == 0)
-    {
-     errno = ENOMEM;
-     break;
-    }
-
-    /* copy the extra data */
-    memcpy(pfdDupDescriptor->ExtraData, pfdDescriptor->ExtraData, pfdDupDescriptor->ExtraDataSize);
-    INFO
-    (
-     "copied %u bytes from 0x%08X into 0x%08X",
-     pfdDupDescriptor->ExtraDataSize,
-     pfdDescriptor->ExtraData,
-     pfdDupDescriptor->ExtraData
-    );
-   }
-
-   /* duplicate the handle */
-   nErrCode = NtDuplicateObject
-   (
-    NtCurrentProcess(),
-    pfdDescriptor->FileHandle,
-    NtCurrentProcess(),
-    &pfdDupDescriptor->FileHandle,
-    0,
-    0,
-    DUPLICATE_SAME_ACCESS /* | DUPLICATE_SAME_ATTRIBUTES */
-   );
-
-   /* failure */
-   if(!NT_SUCCESS(nErrCode))
-   {
-    __free(pfdDupDescriptor->ExtraData);
-    errno = __status_to_errno(nErrCode);
-    break;
-   }
-
-   INFO
-   (
-    "duplicated handle 0x%08X into handle 0x%08X",
-    pfdDescriptor->FileHandle,
-    pfdDupDescriptor->FileHandle
-   );
-
-   /* return the duplicated file number */
-   nRetVal = nDupFileNo;
-   break;
-  }
-
-  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;
-  }
-
-  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;
-  }
-
-  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;
-  }
-
-  case F_DELFD:
-  {
-   INFO("requested operation: F_DELFD");
-   /* invalid return pointer */
-   if(pThirdArg == 0)
-   {
-    errno = EINVAL;
-    break;
-   }
-
-   memcpy((__fildes_t *)pThirdArg, pfdDescriptor, sizeof(*pfdDescriptor));
-
-   /* remove file descriptor */
-   nRetVal = __fdtable_entry_remove(pftFdTable, fildes);
-
-  }
-
-  case F_GETALL:
-  {
-   INFO("requested operation: F_GETALL");
-   /* invalid return pointer */
-   if(pThirdArg == 0)
-   {
-    errno = EINVAL;
-    break;
-   }
-
-   /* 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)
-   {
-    errno = EINVAL;
-    break;
-   }
-
-   /* 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)
-   {
-    errno = EINVAL;
-    break;
-   }
-
-   /* 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;
-   break;
-  }
-
-  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;
-  }
-
-  case F_GETFH:
-  {
-   INFO("requested operation: F_GETFH");
-   /* invalid return pointer */
-   if(pThirdArg == 0)
-   {
-    errno = EINVAL;
-    break;
-   }
-
-   /* return the handle associated to the descriptor */
-   *((void **)pThirdArg) = pfdDescriptor->FileHandle;
-   nRetVal = 0;
-   break;
-  }
-
-  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);
-}
-
-/* EOF */
\ No newline at end of file