dsk_root.c
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:2k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. /***************************************************************************/
  2. /* */
  3. /* DSK_ROOT.C */
  4. /* */
  5. /* Copyright (c) 1991 - Microsoft Corp. */
  6. /* All rights reserved. */
  7. /* Microsoft Confidential */
  8. /*                                                                         */
  9. /* Creates an empty root directory on the specified drive using the */
  10. /* specified BPB for the size and location. */
  11. /* */
  12. /* int CreatRoot( int iDrv, struct BPB *Bpb ) */
  13. /* */
  14. /* ARGUMENTS: iDrv - Physical drive number */
  15. /* Bpb - Bpb structure for disk in the drive */
  16. /* RETURNS: int - OK if successful */
  17. /*  */
  18. /* Created 07-23-89 johnhe */
  19. /***************************************************************************/
  20. #include <stdio.h>
  21. #include  <malloc.h>
  22. #include  <string.h>
  23. #include <alias.h>
  24. #include  <disk_io.h>
  25. int CreatRootDir( int iDrv, struct BPB *Bpb )
  26. {
  27. char *pchBuf; /* Buffer to hold 1 sector */
  28. int iStatus; /* Return value */
  29. unsigned uThisSec; /* Current dir sector being written */
  30. unsigned uLastSec; /* Last sector number in directory */
  31. pchBuf = GetMemory( Bpb->uBytesPerSec ); /* Allocate a sector */
  32. memset( pchBuf, 0, Bpb->uBytesPerSec ); /* Fill it with zeros */
  33. /* Find root dir starting sector */
  34. uThisSec = Bpb->uSecPerFat * Bpb->uchNumberFats;
  35. uThisSec += Bpb->uReservSec;
  36. /* Find last sector in the root  */
  37. uLastSec = (Bpb->uRootEntries * sizeof( struct DIR )) /
  38.   Bpb->uBytesPerSec;
  39. uLastSec += uThisSec;
  40.   /* Once for each sector in root dir */
  41. for ( iStatus = OK;
  42. iStatus == OK && uThisSec < uLastSec;
  43. uThisSec++ )
  44. iStatus =  RdWrSectors( iDrv, uThisSec, 1, pchBuf,  Bpb, WRITE );
  45. FreeMemory( pchBuf );
  46. return( iStatus );
  47. }