diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2008-05-27 10:34:15 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2008-05-27 10:34:15 +0000 |
commit | bf95ccb5068543b453c1dfbf5e8ae7b6c814e1e4 (patch) | |
tree | e1ce92224d77dd59b5d6227c2c800c19d90ae605 /cpukit/libfs/src/dosfs/fat.c | |
parent | Bugfix: Moved definition of ppp_softc into source file. (diff) | |
download | rtems-bf95ccb5068543b453c1dfbf5e8ae7b6c814e1e4.tar.bz2 |
Added const qualifier to various pointers and data tables to
reduce size of data area.
IMFS: Fixed creation of symbolic links to avoid a compiler warning.
DOSFS: Use LibBlock instead of read() to read the boot record.
Diffstat (limited to 'cpukit/libfs/src/dosfs/fat.c')
-rw-r--r-- | cpukit/libfs/src/dosfs/fat.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/cpukit/libfs/src/dosfs/fat.c b/cpukit/libfs/src/dosfs/fat.c index aa390d64cb..65bf30e624 100644 --- a/cpukit/libfs/src/dosfs/fat.c +++ b/cpukit/libfs/src/dosfs/fat.c @@ -205,6 +205,7 @@ fat_cluster_write( int fat_init_volume_info(rtems_filesystem_mount_table_entry_t *mt_entry) { + rtems_status_code sc = RTEMS_SUCCESSFUL; int rc = RC_OK; fat_fs_info_t *fs_info = mt_entry->fs_info; register fat_vol_t *vol = &fs_info->vol; @@ -212,9 +213,9 @@ fat_init_volume_info(rtems_filesystem_mount_table_entry_t *mt_entry) char boot_rec[FAT_MAX_BPB_SIZE]; char fs_info_sector[FAT_USEFUL_INFO_SIZE]; ssize_t ret = 0; - int fd; struct stat stat_buf; int i = 0; + bdbuf_buffer *block = NULL; rc = stat(mt_entry->dev, &stat_buf); if (rc == -1) @@ -231,22 +232,25 @@ fat_init_volume_info(rtems_filesystem_mount_table_entry_t *mt_entry) vol->dev = stat_buf.st_dev; - fd = open(mt_entry->dev, O_RDONLY); - if (fd == -1) + /* Read boot record */ + /* FIXME: Asserts FAT_MAX_BPB_SIZE < bdbuf block size */ + sc = rtems_bdbuf_read( vol->dev, 0, &block); + if (sc != RTEMS_SUCCESSFUL) { rtems_disk_release(vol->dd); - return -1; + set_errno_and_return_minus_one( EIO); } - ret = read(fd, (void *)boot_rec, FAT_MAX_BPB_SIZE); - if ( ret != FAT_MAX_BPB_SIZE ) + memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE); + + sc = rtems_bdbuf_release( block); + if (sc != RTEMS_SUCCESSFUL) { - close(fd); rtems_disk_release(vol->dd); - set_errno_and_return_minus_one( EIO ); + set_errno_and_return_minus_one( EIO); } - close(fd); + /* Evaluate boot record */ vol->bps = FAT_GET_BR_BYTES_PER_SECTOR(boot_rec); if ( (vol->bps != 512) && |