Ignore:
Timestamp:
Feb 12, 2000, 12:54:25 AM (26 years ago)
Author:
bird
Message:

Preformance and corrections.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/database/StateUpd.cpp

    r2759 r2761  
    1 /* $Id: StateUpd.cpp,v 1.8 2000-02-11 18:35:54 bird Exp $
     1/* $Id: StateUpd.cpp,v 1.9 2000-02-11 23:54:24 bird Exp $
    22 *
    33 * StateUpd - Scans source files for API functions and imports data on them.
     
    626626
    627627        /* 4.*/
    628         ulRcTmp = dbUpdateFunction(&FnDesc, &szErrorDesc[0]);
     628        ulRcTmp = dbUpdateFunction(&FnDesc, pOptions->lDllRefcode, &szErrorDesc[0]);
    629629        if (ulRcTmp != 0)
    630630        {
     
    679679
    680680    /* 3. */
    681     if (!dbFindFunction(pFnDesc->pszName, &FnFindBuf))
     681    if (!dbFindFunction(pFnDesc->pszName, &FnFindBuf, pOptions->lDllRefcode))
    682682    {
    683683        fprintf(phSignal, "%s, %s: error occured while reading from database, %s\n",
     
    701701
    702702        for (lFn = 0; lFn < FnFindBuf.cFns; lFn++)
    703         {
    704             if (FnFindBuf.alDllRefCode[lFn] == pOptions->lDllRefcode)
    705                 pFnDesc->alRefCode[pFnDesc->cRefCodes++] = FnFindBuf.alRefCode[lFn];
    706         }
     703            pFnDesc->alRefCode[pFnDesc->cRefCodes++] = FnFindBuf.alRefCode[lFn];
    707704
    708705        if (pFnDesc->cRefCodes == 0)
     
    741738     */
    742739
    743     int     iFn, iP1, iP2, j;
     740    int     iFn, iP1, iP2, j, c;
    744741    char *  pszFn, *pszFnEnd, *pszP1, *pszP2;
    745742    char *  psz, *pszEnd;
     
    812809
    813810    /* 3. */
     811    c = 1;
    814812    iP2 = iP1;
    815813    pszP2 = pszP1 + 1;
    816     while (*pszP2 != ')')
     814    while (c > 0)
     815    {
     816        if (*pszP2 == '(')
     817            c++;
     818        else if (*pszP2 == ')')
     819            if (--c == 0)
     820                break;
    817821        if (*pszP2++ == '\0')
    818822            if ((pszP2 = papszLines[++iP2]) == NULL)
    819823                break;
     824    }
    820825
    821826    iRet = iP2 + 1; //assumes: only one function on a single line!
     
    832837        char *pszC;
    833838        pszC = trim(psz+1);
     839        c = 1;
    834840        while (*pszC != '\0')
    835841        {
    836842            apszArgs[cArgs] = pszC;
    837             while (*pszC != ',' && *pszC != ')' && *pszC != '\0')
     843            while (*pszC != ',' && c > 0 && *pszC != '\0')
     844            {
     845                if (*pszC == '(')
     846                    c++;
     847                else if (*pszC == ')')
     848                    if (--c == 0)
     849                        break;
    838850                pszC++;
     851            }
    839852            *pszC = '\0';
    840853            trim(apszArgs[cArgs++]);
     
    877890        pFnDesc->pszReturnType = *pszEnd == '\0' ? NULL : pszEnd;
    878891        pszEnd = strlen(pszEnd) + pszEnd + 1;
     892        *pszEnd = '\0';
    879893
    880894        /* function name */
    881         *pszEnd = '\0';
    882895        if (pFnDesc->pszReturnType != NULL
    883896            && stristr(pFnDesc->pszReturnType, "cdecl") != NULL)
    884897        {   /* cdecl function is prefixed with an '_' */
    885898            strcpy(pszEnd, "_");
    886             strncat(pszEnd+1, pszFn, pszFnEnd - pszFn+1);
     899            strncat(pszEnd + 1, pszFn, pszFnEnd - pszFn+1);
    887900        }
    888901        else
    889902            strncat(pszEnd, pszFn, pszFnEnd - pszFn+1);
    890 
    891903        pFnDesc->pszName = pszEnd;
     904        pszEnd = strlen(pszEnd) + pszEnd + 1;
     905        *pszEnd = '\0';
     906
    892907
    893908        /* arguments */
     
    895910        for (j = 0; j < cArgs; j++)
    896911        {
    897             pFnDesc->apszParamName[j] = findStartOfWord(apszArgs[j] + strlen(apszArgs[j]) - 1,
    898                                                         apszArgs[j]);
    899             pFnDesc->apszParamName[j][-1] = '\0';
    900             pFnDesc->apszParamType[j] = trim(apszArgs[j]);
     912            if ((psz = strchr(apszArgs[j], ')')) == NULL)
     913            {
     914                pFnDesc->apszParamName[j] = findStartOfWord(apszArgs[j] + strlen(apszArgs[j]) - 1,
     915                                                            apszArgs[j]);
     916                pFnDesc->apszParamName[j][-1] = '\0';
     917                pFnDesc->apszParamType[j] = trim(apszArgs[j]);
     918            }
     919            else
     920            {
     921                char *pszP2 = psz;
     922                psz = findStartOfWord(psz-1, apszArgs[j]);
     923                strncat(pszEnd, psz, pszP2 - psz);
     924
     925                pFnDesc->apszParamName[j] = pszEnd;
     926                memset(psz, ' ', pszP2 - psz);
     927                pFnDesc->apszParamType[j] = trim(apszArgs[j]);
     928
     929                pszEnd = strlen(pszEnd) + pszEnd + 1;
     930                *pszEnd = '\0';
     931            }
    901932        }
    902933    }
     
    12181249
    12191250                while (pszFnName - cchFnName > papszLines[i] && pszFnName[cchFnName] == ' ')
    1220                     cchFnName--;
     1251                    cchFnName--, pszFnName--;
    12211252
    12221253                pszFnName = findStartOfWord(pszFnName, papszLines[i]);
     
    12391270                        if (psz != NULL && *psz != '*')
    12401271                        {
    1241                             char *pszB = pszP1; /*'{'*/
     1272                            char *pszB = pszP1 + 1; /*'{'*/
     1273                            int   c = 1;
    12421274
    12431275                            /* 3. */
    1244                             while (*pszB != ')')
     1276                            while (c > 0)
     1277                            {
     1278                                if (*pszB == '(')
     1279                                    c++;
     1280                                else if (*pszB == ')')
     1281                                    if (--c == 0)
     1282                                        break;
    12451283                                if (*pszB++ == '\0')
    12461284                                    if ((pszB = papszLines[++i]) == NULL)
    12471285                                        break;
     1286                            }
    12481287                            if (pszB != NULL)
    12491288                            {
     
    12931332                if (pszP1 != NULL && *pszP1 == '(')
    12941333                {
    1295                     char *pszB = pszP1; /*'{'*/
     1334                    char *pszB = pszP1 + 1; /*'{'*/
     1335                    int   c = 1;
    12961336
    12971337                    /* 3. */
    1298                     while (*pszB != ')')
     1338                    while (c > 0)
     1339                    {
     1340                        if (*pszB == '(')
     1341                            c++;
     1342                        else if (*pszB == ')')
     1343                            if (--c == 0)
     1344                                break;
    12991345                        if (*pszB++ == '\0')
    13001346                            if ((pszB = papszLines[++i]) == NULL)
    13011347                                break;
     1348                    }
    13021349                    if (pszB != NULL)
    13031350                    {
Note: See TracChangeset for help on using the changeset viewer.