Changeset 914


Ignore:
Timestamp:
Jan 10, 2008, 2:54:32 AM (18 years ago)
Author:
Steven Levine
Message:

Use CloseProfile to avoid spurious system INI closes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/inis.c

    r912 r914  
    2424  09 Jan 08 SHL Add some missing error reporting
    2525  09 Jan 08 SHL Standardize PrfOpenProfile return checks
     26  09 Jan 08 SHL Use CloseProfile to avoid spurious system INI closes
    2627
    2728***********************************************************************/
     
    5354{
    5455  USHORT size;
    55   CHAR ininame[CCHMAXPATH];
     56  CHAR ininame[CCHMAXPATH];     // Must be null string if user or system ini
    5657  HINI hini;
    5758  BOOL working;
     
    9394INIREC;
    9495
     96/**
     97 * Close profile unless it is user or system INI
     98 * @param hini is profile handle
     99 * @param fSkipIfSystem bypasses close for system INIs
     100 */
     101
     102static VOID CloseProfile(HINI hini, BOOL fSkipIfSystem)
     103{
     104  BOOL ok = fSkipIfSystem &&
     105            (hini == HINI_USERPROFILE || hini == HINI_SYSTEMPROFILE);
     106
     107  if (!ok) {
     108    ok = PrfCloseProfile(hini);
     109    if (!ok) {
     110      Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     111                "PrfCloseProfile failed for handle 0x%x", hini);
     112    }
     113  }
     114}
     115
    95116VOID CopyIniThread(VOID * args)
    96117{
     
    98119  HAB hab2;
    99120  HMQ hmq2;
    100   HINI hini1 = NULLHANDLE;
    101   HINI hini2 = NULLHANDLE;
     121  HINI hiniFrom = NULLHANDLE;
     122  HINI hiniTo = NULLHANDLE;
    102123  PRFPROFILE cprfp;
    103124  CHAR userini[CCHMAXPATH], sysini[CCHMAXPATH];
     
    118139        if (PrfQueryProfile(hab2, &cprfp)) {
    119140          if (!stricmp(cprfp.pszUserName, inirec->filename1))
    120             hini1 = HINI_USERPROFILE;
     141            hiniFrom = HINI_USERPROFILE;
    121142          else if (!stricmp(cprfp.pszSysName, inirec->filename1))
    122             hini1 = HINI_SYSTEMPROFILE;
     143            hiniFrom = HINI_SYSTEMPROFILE;
    123144          if (!stricmp(cprfp.pszUserName, inirec->filename2))
    124             hini2 = HINI_USERPROFILE;
     145            hiniTo = HINI_USERPROFILE;
    125146          else if (!stricmp(cprfp.pszSysName, inirec->filename2))
    126             hini2 = HINI_SYSTEMPROFILE;
    127         }
    128         if (hini1 == NULLHANDLE) {
    129           hini1 = PrfOpenProfile(hab2, inirec->filename1);
    130           if (hini1 == NULLHANDLE) {
     147            hiniTo = HINI_SYSTEMPROFILE;
     148        }
     149        if (hiniFrom == NULLHANDLE) {
     150          hiniFrom = PrfOpenProfile(hab2, inirec->filename1);
     151          if (hiniFrom == NULLHANDLE) {
    131152            Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
    132153                      "PrfOpenProfile failed for %s", inirec->filename1);
    133154          }
    134155        }
    135         if (hini2 == NULLHANDLE) {
     156        if (hiniTo == NULLHANDLE) {
    136157          if (!stricmp(inirec->filename1, inirec->filename2))
    137             hini2 = hini1;
     158            hiniTo = hiniFrom;
    138159          else {
    139             hini2 = PrfOpenProfile(hab2, inirec->filename2);
    140             if (hini2 == NULLHANDLE) {
     160            hiniTo = PrfOpenProfile(hab2, inirec->filename2);
     161            if (hiniTo == NULLHANDLE) {
    141162              Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
    142163                        "PrfOpenProfile failed for %s", inirec->filename2);
     
    144165          }
    145166        }
    146         if (hini1 && hini2 && (*inirec->app2 || hini1 != hini2)) {
     167        if (hiniFrom && hiniTo && (*inirec->app2 || hiniFrom != hiniTo)) {
    147168
    148169          PVOID pDataK, pData;
     
    153174            if (!*inirec->key) {
    154175              if (inirec->confirm &&
    155                   PrfQueryProfileSize(hini1, (PSZ) ((*inirec->app2) ?
     176                  PrfQueryProfileSize(hiniFrom, (PSZ) ((*inirec->app2) ?
    156177                                                    inirec->app2 : inirec->
    157178                                                    app), NULL,
     
    165186                  goto Abort;
    166187              }
    167               if (PrfQueryProfileSize(hini2,
     188              if (PrfQueryProfileSize(hiniTo,
    168189                                      (PSZ) inirec->app,
    169190                                      NULL, (PULONG) & ulSize) && ulSize) {
     
    171192                if (pDataK) {
    172193                  /* get keynames */
    173                   if (PrfQueryProfileString(hini2,
     194                  if (PrfQueryProfileString(hiniTo,
    174195                                            (PSZ) inirec->app,
    175196                                            NULL, "\0", pDataK, ulSize)) {
     
    177198                    /* step through keynames */
    178199                    while (*pCurrentK) {
    179                       if (PrfQueryProfileSize(hini2, inirec->app,
     200                      if (PrfQueryProfileSize(hiniTo, inirec->app,
    180201                                              pCurrentK,
    181202                                              (PULONG) & ulSize) && ulSize) {
     
    183204                        if (pData) {
    184205                          /* get data */
    185                           if (PrfQueryProfileData(hini2, inirec->app,
     206                          if (PrfQueryProfileData(hiniTo, inirec->app,
    186207                                                  pCurrentK,
    187208                                                  pData, (PULONG) & ulSize))
    188209                            /* write data to new ini file */
    189                             PrfWriteProfileData(hini1, ((*inirec->app2) ?
     210                            PrfWriteProfileData(hiniFrom, ((*inirec->app2) ?
    190211                                                        inirec->
    191212                                                        app2 : inirec->app),
     
    205226            else {
    206227              if (inirec->confirm &&
    207                   PrfQueryProfileSize(hini1, (PSZ) ((*inirec->app2) ?
     228                  PrfQueryProfileSize(hiniFrom, (PSZ) ((*inirec->app2) ?
    208229                                                    inirec->app2 : inirec->
    209230                                                    app),
     
    220241                  goto Abort;
    221242              }
    222               if (PrfQueryProfileSize(hini2, inirec->app,
     243              if (PrfQueryProfileSize(hiniTo, inirec->app,
    223244                                      inirec->key,
    224245                                      (PULONG) & ulSize) && ulSize) {
     
    226247                if (pData) {
    227248                  /* get data */
    228                   if (PrfQueryProfileData(hini2, inirec->app,
     249                  if (PrfQueryProfileData(hiniTo, inirec->app,
    229250                                          inirec->key,
    230251                                          pData, (PULONG) & ulSize))
    231252                    /* write data to new ini file */
    232                     PrfWriteProfileData(hini1, ((*inirec->app2) ?
     253                    PrfWriteProfileData(hiniFrom, ((*inirec->app2) ?
    233254                                                inirec->app2 : inirec->app),
    234255                                        ((*inirec->key2) ?
     
    247268                         inirec->filename2) != MBID_YES)
    248269                goto Abort;
    249               PrfWriteProfileData(hini2,
     270              PrfWriteProfileData(hiniTo,
    250271                                  inirec->app,
    251272                                  ((*inirec->key) ? inirec->key : NULL),
     
    255276        }
    256277      Abort:
    257         if (hini1)
    258           PrfCloseProfile(hini1);
    259         if (hini2 && hini2 != hini1)
    260           PrfCloseProfile(hini2);
     278        if (hiniFrom)
     279          CloseProfile(hiniFrom, TRUE);
     280        if (hiniTo && hiniTo != hiniFrom)
     281          CloseProfile(hiniTo, FALSE);
    261282        WinDestroyMsgQueue(hmq2);
    262283      }
     
    301322static VOID BackupIniThread(VOID * args)
    302323{
    303   PPRFPROFILE prfp = (PPRFPROFILE) args;
     324  PPRFPROFILE prfp = (PPRFPROFILE)args;
    304325  HAB hab2;
    305326  HMQ hmq2;
     
    308329  PVOID pDataA, pDataK, pData;
    309330  PBYTE pCurrentA, pCurrentK;
    310   ULONG ulSize = 0L;
     331  ULONG ulSize;
    311332  PRFPROFILE cprfp;
    312333  CHAR userini[CCHMAXPATH], sysini[CCHMAXPATH];
     
    344365          }
    345366          else {
     367            ulSize = 0;
    346368            if (PrfQueryProfileSize(orig, NULL, NULL, (PULONG) & ulSize)
    347369                && ulSize) {
     
    399421              }
    400422            }
    401             PrfCloseProfile(new);
    402           }
    403           PrfCloseProfile(orig);
     423            CloseProfile(new, FALSE);
     424          }
     425          CloseProfile(orig, TRUE);
    404426        }
    405427        WinDestroyMsgQueue(hmq2);
     
    418440  PVOID pData;
    419441  PBYTE pCurrent;
    420   ULONG ulSize = 0L;
     442  ULONG ulSize = 0;
    421443
    422444  WinSendMsg(hwndList, LM_DELETEALL, NULL, NULL);
     
    488510  PVOID pData;
    489511  PBYTE pCurrent;
    490   ULONG ulSize = 0L;
     512  ULONG ulSize = 0;
    491513
    492514  WinSendMsg(hwndList, LM_DELETEALL, NULL, NULL);
     
    614636    case DID_OK:
    615637      inidata = INSTDATA(hwnd);
    616       if (inidata) {
    617 
     638      if (!inidata)
     639        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     640      else {
    618641        CHAR s[8193], app[1024];
    619642        register CHAR *p;
     
    951974          break;
    952975        }
    953         PrfCloseProfile(testini);
     976        CloseProfile(testini, FALSE);
    954977        testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
    955978        if (testini == NULLHANDLE) {
     
    960983          break;
    961984        }
    962         PrfCloseProfile(testini);
     985        CloseProfile(testini, FALSE);
    963986        memset(&prfp, 0, sizeof(PRFPROFILE));
    964987        prfp.cchUserName = strlen(sysini);
     
    10841107          break;
    10851108        }
    1086         PrfCloseProfile(testini);
     1109        CloseProfile(testini, FALSE);
    10871110        testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
    10881111        if (testini == NULLHANDLE) {
     
    10931116          break;
    10941117        }
    1095         PrfCloseProfile(testini);
     1118        CloseProfile(testini, FALSE);
    10961119        /* make copies of new inis */
    10971120        *tempuserini = 0;
     
    12401263MRESULT EXPENTRY AddIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    12411264{
    1242   INIDATA *inidata;
     1265  INIDATA *inidata = INSTDATA(hwnd);
    12431266  size_t l;
    12441267
     
    13321355    case EN_KILLFOCUS:
    13331356      inidata = INSTDATA(hwnd);
    1334       if (inidata) {
    1335 
     1357      if (!inidata)
     1358        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     1359      else {
    13361360        CHAR s[CCHMAXPATH], applname[CCHMAXPATH];
    13371361        BOOL appchanged = FALSE, keychanged = FALSE;
     
    14581482    }
    14591483    else
    1460       PrfCloseProfile(hINI);
     1484      CloseProfile(hINI, FALSE);
    14611485  }
    14621486
     
    18431867      if (hwndMain && fAutoView)
    18441868        PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
    1845       inidata = WinQueryWindowPtr(hwnd, QWL_USER);
    1846       if (inidata && hwndStatus) {
     1869      inidata = INSTDATA(hwnd);
     1870      if (!inidata)
     1871        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     1872      else if (hwndStatus) {
    18471873        if (*inidata->ininame) {
    18481874          WinSetWindowText(hwndStatus, GetPString(IDS_INTERNALINIVIEWERTEXT));
     
    18981924  case UM_RESCAN:
    18991925    inidata = INSTDATA(hwnd);
    1900     if (inidata) {
    1901       if (mp1) {
    1902 
    1903         SHORT numitems, sSelect;
    1904         BOOL inprofile;
    1905         ULONG size = 0L;
    1906 
    1907         numitems = (SHORT) WinSendDlgItemMsg(hwnd,
    1908                                              INI_APPLIST,
    1909                                              LM_QUERYITEMCOUNT,
    1910                                              MPVOID, MPVOID);
    1911         if (!numitems) {
    1912           PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
    1913           return 0;
    1914         }
    1915         size = 0L;
    1916         if (PrfQueryProfileSize(inidata->hini,
    1917                                 (CHAR *) mp1, NULL, (PULONG) & size) && size)
    1918           inprofile = TRUE;
    1919         else
    1920           inprofile = FALSE;
    1921         sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
    1922                                             INI_APPLIST,
    1923                                             LM_SEARCHSTRING,
    1924                                             MPFROM2SHORT(LSS_CASESENSITIVE,
    1925                                                          LIT_FIRST),
    1926                                             MPFROMP((CHAR *) mp1));
    1927         if (sSelect >= 0) {
    1928           if (!inprofile)
    1929             WinSendDlgItemMsg(hwnd,
    1930                               INI_APPLIST,
    1931                               LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
    1932           else if (!strcmp(inidata->applname, (CHAR *) mp1))
    1933             PostMsg(hwnd,
    1934                     WM_CONTROL,
    1935                     MPFROM2SHORT(INI_APPLIST, LN_SELECT),
    1936                     MPFROMLONG(WinWindowFromID(hwnd, INI_APPLIST)));
    1937         }
    1938         else if (inprofile)
     1926    if (!inidata)
     1927      Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     1928    else if (mp1) {
     1929      SHORT sSelect;
     1930      BOOL inprofile;
     1931      ULONG size;
     1932      SHORT numitems = (SHORT)WinSendDlgItemMsg(hwnd,
     1933                                                INI_APPLIST,
     1934                                                LM_QUERYITEMCOUNT,
     1935                                                MPVOID, MPVOID);
     1936      if (!numitems) {
     1937        PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
     1938        return 0;
     1939      }
     1940      size = 0;
     1941      if (PrfQueryProfileSize(inidata->hini,
     1942                              (CHAR *) mp1, NULL, (PULONG) & size) && size)
     1943        inprofile = TRUE;
     1944      else
     1945        inprofile = FALSE;
     1946      sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
     1947                                          INI_APPLIST,
     1948                                          LM_SEARCHSTRING,
     1949                                          MPFROM2SHORT(LSS_CASESENSITIVE,
     1950                                                       LIT_FIRST),
     1951                                          MPFROMP((CHAR *) mp1));
     1952      if (sSelect >= 0) {
     1953        if (!inprofile)
    19391954          WinSendDlgItemMsg(hwnd,
    19401955                            INI_APPLIST,
    1941                             LM_INSERTITEM,
    1942                             MPFROM2SHORT(LIT_SORTASCENDING, 0),
    1943                             MPFROMP((CHAR *) mp1));
    1944         if (mp2 && inidata->applname) {
    1945           if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
    1946                             inidata->hini, inidata->applname))
    1947             PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
    1948         }
     1956                            LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
     1957        else if (!strcmp(inidata->applname, (CHAR *) mp1))
     1958          PostMsg(hwnd,
     1959                  WM_CONTROL,
     1960                  MPFROM2SHORT(INI_APPLIST, LN_SELECT),
     1961                  MPFROMLONG(WinWindowFromID(hwnd, INI_APPLIST)));
     1962      }
     1963      else if (inprofile)
     1964        WinSendDlgItemMsg(hwnd,
     1965                          INI_APPLIST,
     1966                          LM_INSERTITEM,
     1967                          MPFROM2SHORT(LIT_SORTASCENDING, 0),
     1968                          MPFROMP((CHAR *) mp1));
     1969      if (mp2 && inidata->applname) {
     1970        if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
     1971                          inidata->hini, inidata->applname))
     1972          PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
    19491973      }
    19501974    }
     
    19521976
    19531977  case UM_INITIALSIZE:                  /* kludge */
    1954     inidata = WinQueryWindowPtr(hwnd, QWL_USER);
    1955     if (inidata)
     1978    inidata = INSTDATA(hwnd);
     1979    if (!inidata)
     1980      Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     1981    else
    19561982      inidata->dontclose = TRUE;
    19571983    return 0;
     
    19922018  case UM_LOADFILE:
    19932019    /* load initial file */
    1994     inidata = WinQueryWindowPtr(hwnd, QWL_USER);
    1995     if (inidata) {
     2020    inidata = INSTDATA(hwnd);
     2021    if (!inidata)
     2022      Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2023    else {
    19962024      if (mp1) {
    19972025        strcpy(inidata->ininame, (CHAR *) mp1);
     
    20052033        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
    20062034                  "PrfOpenProfile failed for %s", inidata->ininame);
    2007         PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
    2008         break;
    2009       }
    2010       WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
    2011       WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
    2012       WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT),
    2013                       HWND_TOP,
    2014                       0, 0, 0, 0, SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
    2015       EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
    2016     }
    2017     else
    2018       PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     2035      }
     2036      else {
     2037        WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     2038        WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2039        WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT),
     2040                        HWND_TOP,
     2041                        0, 0, 0, 0, SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
     2042        EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     2043        return 0;
     2044      }
     2045    }
     2046    PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
    20192047    return 0;
    20202048
     
    20492077                            (HPS) 0, FALSE, FALSE);
    20502078        inidata = INSTDATA(hwnd);
    2051         if (inidata && inidata->hwndCurrent)
     2079        if (!inidata)
     2080          Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2081        else if (inidata->hwndCurrent)
    20522082          BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_RED);
    20532083      }
     
    20632093      case LN_SETFOCUS:
    20642094        inidata = INSTDATA(hwnd);
    2065         if (inidata) {
     2095        if (!inidata)
     2096          Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2097        else {
    20662098          if (inidata->hwndCurrent)
    20672099            BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_PALEGRAY);
     
    20742106      case LN_ENTER:
    20752107      case LN_SELECT:
    2076         if (SHORT1FROMMP(mp1) == INI_DATALIST)
    2077           break;
    20782108        {
    20792109          CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH];
    20802110          SHORT sSelect;
    20812111
     2112          if (SHORT1FROMMP(mp1) == INI_DATALIST)
     2113            break;
     2114
    20822115          inidata = INSTDATA(hwnd);
    2083           if (!inidata || !inidata->hini)
     2116          if (!inidata || !inidata->hini) {
     2117            Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    20842118            break;
     2119          }
    20852120          WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
    20862121          inidata->keyindex = inidata->appindex = 0;
     
    21542189      WinSetDlgItemText(hwnd, INI_NUMDATA, "0");
    21552190      WinSendDlgItemMsg(hwnd, INI_DATALIST, LM_DELETEALL, MPVOID, MPVOID);
    2156       inidata = WinQueryWindowPtr(hwnd, QWL_USER);
     2191      // inidata = WinQueryWindowPtr(hwnd, QWL_USER);   // 09 Jan 08 SHL
    21572192    }
    21582193    return 0;
     
    21602195  case UM_SETUP:
    21612196    inidata = INSTDATA(hwnd);
    2162     if (inidata) {
    2163 
     2197    if (!inidata)
     2198      Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2199    else {
    21642200      PRFPROFILE prfp;
    21652201      CHAR sysini[CCHMAXPATH + 81];
     
    21922228        WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT),
    21932229                         GetPString(IDS_INIQUERYPRFFAILEDTEXT));
    2194     }
    2195     else
    2196       PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     2230      return 0;
     2231    }
     2232
     2233    PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
    21972234    return 0;
    21982235
     
    22032240        case VK_DELETE:
    22042241          inidata = INSTDATA(hwnd);
    2205           if (inidata) {
    2206 
    2207             SHORT cmd;
    2208 
    2209             cmd = (inidata->hwndCurrent &&
    2210                    WinQueryWindowUShort(inidata->hwndCurrent, QWS_ID) ==
    2211                    INI_APPLIST) ? INI_DELETEAPP : INI_DELETEKEY;
     2242          if (!inidata)
     2243            Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2244          else {
     2245            SHORT cmd = inidata->hwndCurrent &&
     2246                        WinQueryWindowUShort(inidata->hwndCurrent, QWS_ID) ==
     2247                         INI_APPLIST ?
     2248                        INI_DELETEAPP :INI_DELETEKEY;
    22122249            PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(cmd, 0), MPVOID);
    22132250          }
     
    22232260    case IDM_FINDFIRST:
    22242261      inidata = INSTDATA(hwnd);
    2225       if (inidata) {
    2226         if (inidata->hwndCurrent) {
    2227 
    2228           STRINGINPARMS sip;
    2229           static CHAR tofind[258] = "";
    2230           SHORT x, z;
    2231 
    2232           if (SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
     2262      if (!inidata)
     2263        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2264      else if (inidata->hwndCurrent) {
     2265        STRINGINPARMS sip;
     2266        static CHAR tofind[258] = "";
     2267        SHORT x, z;
     2268
     2269        if (SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
     2270          z = LIT_FIRST;
     2271          memset(&sip, 0, sizeof(sip));
     2272          sip.help = GetPString(IDS_INISEARCHHELPTEXT);
     2273          sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
     2274          sip.inputlen = 257;
     2275          sip.ret = tofind;
     2276          sip.title = GetPString(IDS_INISEARCHTITLETEXT);
     2277          if (WinDlgBox(HWND_DESKTOP,
     2278                        hwnd,
     2279                        InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) {
     2280            rstrip(tofind);
     2281            if (!*tofind) {
     2282              DosBeep(50, 100);
     2283              break;
     2284            }
     2285          }
     2286          else
     2287            break;
     2288        }
     2289        else {
     2290          z = (SHORT) WinSendMsg(inidata->hwndCurrent,
     2291                                 LM_QUERYSELECTION,
     2292                                 MPFROM2SHORT(LIT_CURSOR, 0), MPVOID);
     2293          if (z < 0)
    22332294            z = LIT_FIRST;
    2234             memset(&sip, 0, sizeof(sip));
    2235             sip.help = GetPString(IDS_INISEARCHHELPTEXT);
    2236             sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
    2237             sip.inputlen = 257;
    2238             sip.ret = tofind;
    2239             sip.title = GetPString(IDS_INISEARCHTITLETEXT);
    2240             if (WinDlgBox(HWND_DESKTOP,
    2241                           hwnd,
    2242                           InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) {
    2243               rstrip(tofind);
    2244               if (!*tofind) {
    2245                 DosBeep(50, 100);
    2246                 break;
    2247               }
    2248             }
    2249             else
    2250               break;
    2251           }
    2252           else {
    2253             z = (SHORT) WinSendMsg(inidata->hwndCurrent,
    2254                                    LM_QUERYSELECTION,
    2255                                    MPFROM2SHORT(LIT_CURSOR, 0), MPVOID);
    2256             if (z < 0)
    2257               z = LIT_FIRST;
    2258           }
    2259           x = (SHORT) WinSendMsg(inidata->hwndCurrent,
    2260                                  LM_SEARCHSTRING,
    2261                                  MPFROM2SHORT(LSS_SUBSTRING, z),
    2262                                  MPFROMP(tofind));
    2263           if (x >= 0 && x > z) {
    2264             WinSendMsg(inidata->hwndCurrent,
    2265                        LM_SETTOPINDEX, MPFROM2SHORT(x, 0), MPVOID);
    2266             WinSendMsg(inidata->hwndCurrent,
    2267                        LM_SELECTITEM,
    2268                        MPFROM2SHORT(x, 0), MPFROM2SHORT(TRUE, 0));
    2269           }
    2270           else
    2271             DosBeep(250, 100);
    2272         }
     2295        }
     2296        x = (SHORT) WinSendMsg(inidata->hwndCurrent,
     2297                               LM_SEARCHSTRING,
     2298                               MPFROM2SHORT(LSS_SUBSTRING, z),
     2299                               MPFROMP(tofind));
     2300        if (x >= 0 && x > z) {
     2301          WinSendMsg(inidata->hwndCurrent,
     2302                     LM_SETTOPINDEX, MPFROM2SHORT(x, 0), MPVOID);
     2303          WinSendMsg(inidata->hwndCurrent,
     2304                     LM_SELECTITEM,
     2305                     MPFROM2SHORT(x, 0), MPFROM2SHORT(TRUE, 0));
     2306        }
     2307        else
     2308          DosBeep(250, 100);
    22732309      }
    22742310      break;
     
    22762312    case IDM_FILTER:
    22772313      inidata = INSTDATA(hwnd);
    2278       if (inidata) {
    2279 
    2280         SHORT numitems;
    2281 
    2282         numitems = (SHORT) WinSendDlgItemMsg(hwnd,
    2283                                              INI_APPLIST,
    2284                                              LM_QUERYITEMCOUNT,
    2285                                              MPVOID, MPVOID);
     2314      if (!inidata)
     2315        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2316      else {
     2317        SHORT numitems = (SHORT)WinSendDlgItemMsg(hwnd,
     2318                                                  INI_APPLIST,
     2319                                                  LM_QUERYITEMCOUNT,
     2320                                                  MPVOID, MPVOID);
    22862321        if (numitems)
    22872322          WinDlgBox(HWND_DESKTOP,
     
    22962331    case IDM_INFO:
    22972332    case IDM_MOVE:
    2298       inidata = WinQueryWindowPtr(hwnd, QWL_USER);
     2333      inidata = INSTDATA(hwnd);
    22992334      if (!inidata || !*inidata->ininame)
    2300         break;
    2301       if (mp2) {
    2302 
    2303         INIREC *inirec;
    2304 
    2305         inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
     2335        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2336      else if (mp2) {
     2337        INIREC *inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
    23062338        if (inirec) {
    23072339          *inirec = *(INIREC *) mp2;
     
    23192351
    23202352    case IDM_COMPARE:
    2321       inidata = WinQueryWindowPtr(hwnd, QWL_USER);
     2353      inidata = INSTDATA(hwnd);
    23222354      if (!inidata || !*inidata->ininame)
    2323         break;
    2324       if (mp2) {
    2325 
    2326         INIREC *inirec;
    2327 
    2328         inirec = xmalloc(sizeof(INIREC), pszSrcFile, __LINE__);
     2355        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2356      else if (mp2) {
     2357        INIREC *inirec = xmalloc(sizeof(INIREC), pszSrcFile, __LINE__);
    23292358        if (inirec) {
    23302359          strcpy(inirec->filename2, (CHAR *) (mp2));
     
    23452374    case INI_RENAMEAPP:
    23462375    case INI_RENAMEKEY:
    2347       inidata = WinQueryWindowPtr(hwnd, QWL_USER);
    2348       if (!inidata ||
    2349           !*inidata->ininame ||
     2376      inidata = INSTDATA(hwnd);
     2377      if (!inidata) {
     2378        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2379        break;
     2380      }
     2381      if (!*inidata->ininame ||
    23502382          !*inidata->applname ||
    23512383          (!*inidata->keyname &&
     
    23542386        break;
    23552387      {
    2356         INIREC *inirec;
    2357 
    2358         inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
     2388        INIREC *inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
    23592389        if (inirec) {
    23602390          inirec->size = sizeof(INIREC);
     
    23882418    case INI_BACKUPINI:
    23892419      inidata = INSTDATA(hwnd);
    2390       if (inidata && *inidata->ininame) {
    2391 
     2420      if (!inidata)
     2421        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2422      else if (*inidata->ininame) {
     2423        // 09 Jan 08 SHL fixme to complain
    23922424        CHAR filename[CCHMAXPATH], *p;
    23932425
     
    24452477    case INI_CHANGEINI:
    24462478      inidata = INSTDATA(hwnd);
    2447       if (inidata) {
     2479      if (!inidata)
     2480        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2481      else {
    24482482        if (WinDlgBox(HWND_DESKTOP,
    24492483                      hwnd,
     
    24592493    case INI_SWAPINI:
    24602494      inidata = INSTDATA(hwnd);
    2461       if (inidata) {
     2495      if (!inidata)
     2496        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2497      else {
    24622498        if (WinDlgBox(HWND_DESKTOP,
    24632499                      hwnd,
     
    24732509    case IDM_NEXTWINDOW:
    24742510      inidata = INSTDATA(hwnd);
    2475       if (inidata) {
     2511      if (!inidata)
     2512        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2513      else {
    24762514        inidata->currid++;
    24772515        if (inidata->currid > INI_DATALIST)
     
    24832521    case IDM_PREVWINDOW:
    24842522      inidata = INSTDATA(hwnd);
    2485       if (inidata) {
     2523      if (!inidata)
     2524        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2525      else {
    24862526        inidata->currid--;
    24872527        if (inidata->currid < INI_APPLIST)
     
    24932533    case INI_CONFIRM:
    24942534      inidata = INSTDATA(hwnd);
    2495       if (inidata) {
     2535      if (!inidata)
     2536        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2537      else {
    24962538        inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
    24972539        WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
     
    25032545    case INI_ADDENTRY:
    25042546      inidata = INSTDATA(hwnd);
    2505       if (inidata) {
     2547      if (!inidata)
     2548        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2549      else {
    25062550        inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
    25072551        WinDlgBox(HWND_DESKTOP,
     
    25122556    case INI_OTHERPROFILE:
    25132557      inidata = INSTDATA(hwnd);
    2514       if (inidata) {
    2515 
     2558      if (!inidata)
     2559        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2560      else {
    25162561        CHAR filename[CCHMAXPATH + 81], *p;
    25172562        FILESTATUS3 fsa;
     
    25472592            if (*inidata->ininame) {
    25482593              if (inidata->hini)
    2549                 PrfCloseProfile(inidata->hini);
     2594                CloseProfile(inidata->hini, FALSE);
    25502595              *inidata->ininame = 0;
    25512596            }
     
    25622607    case INI_USERPROFILE:
    25632608      inidata = INSTDATA(hwnd);
    2564       if (inidata) {
    2565         if (inidata->hini &&
    2566             inidata->hini != HINI_SYSTEMPROFILE &&
    2567             inidata->hini != HINI_USERPROFILE)
    2568           PrfCloseProfile(inidata->hini);
     2609      if (!inidata)
     2610        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2611      else {
     2612        if (inidata->hini && *inidata->ininame)
     2613          CloseProfile(inidata->hini, FALSE);
    25692614        *inidata->ininame = 0;
    25702615        inidata->hini = HINI_USERPROFILE;
     
    25772622    case INI_SYSTEMPROFILE:
    25782623      inidata = INSTDATA(hwnd);
    2579       if (inidata) {
    2580         if (inidata->hini &&
    2581             inidata->hini != HINI_SYSTEMPROFILE &&
    2582             inidata->hini != HINI_USERPROFILE)
    2583           PrfCloseProfile(inidata->hini);
     2624      if (!inidata)
     2625        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2626      else {
     2627        if (inidata->hini && *inidata->ininame)
     2628          CloseProfile(inidata->hini, FALSE);
    25842629        *inidata->ininame = 0;
    25852630        inidata->hini = HINI_SYSTEMPROFILE;
     
    25922637    case INI_REFRESH:
    25932638      inidata = INSTDATA(hwnd);
    2594       if (inidata) {
     2639      if (!inidata)
     2640        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2641      else {
    25952642        WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
    25962643        EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     
    26002647    case INI_DELETEKEY:
    26012648      inidata = INSTDATA(hwnd);
    2602       if (inidata && *inidata->applname && *inidata->keyname) {
     2649      if (!inidata)
     2650        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2651      else if (*inidata->applname && *inidata->keyname) {
    26032652
    26042653        SHORT keyindex = inidata->keyindex;
     
    26342683    case INI_DELETEAPP:
    26352684      inidata = INSTDATA(hwnd);
    2636       if (inidata && *inidata->applname) {
     2685      if (!inidata)
     2686        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2687      // 09 Jan 08 SHL fixme to complain?
     2688      else if (*inidata->applname) {
    26372689
    26382690        SHORT appindex = inidata->appindex;
     
    26952747        WinStoreWindowPos(FM2Str,
    26962748                          "INIWindowPos", WinQueryWindow(hwnd, QW_PARENT));
    2697       inidata = WinQueryWindowPtr(hwnd, QWL_USER);
     2749      // inidata = WinQueryWindowPtr(hwnd, QWL_USER);   // 09 Jan 08 SHL
    26982750    }
    26992751    WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
     
    27012753
    27022754  case WM_DESTROY:
    2703     inidata = INSTDATA(hwnd);
    27042755    {
    27052756      BOOL dontclose = FALSE;
    27062757
    2707       if (inidata) {
     2758      inidata = INSTDATA(hwnd);
     2759      if (!inidata)
     2760        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     2761      else {
    27082762        dontclose = inidata->dontclose;
    2709         if (inidata->hini)
    2710           PrfCloseProfile(inidata->hini);
     2763        if (inidata->hini != NULLHANDLE && *inidata->ininame)
     2764          CloseProfile(inidata->hini, FALSE);
    27112765        if (inidata->data)
    27122766          free(inidata->data);
Note: See TracChangeset for help on using the changeset viewer.