Changeset 8c95dff in mainline for uspace/app
- Timestamp:
- 2013-11-30T17:49:09Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f4a47e52
- Parents:
- 802898f
- Location:
- uspace/app/hdisk
- Files:
-
- 8 edited
-
common.h (modified) (2 diffs)
-
func_gpt.c (modified) (9 diffs)
-
func_gpt.h (modified) (1 diff)
-
func_mbr.c (modified) (13 diffs)
-
func_mbr.h (modified) (1 diff)
-
func_none.c (modified) (3 diffs)
-
func_none.h (modified) (1 diff)
-
hdisk.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/common.h
r802898f r8c95dff 54 54 struct label { 55 55 layouts_t layout; 56 aoff64_t nblocks; 57 service_id_t device; 56 58 union label_data data; 57 59 unsigned int alignment; … … 61 63 int (* new_label) (label_t *); 62 64 int (* print_parts) (label_t *); 63 int (* read_parts) (label_t * , service_id_t);64 int (* write_parts) (label_t * , service_id_t);65 int (* extra_funcs) (label_t *, tinput_t * , service_id_t);65 int (* read_parts) (label_t *); 66 int (* write_parts) (label_t *); 67 int (* extra_funcs) (label_t *, tinput_t *); 66 68 }; 67 69 -
uspace/app/hdisk/func_gpt.c
r802898f r8c95dff 43 43 #include "input.h" 44 44 45 static int set_gpt_partition(tinput_t *, gpt_part_t *, unsigned int); 45 static void print_part_types(void); 46 static int set_gpt_partition(tinput_t *, gpt_part_t *, label_t *); 46 47 47 48 int construct_gpt_label(label_t *this) … … 69 70 } 70 71 71 return set_gpt_partition(in, p, this ->alignment);72 return set_gpt_partition(in, p, this); 72 73 } 73 74 … … 106 107 int print_gpt_parts(label_t *this) 107 108 { 108 printf("Current partition scheme (GPT) :\n");109 printf("Current partition scheme (GPT)(number of blocks: %" PRIu64 "):\n", this->nblocks); 109 110 printf("%15s %10s %10s Type: Name:\n", "Start:", "End:", "Length:"); 110 111 … … 131 132 } 132 133 133 int read_gpt_parts(label_t *this , service_id_t dev_handle)134 { 135 int rc; 136 137 rc = gpt_read_header(this->data.gpt, dev_handle);134 int read_gpt_parts(label_t *this) 135 { 136 int rc; 137 138 rc = gpt_read_header(this->data.gpt, this->device); 138 139 if (rc != EOK) { 139 140 printf("Error: Reading header failed: %d (%s)\n", rc, str_error(rc)); … … 150 151 } 151 152 152 int write_gpt_parts(label_t *this , service_id_t dev_handle)153 { 154 int rc; 155 156 rc = gpt_write_partitions(this->data.gpt, dev_handle);153 int write_gpt_parts(label_t *this) 154 { 155 int rc; 156 printf("test1\n"); 157 rc = gpt_write_partitions(this->data.gpt, this->device); 157 158 if (rc != EOK) { 158 159 printf("Error: Writing partitions failed: %d (%s)\n", rc, str_error(rc)); 159 160 return rc; 160 161 } 161 162 rc = gpt_write_header(this->data.gpt, dev_handle); 163 if (rc != EOK) { 164 printf("Error: Writing header failed: %d (%s)\n", rc, str_error(rc)); 165 return rc; 166 } 167 168 return EOK; 169 } 170 171 int extra_gpt_funcs(label_t *this, tinput_t *in, service_id_t dev_handle) 162 printf("test2\n"); 163 return EOK; 164 } 165 166 int extra_gpt_funcs(label_t *this, tinput_t *in) 172 167 { 173 168 printf("Not implemented.\n"); … … 175 170 } 176 171 177 static int set_gpt_partition(tinput_t *in, gpt_part_t *p, unsigned int alignment)172 static int set_gpt_partition(tinput_t *in, gpt_part_t *p, label_t * this) 178 173 { 179 174 int rc; … … 181 176 uint64_t sa, ea; 182 177 183 printf("Set starting address (number): ");178 printf("Set starting address: "); 184 179 sa = get_input_uint64(in); 185 if ( sa %alignment != 0)186 sa = gpt_get_next_aligned(sa, alignment);187 188 printf("Set end address ( number): ");180 if (this->alignment != 0 && this->alignment != 1 && sa % this->alignment != 0) 181 sa = gpt_get_next_aligned(sa, this->alignment); 182 183 printf("Set end address (max: %" PRIu64 "): ", this->nblocks); 189 184 ea = get_input_uint64(in); 190 185 … … 198 193 199 194 /* See global.c from libgpt for all partition types. */ 195 printf("Choose type: "); 196 print_part_types(); 200 197 printf("Set type (1 for HelenOS System): "); 201 198 size_t idx = get_input_size_t(in); 202 199 gpt_set_part_type(p, idx); 203 200 204 gpt_set_random_uuid(p->part_type);205 201 gpt_set_random_uuid(p->part_id); 206 202 … … 218 214 } 219 215 216 static void print_part_types(void) 217 { 218 int c; 219 int count = 0; 220 const struct partition_type * ptype = gpt_ptypes; 221 222 do { 223 if (count % 10 == 0) { 224 printf("Print (more) partition types? (y/n)\n"); 225 c = getchar(); 226 if (c == 'n') 227 return; 228 } 229 230 printf("%d: %s\n", count, ptype->desc); 231 ++count; 232 ++ptype; 233 } while (ptype->guid != NULL); 234 } 235 -
uspace/app/hdisk/func_gpt.h
r802898f r8c95dff 48 48 extern int new_gpt_label (label_t *); 49 49 extern int print_gpt_parts (label_t *); 50 extern int read_gpt_parts (label_t * , service_id_t);51 extern int write_gpt_parts (label_t * , service_id_t);52 extern int extra_gpt_funcs (label_t *, tinput_t * , service_id_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 *); 53 53 54 54 #endif -
uspace/app/hdisk/func_mbr.c
r802898f r8c95dff 41 41 #include "input.h" 42 42 43 static int set_mbr_partition(tinput_t * in, mbr_part_t *p, unsigned int alignment);43 static int set_mbr_partition(tinput_t *, mbr_part_t *, label_t *); 44 44 45 45 int construct_mbr_label(label_t *this) … … 66 66 mbr_part_t *part = mbr_alloc_partition(); 67 67 68 set_mbr_partition(in, part, this->alignment); 68 rc = set_mbr_partition(in, part, this); 69 if (rc != EOK) 70 return rc; 69 71 70 72 rc = mbr_add_partition(this->data.mbr, part); … … 89 91 rc = mbr_remove_partition(this->data.mbr, idx); 90 92 if (rc != EOK) { 91 printf("Error: something.\n");93 printf("Error: partition does not exist?\n"); 92 94 } 93 95 … … 106 108 if (this->data.mbr == NULL) 107 109 return ENOMEM; 108 else 109 return EOK; 110 111 mbr_set_device(this->data.mbr, this->device); 112 return EOK; 110 113 } 111 114 … … 115 118 int num = 0; 116 119 117 printf("Current partition scheme (MBR) :\n");120 printf("Current partition scheme (MBR)(number of blocks: %" PRIu64 "):\n", this->nblocks); 118 121 printf("\t\t%10s %10s %10s %10s %7s\n", "Bootable:", "Start:", "End:", "Length:", "Type:"); 119 122 … … 121 124 122 125 for (it = mbr_get_first_partition(this->data.mbr); it != NULL; 123 it = mbr_get_next_partition(this->data.mbr, it) , ++num) {126 it = mbr_get_next_partition(this->data.mbr, it)) { 124 127 if (it->type == PT_UNUSED) 125 128 continue; … … 133 136 printf("\t%10u %10u %10u %7u\n", it->start_addr, it->start_addr + it->length, it->length, it->type); 134 137 138 num++; 135 139 } 136 140 … … 140 144 } 141 145 142 int read_mbr_parts(label_t *this , service_id_t dev_handle)146 int read_mbr_parts(label_t *this) 143 147 { 144 148 int rc; 145 rc = mbr_read_mbr(this->data.mbr, dev_handle);149 rc = mbr_read_mbr(this->data.mbr, this->device); 146 150 if (rc != EOK) 147 151 return rc; … … 157 161 } 158 162 159 int write_mbr_parts(label_t *this , service_id_t dev_handle)160 { 161 int rc = mbr_write_partitions(this->data.mbr, dev_handle);163 int write_mbr_parts(label_t *this) 164 { 165 int rc = mbr_write_partitions(this->data.mbr, this->device); 162 166 if (rc != EOK) { 163 167 printf("Error occured during writing: ERR: %d: %s\n", rc, str_error(rc)); … … 167 171 } 168 172 169 int extra_mbr_funcs(label_t *this, tinput_t *in , service_id_t dev_handle)173 int extra_mbr_funcs(label_t *this, tinput_t *in) 170 174 { 171 175 printf("Not implemented.\n"); … … 173 177 } 174 178 175 static int set_mbr_partition(tinput_t *in, mbr_part_t *p, unsigned int alignment)179 static int set_mbr_partition(tinput_t *in, mbr_part_t *p, label_t * this) 176 180 { 177 181 int c; … … 214 218 uint32_t sa, ea; 215 219 216 printf("Set starting address (number): ");220 printf("Set starting address: "); 217 221 sa = get_input_uint32(in); 218 222 if (sa == 0 && errno != EOK) 219 223 return errno; 220 224 221 if ( alignment != 0 && alignment != 1) {222 sa = mbr_get_next_aligned(sa, alignment);225 if (this->alignment != 0 && this->alignment != 1 && sa % this->alignment != 0) { 226 sa = mbr_get_next_aligned(sa, this->alignment); 223 227 printf("Starting address was aligned to %u.\n", sa); 224 228 } 225 226 printf("Set end addres ( number): ");229 230 printf("Set end addres (max: %" PRIu64 "): ", this->nblocks); 227 231 ea = get_input_uint32(in); 228 232 if (ea == 0 && errno != EOK) … … 233 237 return EINVAL; 234 238 } 235 239 236 240 p->type = type; 237 241 p->start_addr = sa; -
uspace/app/hdisk/func_mbr.h
r802898f r8c95dff 48 48 extern int new_mbr_label (label_t *); 49 49 extern int print_mbr_parts (label_t *); 50 extern int read_mbr_parts (label_t * , service_id_t);51 extern int write_mbr_parts (label_t * , service_id_t);52 extern int extra_mbr_funcs (label_t *, tinput_t * , service_id_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 *); 53 53 54 54 #endif -
uspace/app/hdisk/func_none.c
r802898f r8c95dff 86 86 } 87 87 88 int read_none_parts(label_t *this , service_id_t dev_handle)88 int read_none_parts(label_t *this) 89 89 { 90 90 not_implemented(); … … 92 92 } 93 93 94 int write_none_parts(label_t *this , service_id_t dev_handle)94 int write_none_parts(label_t *this) 95 95 { 96 96 not_implemented(); … … 98 98 } 99 99 100 int extra_none_funcs(label_t *this, tinput_t * in , service_id_t dev_handle)100 int extra_none_funcs(label_t *this, tinput_t * in) 101 101 { 102 102 not_implemented(); -
uspace/app/hdisk/func_none.h
r802898f r8c95dff 47 47 extern int new_none_label (label_t *); 48 48 extern int print_none_parts (label_t *); 49 extern int read_none_parts (label_t * , service_id_t);50 extern int write_none_parts (label_t * , service_id_t);51 extern int extra_none_funcs (label_t *, tinput_t * , service_id_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 *); 52 52 53 53 #endif -
uspace/app/hdisk/hdisk.c
r802898f r8c95dff 46 46 #include <libgpt.h> 47 47 #include <tinput.h> 48 #include <str_error.h> 48 49 49 50 #include "hdisk.h" … … 53 54 #include "func_none.h" 54 55 55 int interact( service_id_t);56 int interact(void); 56 57 void print_help(void); 57 58 void select_label_format(tinput_t *); 58 59 void construct_label(layouts_t); 59 60 void 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);61 int try_read(void); 62 int try_read_mbr(void); 63 int try_read_gpt(void); 63 64 void set_alignment(tinput_t *); 64 65 … … 83 84 84 85 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(); 87 105 if (rc == EOK) 88 106 goto interact; 89 107 90 rc = try_read_gpt(dev_handle); 108 free_label(); 109 110 rc = try_read_gpt(); 91 111 if (rc == EOK) 92 112 goto interact; 93 113 94 114 printf("No label recognized. Create a new one.\n"); 95 label.layout = LYT_NONE;115 construct_label(LYT_NONE); 96 116 97 117 interact: 98 118 99 rc = interact( dev_handle);119 rc = interact(); 100 120 101 121 return rc; … … 103 123 104 124 /** Interact with user */ 105 int interact( service_id_t dev_handle)125 int interact() 106 126 { 107 127 int input; … … 130 150 break; 131 151 case 'e': 132 label.extra_funcs(&label, in , dev_handle);152 label.extra_funcs(&label, in); 133 153 break; 134 154 case 'f': 155 free_label(); 135 156 select_label_format(in); 136 157 break; … … 154 175 goto end; 155 176 case 'r': 156 label.read_parts(&label , dev_handle);177 label.read_parts(&label); 157 178 case 'w': 158 label.write_parts(&label , dev_handle);179 label.write_parts(&label); 159 180 break; 160 181 default: … … 197 218 uint8_t val = get_input_uint8(in); 198 219 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: 201 227 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);210 228 break; 211 229 } … … 235 253 } 236 254 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) 255 int try_read() 256 { 257 258 return label.read_parts(&label); 259 } 260 261 int try_read_mbr() 243 262 { 244 263 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 267 int try_read_gpt() 249 268 { 250 269 construct_label(LYT_GPT); 251 return try_read( dev_handle);270 return try_read(); 252 271 } 253 272
Note:
See TracChangeset
for help on using the changeset viewer.
