int yaffs_set_attribs(struct yaffs_obj *obj, struct iattr *attr) { unsigned int valid = attr->ia_valid; if (valid & ATTR_MODE) obj->yst_mode = attr->ia_mode; if (valid & ATTR_UID) obj->yst_uid = attr->ia_uid; if (valid & ATTR_GID) obj->yst_gid = attr->ia_gid; if (valid & ATTR_ATIME) obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime); if (valid & ATTR_CTIME) obj->yst_ctime = Y_TIME_CONVERT(attr->ia_ctime); if (valid & ATTR_MTIME) obj->yst_mtime = Y_TIME_CONVERT(attr->ia_mtime); if (valid & ATTR_SIZE) yaffs_resize_file(obj, attr->ia_size); yaffs_update_oh(obj, NULL, 1, 0, 0, NULL); return YAFFS_OK; }
int ycb_file_ftruncate(rtems_libio_t *iop, rtems_off64_t length) { struct yaffs_obj *obj; struct yaffs_dev *dev; int r; obj = iop->pathinfo.node_access; dev = obj->my_dev; ylock(dev); r = yaffs_resize_file(obj, length); yunlock(dev); if(r == YAFFS_FAIL) { errno = EIO; return -1; } iop->size = length; return 0; }