Ignore:
Timestamp:
Dec 22, 2001, 12:10:30 PM (24 years ago)
Author:
umoeller
Message:

Misc fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/helpers/dosh.c

    r123 r126  
    334334
    335335    *pcbAllocated = c * cbArrayItem;
    336     if (!(*ppv = malloc(*pcbAllocated)))
     336    if (!(*ppv = (PBYTE)malloc(*pcbAllocated)))
    337337        return ERROR_NOT_ENOUGH_MEMORY;
    338338
     
    17791779 *
    17801780 *@@added V0.9.16 (2001-10-19) [umoeller]
     1781 *@@changed V0.9.16 (2001-12-18) [umoeller]: fixed error codes
    17811782 */
    17821783
     
    17891790    APIRET arc = NO_ERROR;
    17901791
    1791     // run this first, because if the file doesn't
    1792     // exists, DosOpen only returns ERROR_OPEN_FAILED,
    1793     // which isn't that meaningful
    1794     // V0.9.16 (2001-12-08) [umoeller]
    1795     if (!(arc = doshQueryPathSize(pcszFilename,
    1796                                   pcbFile)))
    1797     {
    1798         ULONG   fsOpenFlags = 0,
    1799                 fsOpenMode =    OPEN_FLAGS_FAIL_ON_ERROR
    1800                               | OPEN_FLAGS_NO_LOCALITY
    1801                               | OPEN_FLAGS_NOINHERIT;
    1802 
    1803         switch (flOpenMode & XOPEN_ACCESS_MASK)
     1792    ULONG   fsOpenFlags = 0,
     1793            fsOpenMode =    OPEN_FLAGS_FAIL_ON_ERROR
     1794                          | OPEN_FLAGS_NO_LOCALITY
     1795                          | OPEN_FLAGS_NOINHERIT;
     1796
     1797    switch (flOpenMode & XOPEN_ACCESS_MASK)
     1798    {
     1799        case XOPEN_READ_EXISTING:
     1800            fsOpenFlags =   OPEN_ACTION_FAIL_IF_NEW
     1801                          | OPEN_ACTION_OPEN_IF_EXISTS;
     1802            fsOpenMode |=   OPEN_SHARE_DENYWRITE
     1803                          | OPEN_ACCESS_READONLY;
     1804            // _Pmpf((__FUNCTION__ ": opening XOPEN_READ_EXISTING"));
     1805
     1806            // run this first, because if the file doesn't
     1807            // exists, DosOpen only returns ERROR_OPEN_FAILED,
     1808            // which isn't that meaningful
     1809            // V0.9.16 (2001-12-08) [umoeller]
     1810            arc = doshQueryPathSize(pcszFilename,
     1811                                    pcbFile);
     1812        break;
     1813
     1814        case XOPEN_READWRITE_APPEND:
     1815            fsOpenFlags =   OPEN_ACTION_CREATE_IF_NEW
     1816                          | OPEN_ACTION_OPEN_IF_EXISTS;
     1817            fsOpenMode |=   OPEN_SHARE_DENYREADWRITE
     1818                          | OPEN_ACCESS_READWRITE;
     1819            // _Pmpf((__FUNCTION__ ": opening XOPEN_READWRITE_APPEND"));
     1820        break;
     1821
     1822        case XOPEN_READWRITE_NEW:
     1823            fsOpenFlags =   OPEN_ACTION_CREATE_IF_NEW
     1824                          | OPEN_ACTION_REPLACE_IF_EXISTS;
     1825            fsOpenMode |=   OPEN_SHARE_DENYREADWRITE
     1826                          | OPEN_ACCESS_READWRITE;
     1827            // _Pmpf((__FUNCTION__ ": opening XOPEN_READWRITE_NEW"));
     1828        break;
     1829    }
     1830
     1831    if ((!arc) && fsOpenFlags && pcbFile && ppFile)
     1832    {
     1833        PXFILE pFile;
     1834        if (pFile = NEW(XFILE))
    18041835        {
    1805             case XOPEN_READ_EXISTING:
    1806                 fsOpenFlags =   OPEN_ACTION_FAIL_IF_NEW
    1807                               | OPEN_ACTION_OPEN_IF_EXISTS;
    1808                 fsOpenMode |=   OPEN_SHARE_DENYWRITE
    1809                               | OPEN_ACCESS_READONLY;
    1810                 // _Pmpf((__FUNCTION__ ": opening XOPEN_READ_EXISTING"));
    1811             break;
    1812 
    1813             case XOPEN_READWRITE_APPEND:
    1814                 fsOpenFlags =   OPEN_ACTION_CREATE_IF_NEW
    1815                               | OPEN_ACTION_OPEN_IF_EXISTS;
    1816                 fsOpenMode |=   OPEN_SHARE_DENYREADWRITE
    1817                               | OPEN_ACCESS_READWRITE;
    1818                 // _Pmpf((__FUNCTION__ ": opening XOPEN_READWRITE_APPEND"));
    1819             break;
    1820 
    1821             case XOPEN_READWRITE_NEW:
    1822                 fsOpenFlags =   OPEN_ACTION_CREATE_IF_NEW
    1823                               | OPEN_ACTION_REPLACE_IF_EXISTS;
    1824                 fsOpenMode |=   OPEN_SHARE_DENYREADWRITE
    1825                               | OPEN_ACCESS_READWRITE;
    1826                 // _Pmpf((__FUNCTION__ ": opening XOPEN_READWRITE_NEW"));
    1827             break;
    1828         }
    1829 
    1830         if ((!arc) && fsOpenFlags && pcbFile && ppFile)
    1831         {
    1832             PXFILE pFile;
    1833             if (pFile = NEW(XFILE))
     1836            ULONG ulAction;
     1837
     1838            ZERO(pFile);
     1839
     1840            // copy open flags
     1841            pFile->flOpenMode = flOpenMode;
     1842
     1843            if (!(arc = DosOpen((PSZ)pcszFilename,
     1844                                &pFile->hf,
     1845                                &ulAction,
     1846                                *pcbFile,
     1847                                FILE_ARCHIVED,
     1848                                fsOpenFlags,
     1849                                fsOpenMode,
     1850                                NULL)))       // EAs
    18341851            {
    1835                 ULONG ulAction;
    1836 
    1837                 ZERO(pFile);
    1838 
    1839                 // copy open flags
    1840                 pFile->flOpenMode = flOpenMode;
    1841 
    1842                 if (!(arc = DosOpen((PSZ)pcszFilename,
    1843                                     &pFile->hf,
    1844                                     &ulAction,
    1845                                     *pcbFile,
    1846                                     FILE_ARCHIVED,
    1847                                     fsOpenFlags,
    1848                                     fsOpenMode,
    1849                                     NULL)))       // EAs
    1850                 {
    1851                     // alright, got the file:
    1852 
    1853                     if (    (ulAction == FILE_EXISTED)
    1854                          && ((flOpenMode & XOPEN_ACCESS_MASK) == XOPEN_READWRITE_APPEND)
    1855                        )
    1856                         // get its size and set ptr to end for append
    1857                         arc = DosSetFilePtr(pFile->hf,
    1858                                             0,
    1859                                             FILE_END,
     1852                // alright, got the file:
     1853
     1854                if (    (ulAction == FILE_EXISTED)
     1855                     && ((flOpenMode & XOPEN_ACCESS_MASK) == XOPEN_READWRITE_APPEND)
     1856                   )
     1857                    // get its size and set ptr to end for append
     1858                    arc = DosSetFilePtr(pFile->hf,
     1859                                        0,
     1860                                        FILE_END,
     1861                                        pcbFile);
     1862                else
     1863                    arc = doshQueryFileSize(pFile->hf,
    18601864                                            pcbFile);
    1861                     else
    1862                         arc = doshQueryFileSize(pFile->hf,
    1863                                                 pcbFile);
    1864                         // file ptr is at beginning
    1865 
    1866                     // store file size
    1867                     pFile->cbInitial
    1868                     = pFile->cbCurrent
    1869                     = *pcbFile;
    1870                 }
    1871 
    1872                 if (arc)
    1873                     doshClose(&pFile);
    1874                 else
    1875                     *ppFile = pFile;
     1865                    // file ptr is at beginning
     1866
     1867                 if (arc)
     1868                    _Pmpf((__FUNCTION__ ": DosSetFilePtr/queryfilesize returned %d for %s",
     1869                                arc, pcszFilename));
     1870
     1871                // store file size
     1872                pFile->cbInitial
     1873                = pFile->cbCurrent
     1874                = *pcbFile;
    18761875            }
    18771876            else
    1878                 arc = ERROR_NOT_ENOUGH_MEMORY;
     1877                 _Pmpf((__FUNCTION__ ": DosOpen returned %d for %s",
     1878                             arc, pcszFilename));
     1879
     1880            if (arc)
     1881                doshClose(&pFile);
     1882            else
     1883                *ppFile = pFile;
    18791884        }
    18801885        else
    1881             arc = ERROR_INVALID_PARAMETER;
    1882     }
     1886            arc = ERROR_NOT_ENOUGH_MEMORY;
     1887    }
     1888    else
     1889        arc = ERROR_INVALID_PARAMETER;
    18831890
    18841891    return (arc);
Note: See TracChangeset for help on using the changeset viewer.