Esempio n. 1
0
PyObject *py_ped_geometry_set_end(PyObject *s, PyObject *args) {
    int ret = -1;
    PedGeometry *geom = NULL;
    PedSector end;

    if (!PyArg_ParseTuple(args, "L", &end)) {
        return NULL;
    }

    geom = _ped_Geometry2PedGeometry(s);
    if (geom == NULL) {
        return NULL;
    }

    ret = ped_geometry_set_end(geom, end);
    if (ret == 0) {
        if (partedExnRaised) {
            partedExnRaised = 0;

            if (!PyErr_ExceptionMatches(PartedException) &&
                    !PyErr_ExceptionMatches(PyExc_NotImplementedError))
                PyErr_SetString(CreateException, partedExnMessage);
        }
        else
            PyErr_SetString(CreateException, "Could not create new geometry");

        return NULL;
    }

    if (ret) {
        Py_RETURN_TRUE;
    } else {
        Py_RETURN_FALSE;
    }
}
Esempio n. 2
0
int _ped_Geometry_set(_ped_Geometry *self, PyObject *value, void *closure) {
    char *member = (char *) closure;
    long long val;
    int ret;

    if (member == NULL) {
        PyErr_SetString(PyExc_TypeError, "Empty _ped.Geometry()");
        return -1;
    }

    if (!strcmp(member, "start")) {
        val = PyLong_AsLongLong(value);
        if (PyErr_Occurred()) {
            return -1;
        }
        ret = ped_geometry_set_start(self->ped_geometry, val);
    } else if (!strcmp(member, "length")) {
        val = PyLong_AsLongLong(value);
        if (PyErr_Occurred()) {
            return -1;
        }
        ret = ped_geometry_set(self->ped_geometry, self->ped_geometry->start,
                               val);
    } else if (!strcmp(member, "end")) {
        val = PyLong_AsLongLong(value);
        if (PyErr_Occurred()) {
            return -1;
        }
        ret = ped_geometry_set_end(self->ped_geometry, val);
    } else {
        PyErr_Format(PyExc_AttributeError, "_ped.Geometry object has no attribute %s", member);
        return -1;
    }

    if (ret == 0) {
        if (partedExnRaised) {
            partedExnRaised = 0;

            if (!PyErr_Occurred()) {
                PyErr_SetString(PyExc_ValueError, partedExnMessage);
            }
        } else {
            PyErr_SetString(PyExc_ValueError, "Could not set geometry");
        }
        return -1;
    }

    return 0;
}
Esempio n. 3
0
/* This function erases all signatures that indicate the presence of
 * a file system in a particular region, without erasing any data
 * contained inside the "exclude" region.
 */
static int
ped_file_system_clobber_exclude (PedGeometry* geom,
				 const PedGeometry* exclude)
{
	PedGeometry*    clobber_geom;
	int             status;

	if (ped_geometry_test_sector_inside (exclude, geom->start))
		return 1;

	clobber_geom = ped_geometry_duplicate (geom);
	if (ped_geometry_test_overlap (clobber_geom, exclude))
		ped_geometry_set_end (clobber_geom, exclude->start - 1);

	status = ped_file_system_clobber (clobber_geom);
	ped_geometry_destroy (clobber_geom);
	return status;
}
Esempio n. 4
0
static int reiserfs_resize(PedFileSystem *fs, PedGeometry *geom,
			   PedTimer *timer)
{
	dal_t *dal;
	blk_t fs_len;
	PedSector old_length;
	reiserfs_fs_t *fs_info;
	reiserfs_gauge_t *gauge = NULL;

	PED_ASSERT(fs != NULL);

	old_length = fs->geom->length;

	PED_ASSERT (fs->geom->dev == geom->dev);

	if (fs->geom->start != geom->start) {
		ped_exception_throw(PED_EXCEPTION_ERROR,
				    PED_EXCEPTION_CANCEL,
				    _("Sorry, can't move the start of "
				      "reiserfs partitions yet."));
		return 0;
	}

	fs_info = fs->type_specific;

	fs_len = (blk_t) (geom->length / (reiserfs_fs_block_size(fs_info) /
					  PED_SECTOR_SIZE_DEFAULT));

	dal = reiserfs_fs_host_dal(fs_info);

	if (dal_flags(dal) && O_RDONLY) {
		if (!geom_dal_reopen(dal, O_RDWR)) {
			ped_exception_throw(PED_EXCEPTION_ERROR,
					    PED_EXCEPTION_CANCEL,
					    _("Couldn't reopen device "
					      "abstraction layer for "
					      "read/write."));
			return 0;
		}
	}

	ped_timer_reset(timer);

	if (libreiserfs_gauge_create && libreiserfs_gauge_free) {
		if (!
		    (gauge =
		     libreiserfs_gauge_create(NULL, gauge_handler, timer)))
			return 0;
	}

	if (old_length > geom->length) {

		ped_timer_set_state_name(timer, _("shrinking"));
		ped_timer_update(timer, 0.0);

		if (!reiserfs_fs_resize(fs_info, fs_len, gauge))
			goto error_free_gauge;

		ped_geometry_set_end (fs->geom, geom->end);
		dal_realize(dal);
	} else {
		ped_geometry_set_end (fs->geom, geom->end);
		dal_realize(dal);

		ped_timer_set_state_name(timer, _("expanding"));
		ped_timer_update(timer, 0.0);

		if (!reiserfs_fs_resize(fs_info, fs_len, gauge))
			goto error_free_gauge;
	}

	ped_timer_update(timer, 1.0);

	if (gauge)
		libreiserfs_gauge_free(gauge);

	return 1;

error_free_gauge:
	if (gauge)
		libreiserfs_gauge_free(gauge);
	ped_geometry_set_end (fs->geom, fs->geom->start + old_length - 1);
	return 0;
}