Changes in uspace/app/hdisk/hdisk.c [a2aa81cb:9bda5d90] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/hdisk.c
ra2aa81cb r9bda5d90 53 53 #include "func_none.h" 54 54 55 int interact(service_id_t );55 int interact(service_id_t dev_handle); 56 56 void print_help(void); 57 void select_label_format(tinput_t *); 58 void fill_label_funcs(void); 59 void free_label(void); 60 int try_read(service_id_t); 61 62 int construct_none_label(void); 63 64 int construct_mbr_label(void); 65 int try_read_mbr(service_id_t); 66 67 int construct_gpt_label(void); 68 int try_read_gpt(service_id_t); 69 70 71 static label_t label; 57 void select_table_format(tinput_t * in); 58 void fill_table_funcs(void); 59 void free_table(void); 60 61 static table_t table; 72 62 73 63 int main(int argc, char ** argv) 74 64 { 75 65 if (argc == 1) { 76 printf(" Missing argument. Please specify a device to operate on.\n");77 return -1;78 } 79 66 printf("I'd like to have an argument, please.\n"); 67 return 1; 68 } 69 80 70 int rc; 81 71 service_id_t dev_handle; 82 72 83 73 rc = loc_service_get_id(argv[1], &dev_handle, IPC_FLAG_BLOCKING); 84 74 if (rc != EOK) { … … 86 76 return -1; 87 77 } 88 89 printf("Init.\n"); 90 init_label(); 91 92 /* 78 79 init_table(); 80 93 81 mbr_t * mbr = mbr_read_mbr(dev_handle); 94 82 if(mbr == NULL) { … … 99 87 100 88 if(mbr_is_mbr(mbr)) { 101 label.layout = LYT_MBR;102 set_ label_mbr(mbr);89 table.layout = LYT_MBR; 90 set_table_mbr(mbr); 103 91 mbr_partitions_t * parts = mbr_read_partitions(mbr); 104 92 if(parts == NULL) { … … 107 95 parts = mbr_alloc_partitions(); 108 96 } 109 set_ label_mbr_parts(parts);110 fill_ label_funcs();97 set_table_mbr_parts(parts); 98 fill_table_funcs(); 111 99 goto interact; 112 100 } 113 101 114 102 115 mbr_free_mbr(mbr);*/ 116 117 printf("Try MBR.\n"); 118 rc = try_read_mbr(dev_handle); 119 if (rc == EOK) 120 goto interact; 121 122 /* 103 mbr_free_mbr(mbr); 123 104 gpt_t * gpt = gpt_read_gpt_header(dev_handle); 124 105 125 106 if(gpt != NULL) { 126 label.layout = LYT_GPT;127 set_ label_gpt(gpt);107 table.layout = LYT_GPT; 108 set_table_gpt(gpt); 128 109 129 110 gpt_partitions_t * parts = gpt_read_partitions(gpt); … … 134 115 parts = gpt_alloc_partitions(); 135 116 } 136 set_ label_gpt_parts(parts);137 fill_ label_funcs();117 set_table_gpt_parts(parts); 118 fill_table_funcs(); 138 119 goto interact; 139 120 } 140 */ 141 142 printf("Try GPT.\n"); 143 rc = try_read_gpt(dev_handle); 144 if (rc == EOK) 145 goto interact; 146 147 printf("No label recognized. Create a new one.\n"); 148 label.layout = LYT_NONE; 121 printf("No partition table recognized. Create a new one.\n"); 122 table.layout = LYT_NONE; 149 123 150 124 interact: 151 printf("interact.\n");152 125 rc = interact(dev_handle); 153 126 154 free_ label();127 free_table(); 155 128 156 129 return rc; … … 179 152 switch(input) { 180 153 case 'a': 181 label.add_part(in, &label.data); 182 break; 183 case 'b': 184 label.add_part(in, &label.data); 154 table.add_part(in, &table.data); 185 155 break; 186 156 case 'd': 187 label.delete_part(in, &label.data);157 table.delete_part(in, &table.data); 188 158 break; 189 159 case 'e': 190 label.extra_funcs(in, dev_handle, &label.data);160 table.extra_funcs(in, dev_handle, &table.data); 191 161 break; 192 162 case 'f': 193 free_ label();194 select_ label_format(in);163 free_table(); 164 select_table_format(in); 195 165 break; 196 166 case 'h': … … 198 168 break; 199 169 case 'n': 200 free_ label();201 label.new_label(&label.data);170 free_table(); 171 table.new_table(in, &table.data); 202 172 break; 203 173 case 'p': 204 label.print_parts(&label.data);174 table.print_parts(&table.data); 205 175 break; 206 176 case 'q': … … 208 178 goto end; 209 179 case 'w': 210 label.write_parts(dev_handle, &label.data);180 table.write_parts(dev_handle, &table.data); 211 181 break; 212 182 default: … … 227 197 "\t 'a' \t\t Add partition.\n" 228 198 "\t 'd' \t\t Delete partition.\n" 229 "\t 'e' \t\t Extra functions (per labelformat).\n"230 "\t 'f' \t\t Switch the format of the partition label."199 "\t 'e' \t\t Extra functions (per table format).\n" 200 "\t 'f' \t\t Switch the format of the partition table." 231 201 "\t 'h' \t\t Prints help. See help for more.\n" 232 "\t 'l' \t\t Set alignment.\n" 233 "\t 'n' \t\t Create new label (discarding the old one).\n" 234 "\t 'p' \t\t Prints label contents.\n" 235 "\t 'w' \t\t Write label to disk.\n" 202 "\t 'n' \t\t Create new partition table (discarding the old one).\n" 203 "\t 'p' \t\t Prints the table contents.\n" 204 "\t 'w' \t\t Write table to disk.\n" 236 205 "\t 'q' \t\t Quit.\n" 237 206 ); … … 239 208 } 240 209 241 void select_ label_format(tinput_t * in)210 void select_table_format(tinput_t * in) 242 211 { 243 212 printf("Available formats are: \n" … … 249 218 switch(val) { 250 219 case 0: 251 free_label(); 252 label.layout = LYT_NONE; 253 fill_label_funcs(); 220 table.layout = LYT_NONE; 221 fill_table_funcs(); 254 222 break; 255 223 case 1: 256 free_label(); 257 label.layout = LYT_MBR; 258 fill_label_funcs(); 224 table.layout = LYT_MBR; 225 fill_table_funcs(); 259 226 break; 260 227 case 2: 261 free_label(); 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) { 228 table.layout = LYT_GPT; 229 fill_table_funcs(); 230 break; 231 } 232 } 233 234 void fill_table_funcs(void) 235 { 236 switch(table.layout) { 271 237 case LYT_MBR: 272 construct_mbr_label(); 238 table.add_part = add_mbr_part; 239 table.delete_part = delete_mbr_part; 240 table.new_table = new_mbr_table; 241 table.print_parts = print_mbr_parts; 242 table.write_parts = write_mbr_parts; 243 table.extra_funcs = extra_mbr_funcs; 273 244 break; 274 245 case LYT_GPT: 275 construct_gpt_label(); 246 table.add_part = add_gpt_part; 247 table.delete_part = delete_gpt_part; 248 table.new_table = new_gpt_table; 249 table.print_parts = print_gpt_parts; 250 table.write_parts = write_gpt_parts; 251 table.extra_funcs = extra_gpt_funcs; 276 252 break; 277 253 default: 278 construct_none_label(); 279 break; 280 } 281 } 282 283 void free_label(void) 284 { 285 /* 286 switch(label.layout) { 254 table.add_part = add_none_part; 255 table.delete_part = delete_none_part; 256 table.new_table = new_none_table; 257 table.print_parts = print_none_parts; 258 table.write_parts = write_none_parts; 259 table.extra_funcs = extra_none_funcs; 260 break; 261 } 262 } 263 264 void free_table(void) 265 { 266 switch(table.layout) { 287 267 case LYT_MBR: 288 destroy_mbr_label(&label); 268 if (table.data.mbr.parts != NULL) { 269 mbr_free_partitions(table.data.mbr.parts); 270 table.data.mbr.parts = NULL; 271 } 272 if (table.data.mbr.mbr != NULL) { 273 mbr_free_mbr(table.data.mbr.mbr); 274 table.data.mbr.mbr = NULL; 275 } 289 276 break; 290 277 case LYT_GPT: 291 destroy_gpt_label(&label); 278 if (table.data.gpt.parts != NULL) { 279 gpt_free_partitions(table.data.gpt.parts); 280 table.data.gpt.parts = NULL; 281 } 282 if (table.data.gpt.gpt != NULL) { 283 gpt_free_gpt(table.data.gpt.gpt); 284 table.data.gpt.gpt = NULL; 285 } 292 286 break; 293 287 default: 294 288 break; 295 289 } 296 */ 297 298 label.destroy_label(&label.data); 299 } 300 301 int try_read(service_id_t dev_handle) 302 { 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); 334 } 335 336 int try_read_mbr(service_id_t dev_handle) 337 { 338 label.layout = LYT_MBR; 339 return try_read(dev_handle); 340 } 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 355 int try_read_gpt(service_id_t dev_handle) 356 { 357 label.layout = LYT_GPT; 358 return try_read(dev_handle); 359 } 360 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 290 } 291 292 293
Note:
See TracChangeset
for help on using the changeset viewer.