Esempio n. 1
0
IMFS_jnode_t *IMFS_create_node_with_control(
  const rtems_filesystem_location_info_t *parentloc,
  const IMFS_node_control *node_control,
  const char *name,
  size_t namelen,
  mode_t mode,
  const IMFS_types_union *info
)
{
  IMFS_fs_info_t *fs_info = parentloc->mt_entry->fs_info;
  IMFS_jnode_t *node = IMFS_allocate_node(
    fs_info,
    node_control,
    name,
    namelen,
    mode,
    info
  );

  if ( node != NULL ) {
    IMFS_jnode_t *parent = parentloc->node_access;

    /*
     *  This node MUST have a parent, so put it in that directory list.
     */
    IMFS_assert( parent != NULL );
    IMFS_add_to_directory( parent, node );
  }

  return node;
}
Esempio n. 2
0
int IMFS_rename(
  const rtems_filesystem_location_info_t *oldparentloc,
  const rtems_filesystem_location_info_t *oldloc,
  const rtems_filesystem_location_info_t *newparentloc,
  const char *name,
  size_t namelen
)
{
  int rv = 0;
  IMFS_jnode_t *node = oldloc->node_access;
  IMFS_jnode_t *new_parent = newparentloc->node_access;

  /*
   * FIXME: Due to insufficient checks we can create inaccessible nodes with
   * this operation.
   */

  if ( node->Parent != NULL ) {
    if ( namelen < IMFS_NAME_MAX ) {
      memcpy( node->name, name, namelen );
      node->name [namelen] = '\0';

      IMFS_remove_from_directory( node );
      IMFS_add_to_directory( new_parent, node );
      IMFS_update_ctime( node );
    } else {
      errno = ENAMETOOLONG;
      rv = -1;
    }
  } else {
    errno = EINVAL;
    rv = -1;
  }

  return rv;
}