Changeset 6453e306 in mainline for uspace/app


Ignore:
Timestamp:
2013-12-25T16:09:43Z (12 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ac36aed
Parents:
d51beba3
Message:

basic code review and coding style cleanup

Location:
uspace/app/hdisk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/hdisk/common.h

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    4545} layouts_t;
    4646
    47 union label_data {
    48         mbr_label_t     *mbr;
    49         gpt_label_t     *gpt;
    50 };
     47typedef union {
     48        mbr_label_t *mbr;
     49        gpt_label_t *gpt;
     50} label_data_t;
    5151
    52 typedef struct label label_t;
    53 
    54 struct label {
     52typedef struct label {
    5553        layouts_t layout;
    56         aoff64_t nblocks;
     54        aoff64_t blocks;
    5755        service_id_t device;
    58         union label_data data;
     56        label_data_t data;
    5957        unsigned int alignment;
    60         int (* destroy_label)(label_t *);
    61         int (* add_part)     (label_t *, tinput_t *);
    62         int (* delete_part)  (label_t *, tinput_t *);
    63         int (* new_label)    (label_t *);
    64         int (* print_parts)  (label_t *);
    65         int (* read_parts)   (label_t *);
    66         int (* write_parts)  (label_t *);
    67         int (* extra_funcs)  (label_t *, tinput_t *);
    68 };
     58        int (* destroy_label)(struct label *);
     59        int (* add_part)(struct label *, tinput_t *);
     60        int (* delete_part)(struct label *, tinput_t *);
     61        int (* new_label)(struct label *);
     62        int (* print_parts)(struct label *);
     63        int (* read_parts)(struct label *);
     64        int (* write_parts)(struct label *);
     65        int (* extra_funcs)(struct label *, tinput_t *);
     66} label_t;
    6967
    7068#endif
    71 
  • uspace/app/hdisk/func_gpt.c

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    3939#include <sys/types.h>
    4040#include <sys/typefmt.h>
    41 
    4241#include "func_gpt.h"
    4342#include "input.h"
     
    5150        this->alignment = 1;
    5251       
    53         this->add_part      = add_gpt_part;
    54         this->delete_part   = delete_gpt_part;
     52        this->add_part = add_gpt_part;
     53        this->delete_part = delete_gpt_part;
    5554        this->destroy_label = destroy_gpt_label;
    56         this->new_label     = new_gpt_label;
    57         this->print_parts   = print_gpt_parts;
    58         this->read_parts    = read_gpt_parts;
    59         this->write_parts   = write_gpt_parts;
    60         this->extra_funcs   = extra_gpt_funcs;
     55        this->new_label = new_gpt_label;
     56        this->print_parts = print_gpt_parts;
     57        this->read_parts = read_gpt_parts;
     58        this->write_parts = write_gpt_parts;
     59        this->extra_funcs = extra_gpt_funcs;
    6160       
    6261        return this->new_label(this);
     
    6564int add_gpt_part(label_t *this, tinput_t *in)
    6665{
    67         gpt_part_t * p = gpt_get_partition(this->data.gpt);
    68         if (p == NULL) {
     66        gpt_part_t *partition = gpt_get_partition(this->data.gpt);
     67        if (partition == NULL)
    6968                return ENOMEM;
    70         }
    71        
    72         return set_gpt_partition(in, p, this);
     69       
     70        return set_gpt_partition(in, partition, this);
    7371}
    7472
    7573int delete_gpt_part(label_t *this, tinput_t *in)
    7674{
    77         int rc;
    78         size_t idx;
    79        
    80         printf("Number of the partition to delete (counted from 0): ");
    81         idx = get_input_size_t(in);
    82        
    83         rc = gpt_remove_partition(this->data.gpt, idx);
     75        printf("Index of the partition to delete (counted from 0): ");
     76        size_t idx = get_input_size_t(in);
     77       
     78        int rc = gpt_remove_partition(this->data.gpt, idx);
    8479        if (rc == ENOMEM) {
    85                 printf("Warning: running low on memory, not resizing...\n");
     80                printf("Warning: Running out on memory, not resizing.\n");
    8681                return rc;
    8782        } else if (rc == EINVAL) {
     
    107102int print_gpt_parts(label_t *this)
    108103{
    109         printf("Current partition scheme (GPT)(number of blocks: %" PRIu64 "):\n", this->nblocks);
    110         printf("%15s %10s %10s Type: Name:\n", "Start:", "End:", "Length:");
     104        printf("Current partition scheme: GPT\n");
     105        printf("Number of blocks: %" PRIu64 "\n", this->blocks);
    111106       
    112107        size_t i = 0;
    113        
    114108        gpt_part_foreach (this->data.gpt, iter) {
    115                 i++;
    116                
    117109                if (gpt_get_part_type(iter) == GPT_PTE_UNUSED)
    118110                        continue;
    119111               
    120112                if (i % 20 == 0)
    121                         printf("%15s %10s %10s Type: Name:\n", "Start:", "End:", "Length:");
    122                
     113                        printf("%15s %10s %10s Type: Name:\n",
     114                            "Start:", "End:", "Length:");
    123115               
    124116                printf("%3zu  %10" PRIu64 " %10" PRIu64 " %10" PRIu64 "    %3zu %s\n",
    125                    i-1, gpt_get_start_lba(iter), gpt_get_end_lba(iter),
    126                         gpt_get_end_lba(iter) - gpt_get_start_lba(iter),
    127                         gpt_get_part_type(iter), gpt_get_part_name(iter));
    128                
     117                   i, gpt_get_start_lba(iter), gpt_get_end_lba(iter),
     118                   gpt_get_end_lba(iter) - gpt_get_start_lba(iter),
     119                   gpt_get_part_type(iter), gpt_get_part_name(iter));
     120               
     121                i++;
    129122        }
    130123       
     
    134127int read_gpt_parts(label_t *this)
    135128{
    136         int rc;
    137        
    138         rc = gpt_read_header(this->data.gpt, this->device);
    139         if (rc != EOK) {
    140                 printf("Error: Reading header failed: %d (%s)\n", rc, str_error(rc));
     129        int rc = gpt_read_header(this->data.gpt, this->device);
     130        if (rc != EOK) {
     131                printf("Error: Reading header failed: %d (%s)\n", rc,
     132                    str_error(rc));
    141133                return rc;
    142134        }
     
    144136        rc = gpt_read_partitions(this->data.gpt);
    145137        if (rc != EOK) {
    146                 printf("Error: Reading partitions failed: %d (%s)\n", rc, str_error(rc));
     138                printf("Error: Reading partitions failed: %d (%s)\n", rc,
     139                    str_error(rc));
    147140                return rc;
    148141        }
     
    153146int write_gpt_parts(label_t *this)
    154147{
    155         int rc;
    156         printf("test1\n");
    157         rc = gpt_write_partitions(this->data.gpt, this->device);
    158         if (rc != EOK) {
    159                 printf("Error: Writing partitions failed: %d (%s)\n", rc, str_error(rc));
    160                 return rc;
    161         }
    162         printf("test2\n");
     148        int rc = gpt_write_partitions(this->data.gpt, this->device);
     149        if (rc != EOK) {
     150                printf("Error: Writing partitions failed: %d (%s)\n", rc,
     151                    str_error(rc));
     152                return rc;
     153        }
     154       
    163155        return EOK;
    164156}
     
    170162}
    171163
    172 static int set_gpt_partition(tinput_t *in, gpt_part_t *p, label_t * this)
    173 {
    174         int rc;
    175        
    176         uint64_t sa, ea;
    177        
     164static int set_gpt_partition(tinput_t *in, gpt_part_t *partition, label_t *this)
     165{
    178166        printf("Set starting address: ");
    179         sa = get_input_uint64(in);
    180         if (this->alignment != 0 && this->alignment != 1 && sa % this->alignment != 0)
     167        uint64_t sa = get_input_uint64(in);
     168        if ((this->alignment != 0) && (this->alignment != 1) &&
     169            (sa % this->alignment != 0))
    181170                sa = gpt_get_next_aligned(sa, this->alignment);
    182171       
    183         printf("Set end address (max: %" PRIu64 "): ", this->nblocks);
    184         ea = get_input_uint64(in);
     172        printf("Set end address (max: %" PRIu64 "): ", this->blocks);
     173        uint64_t ea = get_input_uint64(in);
    185174       
    186175        if (ea <= sa) {
     
    189178        }
    190179       
    191         gpt_set_start_lba(p, sa);
    192         gpt_set_end_lba(p, ea);
    193        
    194         /* See global.c from libgpt for all partition types. */
     180        gpt_set_start_lba(partition, sa);
     181        gpt_set_end_lba(partition, ea);
     182       
    195183        printf("Choose type: ");
    196184        print_part_types();
    197185        printf("Set type (1 for HelenOS System): ");
    198186        size_t idx = get_input_size_t(in);
    199         gpt_set_part_type(p, idx);
    200        
    201         gpt_set_random_uuid(p->part_id);
    202        
     187        gpt_set_part_type(partition, idx);
     188       
     189        gpt_set_random_uuid(partition->part_id);
     190       
     191        printf("Name the partition: ");
    203192        char *name;
    204         printf("Name the partition: ");
    205         rc = get_input_line(in, &name);
     193        int rc = get_input_line(in, &name);
    206194        if (rc != EOK) {
    207195                printf("Error reading name: %d (%s)\n", rc, str_error(rc));
     
    209197        }
    210198       
    211         gpt_set_part_name(p, name, str_size(name));
     199        gpt_set_part_name(partition, name, str_size(name));
    212200       
    213201        return EOK;
     
    216204static void print_part_types(void)
    217205{
    218         int c;
    219         int count = 0;
    220         const struct partition_type * ptype = gpt_ptypes;
     206        unsigned int count = 0;
     207        const partition_type_t *ptype = gpt_ptypes;
    221208       
    222209        do {
     210                printf("%u: %s\n", count, ptype->desc);
     211                count++;
     212                ptype++;
     213               
    223214                if (count % 10 == 0) {
    224215                        printf("Print (more) partition types? (y/n)\n");
    225                         c = getchar();
     216                        int c = getchar();
    226217                        if (c == 'n')
    227218                                return;
    228219                }
    229                
    230                 printf("%d: %s\n", count, ptype->desc);
    231                 ++count;
    232                 ++ptype;
    233220        } while (ptype->guid != NULL);
    234221}
    235 
  • uspace/app/hdisk/func_gpt.h

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    3434
    3535#ifndef __FUNC_GPT_H__
    36 #define __FUNC_GPT_H__
     36#define __FUNC_GPT_H__
    3737
    3838#include <loc.h>
    3939#include <tinput.h>
    4040#include <libgpt.h>
    41 
    4241#include "common.h"
    4342
    4443extern int construct_gpt_label(label_t *);
    45 extern int add_gpt_part     (label_t *, tinput_t *);
    46 extern int delete_gpt_part  (label_t *, tinput_t *);
     44extern int add_gpt_part(label_t *, tinput_t *);
     45extern int delete_gpt_part(label_t *, tinput_t *);
    4746extern int destroy_gpt_label(label_t *);
    48 extern int new_gpt_label    (label_t *);
    49 extern int print_gpt_parts  (label_t *);
    50 extern int read_gpt_parts   (label_t *);
    51 extern int write_gpt_parts  (label_t *);
    52 extern int extra_gpt_funcs  (label_t *, tinput_t *);
     47extern int new_gpt_label(label_t *);
     48extern int print_gpt_parts(label_t *);
     49extern int read_gpt_parts(label_t *);
     50extern int write_gpt_parts(label_t *);
     51extern int extra_gpt_funcs(label_t *, tinput_t *);
    5352
    5453#endif
  • uspace/app/hdisk/func_mbr.c

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    3737#include <str_error.h>
    3838#include <sys/types.h>
    39 
    4039#include "func_mbr.h"
    4140#include "input.h"
     
    6261int add_mbr_part(label_t *this, tinput_t *in)
    6362{
    64         int rc;
    65        
    66         mbr_part_t *part = mbr_alloc_partition();
    67        
    68         rc = set_mbr_partition(in, part, this);
     63        mbr_part_t *partition = mbr_alloc_partition();
     64        if (partition == NULL)
     65                return ENOMEM;
     66       
     67        int rc = set_mbr_partition(in, partition, this);
    6968        if (rc != EOK)
    7069                return rc;
    7170       
    72         rc = mbr_add_partition(this->data.mbr, part);
    73         if (rc != ERR_OK) {
     71        rc = mbr_add_partition(this->data.mbr, partition);
     72        if (rc != ERR_OK)
    7473                printf("Error adding partition: %d\n", rc);
    75         }
    7674       
    7775        return EOK;
     
    8078int delete_mbr_part(label_t *this, tinput_t *in)
    8179{
    82         int rc;
    83         size_t idx;
    84        
    85         printf("Number of the partition to delete (counted from 0): ");
    86         idx = get_input_size_t(in);
    87        
    88         if (idx == 0 && errno != EOK)
    89                 return errno;
    90        
    91         rc = mbr_remove_partition(this->data.mbr, idx);
    92         if (rc != EOK) {
     80        printf("Index of the partition to delete (counted from 0): ");
     81        size_t idx = get_input_size_t(in);
     82       
     83        if ((idx == 0) && (errno != EOK))
     84                return errno;
     85       
     86        int rc = mbr_remove_partition(this->data.mbr, idx);
     87        if (rc != EOK)
    9388                printf("Error: partition does not exist?\n");
    94         }
    9589       
    9690        return EOK;
     
    113107}
    114108
    115 /** Print current partition scheme */
    116109int print_mbr_parts(label_t *this)
    117110{
    118         int num = 0;
    119        
    120         printf("Current partition scheme (MBR)(number of blocks: %" PRIu64 "):\n", this->nblocks);
    121         printf("\t\t%10s  %10s %10s %10s %7s\n", "Bootable:", "Start:", "End:", "Length:", "Type:");
    122        
     111        printf("Current partition scheme: MBR\n");
     112        printf("Number of blocks: %" PRIu64 "\n", this->blocks);
     113        printf("\t\t%10s  %10s %10s %10s %7s\n",
     114            "Bootable:", "Start:", "End:", "Length:", "Type:");
     115       
     116        unsigned int num = 0;
    123117        mbr_part_t *it;
    124        
    125118        for (it = mbr_get_first_partition(this->data.mbr); it != NULL;
    126119             it = mbr_get_next_partition(this->data.mbr, it)) {
     
    128121                        continue;
    129122               
    130                 printf("\tP%d:\t", num);
     123                printf("\tP%u:\t", num);
    131124                if (mbr_get_flag(it, ST_BOOT))
    132125                        printf("*");
     
    134127                        printf(" ");
    135128               
    136                 printf("\t%10u %10u %10u %7u\n", it->start_addr, it->start_addr + it->length, it->length, it->type);
     129                printf("\t%10u %10u %10u %7u\n", it->start_addr,
     130                    it->start_addr + it->length, it->length, it->type);
    137131               
    138132                num++;
    139133        }
    140134       
    141         printf("%d partitions found.\n", num);
     135        printf("%u partitions found.\n", num);
    142136       
    143137        return EOK;
     
    146140int read_mbr_parts(label_t *this)
    147141{
    148         int rc;
    149         rc = mbr_read_mbr(this->data.mbr, this->device);
     142        int rc = mbr_read_mbr(this->data.mbr, this->device);
    150143        if (rc != EOK)
    151144                return rc;
     
    164157{
    165158        int rc = mbr_write_partitions(this->data.mbr, this->device);
    166         if (rc != EOK) {
    167                 printf("Error occured during writing: ERR: %d: %s\n", rc, str_error(rc));
    168         }
     159        if (rc != EOK)
     160                printf("Error occured during writing: ERR: %d: %s\n", rc,
     161                    str_error(rc));
    169162       
    170163        return rc;
     
    177170}
    178171
    179 static int set_mbr_partition(tinput_t *in, mbr_part_t *p, label_t * this)
    180 {
    181         int c;
    182         uint8_t type;
    183        
     172static int set_mbr_partition(tinput_t *in, mbr_part_t *partition, label_t *this)
     173{
    184174        printf("Primary (p) or logical (l): ");
    185         c = getchar();
     175        int c = getchar();
    186176        printf("%c\n", c);
    187177
    188178        switch (c) {
    189179        case 'p':
    190                 mbr_set_flag(p, ST_LOGIC, false);
     180                mbr_set_flag(partition, ST_LOGIC, false);
    191181                break;
    192182        case 'l':
    193                 mbr_set_flag(p, ST_LOGIC, true);
     183                mbr_set_flag(partition, ST_LOGIC, true);
    194184                break;
    195185        default:
     
    198188        }
    199189       
    200         printf("Set type (0-255): ");
    201         type = get_input_uint8(in);
    202         if (type == 0 && errno != EOK)
    203                 return errno;
    204 
    205         ///TODO: there can only be one boolabel partition; let's do it just like fdisk
     190        printf("Set type (0 - 255): ");
     191        uint8_t type = get_input_uint8(in);
     192        if ((type == 0) && (errno != EOK))
     193                return errno;
     194       
     195        // FIXME: Make sure there is at most one bootable partition
    206196        printf("Bootable? (y/n): ");
    207197        c = getchar();
    208         if (c != 'y' && c != 'Y' && c != 'n' && c != 'N') {
     198        if ((c != 'y') && (c != 'Y') && (c != 'n') && (c != 'N')) {
    209199                printf("Invalid value. Cancelled.");
    210200                return EINVAL;
    211201        }
     202       
    212203        printf("%c\n", c);
    213         mbr_set_flag(p, ST_BOOT, (c == 'y' || c == 'Y') ? true : false);
    214 
    215 
    216         uint32_t sa, ea;
    217 
     204        mbr_set_flag(partition, ST_BOOT, (c == 'y' || c == 'Y') ? true : false);
     205       
    218206        printf("Set starting address: ");
    219         sa = get_input_uint32(in);
    220         if (sa == 0 && errno != EOK)
    221                 return errno;
    222        
    223         if (this->alignment != 0 && this->alignment != 1 && sa % this->alignment != 0) {
     207        uint32_t sa = get_input_uint32(in);
     208        if ((sa == 0) && (errno != EOK))
     209                return errno;
     210       
     211        if ((this->alignment != 0) && (this->alignment != 1) &&
     212            (sa % this->alignment != 0)) {
    224213                sa = mbr_get_next_aligned(sa, this->alignment);
    225                 printf("Starting address was aligned to %u.\n", sa);
    226         }
    227        
    228         printf("Set end addres (max: %" PRIu64 "): ", this->nblocks);
    229         ea = get_input_uint32(in);
    230         if (ea == 0 && errno != EOK)
     214                printf("Starting address was aligned to %" PRIu32 ".\n", sa);
     215        }
     216       
     217        printf("Set end addres (max: %" PRIu64 "): ", this->blocks);
     218        uint32_t ea = get_input_uint32(in);
     219        if ((ea == 0) && (errno != EOK))
    231220                return errno;
    232221       
     
    236225        }
    237226       
    238         p->type = type;
    239         p->start_addr = sa;
    240         p->length = ea - sa;
    241 
    242         return EOK;
    243 }
    244 
    245 
    246 
    247 
    248 
    249 
     227        partition->type = type;
     228        partition->start_addr = sa;
     229        partition->length = ea - sa;
     230       
     231        return EOK;
     232}
  • uspace/app/hdisk/func_mbr.h

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    3434
    3535#ifndef __FUNC_MBR_H__
    36 #define __FUNC_MBR_H__
     36#define __FUNC_MBR_H__
    3737
    3838#include <loc.h>
    3939#include <tinput.h>
    4040#include <libmbr.h>
    41 
    4241#include "common.h"
    4342
    4443extern int construct_mbr_label(label_t *);
    45 extern int add_mbr_part     (label_t *, tinput_t *);
    46 extern int delete_mbr_part  (label_t *, tinput_t *);
     44extern int add_mbr_part(label_t *, tinput_t *);
     45extern int delete_mbr_part(label_t *, tinput_t *);
    4746extern int destroy_mbr_label(label_t *);
    48 extern int new_mbr_label    (label_t *);
    49 extern int print_mbr_parts  (label_t *);
    50 extern int read_mbr_parts   (label_t *);
    51 extern int write_mbr_parts  (label_t *);
    52 extern int extra_mbr_funcs  (label_t *, tinput_t *);
     47extern int new_mbr_label(label_t *);
     48extern int print_mbr_parts(label_t *);
     49extern int read_mbr_parts(label_t *);
     50extern int write_mbr_parts(label_t *);
     51extern int extra_mbr_funcs(label_t *, tinput_t *);
    5352
    5453#endif
  • uspace/app/hdisk/func_none.c

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    3333 */
    3434
    35 
    3635#include <errno.h>
    37 
    3836#include "func_none.h"
    3937
    4038static void not_implemented(void);
    41 
    4239
    4340int construct_none_label(label_t *this)
     
    4542        this->layout = LYT_NONE;
    4643       
    47         this->add_part      = add_none_part;
    48         this->delete_part   = delete_none_part;
     44        this->add_part = add_none_part;
     45        this->delete_part = delete_none_part;
    4946        this->destroy_label = destroy_none_label;
    50         this->new_label     = new_none_label;
    51         this->print_parts   = print_none_parts;
    52         this->read_parts    = read_none_parts;
    53         this->write_parts   = write_none_parts;
    54         this->extra_funcs   = extra_none_funcs;
     47        this->new_label = new_none_label;
     48        this->print_parts = print_none_parts;
     49        this->read_parts = read_none_parts;
     50        this->write_parts = write_none_parts;
     51        this->extra_funcs = extra_none_funcs;
    5552       
    5653        return EOK;
    5754}
    5855
    59 int add_none_part(label_t *this, tinput_t * in)
     56int add_none_part(label_t *this, tinput_t *in)
    6057{
    6158        not_implemented();
     
    6360}
    6461
    65 int delete_none_part(label_t *this, tinput_t * in)
     62int delete_none_part(label_t *this, tinput_t *in)
    6663{
    6764        not_implemented();
     
    104101}
    105102
    106 static void not_implemented()
     103static void not_implemented(void)
    107104{
    108105        printf("No format selected.\n");
  • uspace/app/hdisk/func_none.h

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    3434
    3535#ifndef __FUNC_NONE_H__
    36 #define __FUNC_NONE_H__
     36#define __FUNC_NONE_H__
    3737
    3838#include <loc.h>
    3939#include <tinput.h>
    40 
    4140#include "common.h"
    4241
    4342extern int construct_none_label(label_t *);
    44 extern int add_none_part     (label_t *, tinput_t *);
    45 extern int delete_none_part  (label_t *, tinput_t *);
     43extern int add_none_part(label_t *, tinput_t *);
     44extern int delete_none_part(label_t *, tinput_t *);
    4645extern int destroy_none_label(label_t *);
    47 extern int new_none_label    (label_t *);
    48 extern int print_none_parts  (label_t *);
    49 extern int read_none_parts   (label_t *);
    50 extern int write_none_parts  (label_t *);
    51 extern int extra_none_funcs  (label_t *, tinput_t *);
     46extern int new_none_label(label_t *);
     47extern int print_none_parts(label_t *);
     48extern int read_none_parts(label_t *);
     49extern int write_none_parts(label_t *);
     50extern int extra_none_funcs(label_t *, tinput_t *);
    5251
    5352#endif
  • uspace/app/hdisk/hdisk.c

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    4747#include <tinput.h>
    4848#include <str_error.h>
    49 
    5049#include "hdisk.h"
    5150#include "input.h"
     
    5453#include "func_none.h"
    5554
    56 int interact(void);
    57 void print_help(void);
    58 void select_label_format(tinput_t *);
    59 void construct_label(layouts_t);
    60 void free_label(void);
    61 int try_read(void);
    62 int try_read_mbr(void);
    63 int try_read_gpt(void);
    64 void set_alignment(tinput_t *);
    65 
     55static int interact(void);
     56static void print_help(void);
     57static void select_label_format(tinput_t *);
     58static void construct_label(layouts_t);
     59static void free_label(void);
     60static int try_read(void);
     61static int try_read_mbr(void);
     62static int try_read_gpt(void);
     63static void set_alignment(tinput_t *);
    6664
    6765static label_t label;
    6866
    69 int main(int argc, char ** argv)
     67int main(int argc, char *argv[])
    7068{
    7169        if (argc == 1) {
    7270                printf("Missing argument. Please specify a device to operate on.\n");
    73                 return -1;
    74         }
    75        
    76         int rc;
     71                return 1;
     72        }
     73       
    7774        service_id_t dev_handle;
    78        
    79         rc = loc_service_get_id(argv[1], &dev_handle, IPC_FLAG_BLOCKING);
     75        int rc = loc_service_get_id(argv[1], &dev_handle, IPC_FLAG_BLOCKING);
    8076        if (rc != EOK) {
    8177                printf("Unknown device. Exiting.\n");
    82                 return -1;
     78                return 2;
    8379        }
    8480       
     
    8985        if (rc != EOK) {
    9086                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);
     87                return 3;
     88        }
     89       
     90        aoff64_t blocks;
     91        rc = block_get_nblocks(dev_handle, &blocks);
    9692        block_fini(dev_handle);
    9793        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;
     94                printf("Error while getting number of blocks: %d - %s.\n",
     95                    rc, str_error(rc));
     96                return 4;
     97        }
     98       
     99        label.blocks = blocks;
    103100       
    104101        rc = try_read_mbr();
     
    116113       
    117114interact:
    118        
    119         rc = interact();
    120        
    121         return rc;
     115        return interact();
    122116}
    123117
    124118/** Interact with user */
    125 int interact()
    126 {
    127         int input;
    128         tinput_t *in;
    129        
    130         in = tinput_new();
     119int interact(void)
     120{
     121        tinput_t *in = tinput_new();
    131122        if (in == NULL) {
    132123                printf("Failed initing input. Free some memory.\n");
     
    137128        printf("Welcome to hdisk.\nType 'h' for help.\n");
    138129       
    139         while (1) {
     130        while (true) {
    140131                printf("# ");
    141                 input = getchar();
     132                int input = getchar();
    142133                printf("%c\n", input);
    143134               
     
    187178end:
    188179        tinput_destroy(in);
    189        
    190180        return EOK;
    191181}
     
    194184{
    195185        printf(
    196                 "\t 'a' \t\t Add partition.\n"
    197                 "\t 'd' \t\t Delete partition.\n"
    198                 "\t 'e' \t\t Extra functions (per label format).\n"
    199                 "\t 'f' \t\t Switch the format of the partition label.\n"
    200                 "\t 'h' \t\t Prints help. See help for more.\n"
    201                 "\t 'l' \t\t Set alignment.\n"
    202                 "\t 'n' \t\t Create new label (discarding the old one).\n"
    203                 "\t 'p' \t\t Prints label contents.\n"
    204                 "\t 'q' \t\t Quit.\n"
    205                 "\t 'r' \t\t Read label from disk.\n"
    206                 "\t 'w' \t\t Write label to disk.\n"
    207                 );
    208 
    209 }
    210 
    211 void select_label_format(tinput_t * in)
     186            "\t 'a' \t\t Add partition.\n"
     187            "\t 'd' \t\t Delete partition.\n"
     188            "\t 'e' \t\t Extra functions (per label format).\n"
     189            "\t 'f' \t\t Switch the format of the partition label.\n"
     190            "\t 'h' \t\t Prints help. See help for more.\n"
     191            "\t 'l' \t\t Set alignment.\n"
     192            "\t 'n' \t\t Create new label (discarding the old one).\n"
     193            "\t 'p' \t\t Prints label contents.\n"
     194            "\t 'q' \t\t Quit.\n"
     195            "\t 'r' \t\t Read label from disk.\n"
     196            "\t 'w' \t\t Write label to disk.\n");
     197}
     198
     199void select_label_format(tinput_t *in)
    212200{
    213201        printf("Available formats are: \n"
    214                         "1) MBR\n"
    215                         "2) GPT\n"
    216               );
     202            "1) MBR\n"
     203            "2) GPT\n");
    217204       
    218205        uint8_t val = get_input_uint8(in);
     
    253240}
    254241
    255 int try_read()
    256 {
    257        
     242int try_read(void)
     243{
    258244        return label.read_parts(&label);
    259245}
    260246
    261 int try_read_mbr()
     247int try_read_mbr(void)
    262248{
    263249        construct_label(LYT_MBR);
     
    265251}
    266252
    267 int try_read_gpt()
     253int try_read_gpt(void)
    268254{
    269255        construct_label(LYT_GPT);
     
    277263        printf("Alignment set to %u sectors.\n", label.alignment);
    278264}
    279 
    280 
    281 
  • uspace/app/hdisk/hdisk.h

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
    3232/** @file
    3333 */
     34
     35#ifndef __HDISK_H__
     36#define __HDISK_H__
    3437
    3538#include "common.h"
     
    3841        label.layout = LYT_NONE
    3942
     43#endif
  • uspace/app/hdisk/input.c

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    3636#include <errno.h>
    3737#include <stdlib.h>
    38 
    3938#include "input.h"
    4039
    4140typedef int (*conv_f)(const char *, char **, unsigned int, bool, void *);
    42 static int convert(tinput_t * in, conv_f str_f, void * val);
    4341
    44 int get_input_line(tinput_t * in, char ** str)
     42static int convert(tinput_t *, conv_f, void *);
     43
     44int get_input_line(tinput_t *in, char **str)
    4545{
    46         int rc;
    47         rc = tinput_read(in, str);
    48         if (rc == ENOENT) {
    49                 /* User requested exit */
     46        int rc = tinput_read(in, str);
     47        if (rc == ENOENT)
    5048                return EINTR;
    51         }
    52         if (rc != EOK) {
    53                 /* Error in communication with console */
     49       
     50        if (rc != EOK)
    5451                return rc;
    55         }
     52       
    5653        /* Check for empty input. */
    5754        if (str_cmp(*str, "") == 0) {
     
    6057                return EINVAL;
    6158        }
    62 
     59       
    6360        return EOK;
    6461}
    6562
    66 uint8_t get_input_uint8(tinput_t * in)
     63uint8_t get_input_uint8(tinput_t *in)
    6764{
    68         int rc;
    6965        uint32_t val;
    70        
    71         rc = convert(in, (conv_f) str_uint8_t, &val);
    72         if (rc != EOK) {
    73                 errno = rc;
    74                 return 0;
    75         }
    76        
    77         return val;
    78 }
    79 
    80 uint32_t get_input_uint32(tinput_t * in)
    81 {
    82         int rc;
    83         uint32_t val;
    84        
    85         rc = convert(in, (conv_f) str_uint32_t, &val);
    86         if (rc != EOK) {
    87                 errno = rc;
    88                 return 0;
    89         }
    90        
    91         return val;
    92 }
    93 
    94 uint64_t get_input_uint64(tinput_t * in)
    95 {
    96         int rc;
    97         uint64_t val;
    98        
    99         rc = convert(in, (conv_f) str_uint64_t, &val);
    100         if (rc != EOK) {
    101                 errno = rc;
    102                 return 0;
    103         }
    104        
    105         return val;
    106 }
    107 
    108 size_t get_input_size_t(tinput_t * in)
    109 {
    110         int rc;
    111         size_t val;
    112        
    113         rc = convert(in, (conv_f) str_size_t, &val);
     66        int rc = convert(in, (conv_f) str_uint8_t, &val);
    11467        if (rc != EOK) {
    11568                errno = rc;
     
    12174}
    12275
    123 static int convert(tinput_t * in, conv_f str_f, void * val)
     76uint32_t get_input_uint32(tinput_t *in)
    12477{
    125         int rc;
    126         char * str;
     78        uint32_t val;
     79        int rc = convert(in, (conv_f) str_uint32_t, &val);
     80        if (rc != EOK) {
     81                errno = rc;
     82                return 0;
     83        }
    12784       
    128         rc = get_input_line(in, &str);
     85        errno = EOK;
     86        return val;
     87}
     88
     89uint64_t get_input_uint64(tinput_t *in)
     90{
     91        uint64_t val;
     92        int rc = convert(in, (conv_f) str_uint64_t, &val);
     93        if (rc != EOK) {
     94                errno = rc;
     95                return 0;
     96        }
     97       
     98        errno = EOK;
     99        return val;
     100}
     101
     102size_t get_input_size_t(tinput_t *in)
     103{
     104        size_t val;
     105        int rc = convert(in, (conv_f) str_size_t, &val);
     106        if (rc != EOK) {
     107                errno = rc;
     108                return 0;
     109        }
     110       
     111        errno = EOK;
     112        return val;
     113}
     114
     115static int convert(tinput_t *in, conv_f str_f, void *val)
     116{
     117        char *str;
     118        int rc = get_input_line(in, &str);
    129119        if (rc != EOK) {
    130120                printf("Error reading input.\n");
     
    133123       
    134124        rc = str_f(str, NULL, 10, true, val);
    135         if (rc != EOK) {
     125        if (rc != EOK)
    136126                printf("Invalid value.\n");
    137         }
    138127       
    139128        free(str);
    140129        return rc;
    141130}
    142 
  • uspace/app/hdisk/input.h

    rd51beba3 r6453e306  
    11/*
    2  * Copyright (c) 2012, 2013 Dominik Taborsky
     2 * Copyright (c) 2012-2013 Dominik Taborsky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29  /** @addtogroup hdisk
     29/** @addtogroup hdisk
    3030 * @{
    3131 */
     
    3434
    3535#ifndef __INPUT_H__
    36 #define __INPUT_H__
     36#define __INPUT_H__
    3737
    3838#include <tinput.h>
    3939
    40 extern int              get_input_line(tinput_t * in, char ** str);
    41 extern uint8_t  get_input_uint8(tinput_t * in);
    42 extern uint32_t get_input_uint32(tinput_t * in);
    43 extern uint64_t get_input_uint64(tinput_t * in);
    44 extern size_t   get_input_size_t(tinput_t * in);
     40extern int get_input_line(tinput_t *, char **);
     41extern uint8_t get_input_uint8(tinput_t *);
     42extern uint32_t get_input_uint32(tinput_t *);
     43extern uint64_t get_input_uint64(tinput_t *);
     44extern size_t get_input_size_t(tinput_t *);
    4545
    4646#endif
Note: See TracChangeset for help on using the changeset viewer.