Changes in uspace/app/hdisk/hdisk.c [6e8e4e19:a2aa81cb] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/hdisk.c
r6e8e4e19 ra2aa81cb 56 56 void print_help(void); 57 57 void select_label_format(tinput_t *); 58 void construct_label(layouts_t);58 void fill_label_funcs(void); 59 59 void free_label(void); 60 60 int try_read(service_id_t); 61 62 int construct_none_label(void); 63 64 int construct_mbr_label(void); 61 65 int try_read_mbr(service_id_t); 66 67 int construct_gpt_label(void); 62 68 int try_read_gpt(service_id_t); 63 void set_alignment(tinput_t *);64 69 65 70 … … 82 87 } 83 88 89 printf("Init.\n"); 84 90 init_label(); 85 91 … … 109 115 mbr_free_mbr(mbr);*/ 110 116 117 printf("Try MBR.\n"); 111 118 rc = try_read_mbr(dev_handle); 112 119 if (rc == EOK) … … 133 140 */ 134 141 142 printf("Try GPT.\n"); 135 143 rc = try_read_gpt(dev_handle); 136 144 if (rc == EOK) … … 141 149 142 150 interact: 143 151 printf("interact.\n"); 144 152 rc = interact(dev_handle); 145 153 … … 153 161 { 154 162 int input; 155 tinput_t * in;163 tinput_t * in; 156 164 157 165 in = tinput_new(); … … 171 179 switch(input) { 172 180 case 'a': 173 label.add_part(&label, in); 181 label.add_part(in, &label.data); 182 break; 183 case 'b': 184 label.add_part(in, &label.data); 174 185 break; 175 186 case 'd': 176 label.delete_part( &label, in);187 label.delete_part(in, &label.data); 177 188 break; 178 189 case 'e': 179 label.extra_funcs( &label, in, dev_handle);190 label.extra_funcs(in, dev_handle, &label.data); 180 191 break; 181 192 case 'f': … … 186 197 print_help(); 187 198 break; 188 case 'l':189 set_alignment(in);190 break;191 199 case 'n': 192 printf("Discarding label...\n");193 200 free_label(); 194 label.new_label(&label );201 label.new_label(&label.data); 195 202 break; 196 203 case 'p': 197 label.print_parts(&label );204 label.print_parts(&label.data); 198 205 break; 199 206 case 'q': 200 207 putchar('\n'); 201 208 goto end; 202 case 'r':203 label.read_parts(&label, dev_handle);204 209 case 'w': 205 label.write_parts( &label, dev_handle);210 label.write_parts(dev_handle, &label.data); 206 211 break; 207 212 default: … … 223 228 "\t 'd' \t\t Delete partition.\n" 224 229 "\t 'e' \t\t Extra functions (per label format).\n" 225 "\t 'f' \t\t Switch the format of the partition label. \n"230 "\t 'f' \t\t Switch the format of the partition label." 226 231 "\t 'h' \t\t Prints help. See help for more.\n" 227 232 "\t 'l' \t\t Set alignment.\n" 228 233 "\t 'n' \t\t Create new label (discarding the old one).\n" 229 234 "\t 'p' \t\t Prints label contents.\n" 235 "\t 'w' \t\t Write label to disk.\n" 230 236 "\t 'q' \t\t Quit.\n" 231 "\t 'r' \t\t Read label from disk.\n"232 "\t 'w' \t\t Write label to disk.\n"233 237 ); 234 238 … … 240 244 "1) MBR\n" 241 245 "2) GPT\n" 242 246 ); 243 247 244 248 uint8_t val = get_input_uint8(in); … … 246 250 case 0: 247 251 free_label(); 248 construct_label(LYT_NONE); 252 label.layout = LYT_NONE; 253 fill_label_funcs(); 249 254 break; 250 255 case 1: 251 256 free_label(); 252 construct_label(LYT_MBR); 257 label.layout = LYT_MBR; 258 fill_label_funcs(); 253 259 break; 254 260 case 2: 255 261 free_label(); 256 construct_label(LYT_GPT); 257 break; 258 } 259 } 260 261 void construct_label(layouts_t layout) 262 { 263 switch(layout) { 262 label.layout = LYT_GPT; 263 fill_label_funcs(); 264 break; 265 } 266 } 267 268 void fill_label_funcs(void) 269 { 270 switch(label.layout) { 264 271 case LYT_MBR: 265 label.layout = LYT_MBR; 266 construct_mbr_label(&label); 272 construct_mbr_label(); 267 273 break; 268 274 case LYT_GPT: 269 label.layout = LYT_GPT; 270 construct_gpt_label(&label); 275 construct_gpt_label(); 271 276 break; 272 277 default: 273 label.layout = LYT_NONE; 274 construct_none_label(&label); 278 construct_none_label(); 275 279 break; 276 280 } … … 279 283 void free_label(void) 280 284 { 281 label.destroy_label(&label); 285 /* 286 switch(label.layout) { 287 case LYT_MBR: 288 destroy_mbr_label(&label); 289 break; 290 case LYT_GPT: 291 destroy_gpt_label(&label); 292 break; 293 default: 294 break; 295 } 296 */ 297 298 label.destroy_label(&label.data); 282 299 } 283 300 284 301 int try_read(service_id_t dev_handle) 285 302 { 286 return label.read_parts(&label, dev_handle); 303 fill_label_funcs(); 304 printf("read_parts\n"); 305 return label.read_parts(dev_handle, &label.data); 306 } 307 308 int construct_none_label() 309 { 310 label.add_part = add_none_part; 311 label.delete_part = delete_none_part; 312 label.destroy_label = destroy_none_label; 313 label.new_label = new_none_label; 314 label.print_parts = print_none_parts; 315 label.read_parts = read_none_parts; 316 label.write_parts = write_none_parts; 317 label.extra_funcs = extra_none_funcs; 318 319 return EOK; 320 } 321 322 int construct_mbr_label() 323 { 324 label.add_part = add_mbr_part; 325 label.delete_part = delete_mbr_part; 326 label.destroy_label = destroy_mbr_label; 327 label.new_label = new_mbr_label; 328 label.print_parts = print_mbr_parts; 329 label.read_parts = read_mbr_parts; 330 label.write_parts = write_mbr_parts; 331 label.extra_funcs = extra_mbr_funcs; 332 333 return label.new_label(&label.data); 287 334 } 288 335 289 336 int try_read_mbr(service_id_t dev_handle) 290 337 { 291 construct_label(LYT_MBR);338 label.layout = LYT_MBR; 292 339 return try_read(dev_handle); 293 340 } 294 341 342 int construct_gpt_label() 343 { 344 label.add_part = add_gpt_part; 345 label.delete_part = delete_gpt_part; 346 label.new_label = new_gpt_label; 347 label.print_parts = print_gpt_parts; 348 label.read_parts = read_gpt_parts; 349 label.write_parts = write_gpt_parts; 350 label.extra_funcs = extra_gpt_funcs; 351 352 return label.new_label(&label.data); 353 } 354 295 355 int try_read_gpt(service_id_t dev_handle) 296 356 { 297 construct_label(LYT_GPT);357 label.layout = LYT_GPT; 298 358 return try_read(dev_handle); 299 359 } 300 360 301 void set_alignment(tinput_t *in) 302 { 303 printf("Set alignment to sectors: "); 304 label.alignment = get_input_uint32(in); 305 printf("Alignment set to %u sectors.\n", label.alignment); 306 } 307 308 309 310 311 312 313 314 315 316 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385
Note:
See TracChangeset
for help on using the changeset viewer.