diff options
Diffstat (limited to 'cpukit/libfs/src/dosfs/msdos_misc.c')
-rw-r--r-- | cpukit/libfs/src/dosfs/msdos_misc.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/cpukit/libfs/src/dosfs/msdos_misc.c b/cpukit/libfs/src/dosfs/msdos_misc.c index f27b4aea9c..511ac44dda 100644 --- a/cpukit/libfs/src/dosfs/msdos_misc.c +++ b/cpukit/libfs/src/dosfs/msdos_misc.c @@ -1411,8 +1411,8 @@ int msdos_find_name_in_fat_file( #if MSDOS_FIND_PRINT printf ("MSFS:[9.2] extending file:%li\n", empty_space_offset); #endif - ret = fat_file_extend (mt_entry, fat_fd, empty_space_offset * bts2rd, - &new_length); + ret = fat_file_extend (mt_entry, fat_fd, false, + empty_space_offset * bts2rd, &new_length); if (ret != RC_OK) return ret; @@ -1646,3 +1646,34 @@ int msdos_find_node_by_cluster_num_in_fat_file( } return MSDOS_NAME_NOT_FOUND_ERR; } + +int +msdos_sync_unprotected(msdos_fs_info_t *fs_info) +{ + int rc = fat_buf_release(&fs_info->fat); + rtems_status_code sc = rtems_bdbuf_syncdev(fs_info->fat.vol.dd); + if (sc != RTEMS_SUCCESSFUL) { + errno = EIO; + rc = -1; + } + + return rc; +} + +int +msdos_sync(rtems_libio_t *iop) +{ + int rc = RC_OK; + rtems_status_code sc = RTEMS_SUCCESSFUL; + msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info; + + sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT, + MSDOS_VOLUME_SEMAPHORE_TIMEOUT); + if (sc != RTEMS_SUCCESSFUL) + rtems_set_errno_and_return_minus_one(EIO); + + rc = msdos_sync_unprotected(fs_info); + + rtems_semaphore_release(fs_info->vol_sema); + return rc; +} |