Changeset 700f89e in mainline for uspace/app/hdisk/hdisk.c
- Timestamp:
- 2013-05-02T00:51:28Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9bda5d90
- Parents:
- 8f6c7785
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/hdisk.c
r8f6c7785 r700f89e 53 53 int interact(service_id_t dev_handle); 54 54 void print_help(void); 55 void select_table_format(void); 55 56 void fill_table_funcs(void); 56 57 void free_table(void); … … 94 95 set_table_mbr_parts(parts); 95 96 fill_table_funcs(); 96 } else { 97 goto interact; 98 } 99 100 101 mbr_free_mbr(mbr); 102 gpt_t * gpt = gpt_read_gpt_header(dev_handle); 103 104 if(gpt != NULL) { 97 105 table.layout = LYT_GPT; 98 mbr_free_mbr(mbr);99 gpt_t * gpt = gpt_read_gpt_header(dev_handle);100 printf("here3\n");101 if(gpt == NULL) {102 printf("Failed to read and parse GPT header. Exiting.\n");103 return -1;104 }105 106 set_table_gpt(gpt); 106 printf("here4\n");107 107 108 gpt_partitions_t * parts = gpt_read_partitions(gpt); 108 printf("here5\n");109 109 110 if(parts == NULL) { 110 111 printf("Failed to read and parse partitions.\n" \ 111 112 "Creating new partition table."); 112 //parts = gpt_alloc_partitions();113 parts = gpt_alloc_partitions(); 113 114 } 114 115 set_table_gpt_parts(parts); 115 116 fill_table_funcs(); 116 } 117 117 goto interact; 118 } 119 printf("No partition table recognized. Create a new one.\n"); 120 table.layout = LYT_NONE; 121 122 interact: 118 123 rc = interact(dev_handle); 119 124 … … 122 127 return rc; 123 128 } 124 125 /*126 int get_input(tinput_t * in, char ** str)127 {128 int c;129 size_tat130 131 pos = 0;132 size_t size = 256;133 134 *str = malloc(size * sizeof(char));135 if (*str == NULL)136 return ENOMEM;137 138 while ((c = getchar()) != '\n') {139 if (c >= 32 && c <= 126) { //a printable character140 141 (*str)[pos] = c;142 ++pos;143 putchar(c);144 145 if (pos == size) {146 char * temp = malloc(2 * size * sizeof(char));147 memcpy(temp, *str, size);148 free(*str);149 *str = temp;150 size *= 2;151 }152 } else if (c == 8) { //backspace153 (*str)[pos] = 0;154 --pos;155 putchar(c);156 }157 }158 159 putchar('\n');160 161 (*str)[pos] = 0;162 163 return EOK;164 }165 */166 167 129 168 130 /** Interact with user */ 169 131 int interact(service_id_t dev_handle) 170 132 { 171 //int rc;172 133 int input; 173 134 tinput_t * in; 174 135 175 136 in = tinput_new(); 176 137 if (in == NULL) { … … 179 140 } 180 141 tinput_set_prompt(in, ""); 181 142 182 143 printf("Welcome to hdisk.\nType 'h' for help.\n"); 183 184 //printf("# "); 185 //input = getchar(); 186 //printf("%c\n", input); 187 144 188 145 while (1) { 189 190 146 printf("# "); 191 147 input = getchar(); 192 148 printf("%c\n", input); 193 194 195 //rc = tinput_read(in, &str); 196 //if (rc == ENOENT) { 197 //// User requested exit 198 //putchar('\n'); 199 //return rc; 200 //} 201 //if (rc != EOK) { 202 //printf("Failed reading input. Exiting...\n"); 203 //return rc; 204 //} 205 //// Check for empty input. 206 //if (str_cmp(str, "") == 0) 207 //continue; 208 149 209 150 switch(input) { 210 151 case 'a': … … 217 158 table.extra_funcs(in, dev_handle, &table.data); 218 159 break; 160 case 'f': 161 free_table(); 162 select_table_format(in); 163 break; 219 164 case 'h': 220 165 print_help(); 166 break; 167 case 'n': 168 free_table(); 169 table.new_table(in); 221 170 break; 222 171 case 'p': … … 233 182 break; 234 183 } 235 //printf("# "); 236 //input = getchar(); 237 //printf("%c\n", input); 238 239 } 240 184 } 185 241 186 end: 242 187 tinput_destroy(in); 243 188 244 189 return EOK; 245 190 } … … 250 195 "\t 'a' \t\t Add partition.\n" 251 196 "\t 'd' \t\t Delete partition.\n" 252 "\t 'h' \t\t Prints help. See help for more.\n" \ 253 "\t 'p' \t\t Prints the table contents.\n" \ 254 "\t 'w' \t\t Write table to disk.\n" \ 255 "\t 'q' \t\t Quit.\n" \ 197 "\t 'e' \t\t Extra functions (per table format).\n" 198 "\t 'f' \t\t Switch the format of the partition table." 199 "\t 'h' \t\t Prints help. See help for more.\n" 200 "\t 'n' \t\t Create new partition table (discarding the old one).\n" 201 "\t 'p' \t\t Prints the table contents.\n" 202 "\t 'w' \t\t Write table to disk.\n" 203 "\t 'q' \t\t Quit.\n" 256 204 ); 257 205 206 } 207 208 void select_table_format(tinput_t * in) 209 { 210 printf("Available formats are: \n" 211 "1) MBR\n" 212 "2) GPT\n" 213 ); 214 215 uint8_t val = get_input_uint8(in); 216 switch(val) { 217 case 0: 218 table.layout = LYT_NONE; 219 fill_table_funcs(); 220 break; 221 case 1: 222 table.layout = LYT_MBR; 223 fill_table_funcs(); 224 break; 225 case 2: 226 table.layout = LYT_GPT; 227 fill_table_funcs(); 228 break; 229 } 258 230 } 259 231 … … 264 236 table.add_part = add_mbr_part; 265 237 table.delete_part = delete_mbr_part; 238 table.new_table = new_mbr_table; 266 239 table.print_parts = print_mbr_parts; 267 240 table.write_parts = write_mbr_parts; … … 271 244 table.add_part = add_gpt_part; 272 245 table.delete_part = delete_gpt_part; 246 table.new_table = new_gpt_table; 273 247 table.print_parts = print_gpt_parts; 274 248 table.write_parts = write_gpt_parts; … … 276 250 break; 277 251 default: 252 table.add_part = add_none_part; 253 table.delete_part = delete_none_part; 254 table.new_table = new_none_table; 255 table.print_parts = print_none_parts; 256 table.write_parts = write_none_parts; 257 table.extra_funcs = extra_none_funcs; 278 258 break; 279 259 } … … 284 264 switch(table.layout) { 285 265 case LYT_MBR: 286 mbr_free_partitions(table.data.mbr.parts); 287 mbr_free_mbr(table.data.mbr.mbr); 266 if (table.data.mbr.parts != NULL) { 267 mbr_free_partitions(table.data.mbr.parts); 268 table.data.mbr.parts = NULL; 269 } 270 if (table.data.mbr.mbr != NULL) { 271 mbr_free_mbr(table.data.mbr.mbr); 272 table.data.mbr.mbr = NULL; 273 } 288 274 break; 289 275 case LYT_GPT: 290 gpt_free_partitions(table.data.gpt.parts); 291 gpt_free_gpt(table.data.gpt.gpt); 276 if (table.data.gpt.parts != NULL) { 277 gpt_free_partitions(table.data.gpt.parts); 278 table.data.gpt.parts = NULL; 279 } 280 if (table.data.gpt.gpt != NULL) { 281 gpt_free_gpt(table.data.gpt.gpt); 282 table.data.gpt.gpt = NULL; 283 } 292 284 break; 293 285 default: … … 296 288 } 297 289 290 291
Note:
See TracChangeset
for help on using the changeset viewer.