Ticket #305: o_nonblock.diff

File o_nonblock.diff, 1.5 KB (added by KO Myung-Hun, 10 years ago)

patch for o_nonblock support for a named pipe

  • src/emx/src/lib/sys/filehandles.c

    diff --git a/src/emx/src/lib/sys/filehandles.c b/src/emx/src/lib/sys/filehandles.c
    index 25b08b0..e879fab 100755
    a b static __LIBC_PFH fhGet(int fh)  
    12041204            if (!_fmode_bin)
    12051205                fLibc |= O_TEXT;
    12061206
     1207            /*
     1208             * Blocking flag for a named pipe.
     1209             */
     1210            if (!DosQueryNPHState((HFILE)fh, &fulMode) && (fulMode & NP_NOWAIT))
     1211                fLibc |= O_NONBLOCK;
     1212
    12071213
    12081214            /*
    12091215             * Allocate a new handle for this filehandle.
    int __libc_FHSetFlags(__LIBC_PFH pFH, int fh, unsigned fFlags)  
    13181324            rc = DosSetFHState(fh, fulNewState);
    13191325        }
    13201326    }
     1327    if (!rc && !DosQueryNPHState(fh, &fulState))
     1328    {
     1329        ULONG fulNewState;
     1330        LIBC_ASSERTM(     ((fulState & NP_NOWAIT) != 0 )
     1331                      ==  ((pFH->fFlags & O_NONBLOCK) != 0),
     1332                     "Nowait flags are out of sync for file hFile %d (%#x)! fulState=%08lx fFlags=%08x\n",
     1333                     fh, fh, fulState, pFH->fFlags);
     1334        if (fFlags & O_NONBLOCK)
     1335            fulNewState = fulState | NP_NOWAIT;
     1336        else
     1337            fulNewState = fulState & ~NP_NOWAIT;
     1338        if (fulNewState != fulState)
     1339        {
     1340            fulNewState &= NP_NOWAIT | NP_READMODE_MESSAGE; /* Turn off non-participating bits. */
     1341            rc = DosSetNPHState(fh, fulNewState);
     1342        }
     1343    }
    13211344    FS_RESTORE();
    13221345
    13231346    if (!rc)