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

  1. #include "includes.h"
  2.  
  3.  
  4.  
  5.  
  6.  
  7. APIRET EXPENTRY FS_READ (
  8.     struct sffsi *psffsi,
  9.     struct sffsd *psffsd,
  10.     PCHAR    pData,
  11.     PUSHORT    pLen,
  12.     USHORT    IOflag )    /* not used */
  13. {
  14.   int       rc;
  15.   POPENFILE pOpenfile;
  16.   FBLOCK    fblkFile;
  17.  
  18.   UtilEnterRamfs();
  19.   DEBUG_PRINTF2 ("FS_READ  sfn=%d *pLen=%u", psffsi->sfi_selfsfn, *pLen);
  20.  
  21.   pOpenfile = psffsd->pOpenfile;
  22.  
  23.   if (psffsi->sfi_position > psffsi->sfi_size)
  24.     *pLen = 0;
  25.   else if (*pLen > psffsi->sfi_size - psffsi->sfi_position)
  26.     *pLen = psffsi->sfi_size - psffsi->sfi_position;
  27.  
  28.   VMRead (&fblkFile, pOpenfile->flatEntry + FIELDOFFSET(DIRENTRY,fblkFile), sizeof(FBLOCK));
  29.  
  30. #ifdef DEBUG
  31.   if (fblkFile.fSize != psffsi->sfi_size)
  32.   {
  33.     debugging = TRUE;
  34.     DEBUG_PRINTF2 ("\r\n!!! fblkFile.fSize = %lu, sfi_size = %lu\r\n",
  35.            fblkFile.fSize, psffsi->sfi_size);
  36.     INT3;
  37.   }
  38. #endif
  39.  
  40.   read_fblocks(pData, &fblkFile, psffsi->sfi_position, *pLen);
  41.   psffsi->sfi_position += *pLen;
  42.   psffsi->sfi_tstamp |= (ST_SREAD | ST_PREAD);
  43.  
  44.   rc = NO_ERROR;
  45.  
  46.   DEBUG_PRINTF1 (" => %d\r\n", rc);
  47.   UtilExitRamfs();
  48.   return rc;
  49. }
  50.