Changeset 126 for trunk/src/helpers/dosh.c
- Timestamp:
- Dec 22, 2001, 12:10:30 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/helpers/dosh.c
r123 r126 334 334 335 335 *pcbAllocated = c * cbArrayItem; 336 if (!(*ppv = malloc(*pcbAllocated)))336 if (!(*ppv = (PBYTE)malloc(*pcbAllocated))) 337 337 return ERROR_NOT_ENOUGH_MEMORY; 338 338 … … 1779 1779 * 1780 1780 *@@added V0.9.16 (2001-10-19) [umoeller] 1781 *@@changed V0.9.16 (2001-12-18) [umoeller]: fixed error codes 1781 1782 */ 1782 1783 … … 1789 1790 APIRET arc = NO_ERROR; 1790 1791 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)) 1804 1835 { 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 1834 1851 { 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, 1860 1864 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; 1876 1875 } 1877 1876 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; 1879 1884 } 1880 1885 else 1881 arc = ERROR_INVALID_PARAMETER; 1882 } 1886 arc = ERROR_NOT_ENOUGH_MEMORY; 1887 } 1888 else 1889 arc = ERROR_INVALID_PARAMETER; 1883 1890 1884 1891 return (arc);
Note:
See TracChangeset
for help on using the changeset viewer.