Changeset 849 for trunk/dll/wrappers.c


Ignore:
Timestamp:
Sep 30, 2007, 9:10:59 PM (18 years ago)
Author:
Gregg Young
Message:

Initial attempt at wrapper functions for large file support. fNoLargeFileSupport is set to TRUE in init.c for testing. The code builds but isn't functional Setting fNoLargeFileSupport FALSE will yield working code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/wrappers.c

    r847 r849  
    4040{
    4141    APIRET rc;
    42 
     42    if (fNoLargeFileSupport) {
     43        switch (ulInfoLevel) {
     44    case FIL_STANDARDL: {
     45      FILEFINDBUF3 ff3;
     46      ff3 = *(PFILEFINDBUF3)pfindbuf;
     47      ulInfoLevel = FIL_STANDARD;
     48      rc = DosFindFirst(pszFileSpec, phdir, flAttribute, &ff3, cbBuf,
     49                        pcFileNames, ulInfoLevel);
     50      *(PFILEFINDBUF3)pfindbuf = ff3;   // Copy aligned data
     51      ((PFILEFINDBUF3L)pfindbuf) -> cbFile = ff3.cbFile;  // Copy unaligned data
     52      ((PFILEFINDBUF3L)pfindbuf) -> cbFileAlloc = ff3.cbFileAlloc;
     53      ((PFILEFINDBUF3L)pfindbuf) -> attrFile = ff3.attrFile;
     54      ((PFILEFINDBUF3L)pfindbuf) -> cchName = ff3.cchName;
     55      ((PFILEFINDBUF3L)pfindbuf) -> achName[CCHMAXPATHCOMP] = *ff3.achName;
     56      break;
     57    }
     58    case  FIL_QUERYEASIZEL:{
     59      FILEFINDBUF4 ff4;
     60      ff4 = *(PFILEFINDBUF4)pfindbuf;
     61      ulInfoLevel = FIL_QUERYEASIZE;
     62      rc = DosFindFirst(pszFileSpec, phdir, flAttribute, &ff4, cbBuf,
     63                        pcFileNames, ulInfoLevel);
     64      //(PFILEFINDBUF4L)pfindbuf = (PFILEFINDBUF4L)pff4;   // Copy aligned data
     65      ((PFILEFINDBUF4L)pfindbuf) -> oNextEntryOffset = ff4.oNextEntryOffset;
     66      ((PFILEFINDBUF4L)pfindbuf) -> fdateCreation = ff4.fdateCreation;
     67      ((PFILEFINDBUF4L)pfindbuf) -> ftimeCreation = ff4.ftimeCreation;
     68      ((PFILEFINDBUF4L)pfindbuf) -> fdateLastAccess = ff4.fdateLastAccess;
     69      ((PFILEFINDBUF4L)pfindbuf) -> ftimeLastAccess = ff4.ftimeLastAccess;
     70      ((PFILEFINDBUF4L)pfindbuf) -> fdateLastWrite = ff4.fdateLastWrite;
     71      ((PFILEFINDBUF4L)pfindbuf) -> ftimeLastWrite = ff4.ftimeLastWrite;
     72      ((PFILEFINDBUF4L)pfindbuf) -> cbFile = ff4.cbFile;  // Copy unaligned data
     73      ((PFILEFINDBUF4L)pfindbuf) -> cbFileAlloc = ff4.cbFileAlloc;
     74      ((PFILEFINDBUF4L)pfindbuf) -> attrFile = ff4.attrFile;
     75      ((PFILEFINDBUF4L)pfindbuf) -> cbList = ff4.cbList;
     76      ((PFILEFINDBUF4L)pfindbuf) -> cchName = ff4.cchName;
     77      ((PFILEFINDBUF4L)pfindbuf) -> achName[CCHMAXPATHCOMP] = *ff4.achName;
     78      break;
     79    }
     80    default:
     81        Runtime_Error(pszSrcFile, __LINE__, "ulInfoLevel %u unexpected", ulInfoLevel);
     82        rc = ERROR_INVALID_PARAMETER;
     83        }
     84    }
     85    else
    4386    rc = DosFindFirst(pszFileSpec, phdir, flAttribute, pfindbuf, cbBuf,
    4487                      pcFileNames, ulInfoLevel);
     
    5295{
    5396  APIRET rc;
    54 
    55   rc = DosFindNext(hDir, pfindbuf, cbfindbuf, pcFilenames);
     97  if (fNoLargeFileSupport) {
     98    if (((PFILEFINDBUF4L)pfindbuf)->cbList) {
     99      FILEFINDBUF4 ff4;
     100      ff4 = *(PFILEFINDBUF4)pfindbuf;
     101      rc = DosFindNext(hDir, &ff4, cbfindbuf, pcFilenames);
     102      *(PFILEFINDBUF4)pfindbuf = ff4;   // Copy aligned data
     103      ((PFILEFINDBUF4L)pfindbuf) -> cbFile = ff4.cbFile;  // Copy unaligned data
     104      ((PFILEFINDBUF4L)pfindbuf) -> cbFileAlloc = ff4.cbFileAlloc;
     105      ((PFILEFINDBUF4L)pfindbuf) -> attrFile = ff4.attrFile;
     106      ((PFILEFINDBUF4L)pfindbuf) -> cbList = ff4.cbList;
     107      ((PFILEFINDBUF4L)pfindbuf) -> cchName = ff4.cchName;
     108      ((PFILEFINDBUF4L)pfindbuf) -> achName[CCHMAXPATHCOMP] = *ff4.achName;
     109    }
     110    else {
     111      FILEFINDBUF3 ff3;
     112      ff3 = *(PFILEFINDBUF3)pfindbuf;
     113      rc = DosFindNext(hDir, &ff3, cbfindbuf, pcFilenames);
     114      *(PFILEFINDBUF3)pfindbuf = ff3;   // Copy aligned data
     115      ((PFILEFINDBUF3L)pfindbuf) -> cbFile = ff3.cbFile;  // Copy unaligned data
     116      ((PFILEFINDBUF3L)pfindbuf) -> cbFileAlloc = ff3.cbFileAlloc;
     117      ((PFILEFINDBUF3L)pfindbuf) -> attrFile = ff3.attrFile;
     118      ((PFILEFINDBUF3L)pfindbuf) -> cchName = ff3.cchName;
     119      ((PFILEFINDBUF3L)pfindbuf) -> achName[CCHMAXPATHCOMP] = *ff3.achName;
     120    }
     121  }
     122  else
     123    rc = DosFindNext(hDir, pfindbuf, cbfindbuf, pcFilenames);
     124
    56125  return rc;
    57126}
     
    75144                       PVOID pInfoBuf,
    76145                       ULONG cbInfoBuf,
    77                        ULONG flOptions)
    78 {
    79     APIRET rc = DosSetPathInfo(pszPathName, ulInfoLevel, pInfoBuf, cbInfoBuf, flOptions);
     146                       ULONG flOptions)
     147{
    80148    FILESTATUS3 alt_fs3;
    81149    FILESTATUS3L alt_fs3L;
    82150    EAOP2 alt_eaop2;
     151    BOOL large = FALSE;
     152    APIRET rc;
     153    if (fNoLargeFileSupport && ulInfoLevel == FIL_STANDARDL){
     154      large = TRUE;
     155      ulInfoLevel = FIL_STANDARD;
     156    }
     157    rc = DosSetPathInfo(pszPathName, ulInfoLevel, pInfoBuf, cbInfoBuf, flOptions);
    83158    if (rc == ERROR_INVALID_NAME) {
    84159      switch (ulInfoLevel) {
    85160        case FIL_STANDARD:
    86161          alt_fs3 = *(PFILESTATUS3)pInfoBuf;    // Copy
    87           rc = DosSetPathInfo(pszPathName, ulInfoLevel, &alt_fs3, sizeof(alt_fs3), flOptions);
     162          rc = DosSetPathInfo(pszPathName, ulInfoLevel, &alt_fs3, cbInfoBuf, flOptions);
     163          if (fNoLargeFileSupport && large) {
     164            *(PFILESTATUS3)pInfoBuf = alt_fs3;   // Copy aligned data
     165            ((PFILESTATUS3L)pInfoBuf) -> cbFile = alt_fs3.cbFile;  // Copy unaligned data
     166            ((PFILESTATUS3L)pInfoBuf) -> cbFileAlloc = alt_fs3.cbFileAlloc;
     167            ((PFILESTATUS3L)pInfoBuf) -> attrFile = alt_fs3.attrFile;
     168          }
    88169          break;
    89170        case FIL_STANDARDL:
    90171          alt_fs3L = *(PFILESTATUS3L)pInfoBuf;  // Copy
    91           rc = DosSetPathInfo(pszPathName, ulInfoLevel, &alt_fs3L, sizeof(alt_fs3L), flOptions);
     172          rc = DosSetPathInfo(pszPathName, ulInfoLevel, &alt_fs3L, cbInfoBuf, flOptions);
    92173          break;
    93174        case FIL_QUERYEASIZE:
    94175          alt_eaop2 = *(PEAOP2)pInfoBuf;        // Copy
    95           rc = DosSetPathInfo(pszPathName, ulInfoLevel, &alt_eaop2, sizeof(alt_eaop2), flOptions);
     176          rc = DosSetPathInfo(pszPathName, ulInfoLevel, &alt_eaop2, cbInfoBuf, flOptions);
    96177          break;
    97178      default:
     
    103184}
    104185
     186APIRET xDosQueryPathInfo (PSZ pszPathName, ULONG ulInfoLevel, PVOID pInfoBuf, ULONG cbInfoBuf)
     187{
     188  FILESTATUS3 alt_fs3;
     189  FILESTATUS4 alt_fs4;
     190  APIRET rc;
     191  if (fNoLargeFileSupport){
     192  switch (ulInfoLevel) {
     193    case FIL_STANDARDL:
     194          alt_fs3 = *(PFILESTATUS3)pInfoBuf;    // Copy
     195          rc = DosQueryPathInfo(pszPathName, ulInfoLevel, &alt_fs3, cbInfoBuf);
     196          *(PFILESTATUS3)pInfoBuf = alt_fs3;   // Copy aligned data
     197          ((PFILESTATUS3L)pInfoBuf) -> cbFile = alt_fs3.cbFile;  // Copy unaligned data
     198          ((PFILESTATUS3L)pInfoBuf) -> cbFileAlloc = alt_fs3.cbFileAlloc;
     199          ((PFILESTATUS3L)pInfoBuf) -> attrFile = alt_fs3.attrFile;
     200          break;
     201    case FIL_QUERYEASIZEL:
     202          alt_fs4 = *(PFILESTATUS4)pInfoBuf;    // Copy
     203          rc = DosQueryPathInfo(pszPathName, ulInfoLevel, &alt_fs4, cbInfoBuf);
     204          *(PFILESTATUS4)pInfoBuf = alt_fs4;   // Copy aligned data
     205          ((PFILESTATUS4L)pInfoBuf) -> cbFile = alt_fs4.cbFile;  // Copy unaligned data
     206          ((PFILESTATUS4L)pInfoBuf) -> cbFileAlloc = alt_fs4.cbFileAlloc;
     207          ((PFILESTATUS4L)pInfoBuf) -> attrFile = alt_fs4.attrFile;
     208          ((PFILESTATUS4L)pInfoBuf) -> cbList = alt_fs4.cbList;
     209          break;
     210      default:
     211        Runtime_Error(pszSrcFile, __LINE__, "ulInfoLevel %u unexpected", ulInfoLevel);
     212        rc = ERROR_INVALID_PARAMETER;
     213      } // switch
     214  }
     215  else
     216    DosQueryPathInfo (pszPathName, ulInfoLevel, pInfoBuf, cbInfoBuf);
     217  return rc;
     218}
    105219PSZ xfgets(PSZ pszBuf, size_t cMaxBytes, FILE * fp, PCSZ pszSrcFile,
    106220           UINT uiLineNumber)
Note: See TracChangeset for help on using the changeset viewer.