Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/hdisk/hdisk.c

    r6e8e4e19 ra2aa81cb  
    5656void print_help(void);
    5757void select_label_format(tinput_t *);
    58 void construct_label(layouts_t);
     58void fill_label_funcs(void);
    5959void free_label(void);
    6060int try_read(service_id_t);
     61
     62int construct_none_label(void);
     63
     64int construct_mbr_label(void);
    6165int try_read_mbr(service_id_t);
     66
     67int construct_gpt_label(void);
    6268int try_read_gpt(service_id_t);
    63 void set_alignment(tinput_t *);
    6469
    6570
     
    8287        }
    8388       
     89        printf("Init.\n");
    8490        init_label();
    8591       
     
    109115        mbr_free_mbr(mbr);*/
    110116       
     117        printf("Try MBR.\n");
    111118        rc = try_read_mbr(dev_handle);
    112119        if (rc == EOK)
     
    133140        */
    134141       
     142        printf("Try GPT.\n");
    135143        rc = try_read_gpt(dev_handle);
    136144        if (rc == EOK)
     
    141149       
    142150interact:
    143        
     151        printf("interact.\n");
    144152        rc = interact(dev_handle);
    145153       
     
    153161{
    154162        int input;
    155         tinput_t *in;
     163        tinput_t * in;
    156164       
    157165        in = tinput_new();
     
    171179                switch(input) {
    172180                        case 'a':
    173                                 label.add_part(&label, in);
     181                                label.add_part(in, &label.data);
     182                                break;
     183                        case 'b':
     184                                label.add_part(in, &label.data);
    174185                                break;
    175186                        case 'd':
    176                                 label.delete_part(&label, in);
     187                                label.delete_part(in, &label.data);
    177188                                break;
    178189                        case 'e':
    179                                 label.extra_funcs(&label, in, dev_handle);
     190                                label.extra_funcs(in, dev_handle, &label.data);
    180191                                break;
    181192                        case 'f':
     
    186197                                print_help();
    187198                                break;
    188                         case 'l':
    189                                 set_alignment(in);
    190                                 break;
    191199                        case 'n':
    192                                 printf("Discarding label...\n");
    193200                                free_label();
    194                                 label.new_label(&label);
     201                                label.new_label(&label.data);
    195202                                break;
    196203                        case 'p':
    197                                 label.print_parts(&label);
     204                                label.print_parts(&label.data);
    198205                                break;
    199206                        case 'q':
    200207                                putchar('\n');
    201208                                goto end;
    202                         case 'r':
    203                                 label.read_parts(&label, dev_handle);
    204209                        case 'w':
    205                                 label.write_parts(&label, dev_handle);
     210                                label.write_parts(dev_handle, &label.data);
    206211                                break;
    207212                        default:
     
    223228                "\t 'd' \t\t Delete partition.\n"
    224229                "\t 'e' \t\t Extra functions (per label format).\n"
    225                 "\t 'f' \t\t Switch the format of the partition label.\n"
     230                "\t 'f' \t\t Switch the format of the partition label."
    226231                "\t 'h' \t\t Prints help. See help for more.\n"
    227232                "\t 'l' \t\t Set alignment.\n"
    228233                "\t 'n' \t\t Create new label (discarding the old one).\n"
    229234                "\t 'p' \t\t Prints label contents.\n"
     235                "\t 'w' \t\t Write label to disk.\n"
    230236                "\t 'q' \t\t Quit.\n"
    231                 "\t 'r' \t\t Read label from disk.\n"
    232                 "\t 'w' \t\t Write label to disk.\n"
    233237                );
    234238
     
    240244                        "1) MBR\n"
    241245                        "2) GPT\n"
    242               );
     246                );
    243247       
    244248        uint8_t val = get_input_uint8(in);
     
    246250                case 0:
    247251                        free_label();
    248                         construct_label(LYT_NONE);
     252                        label.layout = LYT_NONE;
     253                        fill_label_funcs();
    249254                        break;
    250255                case 1:
    251256                        free_label();
    252                         construct_label(LYT_MBR);
     257                        label.layout = LYT_MBR;
     258                        fill_label_funcs();
    253259                        break;
    254260                case 2:
    255261                        free_label();
    256                         construct_label(LYT_GPT);
    257                         break;
    258         }
    259 }
    260 
    261 void construct_label(layouts_t layout)
    262 {
    263         switch(layout) {
     262                        label.layout = LYT_GPT;
     263                        fill_label_funcs();
     264                        break;
     265        }
     266}
     267
     268void fill_label_funcs(void)
     269{
     270        switch(label.layout) {
    264271                case LYT_MBR:
    265                         label.layout = LYT_MBR;
    266                         construct_mbr_label(&label);
     272                        construct_mbr_label();
    267273                        break;
    268274                case LYT_GPT:
    269                         label.layout = LYT_GPT;
    270                         construct_gpt_label(&label);
     275                        construct_gpt_label();
    271276                        break;
    272277                default:
    273                         label.layout = LYT_NONE;
    274                         construct_none_label(&label);
     278                        construct_none_label();
    275279                        break;
    276280        }
     
    279283void free_label(void)
    280284{
    281         label.destroy_label(&label);
     285        /*
     286        switch(label.layout) {
     287                case LYT_MBR:
     288                        destroy_mbr_label(&label);
     289                        break;
     290                case LYT_GPT:
     291                        destroy_gpt_label(&label);
     292                        break;
     293                default:
     294                        break;
     295        }
     296        */
     297       
     298        label.destroy_label(&label.data);
    282299}
    283300
    284301int try_read(service_id_t dev_handle)
    285302{
    286         return label.read_parts(&label, dev_handle);
     303        fill_label_funcs();
     304        printf("read_parts\n");
     305        return label.read_parts(dev_handle, &label.data);
     306}
     307
     308int construct_none_label()
     309{
     310        label.add_part      = add_none_part;
     311        label.delete_part   = delete_none_part;
     312        label.destroy_label = destroy_none_label;
     313        label.new_label     = new_none_label;
     314        label.print_parts   = print_none_parts;
     315        label.read_parts    = read_none_parts;
     316        label.write_parts   = write_none_parts;
     317        label.extra_funcs   = extra_none_funcs;
     318       
     319        return EOK;
     320}
     321
     322int construct_mbr_label()
     323{
     324        label.add_part      = add_mbr_part;
     325        label.delete_part   = delete_mbr_part;
     326        label.destroy_label = destroy_mbr_label;
     327        label.new_label     = new_mbr_label;
     328        label.print_parts   = print_mbr_parts;
     329        label.read_parts    = read_mbr_parts;
     330        label.write_parts   = write_mbr_parts;
     331        label.extra_funcs   = extra_mbr_funcs;
     332       
     333        return label.new_label(&label.data);
    287334}
    288335
    289336int try_read_mbr(service_id_t dev_handle)
    290337{
    291         construct_label(LYT_MBR);
     338        label.layout = LYT_MBR;
    292339        return try_read(dev_handle);
    293340}
    294341
     342int construct_gpt_label()
     343{
     344        label.add_part    = add_gpt_part;
     345        label.delete_part = delete_gpt_part;
     346        label.new_label   = new_gpt_label;
     347        label.print_parts = print_gpt_parts;
     348        label.read_parts  = read_gpt_parts;
     349        label.write_parts = write_gpt_parts;
     350        label.extra_funcs = extra_gpt_funcs;
     351       
     352        return label.new_label(&label.data);
     353}
     354
    295355int try_read_gpt(service_id_t dev_handle)
    296356{
    297         construct_label(LYT_GPT);
     357        label.layout = LYT_GPT;
    298358        return try_read(dev_handle);
    299359}
    300360
    301 void set_alignment(tinput_t *in)
    302 {
    303         printf("Set alignment to sectors: ");
    304         label.alignment = get_input_uint32(in);
    305         printf("Alignment set to %u sectors.\n", label.alignment);
    306 }
    307 
    308 
    309 
    310 
    311 
    312 
    313 
    314 
    315 
    316 
     361
     362
     363
     364
     365
     366
     367
     368
     369
     370
     371
     372
     373
     374
     375
     376
     377
     378
     379
     380
     381
     382
     383
     384
     385
Note: See TracChangeset for help on using the changeset viewer.