Changes in uspace/app/bdsh/cmds/modules/bdd/bdd.c [1fbe064b:309ede1] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/cmds/modules/bdd/bdd.c
r1fbe064b r309ede1 40 40 #include <devmap.h> 41 41 #include <errno.h> 42 #include <assert.h> 42 43 43 #define BLOCK_SIZE 512 44 #define BPR 16 44 enum { 45 /* Number of bytes per row */ 46 BPR = 16 47 }; 45 48 46 49 static const char *cmdname = "bdd"; … … 66 69 unsigned int i, j; 67 70 dev_handle_t handle; 68 block_t *block;69 71 uint8_t *blk; 70 72 size_t size, bytes, rows; 73 size_t block_size; 71 74 int rc; 72 bn_t b off;75 bn_t ba; 73 76 uint8_t b; 74 77 … … 82 85 83 86 if (argc >= 3) 84 b off= strtol(argv[2], NULL, 0);87 ba = strtol(argv[2], NULL, 0); 85 88 else 86 b off= 0;89 ba = 0; 87 90 88 91 if (argc >= 4) … … 93 96 rc = devmap_device_get_handle(argv[1], &handle, 0); 94 97 if (rc != EOK) { 95 printf(" Error: could not resolve device `%s'.\n", argv[1]);98 printf("%s: Error resolving device `%s'.\n", cmdname, argv[1]); 96 99 return CMD_FAILURE; 97 100 } 98 101 99 rc = block_init(handle, BLOCK_SIZE);102 rc = block_init(handle, 2048); 100 103 if (rc != EOK) { 101 printf(" Error: could not init libblock.\n");104 printf("%s: Error initializing libblock.\n", cmdname); 102 105 return CMD_FAILURE; 103 106 } 104 107 105 rc = block_ cache_init(handle, BLOCK_SIZE, 2, CACHE_MODE_WB);108 rc = block_get_bsize(handle, &block_size); 106 109 if (rc != EOK) { 107 printf("Error: could not init block cache.\n"); 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 118 return CMD_FAILURE; 109 119 } 110 120 111 121 while (size > 0) { 112 block = block_get(handle, boff, 0); 113 blk = (uint8_t *) block->data; 122 rc = block_read_direct(handle, ba, 1, blk); 123 if (rc != EOK) { 124 printf("%s: Error reading block %llu\n", cmdname, ba); 125 free(blk); 126 block_fini(handle); 127 return CMD_FAILURE; 128 } 114 129 115 bytes = (size < BLOCK_SIZE) ? size : BLOCK_SIZE;130 bytes = (size < block_size) ? size : block_size; 116 131 rows = (bytes + BPR - 1) / BPR; 117 132 … … 139 154 } 140 155 141 block_put(block);142 143 156 if (size > rows * BPR) 144 157 size -= rows * BPR; … … 146 159 size = 0; 147 160 148 boff += rows * BPR; 161 /* Next block */ 162 ba += 1; 149 163 } 150 164 165 free(blk); 151 166 block_fini(handle); 152 167
Note:
See TracChangeset
for help on using the changeset viewer.