Ignore:
Timestamp:
May 25, 2008, 4:18:53 PM (17 years ago)
Author:
pr
Message:

Add doshIsFixpak for bug 1067.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/branch-1-0/src/helpers/dosh2.c

    r317 r364  
    2828
    2929/*
    30  *      This file Copyright (C) 1997-2006 Ulrich M”ller,
     30 *      This file Copyright (C) 1997-2008 Ulrich M”ller,
    3131 *                                        Dmitry A. Steklenev.
    3232 *      This file is part of the "XWorkplace helpers" source package.
     
    163163    return (s_ulrc);
    164164}
     165
     166/*
     167 *@@ doshIsFixpak:
     168 *      checks if the OS/2 system is at a given fixpak level or higher
     169 *
     170 *      Returns:
     171 *
     172 *      -- FALSE: the system is at a lower level
     173 *
     174 *      -- TRUE: the system is at the exact or a higher level
     175 *
     176 *@@added V1.0.8 (2008-04-07) [chennecke]: @@fixes 1067
     177 */
     178
     179BOOL doshIsFixpak(BOOL fIsMcp,          // in: MCP fixpak?
     180                  ULONG ulFixpakLevel)    // in: fixpak level number
     181{
     182    static BOOL     s_fQueried = FALSE;
     183    static BOOL     s_fRc = FALSE;
     184
     185    if (!s_fQueried)
     186    {
     187        // first call:
     188        // check SYSLEVEL.OS2
     189        CHAR szName[CCHMAXPATH] = "?:\\OS2\\INSTALL\\SYSLEVEL.OS2";
     190        ULONG cbFile;
     191        PXFILE pFile;
     192
     193        szName[0] = doshQueryBootDrive();
     194        if (!doshOpen(szName,
     195                      XOPEN_READ_EXISTING | XOPEN_BINARY,
     196                      &cbFile,
     197                      &pFile))
     198        {
     199            CHAR szCsdLevel[8];
     200            CHAR szCsdLevelNumber[4];
     201            ULONG ulSize;
     202
     203            if (!lvlQueryLevelFileData(pFile->hf,
     204                                       QLD_CURRENTCSD,
     205                                       szCsdLevel,
     206                                       sizeof(szCsdLevel),
     207                                       &ulSize))
     208            {
     209                strncpy(szCsdLevelNumber, szCsdLevel + 4, 3);
     210                szCsdLevelNumber[sizeof(szCsdLevelNumber) - 1] = '\0';
     211                if (fIsMcp)
     212                {
     213                    if (   (szCsdLevel[3] == 'C')
     214                        && (atol(szCsdLevelNumber) >= ulFixpakLevel))
     215                        s_fRc = TRUE;
     216                }
     217                else
     218                {
     219                    if (   (szCsdLevel[3] == 'C')
     220                        || (    (szCsdLevel[3] == 'M')
     221                             && (atol(szCsdLevelNumber) >= ulFixpakLevel)))
     222                        s_fRc = TRUE;
     223                }
     224            }
     225
     226            doshClose(&pFile);
     227        }
     228
     229        s_fQueried = TRUE;
     230    }
     231
     232    return (s_fRc);
     233}
     234
    165235
    166236/*
Note: See TracChangeset for help on using the changeset viewer.