int32_t red_open()

in FreeRTOS-Plus/Source/Reliance-Edge/posix/posix.c [809:857]


int32_t red_open(
    const char *pszPath,
    uint32_t    ulOpenMode)
{
    int32_t     iFildes = -1;   /* Init'd to quiet warnings. */
    REDSTATUS   ret;

  #if REDCONF_READ_ONLY == 1
    if(ulOpenMode != RED_O_RDONLY)
    {
        ret = -RED_EROFS;
    }
  #else
    if(    (ulOpenMode != (ulOpenMode & RED_O_MASK))
        || ((ulOpenMode & (RED_O_RDONLY|RED_O_WRONLY|RED_O_RDWR)) == 0U)
        || (((ulOpenMode & RED_O_RDONLY) != 0U) && ((ulOpenMode & (RED_O_WRONLY|RED_O_RDWR)) != 0U))
        || (((ulOpenMode & RED_O_WRONLY) != 0U) && ((ulOpenMode & (RED_O_RDONLY|RED_O_RDWR)) != 0U))
        || (((ulOpenMode & RED_O_RDWR) != 0U) && ((ulOpenMode & (RED_O_RDONLY|RED_O_WRONLY)) != 0U))
        || (((ulOpenMode & (RED_O_TRUNC|RED_O_CREAT|RED_O_EXCL)) != 0U) && ((ulOpenMode & RED_O_RDONLY) != 0U))
        || (((ulOpenMode & RED_O_EXCL) != 0U) && ((ulOpenMode & RED_O_CREAT) == 0U)))
    {
        ret = -RED_EINVAL;
    }
  #if REDCONF_API_POSIX_FTRUNCATE == 0
    else if((ulOpenMode & RED_O_TRUNC) != 0U)
    {
        ret = -RED_EINVAL;
    }
  #endif
  #endif
    else
    {
        ret = PosixEnter();
    }

    if(ret == 0)
    {
        ret = FildesOpen(pszPath, ulOpenMode, FTYPE_EITHER, &iFildes);

        PosixLeave();
    }

    if(ret != 0)
    {
        iFildes = PosixReturn(ret);
    }

    return iFildes;
}