Changeset 3372 for branches


Ignore:
Timestamp:
May 27, 2007, 12:37:44 PM (18 years ago)
Author:
bird
Message:

Fixes #166.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/libc-0.6/src/emx/src/lib/sys/tcpipver.c

    r2439 r3372  
    6262#define INCL_BASE
    6363#define INCL_FSMACROS
     64#define INCL_EXAPIS
    6465#include <os2emx.h>
    6566#include <InnoTekLIBC/sharedpm.h>
     
    171172
    172173static void TCPNAME(Cleanup)(void);
    173 static int  tcpipForkChild1(__LIBC_PFORKHANDLE pForkHandle, __LIBC_FORKOP enmOperation);
    174174
    175175
     
    210210static int TCPNAME(ops_Close)(PLIBCFH pFH, int fh)
    211211{
    212     LIBCLOG_ENTER("pFH=%p:{iSocket=%d} fh=%d\n", (void *)pFH, ((PLIBCSOCKETFH)pFH)->iSocket, fh);
     212    LIBCLOG_ENTER("pFH=%p:{.iSocket=%d} fh=%d\n", (void *)pFH, ((PLIBCSOCKETFH)pFH)->iSocket, fh);
    213213    PLIBCSOCKETFH   pSocketFH = (PLIBCSOCKETFH)pFH;
    214214    int             rc;
     
    235235                __libc_spmSocketRef(pSocketFH->iSocket);
    236236            }
     237            /** @todo deal with EALREADY, it will leave an unclosed and soon to be invalid handle behind... */
    237238        }
    238239    }
     
    249250         * Please note that removesocketfromlist returns a boolean success indicator and proably no errno.
    250251         */
     252        int iSavedTcpipErrno = TCPNAME(imp_sock_errno)();
     253        TCPNAME(imp_set_errno)(0);
    251254        rc = TCPNAME(imp_removesocketfromlist)(pSocketFH->iSocket);
    252255        if (!rc)
     
    255258            rc = -EBADF; /* this is an internal error, it should *NOT* happen! */
    256259        }
     260        else
     261            rc = 0;
     262        TCPNAME(imp_set_errno)(iSavedTcpipErrno);
    257263    }
    258264
    259265    /*
    260      * Unlink from our list.
     266     * Unlink from our list (rc list must correspond to __libc_FHClose!).
    261267     */
    262     if (rc != -EBADF && rc != -ENOTSOCK && rc != -EALREADY)
    263     {
     268    if (    !rc
     269        ||  rc == -EBADF
     270        ||  rc == -ENOTSOCK)
     271    {
     272        LIBCLOG_MSG("Unlinking pSocketFH=%p:{iSocket=%d} fh=%d\n", pSocketFH, pSocketFH->iSocket, fh);
    264273        _smutex_request(&gsmtxSockets);
    265274        if (pSocketFH->pNext)
     
    289298static int TCPNAME(ops_Read)(PLIBCFH pFH, int fh, void *pvBuf, size_t cbRead, size_t *pcbRead)
    290299{
    291     LIBCLOG_ENTER("pFH=%p:{iSocket=%d} fh=%d pvBuf=%p cbRead=%d pcbRead=%p\n",
     300    LIBCLOG_ENTER("pFH=%p:{.iSocket=%d} fh=%d pvBuf=%p cbRead=%d pcbRead=%p\n",
    292301                  (void *)pFH, ((PLIBCSOCKETFH)pFH)->iSocket, fh, pvBuf, cbRead, (void *)pcbRead);
    293302    PLIBCSOCKETFH   pSocketFH = (PLIBCSOCKETFH)pFH;
     
    321330static int TCPNAME(ops_Write)(PLIBCFH pFH, int fh, const void *pvBuf, size_t cbWrite, size_t *pcbWritten)
    322331{
    323     LIBCLOG_ENTER("pFH=%p:{iSocket=%d} fh=%d pvBuf=%p cbWrite=%d pcbWritten=%p\n",
     332    LIBCLOG_ENTER("pFH=%p:{.iSocket=%d} fh=%d pvBuf=%p cbWrite=%d pcbWritten=%p\n",
    324333                  (void *)pFH, ((PLIBCSOCKETFH)pFH)->iSocket, fh, pvBuf, cbWrite, (void *)pcbWritten);
    325334    PLIBCSOCKETFH   pSocketFH = (PLIBCSOCKETFH)pFH;
     
    357366{
    358367    PLIBCSOCKETFH  pFHSocket = (PLIBCSOCKETFH)pFH;
    359     LIBCLOG_ENTER("pFH=%p:{iSocket=%d} fh=%d pfhNew=%p\n", (void *)pFH, pFHSocket->iSocket, fh, (void *)pfhNew);
     368    LIBCLOG_ENTER("pFH=%p:{.iSocket=%d} fh=%d pfhNew=%p\n", (void *)pFH, pFHSocket->iSocket, fh, (void *)pfhNew);
    360369
    361370    /*
     
    391400static int TCPNAME(ops_FileControl)(PLIBCFH pFH, int fh, int iRequest, int iArg, int *prc)
    392401{
    393     LIBCLOG_ENTER("pFH=%p:{iSocket=%d} fh=%d iRequest=%#x iArg=%#x prc=%p\n",
     402    LIBCLOG_ENTER("pFH=%p:{.iSocket=%d} fh=%d iRequest=%#x iArg=%#x prc=%p\n",
    394403                  (void *)pFH, ((PLIBCSOCKETFH)pFH)->iSocket, fh, iRequest, iArg, (void *)prc);
    395404    int rc;
     
    423432                {
    424433                    rc = __libc_Back_ioFileControlStandard(pFH, fh, iRequest, iArg, prc);
    425                     if (rc) 
     434                    if (rc)
    426435                    {
    427436                        /* undo change on failure. */
     
    461470static int TCPNAME(ops_IOControl)(PLIBCFH pFH, int fh, int iIOControl, int iArg, int *prc)
    462471{
    463     LIBCLOG_ENTER("pFH=%p:{iSocket=%d} fh=%d iIOControl=%#x iArg=%#x prc=%p\n",
     472    LIBCLOG_ENTER("pFH=%p:{.iSocket=%d} fh=%d iIOControl=%#x iArg=%#x prc=%p\n",
    464473                  (void *)pFH, ((PLIBCSOCKETFH)pFH)->iSocket, fh, iIOControl, iArg, (void *)prc);
    465474    PLIBCSOCKETFH   pSocketFH = (PLIBCSOCKETFH)pFH;
     
    796805static int TCPNAME(ops_ForkChild)(struct __libc_FileHandle *pFH, int fh, __LIBC_PFORKHANDLE pForkHandle, __LIBC_FORKOP enmOperation)
    797806{
    798     LIBCLOG_ENTER("pFH=%p:{iSocket=%d} fh=%d\n", (void *)pFH, ((PLIBCSOCKETFH)pFH)->iSocket, fh);
     807    LIBCLOG_ENTER("pFH=%p:{.iSocket=%d} fh=%d\n", (void *)pFH, ((PLIBCSOCKETFH)pFH)->iSocket, fh);
    799808    PLIBCSOCKETFH   pSocketFH = (PLIBCSOCKETFH)pFH;
    800809    int rc = __libc_spmSocketRef(pSocketFH->iSocket);
     
    847856 *                      list for the current process.
    848857 *                      If clear we only increment the global reference counter.
    849  * @param   pfh         Where to store the filename.
     858 * @param   pfh         Where to store the file handle.
    850859 * @param   ppFHSocket  Where to store the allocated socket handle. Optional.
    851860 */
    852861int TCPNAMEG(AllocFHEx)(int fh, int iSocket, unsigned fFlags, int fNew, int *pfh, PLIBCSOCKETFH *ppFHSocket)
    853862{
    854     LIBCLOG_ENTER("iSocket=%d\n", iSocket);
     863    LIBCLOG_ENTER("fh=%d iSocket=%d fFlags=%#x fNew=%d pfh=%p:{%d} ppFHSocket=%p\n", fh, iSocket, fFlags, fNew, (void *)pfh, pfh ? *pfh : -2, (void *)ppFHSocket);
    855864    PLIBCFH         pFHLibc;
    856865    int rc = __libc_FHAllocate(fh, fFlags, sizeof(LIBCSOCKETFH), &gSocketOps, &pFHLibc, pfh);
     
    860869         * Init the handle.
    861870         */
    862         PLIBCSOCKETFH   pFH = (PLIBCSOCKETFH)pFHLibc;
     871        PLIBCSOCKETFH pFH = (PLIBCSOCKETFH)pFHLibc;
    863872        pFH->iSocket = iSocket;
    864873
     
    892901        if (ppFHSocket)
    893902            *ppFHSocket = pFH;
    894         LIBCLOG_RETURN_INT(0);
     903        LIBCLOG_RETURN_MSG(0, "ret 0 *pfh=%d *ppFHSocket=%p\n", pfh ? *pfh : -2, pFH);
    895904    }
    896905    LIBCLOG_ERROR_RETURN_P(rc);
     
    11981207        HMODULE hmod;
    11991208        char    szErr[16];
    1200         rc = DosLoadModule((PSZ)szErr, sizeof(szErr), (PCSZ)gszDllName, &hmod);
     1209        rc = DosLoadModuleEx((PSZ)szErr, sizeof(szErr), (PCSZ)gszDllName, &hmod);
    12011210        if (rc)
    12021211        {
     
    13741383             * Please note that removesocketfromlist is returning a boolean success indicator and probably no errno.
    13751384             */
     1385            TCPNAME(imp_set_errno)(0);
    13761386            rc = TCPNAME(imp_removesocketfromlist)(pFH->iSocket);
    13771387            LIBC_ASSERTM(rc == 1, "removesocketfromlist(%d) -> rc=%d sock_errno()->%d\n", pFH->iSocket, rc, TCPNAME(imp_sock_errno)());
     
    13841394}
    13851395
    1386 
    1387 #undef  __LIBC_LOG_GROUP
    1388 #define __LIBC_LOG_GROUP __LIBC_LOG_GRP_FORK
    1389 
    1390 _FORK_CHILD1(0xffffff00, tcpipForkChild1)
    1391 
    1392 /**
    1393  * Reload the DLL in the child process.
    1394  *
    1395  * @returns 0 on success.
    1396  * @returns negative errno on failure.
    1397  * @param   pForkHandle     Pointer to fork handle.
    1398  * @param   enmOperation    Callback operation.
    1399  */
    1400 static int tcpipForkChild1(__LIBC_PFORKHANDLE pForkHandle, __LIBC_FORKOP enmOperation)
    1401 {
    1402     LIBCLOG_ENTER("pForkHandle=%p enmOperation=%d\n", (void *)pForkHandle, enmOperation);
    1403     int rc;
    1404     switch (enmOperation)
    1405     {
    1406         case __LIBC_FORK_OP_FORK_CHILD:
    1407         {
    1408             rc = 0;
    1409             if (ghmod)
    1410                 rc = __libc_tcpipForkLoadModule(ghmod, gszDllName);
    1411             break;
    1412         }
    1413 
    1414         default:
    1415             rc = 0;
    1416             break;
    1417     }
    1418 
    1419     LIBCLOG_RETURN_INT(rc);
    1420 }
    1421 
    1422 
Note: See TracChangeset for help on using the changeset viewer.