Changeset 2260 for trunk


Ignore:
Timestamp:
Jul 18, 2005, 3:15:18 AM (20 years ago)
Author:
bird
Message:

o Started fixing exec() backend.
o Fixed some more mktime / localtime bugs.
o Fixed crash on simple LIBC_ASSERT() caused by NULL format string.
o Generate device numbers for devices and pipes too.
o Fixed mixup of Dev and Inode during filehandle inheritance.
o Fixed dup and dup2 bug in relation to the FD_CLOEXEC clearing.
o Fixed bug in codepage normalization during setlocale().
o Fixed bug in regex where the lock was overwritten after initialization.
o Switch the glibc locks to smutex to avoid leaking event semaphores.
o Added _smutex_try_request().

Location:
trunk/src/emx
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/ChangeLog.LIBC

    • Property cvs2svn:cvs-rev changed from 1.106 to 1.107
    r2259 r2260  
    99        o Fixed a few smaller issues.
    1010        o Started fixing exec() backend.
     11        o Fixed some more mktime / localtime bugs.
     12        o Fixed crash on simple LIBC_ASSERT() caused by NULL format string.
     13        o Generate device numbers for devices and pipes too.
     14        o Fixed mixup of Dev and Inode during filehandle inheritance.
     15        o Fixed __dup and __dup2 bug in relation to the FD_CLOEXEC clearing.
     16        o Fixed bug in codepage normalization during setlocale().
     17        o Fixed bug in regex where the lock was overwritten after initialization.
     18        o Switch the glibc locks to smutex to avoid leaking event semaphores.
     19        o Added _smutex_try_request().
    1120
    12212005-07-11: knut st. osmundsen <bird-gccos2-spam@anduin.net>
  • trunk/src/emx/include/InnoTekLIBC/logstrict.h

    • Property cvs2svn:cvs-rev changed from 1.14 to 1.15
    r2259 r2260  
    154154#define LIBCLOG_RETURN_INT(rc)          LIBCLOG_RETURN_MSG((rc), "ret %d (%#x)\n", (rc), (rc))
    155155/** Macro to log an unsigned int return and do the return. */
    156 #define LIBCLOG_RETURN_UINT(rc)         LIBCLOG_RETURN_MSG((rc), "ret %u (%#x)\n", (rc), (rc));
     156#define LIBCLOG_RETURN_UINT(rc)         LIBCLOG_RETURN_MSG((rc), "ret %u (%#x)\n", (rc), (rc))
    157157/** Macro to log an long int return and do the return. */
    158 #define LIBCLOG_RETURN_LONG(rc)         LIBCLOG_RETURN_MSG((rc), "ret %ld (%#lx)\n", (rc), (rc));
     158#define LIBCLOG_RETURN_LONG(rc)         LIBCLOG_RETURN_MSG((rc), "ret %ld (%#lx)\n", (rc), (rc))
    159159/** Macro to log an unsigned long int return and do the return. */
    160 #define LIBCLOG_RETURN_ULONG(rc)        LIBCLOG_RETURN_MSG((rc), "ret %lu (%#lx)\n", (rc), (rc));
     160#define LIBCLOG_RETURN_ULONG(rc)        LIBCLOG_RETURN_MSG((rc), "ret %lu (%#lx)\n", (rc), (rc))
    161161/** Macro to log a pointer return and do the return. */
    162 #define LIBCLOG_RETURN_P(rc)            LIBCLOG_RETURN_MSG((rc), "ret %p\n", (void*)(rc));
     162#define LIBCLOG_RETURN_P(rc)            LIBCLOG_RETURN_MSG((rc), "ret %p\n", (void*)(rc))
    163163
    164164
     
    182182#define LIBCLOG_ERROR_RETURN_INT(rc)          LIBCLOG_ERROR_RETURN_MSG((rc), "ret %d (%#x)\n", (rc), (rc))
    183183/** Macro to log an unsigned int return user error and do the return. */
    184 #define LIBCLOG_ERROR_RETURN_UINT(rc)         LIBCLOG_ERROR_RETURN_MSG((rc), "ret %u (%#x)\n", (rc), (rc));
     184#define LIBCLOG_ERROR_RETURN_UINT(rc)         LIBCLOG_ERROR_RETURN_MSG((rc), "ret %u (%#x)\n", (rc), (rc))
    185185/** Macro to log an long int return user error and do the return. */
    186 #define LIBCLOG_ERROR_RETURN_LONG(rc)         LIBCLOG_ERROR_RETURN_MSG((rc), "ret %ld (%#lx)\n", (rc), (rc));
     186#define LIBCLOG_ERROR_RETURN_LONG(rc)         LIBCLOG_ERROR_RETURN_MSG((rc), "ret %ld (%#lx)\n", (rc), (rc))
    187187/** Macro to log an unsigned long int return user error and do the return. */
    188 #define LIBCLOG_ERROR_RETURN_ULONG(rc)        LIBCLOG_ERROR_RETURN_MSG((rc), "ret %lu (%#lx)\n", (rc), (rc));
     188#define LIBCLOG_ERROR_RETURN_ULONG(rc)        LIBCLOG_ERROR_RETURN_MSG((rc), "ret %lu (%#lx)\n", (rc), (rc))
    189189/** Macro to log a pointer return user error and do the return. */
    190 #define LIBCLOG_ERROR_RETURN_P(rc)            LIBCLOG_ERROR_RETURN_MSG((rc), "ret %p\n", (void*)(rc));
     190#define LIBCLOG_ERROR_RETURN_P(rc)            LIBCLOG_ERROR_RETURN_MSG((rc), "ret %p\n", (void*)(rc))
    191191
    192192
  • trunk/src/emx/include/sys/smutex.h

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r2259 r2260  
    2929}
    3030
     31static __inline__ int _smutex_try_request (__volatile__ _smutex *sem)
     32{
     33  return __cxchg (sem, 1) == 0;
     34}
     35
    3136
    3237static __inline__ void _smutex_release (__volatile__ _smutex *sem)
  • trunk/src/emx/src/lib/lgpl/posix/regcomp.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r2259 r2260  
    780780  preg->used = sizeof (re_dfa_t);
    781781
    782   __libc_lock_init (dfa->lock);
     782  /* __libc_lock_init (dfa->lock); - why init before memsetting the whole thing? */
    783783
    784784  err = init_dfa (dfa, length);
     
    790790      return err;
    791791    }
     792  __libc_lock_init (dfa->lock); /* bird */
     793
    792794#ifdef DEBUG
    793795  dfa->re_str = re_malloc (char, length + 1);
  • trunk/src/emx/src/lib/lgpl/sysdeps/os2/bits/libc-lock.h

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.2
    r2259 r2260  
    2121#define _BITS_LIBC_LOCK_H 1
    2222
     23#include <InnoTekLIBC/thread.h>
     24
     25#if 1 /* There is a hev leak problem with using fmutexes. */
     26#include <sys/smutex.h>
     27
     28typedef _smutex                         __libc_lock_t;
     29#define __libc_lock_define(CLASS,NAME) \
     30  CLASS __libc_lock_t NAME;
     31#define __libc_lock_define_initialized(CLASS,NAME) \
     32  CLASS __libc_lock_t NAME = 0;
     33#define __libc_lock_init(NAME)          (NAME) = 0
     34#define __libc_lock_fini(NAME)          (NAME) = 0
     35#define __libc_lock_lock(NAME)          _smutex_request(&(NAME))
     36#define __libc_lock_trylock(NAME)       (!_smutex_try_request(&(NAME)))
     37#define __libc_lock_unlock(NAME)        _smutex_release(&(NAME))
     38
     39#else
     40
    2341#include <sys/fmutex.h>
    24 #include <InnoTekLIBC/thread.h>
    2542
    2643typedef _fmutex                         __libc_lock_t;
     
    3249#define __libc_lock_fini(NAME)          _fmutex_close(&(NAME))
    3350#define __libc_lock_lock(NAME)          _fmutex_request(&(NAME), 0)
    34 #define __libc_lock_trylock(NAME)       _fmutex_reqeust(&(NAME),  _FMR_NOWAIT)
     51#define __libc_lock_trylock(NAME)       _fmutex_request(&(NAME),  _FMR_NOWAIT)
    3552#define __libc_lock_unlock(NAME)        _fmutex_release(&(NAME))
     53#endif
    3654
    3755
  • trunk/src/emx/src/lib/locale/setlocale.c

    • Property cvs2svn:cvs-rev changed from 1.24 to 1.25
    r2259 r2260  
    13111311     * Create locale object.
    13121312     */
    1313     if (IS_POSIX_LOCALE(pszLocale))
     1313    if (IS_C_LOCALE(pszLocale) || IS_POSIX_LOCALE(pszLocale))
    13141314        rc = UniCreateLocaleObject(UNI_MBS_STRING_POINTER, gszC, plobj);
    13151315    else
     
    13171317    if (rc)
    13181318    {
    1319         LIBC_ASSERTM_FAILED("UniCreateLocaleObject(,%p:{%s},) -> rc=%d\n", pszLocale, pszLocale, rc);
     1319        LIBCLOG_ERROR("UniCreateLocaleObject(,%p:{%s},) -> rc=%d\n", pszLocale, pszLocale, rc);
    13201320        rc = -unierr2errno(rc);
    1321         LIBCLOG_RETURN_INT(rc);
     1321        LIBCLOG_ERROR_RETURN_INT(rc);
    13221322    }
    13231323
     
    13331333            if (pszCodepageActual)
    13341334            {
    1335                 Ucs2Sb(ucsCodepage, pszCodepageActual, UniStrlen(ucsCodepage) + 1);
     1335                size_t cchCodepageActual = UniStrlen(ucsCodepage);
     1336                Ucs2Sb(ucsCodepage, pszCodepageActual, cchCodepageActual + 1);
    13361337
    13371338                /*
    13381339                 * For some common codeset specs we'll normalize the naming.
    13391340                 */
    1340                 if (!strstr(pszCodepageActual,
    1341                             "ibm-1208" "Ibm-1208" "IBm-1208" "IBM-1208" "IbM-1208" "iBm-1208" "iBM-1208" "ibM-1208"
    1342                             "utf-8" "Utf-8" "UTf-8" "UTF-8" "UtF-8" "uTf-8" "uTF-8" "utF-8"
    1343                             "utf8" "Utf8" "UTf8" "UTF8" "UtF8" "uTf8" "uTF8" "utF8"))
     1341                const char *psz;
     1342                if ((psz = strstr(pszCodepageActual,
     1343                                  "ibm-1208!" "Ibm-1208!" "IBm-1208!" "IBM-1208!" "IbM-1208!" "iBm-1208!" "iBM-1208!" "ibM-1208!"
     1344                                  "utf-8!"    "Utf-8!"    "UTf-8!"    "UTF-8!"    "UtF-8!"    "uTf-8!"    "uTF-8!"    "utF-8!"
     1345                                  "utf8!"     "Utf8!"     "UTf8!"     "UTF8!"     "UtF8!"     "uTf8!"     "uTF8!"     "utF8!")) != NULL
     1346                    && psz[cchCodepageActual] == '!')
    13441347                    memcpy(pszCodepageActual, "UTF-8", sizeof("UTF-8"));
    1345                 else if (!strstr(pszCodepageActual,
    1346                                  "ibm-1200" "Ibm-1200" "IBm-1200" "IBM-1200" "IbM-1200" "iBm-1200" "iBM-1200" "ibM-1200"
    1347                                  "ucs-2" "Ucs-2" "UCs-2" "UCS-2" "UcS-2" "uCs-2" "uCS-2" "ucS-2"
    1348                                  "ucs2" "Ucs2" "UCs2" "UCS2" "UcS2" "uCs2" "uCS2" "ucS2"))
     1348                else if ((psz = strstr(pszCodepageActual,
     1349                                       "ibm-1200!" "Ibm-1200!" "IBm-1200!" "IBM-1200!" "IbM-1200!" "iBm-1200!" "iBM-1200!" "ibM-1200!"
     1350                                       "ucs-2!"    "Ucs-2!"    "UCs-2!"    "UCS-2!"    "UcS-2!"    "uCs-2!"    "uCS-2!"    "ucS-2!"
     1351                                       "ucs2!"     "Ucs2!"     "UCs2!"     "UCS2!"     "UcS2!"     "uCs2!"     "uCS2!"     "ucS2!")) != NULL
     1352                         && psz[cchCodepageActual] == '!')
    13491353                    memcpy(pszCodepageActual, "UCS-2", sizeof("UCS-2"));
    13501354            }
     
    13531357        }
    13541358
    1355         LIBC_ASSERTM_FAILED("UniCreateUconvObject(%ls,) -> rc=%d\n", (wchar_t *)ucsCodepage, rc);
     1359        LIBCLOG_ERROR("UniCreateUconvObject(%ls,) -> rc=%d\n", (wchar_t *)ucsCodepage, rc);
    13561360        rc = -unierr2errno(rc);
    13571361    }
    13581362
    13591363    UniFreeUconvObject(*puobj);
    1360     LIBCLOG_RETURN_INT(rc);
     1364    LIBCLOG_ERROR_RETURN_INT(rc);
    13611365}
    13621366
     
    14231427            else
    14241428            {
    1425                 LIBC_ASSERTM_FAILED("UniQueryLocaleInfo -> %d\n", rc);
     1429                LIBCLOG_ERROR("UniQueryLocaleInfo -> %d\n", rc);
    14261430                rc = -unierr2errno(rc);
    14271431            }
  • trunk/src/emx/src/lib/process/tls.c

    • Property cvs2svn:cvs-rev changed from 1.7 to 1.8
    r2259 r2260  
    8888    if (__atomic_increment_max(&gcTLSAllocated, __LIBC_TLS_MAX))
    8989    {
    90         LIBC_ASSERTM_FAILED("Out of TLS entries! cur=%d max=%d\n", gcTLSAllocated, __LIBC_TLS_MAX);
    91         LIBCLOG_RETURN_INT(-1);
     90        errno -ENOMEM;
     91        LIBCLOG_ERROR_RETURN(-1, "ret -1 - Out of TLS entries! cur=%d max=%d\n", gcTLSAllocated, __LIBC_TLS_MAX);
    9292    }
    9393
  • trunk/src/emx/src/lib/sys/DosEx.c

    • Property cvs2svn:cvs-rev changed from 1.9 to 1.10
    r2259 r2260  
    302302    gcbPools       += cb;
    303303
    304     LIBCLOG_ERROR_RETURN_INT(0);
     304    LIBCLOG_RETURN_INT(0);
    305305}
    306306
  • trunk/src/emx/src/lib/sys/__dup.c

    • Property cvs2svn:cvs-rev changed from 1.9 to 1.10
    r2259 r2260  
    1212#include "syscalls.h"
    1313#include "b_fs.h"
     14#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_IO
     15#include <InnoTekLIBC/logstrict.h>
    1416
    1517int __dup(int fh)
     
    6466
    6567                /*
    66                  * Clear the FD_CLOEXEC flag as per SuS.
     68                 * OS/2 does, as SuS specifies, clear the noinherit flag. So, we update
     69                 * the flags of the new handle and in strict mode call __libc_FHSetFlags
     70                 * to invoke the out of sync check in there.
    6771                 */
    68                 unsigned fFlags = pFH->fFlags;
    69                 if (fFlags & ((FD_CLOEXEC << __LIBC_FH_FDFLAGS_SHIFT) | O_NOINHERIT))
    70                 {
    71                     fFlags &= ~((FD_CLOEXEC << __LIBC_FH_FDFLAGS_SHIFT) | O_NOINHERIT);
    72                     __libc_FHSetFlags(pFH, hNew,fFlags);
    73                 }
     72                pFHNew->fFlags &= ~((FD_CLOEXEC << __LIBC_FH_FDFLAGS_SHIFT) | O_NOINHERIT);
     73                LIBC_ASSERT(!__libc_FHSetFlags(pFHNew, hNew, pFHNew->fFlags));
    7474            }
    7575            else
  • trunk/src/emx/src/lib/sys/__dup2.c

    • Property cvs2svn:cvs-rev changed from 1.8 to 1.9
    r2259 r2260  
    1111#include "syscalls.h"
    1212#include "b_fs.h"
     13#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_IO
     14#include <InnoTekLIBC/logstrict.h>
    1315
    1416int __dup2(int fh, int fhNew)
     
    9799
    98100                /*
    99                  * Clear the FD_CLOEXEC flag as per SuS.
     101                 * OS/2 does, as SuS specifies, clear the noinherit flag. So, we update
     102                 * the flags of the new handle and in strict mode call __libc_FHSetFlags
     103                 * to invoke the out of sync check in there.
    100104                 */
    101                 unsigned fFlags = pFH->fFlags;
    102                 if (fFlags & ((FD_CLOEXEC << __LIBC_FH_FDFLAGS_SHIFT) | O_NOINHERIT))
    103                 {
    104                     fFlags &= ~((FD_CLOEXEC << __LIBC_FH_FDFLAGS_SHIFT) | O_NOINHERIT);
    105                     __libc_FHSetFlags(pFH, hNew,fFlags);
    106                 }
     105                pFHNew->fFlags &= ~((FD_CLOEXEC << __LIBC_FH_FDFLAGS_SHIFT) | O_NOINHERIT);
     106                LIBC_ASSERT(!__libc_FHSetFlags(pFHNew, hNew, pFHNew->fFlags));
    107107            }
    108108            else
  • trunk/src/emx/src/lib/sys/__spawnve.c

    • Property cvs2svn:cvs-rev changed from 1.18 to 1.19
    r2259 r2260  
    502502                         * Ignore SIGCHLD signal.
    503503                         */
    504 
     504                        /** @todo proxy job control */
     505                        bsd_signal(SIGCHLD, SIG_DFL);
     506                        bsd_signal(SIGSTOP, SIG_DFL);
     507                        bsd_signal(SIGTSTP, SIG_DFL);
     508                        bsd_signal(SIGCONT, SIG_DFL);
    505509
    506510                        /*
     
    509513                        pid_t pid = resc.codeTerminate;
    510514                        LIBCLOG_MSG("Calling __libc_Back_processWait(P_PID,%d,,WEXITED,NULL)\n", pid);
    511                         pid_t pidEnded;
    512515                        for (;;)
    513516                        {
     
    515518                            do
    516519                                /** @todo proxy job control */
    517                                 pidEnded = __libc_Back_processWait(P_PID, pid, &SigInfo, WEXITED, NULL);
    518                             while (pidEnded == -EINTR);
    519                             if (pidEnded <= 0)
     520                                rc = __libc_Back_processWait(P_PID, pid, &SigInfo, WEXITED, NULL);
     521                            while (rc == -EINTR);
     522                            if (rc < 0)
    520523                                break;
    521                             LIBCLOG_MSG("__libc_Back_processWait(P_PID,%d,,WEXITED,NULL) returned pidEnded=%d si_code=%d si_status=%#x (%d)\n",
    522                                         pid, pidEnded, SigInfo.si_code, SigInfo.si_status, SigInfo.si_status);
    523                             LIBC_ASSERTM(pidEnded == pid, "Expected pid %d and got %d!\n", pid, pidEnded);
     524                            LIBCLOG_MSG("__libc_Back_processWait(P_PID,%d,,WEXITED,NULL) returned %d si_code=%d si_status=%#x (%d)\n",
     525                                        pid, rc, SigInfo.si_code, SigInfo.si_status, SigInfo.si_status);
     526                            LIBC_ASSERTM(SigInfo.si_pid == pid, "Expected pid %d and got %d!\n", pid, SigInfo.si_pid);
    524527                            if (    SigInfo.si_code == CLD_STOPPED
    525528                                ||  SigInfo.si_code == CLD_CONTINUED)
     
    568571                        }
    569572
    570                         LIBC_ASSERTM_FAILED("__libc_Back_processWait(P_PID,%d,,WEXITED,NULL) returned pidEnded=%d\n", pid, pidEnded);
     573                        LIBC_ASSERTM_FAILED("__libc_Back_processWait(P_PID,%d,,WEXITED,NULL) returned %d\n", pid, rc);
    571574                        __libc_spmTerm(__LIBC_EXIT_REASON_KILL + SIGABRT, 123);
    572575                        for (;;)
  • trunk/src/emx/src/lib/sys/b_ioFileOpen.c

    • Property cvs2svn:cvs-rev changed from 1.7 to 1.8
    r2259 r2260  
    174174        ULONG   fulType;
    175175        ULONG   fulDevFlags;
    176         dev_t   Dev;
    177         ino_t   Inode;
    178 
    179         /*
    180          * If a new file the unix EAs needs to be established.
    181          */
    182         if (   (ulAction == FILE_CREATED)
    183             && !__libc_gfNoUnix)
    184             __libc_back_fsUnixAttribsSet(hFile, szNativePath, Mode, &Dev, &Inode);
    185         else
    186             Dev = __libc_back_fsPathCalcInodeAndDev(szNativePath, &Inode);
    187 
    188176
    189177        /*
     
    193181        if (!rc)
    194182        {
     183            dev_t   Dev;
     184            ino_t   Inode;
    195185            switch (fulType & 0xff)
    196186            {
     
    198188                case HANDTYPE_FILE:
    199189                    fLibc |= F_FILE;
     190                    /* If a new file the unix EAs needs to be established. */
     191                    if (   (ulAction == FILE_CREATED)
     192                        && !__libc_gfNoUnix)
     193                        __libc_back_fsUnixAttribsSet(hFile, szNativePath, Mode, &Dev, &Inode);
     194                    else
     195                        Dev = __libc_back_fsPathCalcInodeAndDev(szNativePath, &Inode);
    200196                    break;
    201197                case HANDTYPE_DEVICE:
    202198                    fLibc |= F_DEV;
     199                    if (!(fulDevFlags & 0xf))
     200                        Dev = makedev('c', 0);
     201                    else if (fulDevFlags & 1 /*KBD*/)
     202                        Dev = makedev('c', 1);
     203                    else if (fulDevFlags & 2 /*SCR*/)
     204                        Dev = makedev('c', 2);
     205                    else if (fulDevFlags & 4 /*NUL*/)
     206                        Dev = makedev('c', 4);
     207                    else /*if (fulDevFlags & 8 / *CLK* /)*/
     208                        Dev = makedev('c', 8);
     209                    __libc_back_fsPathCalcInodeAndDev(szNativePath, &Inode);
    203210                    break;
    204211                case HANDTYPE_PIPE:
    205212                    fLibc |= F_PIPE;
     213                    Dev = makedev('p', 0);
     214                    __libc_back_fsPathCalcInodeAndDev(szNativePath, &Inode);
    206215                    break;
    207216            }
  • trunk/src/emx/src/lib/sys/filehandles.c

    • Property cvs2svn:cvs-rev changed from 1.22 to 1.23
    r2259 r2260  
    193193                            return -1;
    194194                        }
    195                         pFH->Dev = u.pStds->aHandles[i].Inode;
    196                         pFH->Inode = u.pStds->aHandles[i].Dev;
     195                        pFH->Inode = u.pStds->aHandles[i].Inode;
     196                        pFH->Dev = u.pStds->aHandles[i].Dev;
    197197                        pFH->pFsInfo = __libc_back_fsInfoObjByDev(pFH->Dev);
    198198                    }
     
    902902int __libc_FHClose(int fh)
    903903{
     904    LIBCLOG_ENTER("fh=%d\n", fh);
    904905    __LIBC_PFH  pFH;
    905906    int         rc;
     
    907908
    908909    if (_fmutex_request(&gmtx, 0))
    909         return -1;
     910        LIBCLOG_ERROR_RETURN(-1, "ret -1 - fh=%d is not opened according to our table!\n", fh);
    910911
    911912    /*
     
    914915    if (!fhGet(fh))
    915916    {
    916         LIBC_ASSERTM_FAILED("fh=%d is not opened according to our table!\n", fh);
    917917        _fmutex_release(&gmtx);
    918918        errno = EBADF;
    919         return -1;
     919        LIBCLOG_ERROR_RETURN(-1, "ret -1 - fh=%d is not opened according to our table!\n", fh);
    920920    }
    921921
     
    967967    _fmutex_release(&gmtx);
    968968
    969     if (rc)
    970     {
    971         if (rc > 0)
    972             _sys_set_errno(rc);
    973         else
    974             errno = -rc;
    975     }
    976 
    977     return rc;
     969    if (!rc)
     970        LIBCLOG_RETURN_INT(0);
     971    if (rc > 0)
     972        _sys_set_errno(rc);
     973    else
     974        errno = -rc;
     975    LIBCLOG_ERROR_RETURN_INT(rc);
    978976}
    979977
     
    10221020            ULONG       fulMode;
    10231021            unsigned    fLibc;
     1022            dev_t       Dev = 0;
    10241023
    10251024            /*
     
    10451044                    fLibc = F_DEV;
    10461045                    /* @todo inherit O_NDELAY */
     1046                    if (!(fulDevFlags & 0xf))
     1047                        Dev = makedev('c', 0);
     1048                    else if (fulDevFlags & 1 /*KBD*/)
     1049                        Dev = makedev('c', 1);
     1050                    else if (fulDevFlags & 2 /*SCR*/)
     1051                        Dev = makedev('c', 2);
     1052                    else if (fulDevFlags & 4 /*NUL*/)
     1053                        Dev = makedev('c', 4);
     1054                    else /*if (fulDevFlags & 8 / *CLK* /)*/
     1055                        Dev = makedev('c', 8);
    10471056                    break;
    10481057                case HANDTYPE_PIPE:
    10491058                    fLibc = F_PIPE;
     1059                    Dev = makedev('p', 0);
    10501060                    break;
    10511061            }
     
    10791089             */
    10801090            rc = fhAllocate(fh, fLibc, sizeof(LIBCFH), NULL, &pFH, NULL, 1);
    1081             if (rc)
     1091            if (!rc)
     1092                pFH->Dev = Dev;
     1093            else
    10821094                pFH = NULL;
    10831095        }
     
    11641176    ULONG   fulState;
    11651177    FS_VAR();
    1166     LIBC_ASSERT(((fFlags & O_NOINHERIT) == 0) == ((fFlags & (FD_CLOEXEC << __LIBC_FH_FDFLAGS_SHIFT)) != 0));
     1178    LIBC_ASSERT(((fFlags & O_NOINHERIT) != 0) == ((fFlags & (FD_CLOEXEC << __LIBC_FH_FDFLAGS_SHIFT)) != 0));
    11671179
    11681180    FS_SAVE_LOAD();
  • trunk/src/emx/src/lib/sys/fs.c

    • Property cvs2svn:cvs-rev changed from 1.19 to 1.20
    r2259 r2260  
    10371037             * getting the caseing resolved.)
    10381038             */
    1039             LIBC_ASSERT(psz - pszNativePath == cchNativePath);
     1039            //LIBC_ASSERT(psz - pszNativePath == cchNativePath); - figure this one.
    10401040            PFILEFINDBUF4 pFindBuf = (PFILEFINDBUF4)pachBuffer;
    10411041            ULONG cFiles = 1;
     
    15481548    }
    15491549    else
    1550         LIBC_ASSERT(chDrv == '/' || chDrv == '\\');
     1550    {
     1551        LIBC_ASSERTM(major(Dev) != 'V', "Dev=%#x major=%#x (%c) chDrv=%c\n", Dev, major(Dev), major(Dev), chDrv);
     1552        LIBC_ASSERTM(major(Dev) != 'U' || minor(chDrv) == 0, "Dev=%#x major=%#x (%c)\n", Dev, major(Dev), major(Dev));
     1553    }
    15511554
    15521555    return pFsInfo;
  • trunk/src/emx/src/lib/sys/logstrict.c

    • Property cvs2svn:cvs-rev changed from 1.20 to 1.21
    r2259 r2260  
    20962096static int      __libc_logVSNPrintf(char *pszBuffer, size_t cchBuffer, const char *pszFormat, va_list args)
    20972097{
    2098     int             rc;
    2099     int             cch;
     2098    int rc;
     2099    int cch;
    21002100    __LIBC_XCPTREG  XcptRegRec = { { (void *)-1, __libc_logXcptHandler }, };
    21012101    FS_VAR();
    21022102
     2103    /* Ignore NULL format string. */
     2104    if (!pszFormat)
     2105    {
     2106        if (cchBuffer)
     2107            *pszBuffer = '\0';
     2108        return 0;
     2109    }
     2110
     2111    /* Get along with the formatting. */
    21032112    FS_SAVE_LOAD();
    21042113    DosSetExceptionHandler(&XcptRegRec.RegRec);
  • trunk/src/emx/src/lib/sys/pathrewrite.c

    • Property cvs2svn:cvs-rev changed from 1.8 to 1.9
    r2259 r2260  
    226226            ||  !(paRules[i].fFlags & (__LIBC_PRWF_TYPE_FILE | __LIBC_PRWF_TYPE_DIR))
    227227            ||  (paRules[i].fFlags & ~(__LIBC_PRWF_TYPE_FILE | __LIBC_PRWF_TYPE_DIR | __LIBC_PRWF_CASE_SENSITIVE | __LIBC_PRWF_CASE_INSENSITIVE)))
    228         {
    229             LIBC_ASSERTM_FAILED("rule %d: Invalid flags %#x\n", i, paRules[i].fFlags);
    230             LIBCLOG_ERROR_RETURN_INT(-1);
    231         }
     228            LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: Invalid flags %#x\n", i, paRules[i].fFlags);
    232229
    233230        /*
     
    236233        cch = strlen(paRules[i].pszFrom);
    237234        if (cch != paRules[i].cchFrom)
    238         {
    239             LIBC_ASSERTM_FAILED("rule %d: invalid FROM length. actual=%d given=%d\n", i, cch, paRules[i].cchFrom);
    240             LIBCLOG_ERROR_RETURN_INT(-1);
    241         }
     235            LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: invalid FROM length. actual=%d given=%d\n", i, cch, paRules[i].cchFrom);
    242236        if (    paRules[i].pszFrom[cch - 1] == '\\'
    243237            ||  paRules[i].pszFrom[cch - 1] == '/')
    244         {
    245             LIBC_ASSERTM_FAILED("rule %d: invalid FROM ends with slash.\n",i );
    246             LIBCLOG_ERROR_RETURN_INT(-1);
    247         }
     238            LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: invalid FROM ends with slash.\n",i );
    248239
    249240        /*
     
    252243        cch = strlen(paRules[i].pszTo);
    253244        if (cch != paRules[i].cchTo || !cch)
    254         {
    255             LIBC_ASSERTM_FAILED("rule %d: invalid TO length. actual=%d given=%d\n", i, cch, paRules[i].cchTo);
    256             LIBCLOG_ERROR_RETURN_INT(-1);
    257         }
     245            LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: invalid TO length. actual=%d given=%d\n", i, cch, paRules[i].cchTo);
    258246        if (    !(cch == 1  || (cch == 3 && paRules[i].pszTo[1] == ':'))
    259247            && (    paRules[i].pszTo[cch - 1] == '\\'
    260248                ||  paRules[i].pszTo[cch - 1] == '/') )
    261         {
    262             LIBC_ASSERTM_FAILED("rule %d: invalid TO ends with slash.\n", i);
    263             LIBCLOG_ERROR_RETURN_INT(-1);
    264         }
    265 
     249            LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: invalid TO ends with slash.\n", i);
    266250
    267251        /*
     
    283267            cch    = pszEnd - psz;
    284268            if (cch > 255)
    285             {
    286                 LIBC_ASSERTM_FAILED("rule %d: path component is too long (%d bytes, 255 is max)\n", i, cch);
    287                 LIBCLOG_ERROR_RETURN_INT(-1);
    288             }
     269                LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: path component is too long (%d bytes, 255 is max)\n", i, cch);
    289270
    290271            /*
     
    314295            if (    (pEntry->fFlags & DIRENTRY_FLAGS_CASE)
    315296                !=  (paRules[i].fFlags & __LIBC_PRWF_CASE_SENSITIVE ? DIRENTRY_FLAGS_CASE : 0))
    316             {
    317                 LIBC_ASSERTM_FAILED("rule %d: collides with an exiting rule in terms of case sensitivity.\n", i);
    318                 LIBCLOG_ERROR_RETURN_INT(-1);
    319             }
     297                LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: collides with an exiting rule in terms of case sensitivity.\n", i);
    320298
    321299            /*
     
    326304            {
    327305                if (pEntry->fType != (paRules[i].fFlags & __LIBC_PRWF_TYPE_FILE ? DIRENTRY_TYPE_FILE : DIRENTRY_TYPE_DIR))
    328                 {
    329                     LIBC_ASSERTM_FAILED("rule %d: collides with existing rule for '%s' (not same type)\n", i, paRules[i].pszFrom);
    330                     LIBCLOG_ERROR_RETURN_INT(-1);
    331                 }
     306                    LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: collides with existing rule for '%s' (not same type)\n", i, paRules[i].pszFrom);
    332307
    333308                __LIBC_PPATHREWRITE pRule = pEntry->fType == DIRENTRY_TYPE_FILE
     
    336311                    &&  (   pRule->cchTo != paRules[i].cchTo
    337312                         || memicmp(pRule->pszTo, paRules[i].pszTo, paRules[i].cchTo)))
    338                 {
    339                     LIBC_ASSERTM_FAILED("rule %d: collides with existing rule for '%s', different rewriting: existing='%s' new='%s'\n",
    340                                         i, paRules[i].pszFrom, pRule->pszTo, paRules[i].pszTo);
    341                     LIBCLOG_ERROR_RETURN_INT(-1);
    342                 }
     313                    LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: collides with existing rule for '%s', different rewriting: existing='%s' new='%s'\n",
     314                                         i, paRules[i].pszFrom, pRule->pszTo, paRules[i].pszTo);
    343315                break;                  /* excellent, complete match of just an simple subdirectory. */
    344316            }
     
    349321             */
    350322            if (pEntry->fType != DIRENTRY_TYPE_DIR)
    351             {
    352                 LIBC_ASSERTM_FAILED("rule %d: collides with a file rule for '%s'\n", i, pEntry->u.pFile->pszFrom);
    353                 LIBCLOG_ERROR_RETURN_INT(-1);
    354             }
     323                LIBCLOG_ERROR_RETURN(-1, "ret -1 - rule %d: collides with a file rule for '%s'\n", i, pEntry->u.pFile->pszFrom);
    355324            psz  = pszEnd + 1;
    356325            pDir = pEntry->u.pDir;
     
    672641     */
    673642    if (!pszPath || !*pszPath)
    674     {
    675         LIBC_ASSERTM_FAILED("bad path\n");
    676         LIBCLOG_ERROR_RETURN_INT(-1);
    677     }
     643        LIBCLOG_ERROR_RETURN(-1, "ret -1 - bad path\n");
    678644
    679645    /*
     
    697663        if (cch > 255)
    698664        {
    699             LIBC_ASSERTM_FAILED("path component is too long (%d bytes, 255 is max)\n", cch);
     665            LIBCLOG_ERROR_RETURN(-1, "ret -1 - path component is too long (%d bytes, 255 is max)\n", cch);
    700666            break;                      /* path component is to long, we don't accept rules like this one!! */
    701667        }
     
    755721                    {
    756722                        if (cchBuf < cch)
    757                         {
    758                             LIBC_ASSERTM_FAILED("Buffer is too small (%d < %d)\n", cchBuf, cch);
    759                             LIBCLOG_ERROR_RETURN_INT(-1);
    760                         }
     723                            LIBCLOG_ERROR_RETURN(-1, "ret -1 - Buffer is too small (%d < %d)\n", cchBuf, cch);
    761724                        memcpy(pszBuf, pRule->pszTo, cch);
    762725                        LIBCLOG_MSG("rewritten: '%s' (complete)\n", pszBuf);
     
    785748            char *pszBufIn = pszBuf;
    786749            if (cchBuf < cchTotal)
    787             {
    788                 LIBC_ASSERTM_FAILED("Buffer is too small (%d < %d)\n", cchBuf, cchTotal);
    789                 LIBCLOG_ERROR_RETURN_INT(-1);
    790             }
     750                LIBCLOG_ERROR_RETURN(-1, "ret -1 - Buffer is too small (%d < %d)\n", cchBuf, cchTotal);
    791751            memcpy(pszBuf, pRuleBest->pszTo, pRuleBest->cchTo);
    792752            pszBuf += pRuleBest->cchTo;
  • trunk/src/emx/src/lib/time/gmtime.c

    • Property cvs2svn:cvs-rev changed from 1.10 to 1.11
    r2259 r2260  
    3737
    3838    {
    39         int lo, hi, i;
    40 
    4139        /* Find an i such that _year_day[i] <= days < _year_day[i+1]. */
    42 
    43         lo = 0; hi = _YEARS - 1;
    44         for (;;)
     40        int hi = _YEARS - 1;
     41        if ((int)_year_day[hi] < days)
     42            LIBCLOG_ERROR_RETURN_P(NULL);
     43        else if ((int)_year_day[0] > days)
     44            LIBCLOG_ERROR_RETURN_P(NULL);
     45        else
    4546        {
    46             i = (lo + hi) / 2;
    47             if (_year_day[i] > days)
    48                 hi = i - 1;
    49             else if (_year_day[i+1] <= days)
    50                 lo = i + 1;
    51             else
    52                 break;
     47            int i = 0;
     48            int lo = 0;
     49            for (;;)
     50            {
     51                i = (lo + hi) / 2;
     52                if (_year_day[i] > days)
     53                    hi = i - 1;
     54                else if (_year_day[i+1] <= days)
     55                    lo = i + 1;
     56                else
     57                    break;
     58            }
     59            dst->tm_year = i;
     60            days -= _year_day[i];
     61            dst->tm_yday = days;
    5362        }
    54         dst->tm_year = i;
    55         days -= _year_day[i];
    56         dst->tm_yday = days;
    5763    }
    5864
  • trunk/src/emx/src/lib/time/mktime.c

    • Property cvs2svn:cvs-rev changed from 1.9 to 1.10
    r2259 r2260  
    1414                  t->tm_isdst, /*t->tm_gmtoff*/-2, /*t->tm_zone*/(void *)NULL, /*t->tm_zone*/"");
    1515    time64_t t64 = _mktime64(t);
    16     if (t64 != -1 && t64 > TIME_T_MIN && t64 <= TIME_T_MAX)
     16    if (t64 != -1 && t64 >= TIME_T_MIN && t64 <= TIME_T_MAX)
    1717    {
    1818        time_t t32 = (time_t)t64;
     
    5454    }
    5555
    56     t1 = (time_t)__mktime64(t);
    57     if (t1 == (time_t)-1)
     56    t1 = __mktime64(t);
     57    if (t1 == -1)
    5858        return -1;
    5959    dst = _loc2gmt64(&t1, t->tm_isdst);
Note: See TracChangeset for help on using the changeset viewer.