home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 6 File / 06-File.zip / ramfs102.zip / src / close.c < prev    next >
C/C++ Source or Header  |  2002-09-28  |  2KB  |  72 lines

  1. #include "includes.h"
  2.  
  3.  
  4.  
  5.  
  6.  
  7. APIRET EXPENTRY FS_CLOSE (
  8.     USHORT    type,
  9.     USHORT    IOflag,        /* not used */
  10.     struct sffsi *psffsi,
  11.     struct sffsd *psffsd )
  12. {
  13.   int rc;
  14.   POPENFILE pOpenfile;
  15.   POPENFILE pCur;
  16.   POPENFILE pPrev;
  17.   struct vpfsi *pvpfsi;
  18.   struct vpfsd *pvpfsd;
  19.   DIRENTRY  Entry;
  20.  
  21.   UtilEnterRamfs();
  22.   DEBUG_PRINTF2 ("FS_CLOSE  sfn=%d, type=%d", psffsi->sfi_selfsfn, type);
  23.  
  24.   FSH_GETVOLPARM (psffsi->sfi_hVPB, &pvpfsi, &pvpfsd);
  25.   pOpenfile = psffsd->pOpenfile;
  26.  
  27.   if (type != 2)
  28.   {
  29.     /* not final close - do nothing */
  30.     rc = NO_ERROR;
  31.     goto end;
  32.   }
  33.  
  34.   pPrev = 0;
  35.   pCur = pvpfsd->pVolume->pFirstOpenfile;
  36.   while (pCur != pOpenfile)
  37.   {
  38. #ifdef DEBUG
  39.     if (pCur == 0)
  40.     {
  41.       debugging = TRUE;
  42.       DEBUG_PRINTF0 ("\r\n!!! Openfile instance not found\r\n");
  43.       INT3;
  44.       rc = ERROR_NOT_SUPPORTED;
  45.       goto end;
  46.     }
  47. #endif
  48.  
  49.     pPrev = pCur;
  50.     pCur = pCur->pNextOpenfile;
  51.   }
  52.  
  53.   VMRead (&Entry, pOpenfile->flatEntry, sizeof(Entry)-sizeof(Entry.achName));
  54.   Entry.datiCreate = psffsi->sfi_cdate + ((ULONG)psffsi->sfi_ctime << 16);
  55.   Entry.datiAccess = psffsi->sfi_adate + ((ULONG)psffsi->sfi_atime << 16);
  56.   Entry.datiWrite  = psffsi->sfi_mdate + ((ULONG)psffsi->sfi_mtime << 16);
  57.   VMWrite (pOpenfile->flatEntry, &Entry, sizeof(Entry)-sizeof(Entry.achName));
  58.  
  59.   if (pPrev)
  60.     pPrev->pNextOpenfile = pOpenfile->pNextOpenfile;
  61.   else
  62.     pvpfsd->pVolume->pFirstOpenfile = pOpenfile->pNextOpenfile;
  63.   NearFree (pOpenfile);
  64.   rc = NO_ERROR;
  65.  
  66. end:
  67.  
  68.   DEBUG_PRINTF1 (" => %d\r\n", rc);
  69.   UtilExitRamfs();
  70.   return rc;
  71. }
  72.