Changeset 52f2c89 in mainline for uspace/app/hdisk/hdisk.c


Ignore:
Timestamp:
2013-06-24T22:29:44Z (11 years ago)
Author:
Dominik Taborsky (AT DOT) <brembyseznamcz>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9bdfde73
Parents:
44c4886 (diff), 6317b33 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

hdisk, libmbr and libgpt updates

File:
1 edited

Legend:

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

    r44c4886 r52f2c89  
    5656void print_help(void);
    5757void select_label_format(tinput_t *);
    58 void fill_label_funcs(void);
     58void construct_label(layouts_t);
    5959void free_label(void);
    6060int try_read(service_id_t);
    61 
    62 int construct_none_label(void);
    63 
    64 int construct_mbr_label(void);
    6561int try_read_mbr(service_id_t);
    66 
    67 int construct_gpt_label(void);
    6862int try_read_gpt(service_id_t);
     63void set_alignment(tinput_t *);
    6964
    7065
     
    8782        }
    8883       
    89         printf("Init.\n");
    9084        init_label();
    9185       
     
    115109        mbr_free_mbr(mbr);*/
    116110       
    117         printf("Try MBR.\n");
    118111        rc = try_read_mbr(dev_handle);
    119112        if (rc == EOK)
     
    140133        */
    141134       
    142         printf("Try GPT.\n");
    143135        rc = try_read_gpt(dev_handle);
    144136        if (rc == EOK)
     
    149141       
    150142interact:
    151         printf("interact.\n");
     143       
    152144        rc = interact(dev_handle);
    153145       
     
    161153{
    162154        int input;
    163         tinput_t * in;
     155        tinput_t *in;
    164156       
    165157        in = tinput_new();
     
    179171                switch(input) {
    180172                        case 'a':
    181                                 label.add_part(in, &label.data);
    182                                 break;
    183                         case 'b':
    184                                 label.add_part(in, &label.data);
     173                                label.add_part(&label, in);
    185174                                break;
    186175                        case 'd':
    187                                 label.delete_part(in, &label.data);
     176                                label.delete_part(&label, in);
    188177                                break;
    189178                        case 'e':
    190                                 label.extra_funcs(in, dev_handle, &label.data);
     179                                label.extra_funcs(&label, in, dev_handle);
    191180                                break;
    192181                        case 'f':
     
    197186                                print_help();
    198187                                break;
     188                        case 'l':
     189                                set_alignment(in);
     190                                break;
    199191                        case 'n':
     192                                printf("Discarding label...\n");
    200193                                free_label();
    201                                 label.new_label(&label.data);
     194                                label.new_label(&label);
    202195                                break;
    203196                        case 'p':
    204                                 label.print_parts(&label.data);
     197                                label.print_parts(&label);
    205198                                break;
    206199                        case 'q':
    207200                                putchar('\n');
    208201                                goto end;
     202                        case 'r':
     203                                label.read_parts(&label, dev_handle);
    209204                        case 'w':
    210                                 label.write_parts(dev_handle, &label.data);
     205                                label.write_parts(&label, dev_handle);
    211206                                break;
    212207                        default:
     
    228223                "\t 'd' \t\t Delete partition.\n"
    229224                "\t 'e' \t\t Extra functions (per label format).\n"
    230                 "\t 'f' \t\t Switch the format of the partition label."
     225                "\t 'f' \t\t Switch the format of the partition label.\n"
    231226                "\t 'h' \t\t Prints help. See help for more.\n"
    232227                "\t 'l' \t\t Set alignment.\n"
    233228                "\t 'n' \t\t Create new label (discarding the old one).\n"
    234229                "\t 'p' \t\t Prints label contents.\n"
     230                "\t 'q' \t\t Quit.\n"
     231                "\t 'r' \t\t Read label from disk.\n"
    235232                "\t 'w' \t\t Write label to disk.\n"
    236                 "\t 'q' \t\t Quit.\n"
    237233                );
    238234
     
    244240                        "1) MBR\n"
    245241                        "2) GPT\n"
    246                 );
     242              );
    247243       
    248244        uint8_t val = get_input_uint8(in);
     
    250246                case 0:
    251247                        free_label();
    252                         label.layout = LYT_NONE;
    253                         fill_label_funcs();
     248                        construct_label(LYT_NONE);
    254249                        break;
    255250                case 1:
    256251                        free_label();
    257                         label.layout = LYT_MBR;
    258                         fill_label_funcs();
     252                        construct_label(LYT_MBR);
    259253                        break;
    260254                case 2:
    261255                        free_label();
     256                        construct_label(LYT_GPT);
     257                        break;
     258        }
     259}
     260
     261void construct_label(layouts_t layout)
     262{
     263        switch(layout) {
     264                case LYT_MBR:
     265                        label.layout = LYT_MBR;
     266                        construct_mbr_label(&label);
     267                        break;
     268                case LYT_GPT:
    262269                        label.layout = LYT_GPT;
    263                         fill_label_funcs();
    264                         break;
    265         }
    266 }
    267 
    268 void fill_label_funcs(void)
    269 {
    270         switch(label.layout) {
    271                 case LYT_MBR:
    272                         construct_mbr_label();
    273                         break;
    274                 case LYT_GPT:
    275                         construct_gpt_label();
     270                        construct_gpt_label(&label);
    276271                        break;
    277272                default:
    278                         construct_none_label();
     273                        label.layout = LYT_NONE;
     274                        construct_none_label(&label);
    279275                        break;
    280276        }
     
    283279void free_label(void)
    284280{
    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);
     281        label.destroy_label(&label);
    299282}
    300283
    301284int try_read(service_id_t dev_handle)
    302285{
    303         fill_label_funcs();
    304         printf("read_parts\n");
    305         return label.read_parts(dev_handle, &label.data);
    306 }
    307 
    308 int 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 
    322 int 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);
     286        return label.read_parts(&label, dev_handle);
    334287}
    335288
    336289int try_read_mbr(service_id_t dev_handle)
    337290{
    338         label.layout = LYT_MBR;
     291        construct_label(LYT_MBR);
    339292        return try_read(dev_handle);
    340293}
    341294
    342 int 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 
    355295int try_read_gpt(service_id_t dev_handle)
    356296{
    357         label.layout = LYT_GPT;
     297        construct_label(LYT_GPT);
    358298        return try_read(dev_handle);
    359299}
    360300
    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 
     301void 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
Note: See TracChangeset for help on using the changeset viewer.