Changes in / [b53e6d9:40240b1] in mainline


Ignore:
Location:
uspace
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bdsh/cmds/modules/bdd/bdd.c

    rb53e6d9 r40240b1  
    4242#include <assert.h>
    4343
    44 enum {
    45         /* Number of bytes per row */
    46         BPR = 16
    47 };
     44#define BLOCK_SIZE      512
     45#define BPR              16
    4846
    4947static const char *cmdname = "bdd";
     
    6967        unsigned int i, j;
    7068        dev_handle_t handle;
     69        block_t *block;
    7170        uint8_t *blk;
    7271        size_t size, bytes, rows;
    73         size_t block_size;
    7472        int rc;
    75         bn_t ba;
     73        bn_t boff;
    7674        uint8_t b;
    7775
     
    8583
    8684        if (argc >= 3)
    87                 ba = strtol(argv[2], NULL, 0);
     85                boff = strtol(argv[2], NULL, 0);
    8886        else
    89                 ba = 0;
     87                boff = 0;
    9088
    9189        if (argc >= 4)
     
    9694        rc = devmap_device_get_handle(argv[1], &handle, 0);
    9795        if (rc != EOK) {
    98                 printf("%s: Error resolving device `%s'.\n", cmdname, argv[1]);
     96                printf("Error: could not resolve device `%s'.\n", argv[1]);
    9997                return CMD_FAILURE;
    10098        }
    10199
    102         rc = block_init(handle, 2048);
     100        rc = block_init(handle, BLOCK_SIZE);
    103101        if (rc != EOK)  {
    104                 printf("%s: Error initializing libblock.\n", cmdname);
     102                printf("Error: could not init libblock.\n");
    105103                return CMD_FAILURE;
    106104        }
    107105
    108         rc = block_get_bsize(handle, &block_size);
     106        rc = block_cache_init(handle, BLOCK_SIZE, 2, CACHE_MODE_WB);
    109107        if (rc != EOK) {
    110                 printf("%s: Error determining device block size.\n", cmdname);
    111                 return CMD_FAILURE;
    112         }
    113 
    114         blk = malloc(block_size);
    115         if (blk == NULL) {
    116                 printf("%s: Error allocating memory.\n", cmdname);
    117                 block_fini(handle);
     108                printf("Error: could not init block cache.\n");
    118109                return CMD_FAILURE;
    119110        }
    120111
    121112        while (size > 0) {
    122                 rc = block_read_direct(handle, ba, 1, blk);
     113                rc = block_get(&block, handle, boff, 0);
    123114                if (rc != EOK) {
    124                         printf("%s: Error reading block %llu\n", cmdname, ba);
    125                         free(blk);
    126                         block_fini(handle);
     115                        printf("Error: could not get block %u, device %u.\n",
     116                            boff, handle);
    127117                        return CMD_FAILURE;
    128118                }
     119                blk = (uint8_t *) block->data;
    129120
    130                 bytes = (size < block_size) ? size : block_size;
     121                bytes = (size < BLOCK_SIZE) ? size : BLOCK_SIZE;
    131122                rows = (bytes + BPR - 1) / BPR;
    132123
     
    154145                }
    155146
     147                rc = block_put(block);
     148                if (rc != EOK) {
     149                        printf("Error: could not put block %p.\n",
     150                            block);
     151                        return CMD_FAILURE;
     152                }
     153
    156154                if (size > rows * BPR)
    157155                        size -= rows * BPR;
     
    159157                        size = 0;
    160158
    161                 /* Next block */
    162                 ba += 1;
     159                boff += rows * BPR;
    163160        }
    164161
    165         free(blk);
    166162        block_fini(handle);
    167163
  • uspace/srv/part/mbr_part/mbr_part.c

    rb53e6d9 r40240b1  
    3939 *
    4040 * Limitations:
    41  * 
     41 *
    4242 * Only works with boot records using LBA. CHS-only records are not
    43  * supported.
    44  *
    45  * Referemces:
    46  *     
    47  * The source of MBR structures for this driver have been the following
    48  * Wikipedia articles:
    49  *      - http://en.wikipedia.org/wiki/Master_Boot_Record
    50  *      - http://en.wikipedia.org/wiki/Extended_boot_record
    51  *
    52  * The fact that the extended partition has type 0x05 is pure observation.
    53  * (TODO: can it have any other type number?)
     43 * supported. Maximum number of partitions is fixed.
    5444 */
    5545
     
    8070
    8171        /** Boot record signature */
    82         BR_SIGNATURE    = 0xAA55
     72        BR_SIGNATURE    = 0xAA55,
    8373};
    8474
    8575enum ptype {
    86         /** Unused partition entry */
    87         PT_UNUSED       = 0x00,
    8876        /** Extended partition */
    89         PT_EXTENDED     = 0x05,
     77        PT_EXTENDED     = 0x05
    9078};
    9179
     
    377365        part->length     = len;
    378366
    379         part->present = (pte->ptype != PT_UNUSED) ? true : false;
    380 
     367        part->present = (sa != 0 || len != 0) ? true : false;
    381368        part->dev = 0;
    382369        part->next = NULL;
Note: See TracChangeset for help on using the changeset viewer.