Changeset 827


Ignore:
Timestamp:
Sep 2, 2007, 8:32:14 PM (17 years ago)
Author:
Steven Levine
Message:

Future proof xDosSetPathInfo
Clean up callers

Location:
trunk/dll
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/dll/attribs.c

    r826 r827  
    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
     13  01 Sep 07 GKY Use xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    1414
    1515***********************************************************************/
     
    378378          else if (state == 1)
    379379            fi.attrFile |= FILE_ARCHIVED;
    380           xDosSetPathInfo(li->list[x], FIL_STANDARD, (PVOID) & fi,
    381                          (ULONG) sizeof(FILESTATUS3), 0L);
     380          xDosSetPathInfo(li->list[x], FIL_STANDARD, &fi, sizeof(fi), 0);
    382381        }
    383382        WinDismissDlg(hwnd, 1);
  • TabularUnified trunk/dll/autoview.c

    r826 r827  
    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
     21  01 Sep 07 GKY Use xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    2222
    2323***********************************************************************/
     
    195195    pfealist->cbList = 13L + (ULONG) pfealist->list[0].cbName +
    196196      (ULONG) pfealist->list[0].cbValue;
    197     rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    198                         (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
     197    rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE,
     198                         &eaop, sizeof(eaop), DSPI_WRTTHRU);
    199199    DosFreeMem(pfealist);
    200200    if (!rc)
  • TabularUnified trunk/dll/copyf.c

    r826 r827  
    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
     19  01 Sep 07 GKY Use xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    2020
    2121***********************************************************************/
     
    300300    eaop.oError = 0L;
    301301    DosError(FERR_DISABLEHARDERR);
    302     rc = xDosSetPathInfo(filename,
    303                         FIL_QUERYEASIZE,
    304                         (PVOID) & eaop, (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
     302    rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE,
     303                         &eaop, sizeof(eaop), DSPI_WRTTHRU);
    305304    DosFreeMem(pfealist);
    306305    if (rc)
     
    314313  BOOL ret = FALSE;
    315314
    316   /* NOTE:  newname should be CCHMAXPATH chars long! */
     315  /* NOTE: newname should be CCHMAXPATH chars long! */
    317316
    318317  if (strchr(newname, '*') || strchr(newname, '?')) {
     
    375374
    376375          /* truncate directory name */
    377           /* create that directory   */
     376          /* create that directory */
    378377          /* update containers for name used */
    379378
     
    402401   *  -2:  source didn't exist
    403402   *  -3:  bad type
    404    *   anything else:  API return
     403   *   anything else: API return
    405404   */
    406405
     
    665664
    666665  DosError(FERR_DISABLEHARDERR);
    667   if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsi, sizeof(FILESTATUS3))) {
     666  if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsi, sizeof(fsi))) {
    668667    fsi.attrFile = 0;
    669668    DosError(FERR_DISABLEHARDERR);
    670     if (!xDosSetPathInfo(filename,
    671                         FIL_STANDARD, &fsi, sizeof(FILESTATUS3), 0L))
     669    if (!xDosSetPathInfo(filename, FIL_STANDARD, &fsi, sizeof(fsi), 0))
    672670      ret = 0;
    673671  }
     
    675673}
    676674
    677 INT wipeallf(CHAR * string, ...)
     675INT wipeallf(CHAR *string, ...)
    678676{
    679677  /* unlink everything from directory on down... */
  • TabularUnified trunk/dll/eas.c

    r826 r827  
    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
     22  01 Sep 07 GKY Use xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    2323
    2424***********************************************************************/
     
    207207              eaop.fpFEA2List = pfealist;
    208208              eaop.oError = 0;
    209               xDosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    210                              (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
     209              xDosSetPathInfo(filename, FIL_QUERYEASIZE,
     210                              &eaop, sizeof(eaop), DSPI_WRTTHRU);
    211211              WinDismissDlg(hwnd, 1);
    212212            }
     
    907907          eaop.fpFEA2List = pfealist;
    908908          eaop.oError = 0;
    909           rc = xDosSetPathInfo(eap->filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    910                               (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
     909          rc = xDosSetPathInfo(eap->filename, FIL_QUERYEASIZE,
     910                               &eaop, sizeof(eaop), DSPI_WRTTHRU);
    911911          free(pfealist);
    912912          if (rc)
     
    11531153                       (ULONG)pfealist->list[0].cbValue;
    11541154
    1155     rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    1156                         (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
     1155    rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE,
     1156                         &eaop, sizeof(eaop), DSPI_WRTTHRU);
    11571157    if (rc) {
    11581158      DosFreeMem(pfealist);
  • TabularUnified trunk/dll/init.c

    r826 r827  
    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
     37  01 Sep 07 GKY Use xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    3838
    3939***********************************************************************/
  • TabularUnified trunk/dll/misc.c

    r826 r827  
    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
     35  01 Sep 07 GKY Use xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    3636
    3737***********************************************************************/
     
    521521      pfi->flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR;
    522522      if (isCompCnr)
    523         pfi->flData |= CFA_FIREADONLY;
     523        pfi->flData |= CFA_FIREADONLY;
    524524      pfi->flTitle = CFA_LEFT | CFA_FITITLEREADONLY;
    525525      pfi->pTitleData = isCompCnr ? GetPString(IDS_STATUS) :
     
    541541      pfi->flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR;
    542542      if (isCompCnr)
    543         pfi->flData |= CFA_FIREADONLY;
     543        pfi->flData |= CFA_FIREADONLY;
    544544      pfi->flTitle = CFA_LEFT | CFA_FITITLEREADONLY;
    545545      pfi->pTitleData = isCompCnr ? GetPString(IDS_STATUS) :
     
    748748            eaop.fpFEA2List = pfealist;
    749749            eaop.oError = 0L;
    750             rc = xDosSetPathInfo(pci->pszFileName,
    751                                 FIL_QUERYEASIZE,
    752                                 (PVOID) & eaop, sizeof(EAOP2), DSPI_WRTTHRU);
     750            rc = xDosSetPathInfo(pci->pszFileName, FIL_QUERYEASIZE,
     751                                 &eaop, sizeof(eaop), DSPI_WRTTHRU);
    753752            DosFreeMem(pfealist);
    754753            if (rc)
  • TabularUnified trunk/dll/subj.c

    r826 r827  
    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
     15  01 Sep 07 GKY Use xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
    1616
    1717***********************************************************************/
     
    136136        eaop.fpGEA2List = (PGEA2LIST) 0;
    137137        eaop.fpFEA2List = pfealist;
    138         eaop.oError = 0L;
    139         rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop,
    140                              (ULONG) sizeof(EAOP2), DSPI_WRTTHRU);
     138        eaop.oError = 0;
     139        rc = xDosSetPathInfo(filename, FIL_QUERYEASIZE,
     140                             &eaop, sizeof(eaop), DSPI_WRTTHRU);
    141141        DosFreeMem(pfealist);
    142142        if (rc) {
  • TabularUnified trunk/dll/wrappers.c

    r826 r827  
    2828#include "fm3str.h"
    2929
    30 APIRET APIENTRY  xDosSetPathInfo(PSZ   pszPathName,
    31                                  ULONG ulInfoLevel,
    32                                  PVOID pInfoBuf,
    33                                  ULONG cbInfoBuf,
    34                                  ULONG flOptions)
     30static PSZ pszSrcFile = __FILE__;
     31
     32/**
     33 * Wrap DosSetPathInfo to avoid spurious ERROR_INVALID_NAME returns
     34 * Some kernels to do not correctly handle FILESTATUS3 and PEAOP2 buffers
     35 * that cross a 64K boundary.
     36 * When this occurs, they return ERROR_INVALID_NAME.
     37 * This code works around the problem because if the passed buffer crosses
     38 * the boundary the alternate buffer will not because both are on the stack
     39 * and we don't put enough additional data on the stack for this to occur.
     40 * It is caller's responsitibility to report errors
     41 * @param pInfoBuf pointer to FILESTATUS3 or EAOP2 buffer
     42 * @param ulInfoLevel FIL_STANDARD or FIL_QUERYEASIZE
     43 * @returns Same as DosSetPathInfo
     44 */
     45
     46APIRET APIENTRY xDosSetPathInfo(PSZ pszPathName,
     47                                ULONG ulInfoLevel,
     48                                PVOID pInfoBuf,
     49                                ULONG cbInfoBuf,
     50                                ULONG flOptions)
    3551{
    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         }
     52    APIRET rc = DosSetPathInfo(pszPathName, ulInfoLevel, pInfoBuf, cbInfoBuf, flOptions);
     53    FILESTATUS3 alt_fs3;
     54    EAOP2 alt_eaop2;
     55    if (rc == ERROR_INVALID_NAME) {
     56      switch (ulInfoLevel) {
     57      case FIL_STANDARD:
     58        alt_fs3 = *(PFILESTATUS3)pInfoBuf;      // Copy
     59        rc = DosSetPathInfo(pszPathName, ulInfoLevel, &alt_fs3, sizeof(alt_fs3), flOptions);
     60        break;
     61      case FIL_QUERYEASIZE:
     62        alt_eaop2 = *(PEAOP2)pInfoBuf;  // Copy
     63        rc = DosSetPathInfo(pszPathName, ulInfoLevel, &alt_eaop2, sizeof(alt_eaop2), flOptions);
     64        break;
     65      default:
     66        Runtime_Error(pszSrcFile, __LINE__, "ulInfoLevel %u unexpected", ulInfoLevel);
     67        rc = ERROR_INVALID_PARAMETER;
     68      } // switch
     69    }
    5870    return rc;
    5971}
Note: See TracChangeset for help on using the changeset viewer.