Changeset 8c95dff in mainline for uspace/app/hdisk/hdisk.c


Ignore:
Timestamp:
2013-11-30T17:49:09Z (12 years ago)
Author:
Dominik Taborsky (AT DOT) <brembyseznamcz>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f4a47e52
Parents:
802898f
Message:

various bugfixes

File:
1 edited

Legend:

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

    r802898f r8c95dff  
    4646#include <libgpt.h>
    4747#include <tinput.h>
     48#include <str_error.h>
    4849
    4950#include "hdisk.h"
     
    5354#include "func_none.h"
    5455
    55 int interact(service_id_t);
     56int interact(void);
    5657void print_help(void);
    5758void select_label_format(tinput_t *);
    5859void construct_label(layouts_t);
    5960void free_label(void);
    60 int try_read(service_id_t);
    61 int try_read_mbr(service_id_t);
    62 int try_read_gpt(service_id_t);
     61int try_read(void);
     62int try_read_mbr(void);
     63int try_read_gpt(void);
    6364void set_alignment(tinput_t *);
    6465
     
    8384       
    8485        init_label();
    85        
    86         rc = try_read_mbr(dev_handle);
     86        label.device = dev_handle;
     87       
     88        rc = block_init(EXCHANGE_ATOMIC, dev_handle, 512);
     89        if (rc != EOK) {
     90                printf("Error during libblock init: %d - %s.\n", rc, str_error(rc));
     91                return -1;
     92        }
     93       
     94        aoff64_t nblocks;
     95        rc = block_get_nblocks(dev_handle, &nblocks);
     96        block_fini(dev_handle);
     97        if (rc != EOK) {
     98                printf(LIBMBR_NAME ": Error while getting number of blocks: %d - %s.\n", rc, str_error(rc));
     99                return -1;
     100        }
     101       
     102        label.nblocks = nblocks;
     103       
     104        rc = try_read_mbr();
    87105        if (rc == EOK)
    88106                goto interact;
    89107       
    90         rc = try_read_gpt(dev_handle);
     108        free_label();
     109       
     110        rc = try_read_gpt();
    91111        if (rc == EOK)
    92112                goto interact;
    93113       
    94114        printf("No label recognized. Create a new one.\n");
    95         label.layout = LYT_NONE;
     115        construct_label(LYT_NONE);
    96116       
    97117interact:
    98118       
    99         rc = interact(dev_handle);
     119        rc = interact();
    100120       
    101121        return rc;
     
    103123
    104124/** Interact with user */
    105 int interact(service_id_t dev_handle)
     125int interact()
    106126{
    107127        int input;
     
    130150                        break;
    131151                case 'e':
    132                         label.extra_funcs(&label, in, dev_handle);
     152                        label.extra_funcs(&label, in);
    133153                        break;
    134154                case 'f':
     155                        free_label();
    135156                        select_label_format(in);
    136157                        break;
     
    154175                        goto end;
    155176                case 'r':
    156                         label.read_parts(&label, dev_handle);
     177                        label.read_parts(&label);
    157178                case 'w':
    158                         label.write_parts(&label, dev_handle);
     179                        label.write_parts(&label);
    159180                        break;
    160181                default:
     
    197218        uint8_t val = get_input_uint8(in);
    198219        switch (val) {
    199         case 0:
    200                 free_label();
     220        case 1:
     221                construct_label(LYT_MBR);
     222                break;
     223        case 2:
     224                construct_label(LYT_GPT);
     225                break;
     226        default:
    201227                construct_label(LYT_NONE);
    202                 break;
    203         case 1:
    204                 free_label();
    205                 construct_label(LYT_MBR);
    206                 break;
    207         case 2:
    208                 free_label();
    209                 construct_label(LYT_GPT);
    210228                break;
    211229        }
     
    235253}
    236254
    237 int try_read(service_id_t dev_handle)
    238 {
    239         return label.read_parts(&label, dev_handle);
    240 }
    241 
    242 int try_read_mbr(service_id_t dev_handle)
     255int try_read()
     256{
     257       
     258        return label.read_parts(&label);
     259}
     260
     261int try_read_mbr()
    243262{
    244263        construct_label(LYT_MBR);
    245         return try_read(dev_handle);
    246 }
    247 
    248 int try_read_gpt(service_id_t dev_handle)
     264        return try_read();
     265}
     266
     267int try_read_gpt()
    249268{
    250269        construct_label(LYT_GPT);
    251         return try_read(dev_handle);
     270        return try_read();
    252271}
    253272
Note: See TracChangeset for help on using the changeset viewer.