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;

}
Exemple #2
0
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;
}