Changeset 826 for trunk/dll


Ignore:
Timestamp:
Sep 1, 2007, 11:50:33 PM (18 years ago)
Author:
Gregg Young
Message:

Add xDosSetPathInfo to work around FILESTATUSx buffer crossing 64k boundry

Location:
trunk/dll
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/attribs.c

    r793 r826  
    1111  14 Jul 06 SHL Use Runtime_Error
    1212  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     13  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    1314
    1415***********************************************************************/
     
    377378          else if (state == 1)
    378379            fi.attrFile |= FILE_ARCHIVED;
    379           DosSetPathInfo(li->list[x], FIL_STANDARD, (PVOID) & fi,
     380          xDosSetPathInfo(li->list[x], FIL_STANDARD, (PVOID) & fi,
    380381                         (ULONG) sizeof(FILESTATUS3), 0L);
    381382        }
  • trunk/dll/autoview.c

    r793 r826  
    1919  30 Mar 07 GKY Remove GetPString for window class names
    2020  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     21  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    2122
    2223***********************************************************************/
     
    194195    pfealist->cbList = 13L + (ULONG) pfealist->list[0].cbName +
    195196      (ULONG) pfealist->list[0].cbValue;
    196     rc = DosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
     197    rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    197198                        (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
    198199    DosFreeMem(pfealist);
  • trunk/dll/copyf.c

    r793 r826  
    1717  14 Jul 06 SHL Use Runtime_Error
    1818  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     19  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    1920
    2021***********************************************************************/
     
    299300    eaop.oError = 0L;
    300301    DosError(FERR_DISABLEHARDERR);
    301     rc = DosSetPathInfo(filename,
     302    rc = xDosSetPathInfo(filename,
    302303                        FIL_QUERYEASIZE,
    303304                        (PVOID) & eaop, (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
     
    667668    fsi.attrFile = 0;
    668669    DosError(FERR_DISABLEHARDERR);
    669     if (!DosSetPathInfo(filename,
     670    if (!xDosSetPathInfo(filename,
    670671                        FIL_STANDARD, &fsi, sizeof(FILESTATUS3), 0L))
    671672      ret = 0;
  • trunk/dll/eas.c

    r795 r826  
    2020  06 Aug 07 GKY Increase Subject EA to 1024
    2121  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     22  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    2223
    2324***********************************************************************/
     
    206207              eaop.fpFEA2List = pfealist;
    207208              eaop.oError = 0;
    208               DosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
     209              xDosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    209210                             (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
    210211              WinDismissDlg(hwnd, 1);
     
    906907          eaop.fpFEA2List = pfealist;
    907908          eaop.oError = 0;
    908           rc = DosSetPathInfo(eap->filename, FIL_QUERYEASIZE, (PVOID) & eaop,
     909          rc = xDosSetPathInfo(eap->filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    909910                              (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
    910911          free(pfealist);
    911912          if (rc)
    912913            Dos_Error(MB_CANCEL, rc, hwnd, pszSrcFile, __LINE__,
    913                       "DosSetPathInfo");
     914                      "xDosSetPathInfo");
    914915          else {
    915916            sSelect = 0;
     
    11521153                       (ULONG)pfealist->list[0].cbValue;
    11531154
    1154     rc = DosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
     1155    rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    11551156                        (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
    11561157    if (rc) {
  • trunk/dll/fm3dll.h

    r796 r826  
    6161  19 Aug 07 SHL Update SaveDirCnrState return
    6262  21 Aug 07 GKY Make Subject column in dircnr sizable and movable from the rigth to the left pane
     63  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    6364
    6465***********************************************************************/
     
    13171318
    13181319/* wrappers.c */
     1320APIRET APIENTRY  xDosSetPathInfo(PSZ   pszPathName,
     1321                                 ULONG ulInfoLevel,
     1322                                 PVOID pInfoBuf,
     1323                                 ULONG cbInfoBuf,
     1324                                 ULONG flOptions);
    13191325PSZ xfgets(PSZ pszBuf, size_t cMaxBytes, FILE * fp, PCSZ pszSrcFile,
    13201326           UINT uiLineNumber);
  • trunk/dll/init.c

    r803 r826  
    3535  23 Aug 07 SHL Use BldFullPathName
    3636  25 Aug 07 SHL Work around DosSetPathInfo kernel defect
     37  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    3738
    3839***********************************************************************/
     
    670671      if (fs3.attrFile & (FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM)) {
    671672        fs3.attrFile &= ~(FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM);
    672         rc = DosSetPathInfo(inipath, FIL_STANDARD, &fs3, sizeof(fs3), 0);
     673        rc = xDosSetPathInfo(inipath, FIL_STANDARD, &fs3, sizeof(fs3), 0);
    673674        if (rc) {
    674           /* Some kernels to do not handle fs3 buffers that cross 64K boundaries
    675              and return ERROR_INVALID_NAME
    676              If code works around the problem because if fs3 crosses the boundary
    677              fsa2 will not because we don't have enough data on the stack for this
    678              to occur 25 Aug 07 SHL
    679           */
    680           if (rc == ERROR_INVALID_NAME) {
    681             FILESTATUS3 fs3x;
    682             fs3x = fs3;
    683             rc = DosSetPathInfo(inipath, FIL_STANDARD, &fs3x, sizeof(fs3x), 0);
    684           }
    685           if (rc) {
    686             Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
     675          Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
    687676                      GetPString(IDS_INIREADONLYTEXT), inipath);
    688677          }
    689         }
     678
    690679      }
    691680    }
  • trunk/dll/misc.c

    r796 r826  
    3333  14 Aug 07 SHL Delete obsoletes
    3434  14 Aug 07 SHL Move #pragma alloc_text to end for OpenWatcom compat
     35  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    3536
    3637***********************************************************************/
     
    747748            eaop.fpFEA2List = pfealist;
    748749            eaop.oError = 0L;
    749             rc = DosSetPathInfo(pci->pszFileName,
     750            rc = xDosSetPathInfo(pci->pszFileName,
    750751                                FIL_QUERYEASIZE,
    751752                                (PVOID) & eaop, sizeof(EAOP2), DSPI_WRTTHRU);
  • trunk/dll/subj.c

    r793 r826  
    1313  06 Aug 07 GKY Increase Subject EA to 1024
    1414  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     15  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    1516
    1617***********************************************************************/
     
    136137        eaop.fpFEA2List = pfealist;
    137138        eaop.oError = 0L;
    138         rc = DosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    139                             (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
     139        rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
     140                             (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
    140141        DosFreeMem(pfealist);
    141142        if (rc) {
  • trunk/dll/wrappers.c

    r794 r826  
    1212  18 Aug 06 SHL Correct Runtime_Error line number report
    1313  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     14  01 Sep 07 GKY Add xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    1415
    1516***********************************************************************/
    1617
    1718#define INCL_WIN
     19#define INCL_DOS
     20#define INCL_DOSERRORS
    1821#include <os2.h>
    1922
     
    2528#include "fm3str.h"
    2629
     30APIRET APIENTRY  xDosSetPathInfo(PSZ   pszPathName,
     31                                 ULONG ulInfoLevel,
     32                                 PVOID pInfoBuf,
     33                                 ULONG cbInfoBuf,
     34                                 ULONG flOptions)
     35{
     36    APIRET rc;
     37
     38    rc = DosSetPathInfo(pszPathName, ulInfoLevel, pInfoBuf, cbInfoBuf, flOptions);
     39    if (rc)
     40      /* Some kernels to do not handle fs3 buffers that cross 64K boundaries
     41        and return ERROR_INVALID_NAME
     42        If code works around the problem because if fs3 crosses the boundary
     43        fsa2 will not because we don't have enough data on the stack for this
     44        to occur 25 Aug 07 SHL
     45      */
     46        if (rc == ERROR_INVALID_NAME){
     47          if (ulInfoLevel == FIL_STANDARD){
     48            FILESTATUS3 fs3x;
     49            fs3x = *(PFILESTATUS3) pInfoBuf;
     50            rc = DosSetPathInfo(pszPathName, ulInfoLevel, &fs3x, sizeof(fs3x), flOptions);
     51          }
     52          else {
     53            EAOP2 eaop2x;
     54            eaop2x = *(PEAOP2) pInfoBuf;
     55            rc = DosSetPathInfo(pszPathName, ulInfoLevel, &eaop2x, sizeof(eaop2x), flOptions);
     56          }
     57        }
     58    return rc;
     59}
    2760
    2861PSZ xfgets(PSZ pszBuf, size_t cMaxBytes, FILE * fp, PCSZ pszSrcFile,
Note: See TracChangeset for help on using the changeset viewer.