/** * Shutdown the file system. */ void rtems_rfs_rtems_shutdown (rtems_filesystem_mount_table_entry_t* mt_entry) { rtems_rfs_file_system* fs = mt_entry->fs_info; rtems_rfs_rtems_private* rtems; rtems = rtems_rfs_fs_user (fs); /* FIXME: Return value? */ rtems_rfs_fs_close(fs); rtems_rfs_mutex_destroy (&rtems->access); free (rtems); }
static int rtems_rfs_write_root_dir (const char* name) { rtems_rfs_file_system* fs; rtems_rfs_inode_handle inode; rtems_rfs_ino ino; int rc; /* * External API so returns -1. */ rc = rtems_rfs_fs_open (name, NULL, RTEMS_RFS_FS_FORCE_OPEN, &fs); if (rc < 0) { printf ("rtems-rfs: format: file system open failed: %d: %s\n", errno, strerror (errno)); return -1; } rc = rtems_rfs_inode_alloc (fs, RTEMS_RFS_ROOT_INO, &ino); if (rc > 0) { printf ("rtems-rfs: format: inode allocation failed: %d: %s\n", rc, strerror (rc)); rtems_rfs_fs_close (fs); return rc; } if (ino != RTEMS_RFS_ROOT_INO) { printf ("rtems-rfs: format: allocated inode not root ino: %" PRId32 "\n", ino); rtems_rfs_fs_close (fs); return rc; } rc = rtems_rfs_inode_open (fs, ino, &inode, true); if (rc > 0) { printf ("rtems-rfs: format: inode open failed: %d: %s\n", rc, strerror (rc)); rtems_rfs_group_bitmap_free (fs, true, ino); rtems_rfs_fs_close (fs); return rc; } rc = rtems_rfs_inode_initialise (&inode, 0, (RTEMS_RFS_S_IFDIR | RTEMS_RFS_S_IRWXU | RTEMS_RFS_S_IXGRP | RTEMS_RFS_S_IXOTH), 0, 0); if (rc > 0) printf ("rtems-rfs: format: inode initialise failed: %d: %s\n", rc, strerror (rc)); rc = rtems_rfs_dir_add_entry (fs, &inode, ".", 1, ino); if (rc > 0) printf ("rtems-rfs: format: directory add failed: %d: %s\n", rc, strerror (rc)); rc = rtems_rfs_inode_close (fs, &inode); if (rc > 0) printf ("rtems-rfs: format: inode close failed: %d: %s\n", rc, strerror (rc)); rc = rtems_rfs_fs_close (fs); if (rc < 0) printf ("rtems-rfs: format: file system close failed: %d: %s\n", errno, strerror (errno)); return rc; }