Changes in uspace/app/hdisk/hdisk.c [9bda5d90:a2aa81cb] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/hdisk.c
r9bda5d90 ra2aa81cb 53 53 #include "func_none.h" 54 54 55 int interact(service_id_t dev_handle);55 int interact(service_id_t); 56 56 void print_help(void); 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; 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; 62 72 63 73 int main(int argc, char ** argv) 64 74 { 65 75 if (argc == 1) { 66 printf(" I'd like to have an argument, please.\n");67 return 1;68 } 69 76 printf("Missing argument. Please specify a device to operate on.\n"); 77 return -1; 78 } 79 70 80 int rc; 71 81 service_id_t dev_handle; 72 82 73 83 rc = loc_service_get_id(argv[1], &dev_handle, IPC_FLAG_BLOCKING); 74 84 if (rc != EOK) { … … 76 86 return -1; 77 87 } 78 79 init_table(); 80 88 89 printf("Init.\n"); 90 init_label(); 91 92 /* 81 93 mbr_t * mbr = mbr_read_mbr(dev_handle); 82 94 if(mbr == NULL) { … … 87 99 88 100 if(mbr_is_mbr(mbr)) { 89 table.layout = LYT_MBR;90 set_ table_mbr(mbr);101 label.layout = LYT_MBR; 102 set_label_mbr(mbr); 91 103 mbr_partitions_t * parts = mbr_read_partitions(mbr); 92 104 if(parts == NULL) { … … 95 107 parts = mbr_alloc_partitions(); 96 108 } 97 set_ table_mbr_parts(parts);98 fill_ table_funcs();109 set_label_mbr_parts(parts); 110 fill_label_funcs(); 99 111 goto interact; 100 112 } 101 113 102 114 103 mbr_free_mbr(mbr); 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 /* 104 123 gpt_t * gpt = gpt_read_gpt_header(dev_handle); 105 124 106 125 if(gpt != NULL) { 107 table.layout = LYT_GPT;108 set_ table_gpt(gpt);126 label.layout = LYT_GPT; 127 set_label_gpt(gpt); 109 128 110 129 gpt_partitions_t * parts = gpt_read_partitions(gpt); … … 115 134 parts = gpt_alloc_partitions(); 116 135 } 117 set_ table_gpt_parts(parts);118 fill_ table_funcs();136 set_label_gpt_parts(parts); 137 fill_label_funcs(); 119 138 goto interact; 120 139 } 121 printf("No partition table recognized. Create a new one.\n"); 122 table.layout = LYT_NONE; 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; 123 149 124 150 interact: 151 printf("interact.\n"); 125 152 rc = interact(dev_handle); 126 153 127 free_ table();154 free_label(); 128 155 129 156 return rc; … … 152 179 switch(input) { 153 180 case 'a': 154 table.add_part(in, &table.data); 181 label.add_part(in, &label.data); 182 break; 183 case 'b': 184 label.add_part(in, &label.data); 155 185 break; 156 186 case 'd': 157 table.delete_part(in, &table.data);187 label.delete_part(in, &label.data); 158 188 break; 159 189 case 'e': 160 table.extra_funcs(in, dev_handle, &table.data);190 label.extra_funcs(in, dev_handle, &label.data); 161 191 break; 162 192 case 'f': 163 free_ table();164 select_ table_format(in);193 free_label(); 194 select_label_format(in); 165 195 break; 166 196 case 'h': … … 168 198 break; 169 199 case 'n': 170 free_ table();171 table.new_table(in, &table.data);200 free_label(); 201 label.new_label(&label.data); 172 202 break; 173 203 case 'p': 174 table.print_parts(&table.data);204 label.print_parts(&label.data); 175 205 break; 176 206 case 'q': … … 178 208 goto end; 179 209 case 'w': 180 table.write_parts(dev_handle, &table.data);210 label.write_parts(dev_handle, &label.data); 181 211 break; 182 212 default: … … 197 227 "\t 'a' \t\t Add partition.\n" 198 228 "\t 'd' \t\t Delete partition.\n" 199 "\t 'e' \t\t Extra functions (per tableformat).\n"200 "\t 'f' \t\t Switch the format of the partition table."229 "\t 'e' \t\t Extra functions (per label format).\n" 230 "\t 'f' \t\t Switch the format of the partition label." 201 231 "\t 'h' \t\t Prints help. See help for more.\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" 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" 205 236 "\t 'q' \t\t Quit.\n" 206 237 ); … … 208 239 } 209 240 210 void select_ table_format(tinput_t * in)241 void select_label_format(tinput_t * in) 211 242 { 212 243 printf("Available formats are: \n" … … 218 249 switch(val) { 219 250 case 0: 220 table.layout = LYT_NONE; 221 fill_table_funcs(); 251 free_label(); 252 label.layout = LYT_NONE; 253 fill_label_funcs(); 222 254 break; 223 255 case 1: 224 table.layout = LYT_MBR; 225 fill_table_funcs(); 256 free_label(); 257 label.layout = LYT_MBR; 258 fill_label_funcs(); 226 259 break; 227 260 case 2: 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) { 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) { 237 271 case LYT_MBR: 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; 272 construct_mbr_label(); 244 273 break; 245 274 case LYT_GPT: 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; 275 construct_gpt_label(); 252 276 break; 253 277 default: 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) { 278 construct_none_label(); 279 break; 280 } 281 } 282 283 void free_label(void) 284 { 285 /* 286 switch(label.layout) { 267 287 case LYT_MBR: 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 } 288 destroy_mbr_label(&label); 276 289 break; 277 290 case LYT_GPT: 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 } 291 destroy_gpt_label(&label); 286 292 break; 287 293 default: 288 294 break; 289 295 } 290 } 291 292 293 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
Note:
See TracChangeset
for help on using the changeset viewer.