Initial files
This commit is contained in:
commit
2c61b6ba6c
62 changed files with 14808 additions and 0 deletions
366
edit_partition.c
Normal file
366
edit_partition.c
Normal file
|
|
@ -0,0 +1,366 @@
|
|||
/*
|
||||
*
|
||||
nparted - a frontend to libparted for manipulating disk partitions
|
||||
thought to dbootstrap
|
||||
Copyright (C) 1998-2000 Mario Teijeiro Otero Esteve Fernández
|
||||
Jaime Villate La Espiral
|
||||
|
||||
Mario Teijeiro Otero <asimovi@teleline.es>
|
||||
Esteve Fernández < esteve@crosswinds.net >
|
||||
Jaime Villate <villate@fe.up.pt>
|
||||
La Espiral http://www.laespiral.org
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* Codigo a realizar cuando se edita una partición */
|
||||
#include "nparted.h"
|
||||
/* Joder que función tan grande, me parece que hay que particionarla
|
||||
* valga la redundancia */
|
||||
typedef struct _edit edit;
|
||||
struct _edit{
|
||||
newtComponent form,ok,cancel,grow,max,now,start,end,tamano,
|
||||
start_now, start_min, end_now, end_max, tamano_now,
|
||||
tamano_max, new,start_new,end_new,tamano_new,
|
||||
sel_file_system, file_system,progress;
|
||||
struct newtExitStruct toexit;
|
||||
};
|
||||
|
||||
int init_form(edit *form,char *title){
|
||||
newtCenteredWindow(mainwin_size.width,mainwin_size.height,title);
|
||||
|
||||
form->form=newtForm(NULL,NULL,0);
|
||||
|
||||
form->start= newtLabel( 1, 3,_("Start") );
|
||||
form->end= newtLabel( 1, 5,_("End") );
|
||||
form->tamano= newtLabel( 1, 7,_("Tamano") );
|
||||
|
||||
form->now= newtLabel(14, 1,_("Now") );
|
||||
form->start_now= newtLabel(12, 3,"");
|
||||
form->end_now= newtLabel(12, 5,"");
|
||||
form->tamano_now= newtLabel(12, 7,"");
|
||||
|
||||
form->max= newtLabel(34, 1,_("Max."));
|
||||
form->start_min= newtLabel(32, 3,"");
|
||||
form->end_max= newtLabel(32, 5,"");
|
||||
form->tamano_max= newtLabel(32, 7,"");
|
||||
|
||||
form->progress= newtScale(2, 14, mainwin_size.width-5,100);
|
||||
|
||||
form->new= newtLabel(52, 1,_("New geom"));
|
||||
form->start_new= newtEntry(52, 3,NULL,10,NULL,NEWT_ENTRY_SCROLL
|
||||
|NEWT_FLAG_RETURNEXIT);
|
||||
form->end_new= newtEntry(52, 5,NULL,10,NULL,NEWT_ENTRY_SCROLL
|
||||
|NEWT_FLAG_RETURNEXIT);
|
||||
|
||||
form->tamano_new= newtEntry(52, 7,NULL,10,NULL,NEWT_ENTRY_SCROLL
|
||||
|NEWT_FLAG_RETURNEXIT);
|
||||
|
||||
|
||||
form->grow=newtCheckbox(5,10,_("Grow too much posibble"),' ',NULL,NULL);
|
||||
form->file_system=newtLabel(50,10,_("Without Filesystem"));
|
||||
form->sel_file_system=newtButton(38,9,_("Select"));
|
||||
|
||||
form->ok=newtButton(10,mainwin_size.height-4,_("OK"));
|
||||
form->cancel=newtButton(mainwin_size.width-20,mainwin_size.height-4,_("CANCEL"));
|
||||
|
||||
newtFormAddComponents(form->form,
|
||||
form->now,form->max,form->start,form->start_now,form->start_min,
|
||||
form->end,form->end_now,form->end_max,
|
||||
form->tamano,form->tamano_now,form->tamano_max,
|
||||
form->grow, form->ok,form->cancel,
|
||||
form->new,form->start_new,form->end_new,form->tamano_new,
|
||||
form->sel_file_system,form->file_system,form->progress,NULL);
|
||||
newtFormAddHotKey(form->form,NEWT_KEY_LEFT);
|
||||
newtFormAddHotKey(form->form,NEWT_KEY_RIGHT);
|
||||
newtFormAddHotKey(form->form,NEWT_KEY_PGDN);
|
||||
newtFormAddHotKey(form->form,NEWT_KEY_PGUP);
|
||||
newtFormAddHotKey(form->form,(int)'');
|
||||
/* Al parecer no se puede añadir keys a componentes, solo
|
||||
a forms, si no da segment fault */
|
||||
// newtFormAddHotKey(form->grow,(int)' ');
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
typedef struct _disk_info disk_info;
|
||||
struct _disk_info{
|
||||
PedDevice *dev;
|
||||
PedDisk *disk;
|
||||
PedPartition *part;
|
||||
PedGeometry* geom; /* Max geometry to grow*/
|
||||
PedFileSystemType * fs_type;
|
||||
PedConstraint* constraint;
|
||||
int fs_name_changed;
|
||||
};
|
||||
|
||||
|
||||
int init_disk_info(disk_info *disk,PedDevice *dev,int npart)
|
||||
{
|
||||
if (dev==NULL){
|
||||
ped_exception_throw(PED_EXCEPTION_ERROR,
|
||||
PED_EXCEPTION_OK,
|
||||
_("Device not valid"));
|
||||
return 0;
|
||||
}
|
||||
disk->dev=dev;
|
||||
disk->disk=ped_disk_open(disk->dev);
|
||||
disk->constraint=ped_constraint_any(disk->disk);
|
||||
disk->part=ped_disk_get_partition(disk->disk,npart);
|
||||
disk->fs_name_changed=0;
|
||||
|
||||
if (disk->disk==NULL) goto error;
|
||||
if (disk->part==NULL){
|
||||
ped_exception_throw(PED_EXCEPTION_ERROR,
|
||||
PED_EXCEPTION_OK,
|
||||
_("Partition not valid"));
|
||||
goto error_disk_close;
|
||||
}
|
||||
disk->fs_type=ped_file_system_probe(&(disk->part->geom));
|
||||
disk->geom=ped_disk_get_max_partition_geometry(disk->disk, disk->part,disk->constraint);
|
||||
if (disk->geom==NULL){
|
||||
ped_exception_throw(PED_EXCEPTION_ERROR,
|
||||
PED_EXCEPTION_OK,
|
||||
_("I can't get de max partition's geometry"));
|
||||
goto error_disk_close;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
error_disk_close:
|
||||
ped_disk_close(disk->disk);
|
||||
error:
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
int fill_form(edit *form, disk_info *disk,strech *new_size)
|
||||
{
|
||||
if (disk->fs_type!=NULL && !disk->fs_name_changed){
|
||||
newtLabelSetText(form->file_system,disk->fs_type->name);
|
||||
}
|
||||
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,disk->part->geom.start));
|
||||
newtLabelSetText(form->start_now,ptrb);
|
||||
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,disk->part->geom.end));
|
||||
newtLabelSetText(form->end_now,ptrb);
|
||||
|
||||
sprintf(ptrb,"%d Mb", (int)SEC2MB((disk->part->geom.end-disk->part->geom.start+1)));
|
||||
newtLabelSetText(form->tamano_now,ptrb);
|
||||
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,disk->geom->start));
|
||||
newtLabelSetText(form->start_min,ptrb);
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,disk->geom->end));
|
||||
newtLabelSetText(form->end_max,ptrb);
|
||||
sprintf(ptrb,"%d Mb", (int)SEC2MB((disk->geom->end-disk->geom->start+1)));
|
||||
newtLabelSetText(form->tamano_max,ptrb);
|
||||
|
||||
newtScaleSet(form->progress,(100* (new_size->end))/disk->geom->end);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int run_form(edit *form, disk_info *disk, int npart)
|
||||
{
|
||||
newtComponent answer;
|
||||
char fs_name[256];
|
||||
strech new_size;
|
||||
int change_geom=0;
|
||||
long tam;
|
||||
int key;
|
||||
|
||||
new_size.start=disk->part->geom.start;
|
||||
new_size.end=disk->part->geom.end;
|
||||
|
||||
answer=NULL;
|
||||
|
||||
strcpy(fs_name,"Without Filesystem");
|
||||
do{
|
||||
fill_form(form, disk,&new_size);
|
||||
newtFormRun(form->form,&(form->toexit));
|
||||
key=-1;
|
||||
if(form->toexit.reason==NEWT_EXIT_COMPONENT)
|
||||
answer=form->toexit.u.co;
|
||||
else
|
||||
key=form->toexit.u.key;
|
||||
|
||||
if (key==(int)' '){
|
||||
new_size.end=disk->geom->end;
|
||||
new_size.start=disk->geom->start;
|
||||
|
||||
if(new_size.end<disk->geom->start) new_size.end=disk->geom->start;
|
||||
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.end));
|
||||
newtEntrySet(form->end_new,ptrb,1);
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.start));
|
||||
newtEntrySet(form->start_new,ptrb,1);
|
||||
sprintf(ptrb,"%d", (int)SEC2MB( (new_size.end- new_size.start)));
|
||||
newtEntrySet(form->tamano_new,ptrb,1);
|
||||
}
|
||||
if(answer==form->sel_file_system){
|
||||
char *aux;
|
||||
if(ped_exception_throw(PED_EXCEPTION_INFORMATION,
|
||||
PED_EXCEPTION_OK|PED_EXCEPTION_CANCEL,
|
||||
_("Change the file system will destroy any data")
|
||||
)==PED_EXCEPTION_OK){
|
||||
aux=select_file_system();
|
||||
if(aux!=NULL){
|
||||
strcpy(fs_name,aux);
|
||||
newtLabelSetText(form->file_system,fs_name);
|
||||
disk->fs_name_changed=1;
|
||||
}
|
||||
}
|
||||
ped_exception_catch();
|
||||
}
|
||||
if(answer==form->start_new||answer==form->end_new){
|
||||
change_geom=1;
|
||||
new_size.start=is_sector_valid(newtEntryGetValue(form->start_new));
|
||||
new_size.end=is_sector_valid(newtEntryGetValue(form->end_new));
|
||||
if (new_size.start==-1||new_size.end==-1){
|
||||
ped_exception_throw(PED_EXCEPTION_ERROR,
|
||||
PED_EXCEPTION_OK,
|
||||
_("a number is needed"));
|
||||
ped_exception_catch();
|
||||
newtEntrySet(form->end_new,"",1);
|
||||
newtEntrySet(form->start_new,"",1);
|
||||
newtEntrySet(form->tamano_new,"",1);
|
||||
}else{
|
||||
new_size.start=CIL2SEC(disk->dev,new_size.start);
|
||||
if(new_size.start<64) new_size.start=64;
|
||||
new_size.end=CIL2SEC(disk->dev,new_size.end+1)-1;
|
||||
sprintf(ptrb,"%d", (int)SEC2MB( (new_size.end-
|
||||
new_size.start)));
|
||||
newtEntrySet(form->tamano_new,ptrb,1);
|
||||
}
|
||||
}
|
||||
if (answer==form->tamano_new){
|
||||
change_geom=1;
|
||||
new_size.start=is_sector_valid(newtEntryGetValue(form->start_new));
|
||||
tam=is_sector_valid(newtEntryGetValue(form->tamano_new));
|
||||
if(new_size.start==-1||tam==-1){
|
||||
ped_exception_throw(PED_EXCEPTION_ERROR,
|
||||
PED_EXCEPTION_OK,
|
||||
_("a number is needed"));
|
||||
ped_exception_catch();
|
||||
}else{
|
||||
if(new_size.start==0) new_size.start=disk->part->geom.start;
|
||||
new_size.end=MB2SEC((tam))+new_size.start;
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.end));
|
||||
newtEntrySet(form->end_new,ptrb,1);
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.start));
|
||||
newtEntrySet(form->start_new,ptrb,1);
|
||||
}
|
||||
}
|
||||
if(answer==form->ok){
|
||||
if (newtCheckboxGetValue(form->grow)=='*'){
|
||||
new_size.start=disk->geom->start;
|
||||
new_size.end=disk->geom->end;
|
||||
change_geom=1;
|
||||
}
|
||||
if(ped_exception_throw(PED_EXCEPTION_INFORMATION,
|
||||
PED_EXCEPTION_OK|PED_EXCEPTION_CANCEL,
|
||||
_("Are you soure?")
|
||||
)==PED_EXCEPTION_OK)
|
||||
if(change_geom){
|
||||
do_resize(&(disk->dev),npart,new_size.start,new_size.end);
|
||||
}
|
||||
if(strcmp(fs_name,"Without Filesystem"))
|
||||
do_mkfs(&(disk->dev),npart,fs_name);
|
||||
}
|
||||
|
||||
if(key==NEWT_KEY_PGDN){
|
||||
new_size.end-=CIL2SEC(disk->dev,2);
|
||||
if(new_size.end<disk->geom->start) new_size.end=disk->geom->start;
|
||||
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.end));
|
||||
newtEntrySet(form->end_new,ptrb,1);
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.start));
|
||||
newtEntrySet(form->start_new,ptrb,1);
|
||||
sprintf(ptrb,"%d", (int)SEC2MB( (new_size.end- new_size.start)));
|
||||
newtEntrySet(form->tamano_new,ptrb,1);
|
||||
|
||||
|
||||
}if(key==NEWT_KEY_PGUP){
|
||||
new_size.end+=CIL2SEC(disk->dev,2);
|
||||
if(new_size.end>disk->geom->end) new_size.end=disk->geom->end;
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.end));
|
||||
newtEntrySet(form->end_new,ptrb,1);
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.start));
|
||||
newtEntrySet(form->start_new,ptrb,1);
|
||||
sprintf(ptrb,"%d", (int)SEC2MB( (new_size.end- new_size.start)));
|
||||
newtEntrySet(form->tamano_new,ptrb,1);
|
||||
|
||||
}if(key==NEWT_KEY_LEFT){
|
||||
new_size.end-=50;
|
||||
if(new_size.end<disk->geom->start) new_size.end=disk->geom->start;
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.end));
|
||||
newtEntrySet(form->end_new,ptrb,1);
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.start));
|
||||
newtEntrySet(form->start_new,ptrb,1);
|
||||
sprintf(ptrb,"%d", (int)SEC2MB( (new_size.end- new_size.start)));
|
||||
newtEntrySet(form->tamano_new,ptrb,1);
|
||||
|
||||
}if(key==NEWT_KEY_RIGHT){
|
||||
new_size.end+=50;
|
||||
if(new_size.end>disk->geom->end) new_size.end=disk->geom->end;
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.end));
|
||||
newtEntrySet(form->end_new,ptrb,1);
|
||||
sprintf(ptrb,"%d",(int)SEC2CIL(disk->dev,new_size.start));
|
||||
newtEntrySet(form->start_new,ptrb,1);
|
||||
sprintf(ptrb,"%d", (int)SEC2MB( (new_size.end- new_size.start)));
|
||||
newtEntrySet(form->tamano_new,ptrb,1);
|
||||
|
||||
}
|
||||
newtScaleSet(form->progress,(100*new_size.end)/disk->geom->end );
|
||||
}while(key!=(int)'' && answer!=form->cancel && answer!=form->ok);
|
||||
return 1;
|
||||
|
||||
}
|
||||
int finalize_form(edit *form){
|
||||
newtFormDestroy(form->form);
|
||||
newtPopWindow();
|
||||
return 1;
|
||||
}
|
||||
int finalize_disk(disk_info *disk)
|
||||
{
|
||||
ped_disk_close(disk->disk);
|
||||
return 1;
|
||||
}
|
||||
int edit_partition (PedDevice *dev,int npart)
|
||||
{
|
||||
edit *form;
|
||||
disk_info *disk;
|
||||
|
||||
form=(edit*)NP_malloc(sizeof(edit));
|
||||
disk=(disk_info*)NP_malloc(sizeof(disk_info));
|
||||
|
||||
if(!init_disk_info(disk,dev,npart)){
|
||||
/* La excepción se lanza desde dentro de init_disk_info*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
sprintf(ptrb,_("Editing %s%d"),dev->path,npart);
|
||||
/* Cuando se da a init_form por segunda vez da fallo */
|
||||
init_form(form,ptrb);
|
||||
/* Get some information */
|
||||
run_form(form, disk,npart);
|
||||
finalize_form(form);
|
||||
finalize_disk(disk);
|
||||
free(form);
|
||||
free(disk);
|
||||
|
||||
return 1;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue