summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/dosfs/msdos_misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libfs/src/dosfs/msdos_misc.c')
-rw-r--r--cpukit/libfs/src/dosfs/msdos_misc.c35
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;
+}