summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/dosfs/fat.c
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2008-05-27 10:34:15 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2008-05-27 10:34:15 +0000
commitbf95ccb5068543b453c1dfbf5e8ae7b6c814e1e4 (patch)
treee1ce92224d77dd59b5d6227c2c800c19d90ae605 /cpukit/libfs/src/dosfs/fat.c
parentBugfix: Moved definition of ppp_softc into source file. (diff)
downloadrtems-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.c22
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) &&