Changeset 299


Ignore:
Timestamp:
Jul 31, 2017, 4:38:50 AM (3 years ago)
Author:
Valery V. Sedletski
Message:
  • Make TranslateName? implementation for exFAT.
  • Fix loaddskf on a FAT12 floppy mounted by fat32.ifs. So, SetVPB kernel routine, which overwrote vpfsd with FAT-specific data, doesnt gets called, and hence, no IPE when fat32.ifs detects it. Also, prevent calling MarkDiskStatus? in FS_FLUSHBUF and FS_SHUTDOWN on FAT12 removables, this avoids another trap in DoVolIO kernel routine when doing FS_FLASHBUF.
  • Fix a typo in DeleteFatChain?, so ulBmpSector is used, instead of ulSector.


Location:
trunk/src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/ifs/fat32a.c

    r298 r299  
    258258      }
    259259
    260    if( TranslateName(pVolInfo, 0L, pSrc, szSrcLongName, TRANSLATE_SHORT_TO_LONG ))
     260   if( TranslateName(pVolInfo, 0L, NULL, pSrc, szSrcLongName, TRANSLATE_SHORT_TO_LONG ))
    261261      strcpy( szSrcLongName, pSrc );
    262262
    263    if( TranslateName(pVolInfo, 0L, pDst, szDstLongName, TRANSLATE_SHORT_TO_LONG ))
     263   if( TranslateName(pVolInfo, 0L, NULL, pDst, szDstLongName, TRANSLATE_SHORT_TO_LONG ))
    264264      strcpy( szDstLongName, pDst );
    265265
     
    684684      }
    685685
    686    if( TranslateName(pVolInfo, 0L, pFile, szLongName, TRANSLATE_SHORT_TO_LONG ))
     686   if( TranslateName(pVolInfo, 0L, NULL, pFile, szLongName, TRANSLATE_SHORT_TO_LONG ))
    687687      strcpy( szLongName, pFile );
    688688
     
    925925      }
    926926
    927    if (!MarkDiskStatus(pVolInfo, pVolInfo->fDiskCleanOnMount))
    928       {
    929       rc = ERROR_SECTOR_NOT_FOUND;
    930       goto FS_FLUSHEXIT;
     927   if (! pVolInfo->fRemovable && (pVolInfo->bFatType != FAT_TYPE_FAT12) )
     928      {
     929      // ignore dirty status on floppies (and FAT12)
     930      if (!MarkDiskStatus(pVolInfo, pVolInfo->fDiskCleanOnMount))
     931         {
     932         rc = ERROR_SECTOR_NOT_FOUND;
     933         goto FS_FLUSHEXIT;
     934         }
    931935      }
    932936FS_FLUSHEXIT:
     
    12731277         if (pVolInfo)
    12741278         {
    1275             TranslateName(pVolInfo, 0L, (PSZ)pParm, szShortPath, TRANSLATE_LONG_TO_SHORT);
     1279            TranslateName(pVolInfo, 0L, NULL, (PSZ)pParm, szShortPath, TRANSLATE_LONG_TO_SHORT);
    12761280            if( strlen( szShortPath ) >= cbData )
    12771281            {
     
    25122516
    25132517            case DSK_SETDEVICEPARAMS :
     2518               {
     2519               #define IODC_SP_MEDIA 2
     2520               typedef struct
     2521                  {
     2522                  BYTE bCmdInfo;
     2523                  BYTE bUnit;
     2524                  } ParamPkt;
     2525
     2526               ParamPkt *pkt;
     2527
    25142528               if (pcbData)
    25152529                  *pcbData = sizeof (BIOSPARAMETERBLOCK);
     
    25182532               pBPB = (PBIOSPARAMETERBLOCK)pData;
    25192533
    2520                pVolInfo->SectorsPerCluster = pBPB->bSectorsPerCluster;
    2521                pVolInfo->BootSect.bpb.ReservedSectors = pBPB->usReservedSectors;
    2522                pVolInfo->BootSect.bpb.NumberOfFATs = pBPB->cFATs;
    2523                if (pVolInfo->bFatType < FAT_TYPE_FAT32)
    2524                   {
    2525                   pVolInfo->BootSect.bpb.RootDirEntries = pBPB->cRootEntries;
    2526                   pVolInfo->BootSect.bpb.BigSectorsPerFat = ((PBPB0)pBPB)->SectorsPerFat;
    2527                   }
    2528                else if (pVolInfo->bFatType == FAT_TYPE_FAT32)
    2529                   {
    2530                      pVolInfo->BootSect.bpb.BigSectorsPerFat = ((PBPB)pBPB)->BigSectorsPerFat;
    2531                   }
     2534               pkt = (ParamPkt *)pParm;
     2535
     2536               // flip IODC_SP_MEDIA (2) bit, for kernel not to call SetVPB
     2537               // (otherwise, the kernel will hurt VPB when doing loaddskf
     2538               // on a floppy device)
     2539               pkt->bCmdInfo &= ~IODC_SP_MEDIA;
    25322540
    25332541               rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn,
    25342542                  usCat, usFunc, pParm, cbParm, pData, cbData);
    2535                if (!rc) {
    2536 
    2537                   if (pcbData) {
    2538                     *pcbData = sizeof (BIOSPARAMETERBLOCK);
    2539                   }
    2540 
    2541                   if (pcbParm) {
    2542                     *pcbParm = cbParm;
     2543
     2544               if (!rc)
     2545                  {
     2546                  if (pcbData)
     2547                     {
     2548                     *pcbData = sizeof (BIOSPARAMETERBLOCK);
     2549                     }
     2550
     2551                  if (pcbParm)
     2552                     {
     2553                     *pcbParm = cbParm;
     2554                     }
    25432555                  }
    25442556               }
    2545 
    25462557               break;
    25472558
     
    33433354      }
    33443355
    3345    if( TranslateName(pVolInfo, 0L, pSrc, szSrcLongName, TRANSLATE_SHORT_TO_LONG ))
     3356   if( TranslateName(pVolInfo, 0L, NULL, pSrc, szSrcLongName, TRANSLATE_SHORT_TO_LONG ))
    33463357      strcpy( szSrcLongName, pSrc );
    33473358
    3348    if( TranslateName(pVolInfo, 0L, pDst, szDstLongName, TRANSLATE_SHORT_TO_LONG ))
     3359   if( TranslateName(pVolInfo, 0L, NULL, pDst, szDstLongName, TRANSLATE_SHORT_TO_LONG ))
    33493360      strcpy( szDstLongName, pDst );
    33503361
     
    35343545         goto FS_MOVEEXIT;
    35353546         }
    3536       rc = TranslateName(pVolInfo, 0L, pSrc, szName, TRANSLATE_AUTO);
     3547      rc = TranslateName(pVolInfo, 0L, NULL, pSrc, szName, TRANSLATE_AUTO);
    35373548      if (rc)
    35383549         {
     
    37613772
    37623773            UpdateFSInfo(pVolInfo);
    3763             MarkDiskStatus(pVolInfo, pVolInfo->fDiskCleanOnMount);
     3774            if (! pVolInfo->fRemovable && (pVolInfo->bFatType != FAT_TYPE_FAT12) )
     3775               {
     3776               MarkDiskStatus(pVolInfo, pVolInfo->fDiskCleanOnMount);
     3777               }
    37643778         }
    37653779      }
     
    62486262         {
    62496263         ulBmpSector = GetAllocBitmapSec(pVolInfo, ulCluster);
    6250          ReadBmpSector(pVolInfo, ulSector);
     6264         ReadBmpSector(pVolInfo, ulBmpSector);
    62516265         ReleaseFat(pVolInfo);
    62526266         }
  • trunk/src/ifs/fat32b.c

    r297 r299  
    3232USHORT GetBuf3Access(PVOLINFO pVolInfo, PSZ pszName);
    3333VOID   ReleaseBuf3(PVOLINFO pVolInfo);
    34 
    35 static ULONG ulSemRWBuf1 = 0UL;
    36 static ULONG ulSemRWBuf2 = 0UL;
    37 static ULONG ulSemRWBuf3 = 0UL;
    3834
    3935
     
    645641
    646642
    647 USHORT TranslateName(PVOLINFO pVolInfo, ULONG ulDirCluster, PSZ pszPath, PSZ pszTarget, USHORT usTranslate)
     643USHORT TranslateName(PVOLINFO pVolInfo, ULONG ulDirCluster, PSHOPENINFO pDirSHInfo, PSZ pszPath, PSZ pszTarget, USHORT usTranslate)
    648644{
    649645BYTE szShortName[13];
     
    665661USHORT usSectorsPerBlock;
    666662ULONG  ulDirEntries = 0;
     663DIRENTRY1 Dir;
     664USHORT usNumSecondary;
     665USHORT usFileAttr;
     666ULONG  ulRet;
    667667
    668668   MessageL(LOG_FUNCS, "TranslateName%m: %s", 0x0034, pszPath);
     
    769769            while (usMode == MODE_SCAN && pDir < pDirEnd)
    770770               {
    771                if (pDir->bAttr == FILE_LONGNAME)
     771#ifdef EXFAT
     772               if (pVolInfo->bFatType < FAT_TYPE_EXFAT)
    772773                  {
    773                   fGetLongName(pDir, pszLongName, FAT32MAXPATHCOMP, &bCheck);
     774#endif
     775                  if (pDir->bAttr == FILE_LONGNAME)
     776                     {
     777                     fGetLongName(pDir, pszLongName, FAT32MAXPATHCOMP, &bCheck);
     778                     }
     779                  else if ((pDir->bAttr & 0x0F) != FILE_VOLID)
     780                     {
     781                     MakeName(pDir, szShortName, sizeof szShortName);
     782                     FSH_UPPERCASE(szShortName, sizeof szShortName, szShortName);
     783
     784                     if (bCheck != GetVFATCheckSum(pDir))
     785                        memset(pszLongName, 0, FAT32MAXPATHCOMP);
     786
     787                     /* support for the FAT32 variation of WinNT family */
     788                     if ( !*pszLongName && HAS_WINNT_EXT( pDir->fEAS ))
     789                        {
     790                        PBYTE pDot;
     791
     792                        MakeName( pDir, pszLongName, sizeof( pszLongName ));
     793                        pDot = strchr( pszLongName, '.' );
     794
     795                        if ( HAS_WINNT_EXT_NAME( pDir->fEAS )) /* name part is lower case */
     796                           {
     797                              if( pDot )
     798                                  *pDot = 0;
     799
     800                              strlwr( pszLongName );
     801
     802                              if( pDot )
     803                                  *pDot = '.';
     804                           }
     805
     806                        if( pDot && HAS_WINNT_EXT_EXT( pDir->fEAS )) /* ext part is lower case */
     807                            strlwr( pDot + 1 );
     808                        }
     809
     810                     if (!strlen(pszLongName))
     811                        strcpy(pszLongName, szShortName);
     812                     FSH_UPPERCASE(pszLongName, FAT32MAXPATHCOMP, pszUpperName);
     813
     814                     if (usTranslate == TRANSLATE_LONG_TO_SHORT) /* OS/2 session, translate to DOS */
     815                        {
     816                        if (!stricmp(pszUpperName, pszUpperPart) ||
     817                            !stricmp(szShortName,  pszUpperPart))
     818                           {
     819                           strcat(pszTarget, szShortName);
     820                           pszTarget += strlen(pszTarget);
     821                           fFound = TRUE;
     822                           }
     823                        }
     824                     else /* translate from DOS to OS/2 */
     825                        {
     826                        if (!stricmp(szShortName,  pszUpperPart) ||
     827                            !stricmp(pszUpperName, pszUpperPart))
     828                           {
     829                           strcat(pszTarget, pszLongName);
     830                           pszTarget += strlen(pszTarget);
     831                           fFound = TRUE;
     832                           }
     833                        }
     834
     835                     if (fFound)
     836                        {
     837                        ulCluster = (ULONG)pDir->wClusterHigh * 0x10000L + pDir->wCluster;
     838                        ulCluster &= pVolInfo->ulFatEof;
     839                        if (strlen(pszPath))
     840                           {
     841                           if (pDir->bAttr & FILE_DIRECTORY)
     842                              {
     843                              usMode = MODE_START;
     844                              break;
     845                              }
     846                           ulCluster = pVolInfo->ulFatEof;
     847                           }
     848                        usMode = MODE_RETURN;
     849                        break;
     850                        }
     851                     memset(pszLongName, 0, FAT32MAXPATHCOMP);
     852                     }
     853#ifdef EXFAT
    774854                  }
    775                else if ((pDir->bAttr & 0x0F) != FILE_VOLID)
     855               else
    776856                  {
    777 
    778                   MakeName(pDir, szShortName, sizeof szShortName);
    779                   FSH_UPPERCASE(szShortName, sizeof szShortName, szShortName);
    780 
    781                   if (bCheck != GetVFATCheckSum(pDir))
    782                      memset(pszLongName, 0, FAT32MAXPATHCOMP);
    783 
    784                    /* support for the FAT32 variation of WinNT family */
    785                    if( !*pszLongName && HAS_WINNT_EXT( pDir->fEAS ))
    786                    {
    787                        PBYTE pDot;
    788 
    789                        MakeName( pDir, pszLongName, sizeof( pszLongName ));
    790                        pDot = strchr( pszLongName, '.' );
    791 
    792                        if( HAS_WINNT_EXT_NAME( pDir->fEAS )) /* name part is lower case */
    793                        {
    794                            if( pDot )
    795                                *pDot = 0;
    796 
    797                            strlwr( pszLongName );
    798 
    799                            if( pDot )
    800                                *pDot = '.';
    801                        }
    802 
    803                        if( pDot && HAS_WINNT_EXT_EXT( pDir->fEAS )) /* ext part is lower case */
    804                            strlwr( pDot + 1 );
    805                    }
    806 
    807                   if (!strlen(pszLongName))
    808                      strcpy(pszLongName, szShortName);
    809                   FSH_UPPERCASE(pszLongName, FAT32MAXPATHCOMP, pszUpperName);
    810 
    811                   if (usTranslate == TRANSLATE_LONG_TO_SHORT) /* OS/2 session, translate to DOS */
    812                      {
    813                      if (!stricmp(pszUpperName, pszUpperPart) ||
    814                          !stricmp(szShortName,  pszUpperPart))
    815                         {
    816                         strcat(pszTarget, szShortName);
    817                         pszTarget += strlen(pszTarget);
    818                         fFound = TRUE;
    819                         }
    820                      }
    821                   else /* translate from DOS to OS/2 */
    822                      {
    823                      if (!stricmp(szShortName,  pszUpperPart) ||
    824                          !stricmp(pszUpperName, pszUpperPart))
    825                         {
    826                         strcat(pszTarget, pszLongName);
    827                         pszTarget += strlen(pszTarget);
    828                         fFound = TRUE;
    829                         }
    830                      }
    831 
    832                   if (fFound)
    833                      {
    834                      ulCluster = (ULONG)pDir->wClusterHigh * 0x10000L + pDir->wCluster;
    835                      ulCluster &= pVolInfo->ulFatEof;
    836                      if (strlen(pszPath))
    837                         {
    838                         if (pDir->bAttr & FILE_DIRECTORY)
    839                            {
    840                            usMode = MODE_START;
    841                            break;
    842                            }
    843                         ulCluster = pVolInfo->ulFatEof;
    844                         }
     857                  PDIRENTRY1 pDir1 = (PDIRENTRY1)pDir;
     858
     859                  if (pDir1->bEntryType == ENTRY_TYPE_EOD)
     860                     {
     861                     ulCluster = pVolInfo->ulFatEof;
    845862                     usMode = MODE_RETURN;
    846863                     break;
    847864                     }
    848                   memset(pszLongName, 0, FAT32MAXPATHCOMP);
     865                  else if (pDir1->bEntryType & ENTRY_TYPE_IN_USE_STATUS)
     866                     {
     867                     if (pDir1->bEntryType == ENTRY_TYPE_FILE_NAME)
     868                        {
     869                        usNumSecondary--;
     870                        fGetLongName1(pDir1, pszLongName, FAT32MAXPATHCOMP);
     871
     872                        if (!usNumSecondary)
     873                           {
     874                           //MakeName(pDir1, szShortName, sizeof szShortName);
     875                           //FSH_UPPERCASE(szShortName, sizeof szShortName, szShortName);
     876
     877                           //if (bCheck != GetVFATCheckSum(pDir1))
     878                           //   memset(pszLongName, 0, FAT32MAXPATHCOMP);
     879#if 0
     880                           /* support for the FAT32 variation of WinNT family */
     881                           if ( !*pszLongName && HAS_WINNT_EXT( pDir1->u.File.fEAS ))
     882                              {
     883                              PBYTE pDot;
     884
     885                              MakeName( pDir1, pszLongName, sizeof( pszLongName ));
     886                              pDot = strchr( pszLongName, '.' );
     887
     888                              if ( HAS_WINNT_EXT_NAME( pDir->u.File.fEAS )) /* name part is lower case */
     889                                 {
     890                                 if( pDot )
     891                                    *pDot = 0;
     892
     893                                 strlwr( pszLongName );
     894
     895                                 if( pDot )
     896                                    *pDot = '.';
     897                                 }
     898
     899                              if ( pDot && HAS_WINNT_EXT_EXT( pDir->u.File.fEAS )) /* ext part is lower case */
     900                                 strlwr( pDot + 1 );
     901                              }
     902#endif
     903                           //if (!strlen(pszLongName))
     904                           //   strcpy(pszLongName, szShortName);
     905                           FSH_UPPERCASE(pszLongName, FAT32MAXPATHCOMP, pszUpperName);
     906
     907                           if (usTranslate == TRANSLATE_LONG_TO_SHORT) /* OS/2 session, translate to DOS */
     908                              {
     909                              MakeShortName(pVolInfo, ulDirCluster, pszUpperName, szShortName);
     910                              if (
     911                                   ( !stricmp(pszUpperName, pszUpperPart) ||
     912                                     !stricmp(szShortName,  pszUpperPart) ) )
     913                                 {
     914                                 strcat(pszTarget, szShortName);
     915                                 pszTarget += strlen(pszTarget);
     916                                 fFound = TRUE;
     917                                 }
     918                              }
     919                           else /* translate from DOS to OS/2 */
     920                              {
     921                              if (//!stricmp(szShortName,  pszUpperPart) ||
     922                                  !stricmp(pszUpperName, pszUpperPart))
     923                                 {
     924                                 strcat(pszTarget, pszLongName);
     925                                 pszTarget += strlen(pszTarget);
     926                                 fFound = TRUE;
     927                                 }
     928                              }
     929
     930                           if (fFound)
     931                              {
     932                              //ulCluster = (ULONG)pDir->wClusterHigh * 0x10000L + pDir->wCluster;
     933                              //ulCluster &= pVolInfo->ulFatEof;
     934                              ulCluster = ulRet;
     935                              if (strlen(pszPath))
     936                                 {
     937                                 if (pDir1->u.File.usFileAttr & FILE_DIRECTORY)
     938                                    {
     939                                    usMode = MODE_START;
     940                                    break;
     941                                    }
     942                                 ulCluster = pVolInfo->ulFatEof;
     943                                 }
     944                              usMode = MODE_RETURN;
     945                              break;
     946                              }
     947                           //memset(pszLongName, 0, FAT32MAXPATHCOMP);
     948                           }
     949                        }
     950                     else if (pDir1->bEntryType == ENTRY_TYPE_STREAM_EXT)
     951                        {
     952                        usNumSecondary--;
     953                        ulRet = pDir1->u.Stream.ulFirstClus;
     954                        //if (pDirEntryStream)
     955                        //   memcpy(pDirEntryStream, pDir1, sizeof(DIRENTRY1));
     956                        }
     957                     else if (pDir1->bEntryType == ENTRY_TYPE_FILE)
     958                        {
     959                        usNumSecondary = pDir1->u.File.bSecondaryCount;
     960                        usFileAttr = pDir1->u.File.usFileAttr;
     961                        memcpy(&Dir, pDir1, sizeof (DIRENTRY1));
     962                        memset(pszLongName, 0, FAT32MAXPATHCOMP);
     963                        }
     964                     }
    849965                  }
     966#endif
    850967               pDir++;
    851968               ulDirEntries++;
     
    869986            }
    870987         else
    871             ulCluster = GetNextCluster(pVolInfo, NULL, ulCluster);
     988            {
     989            ulCluster = GetNextCluster(pVolInfo, pDirSHInfo, ulCluster);
     990            }
    872991         if (!ulCluster)
    873992            ulCluster = pVolInfo->ulFatEof;
     
    15351654               //else
    15361655               //   {
     1656               //Message("md000aa: ulCluster=%lx, ulBlock=%lu", ulCluster, ulBlock);
    15371657                  rc = ReadBlock(pVolInfo, ulCluster, ulBlock, pDir2, usIOMode);
    15381658                  ulBytesToRead = pVolInfo->ulBlockSize;
  • trunk/src/ifs/ifsattr.c

    r296 r299  
    364364            }
    365365
    366          if( TranslateName( pVolInfo, 0L, pName, szFullName, TRANSLATE_SHORT_TO_LONG ))
     366         if( TranslateName( pVolInfo, 0L, NULL, pName, szFullName, TRANSLATE_SHORT_TO_LONG ))
    367367            strcpy( szFullName, pName );
    368368         }
  • trunk/src/ifs/ifsdir.c

    r296 r299  
    8585            memset(pOpenInfo, 0, sizeof (OPENINFO));
    8686
    87             if( TranslateName(pVolInfo, 0L, pDir, szDirLongName, TRANSLATE_SHORT_TO_LONG ))
     87            if( TranslateName(pVolInfo, 0L, NULL, pDir, szDirLongName, TRANSLATE_SHORT_TO_LONG ))
    8888               strcpy( szDirLongName, pDir );
    8989
     
    505505
    506506#if 1
    507    if( TranslateName(pVolInfo, 0L, pName, szLongName, TRANSLATE_SHORT_TO_LONG ))
     507   if( TranslateName(pVolInfo, 0L, NULL, pName, szLongName, TRANSLATE_SHORT_TO_LONG ))
    508508      strcpy( szLongName, pName );
    509509
     
    515515   if (rc)
    516516      goto FS_RMDIREXIT;
    517    rc = TranslateName(pVolInfo, 0L, pName, szName, TRANSLATE_AUTO);
     517   rc = TranslateName(pVolInfo, 0L, NULL, pName, szName, TRANSLATE_AUTO);
    518518   if (rc)
    519519      goto FS_RMDIREXIT;
  • trunk/src/ifs/ifsea.c

    r296 r299  
    2020PRIVATE USHORT usReadEAS(PVOLINFO pVolInfo, ULONG ulDirCluster, PSHOPENINFO pDirSHInfo, PSZ pszFileName, PFEALIST * ppFEAL, BOOL fCreate);
    2121PRIVATE USHORT usWriteEAS(PVOLINFO pVolInfo, ULONG ulDirCluster, PSHOPENINFO pDirSHInfo, PSZ pszFileName, PFEALIST pFEAL);
    22 PRIVATE USHORT GetEASName(PVOLINFO pVolInfo, ULONG ulDirCluster, PSZ pszFileName, PSZ * pszEASName);
     22PRIVATE USHORT GetEASName(PVOLINFO pVolInfo, ULONG ulDirCluster, PSHOPENINFO pDirSHInfo, PSZ pszFileName, PSZ * pszEASName);
    2323
    2424
     
    144144
    145145   if (pTarFeal->cbList > 4)
    146       rc = usWriteEAS(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, pTarFeal);
     146      rc = usWriteEAS(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, pTarFeal); ////// rc=2
    147147   else
    148148      rc = usDeleteEAS(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName);
     
    187187   *pulSize = sizeof (ULONG);
    188188
    189    rc = GetEASName(pVolInfo, ulDirCluster, pszFileName, &pszEAName);
     189   rc = GetEASName(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, &pszEAName);
    190190   if (rc)
    191191      goto usGetEASizeExit;
     
    450450#endif
    451451
    452    rc = GetEASName(pVolInfo, ulSrcDirCluster, pszSrcFile, &pszSrcEAName);
     452   rc = GetEASName(pVolInfo, ulSrcDirCluster, pDirSrcSHInfo, pszSrcFile, &pszSrcEAName);
    453453   if (rc)
    454454      goto usCopyEASExit;
    455    rc = GetEASName(pVolInfo, ulTarDirCluster, pszTarFile, &pszTarEAName);
     455   rc = GetEASName(pVolInfo, ulTarDirCluster, pDirTarSHInfo, pszTarFile, &pszTarEAName);
    456456   if (rc)
    457457      goto usCopyEASExit;
     
    564564#endif
    565565
    566    rc = GetEASName(pVolInfo, ulSrcDirCluster, pszSrcFile, &pszSrcEAName);
     566   rc = GetEASName(pVolInfo, ulSrcDirCluster, pDirSrcSHInfo, pszSrcFile, &pszSrcEAName);
    567567   if (rc)
    568568      goto usMoveEASExit;
    569    rc = GetEASName(pVolInfo, ulTarDirCluster, pszTarFile, &pszTarEAName);
     569   rc = GetEASName(pVolInfo, ulTarDirCluster, pDirTarSHInfo, pszTarFile, &pszTarEAName);
    570570   if (rc)
    571571      goto usMoveEASExit;
     
    735735   *ppFEAL = NULL;
    736736
    737    rc = GetEASName(pVolInfo, ulDirCluster, pszFileName, &pszEAName);
     737   rc = GetEASName(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, &pszEAName);
    738738   if (rc)
    739739      goto usReadEASExit;
     
    885885#endif
    886886
    887    rc = GetEASName(pVolInfo, ulDirCluster, pszFileName, &pszEAName);
     887   rc = GetEASName(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, &pszEAName);
    888888   if (rc)
    889889      return rc;
     
    976976#endif
    977977
    978    rc = GetEASName(pVolInfo, ulDirCluster, pszFileName, &pszEAName);
     978   rc = GetEASName(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, &pszEAName);
    979979   if (rc)
    980980      goto usWriteEASExit;
     
    11751175      rc = MarkFileEAS(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, FILE_HAS_CRITICAL_EAS);
    11761176   else
    1177       rc = MarkFileEAS(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, FILE_HAS_EAS);
     1177      rc = MarkFileEAS(pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, FILE_HAS_EAS); ////// rc=2
    11781178
    11791179usWriteEASExit:
     
    12301230}
    12311231
    1232 USHORT GetEASName(PVOLINFO pVolInfo, ULONG ulDirCluster, PSZ pszFileName, PSZ * pszEASName)
     1232USHORT GetEASName(PVOLINFO pVolInfo, ULONG ulDirCluster, PSHOPENINFO pDirSHInfo, PSZ pszFileName, PSZ * pszEASName)
    12331233{
    12341234   if (strlen(pszFileName) > FAT32MAXPATH - 4)
     
    12391239      return ERROR_NOT_ENOUGH_MEMORY;
    12401240
    1241    if( TranslateName( pVolInfo, ulDirCluster, pszFileName, *pszEASName, TRANSLATE_SHORT_TO_LONG ))
     1241   if( TranslateName( pVolInfo, ulDirCluster, pDirSHInfo, pszFileName, *pszEASName, TRANSLATE_SHORT_TO_LONG ))
    12421242       strcpy(*pszEASName, pszFileName);
    12431243
  • trunk/src/ifs/ifsfile.c

    r297 r299  
    162162         }
    163163
    164       if( TranslateName(pVolInfo, 0L, pName, szLongName, TRANSLATE_SHORT_TO_LONG )) ////
     164      if( TranslateName(pVolInfo, 0L, NULL, pName, szLongName, TRANSLATE_SHORT_TO_LONG ))
    165165         strcpy( szLongName, pName );
    166166
     
    180180         }
    181181
    182       ulDirCluster = FindDirCluster(pVolInfo, ////
     182      ulDirCluster = FindDirCluster(pVolInfo,
    183183         pcdfsi,
    184184         pcdfsd,
     
    510510         if (f32Parms.fEAS && pEABuf && pEABuf != MYNULL)
    511511            {
    512             rc = usModifyEAS(pVolInfo, ulDirCluster, pDirSHInfo, pszFile, (PEAOP)pEABuf);
     512            rc = usModifyEAS(pVolInfo, ulDirCluster, pDirSHInfo, pszFile, (PEAOP)pEABuf); //////
    513513            if (rc)
    514514               {
     
    38593859               }
    38603860            else
    3861                rc = usGetEAS(pVolInfo, usLevel, pOpenInfo->pSHInfo->ulDirCluster, pOpenInfo->pDirSHInfo, pszFile, pEA);
     3861               rc = usGetEAS(pVolInfo, usLevel, pOpenInfo->pSHInfo->ulDirCluster, pOpenInfo->pDirSHInfo, pszFile, pEA); //////
    38623862            break;
    38633863            }
  • trunk/src/ifs/ifsfind.c

    r298 r299  
    13091309                     PFILEFNDBUF4L pfFind = (PFILEFNDBUF4L)*ppData;
    13101310
    1311                      if (*pcbData < sizeof (FILEFNDBUF4L) - CCHMAXPATHCOMP + strlen(szLongName) + 1)
     1311                     //if (*pcbData < sizeof (FILEFNDBUF4L) - CCHMAXPATHCOMP + strlen(szLongName) + 1)
     1312                     if (*pcbData < sizeof (FILEFNDBUF4L) + strlen(szLongName))
    13121313                        {
    13131314                        rc = ERROR_BUFFER_OVERFLOW;
  • trunk/src/include/fat32ifs.h

    r297 r299  
    406406IMPORT USHORT fGetUpCaseTbl(PVOLINFO pVolInfo, PULONG pulFirstCluster, PULONGLONG pullLen, PULONG pulChecksum);
    407407IMPORT void SetSHInfo1(PVOLINFO pVolInfo, PDIRENTRY1 pStreamEntry, PSHOPENINFO pSHInfo);
    408 IMPORT USHORT TranslateName(PVOLINFO pVolInfo, ULONG ulDirCluster, PSZ pszPath, PSZ pszTarget, USHORT usMode);
     408IMPORT USHORT TranslateName(PVOLINFO pVolInfo, ULONG ulDirCluster, PSHOPENINFO pDirSHInfo, PSZ pszPath, PSZ pszTarget, USHORT usMode);
    409409IMPORT VOID DoLW(PVOLINFO pVolInfo, PLWOPTS pOptions);
    410410IMPORT VOID DoEmergencyFlush(PLWOPTS pOptions);
Note: See TracChangeset for help on using the changeset viewer.