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; } }
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; }
/* 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; }
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; }