Changeset 6317b33 in mainline for uspace/app/hdisk/func_mbr.c
- Timestamp:
- 2013-06-25T00:29:00Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 52f2c89
- Parents:
- cb328ab (diff), 1c8bfe8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/func_mbr.c
rcb328ab r6317b33 41 41 #include "input.h" 42 42 43 static int set_mbr_partition(tinput_t *in, mbr_part_t *p); 44 45 int add_mbr_part(tinput_t *in, union label_data *data) 43 static int set_mbr_partition(tinput_t *in, mbr_part_t *p, unsigned int alignment); 44 45 int construct_mbr_label(label_t *this) 46 { 47 this->layout = LYT_MBR; 48 this->alignment = 1; 49 50 this->add_part = add_mbr_part; 51 this->delete_part = delete_mbr_part; 52 this->destroy_label = destroy_mbr_label; 53 this->new_label = new_mbr_label; 54 this->print_parts = print_mbr_parts; 55 this->read_parts = read_mbr_parts; 56 this->write_parts = write_mbr_parts; 57 this->extra_funcs = extra_mbr_funcs; 58 59 return this->new_label(this); 60 } 61 62 int add_mbr_part(label_t *this, tinput_t *in) 46 63 { 47 64 int rc; 48 65 49 66 mbr_part_t *part = mbr_alloc_partition(); 50 51 set_mbr_partition(in, part );52 53 rc = mbr_add_partition( data->mbr, part);54 if (rc != E OK) {55 printf("Error adding partition .\n");56 } 57 58 return EOK; 59 } 60 61 int delete_mbr_part( tinput_t *in, union label_data *data)67 68 set_mbr_partition(in, part, this->alignment); 69 70 rc = mbr_add_partition(this->data.mbr, part); 71 if (rc != ERR_OK) { 72 printf("Error adding partition: %d\n", rc); 73 } 74 75 return EOK; 76 } 77 78 int delete_mbr_part(label_t *this, tinput_t *in) 62 79 { 63 80 int rc; 64 81 size_t idx; 65 82 66 83 printf("Number of the partition to delete (counted from 0): "); 67 84 idx = get_input_size_t(in); … … 70 87 return errno; 71 88 72 rc = mbr_remove_partition( data->mbr, idx);89 rc = mbr_remove_partition(this->data.mbr, idx); 73 90 if(rc != EOK) { 74 91 printf("Error: something.\n"); 75 92 } 76 77 return EOK; 78 } 79 80 int destroy_mbr_label( union label_data *data)81 { 82 mbr_free_label( data->mbr);83 return EOK; 84 } 85 86 int new_mbr_label( union label_data *data)87 { 88 data->mbr = mbr_alloc_label();89 if ( data->mbr == NULL)93 94 return EOK; 95 } 96 97 int destroy_mbr_label(label_t *this) 98 { 99 mbr_free_label(this->data.mbr); 100 return EOK; 101 } 102 103 int new_mbr_label(label_t *this) 104 { 105 this->data.mbr = mbr_alloc_label(); 106 if (this->data.mbr == NULL) 90 107 return ENOMEM; 91 108 else … … 94 111 95 112 /** Print current partition scheme */ 96 int print_mbr_parts( union label_data *data)113 int print_mbr_parts(label_t *this) 97 114 { 98 115 int num = 0; 99 100 printf("Current partition scheme :\n");116 117 printf("Current partition scheme (MBR):\n"); 101 118 //printf("\t\tBootable:\tStart:\tEnd:\tLength:\tType:\n"); 102 119 printf("\t\t%10s %10s %10s %10s %7s\n", "Bootable:", "Start:", "End:", "Length:", "Type:"); 103 120 104 121 mbr_part_t *it; 105 mbr_part_foreach(data->mbr->parts, it) { 122 //mbr_part_foreach(data->mbr, it) { 123 124 for (it = mbr_get_first_partition(this->data.mbr); it != NULL; 125 it = mbr_get_next_partition(this->data.mbr, it), ++num) { 106 126 if (it->type == PT_UNUSED) 107 127 continue; 108 128 109 129 printf("\tP%d:\t", num); 110 130 if (mbr_get_flag(it, ST_BOOT)) … … 112 132 else 113 133 printf(" "); 114 134 115 135 printf("\t%10u %10u %10u %7u\n", it->start_addr, it->start_addr + it->length, it->length, it->type); 116 117 ++num;118 } 119 136 137 //++num; 138 } 139 120 140 printf("%d partitions found.\n", num); 121 141 … … 123 143 } 124 144 125 int read_mbr_parts( service_id_t dev_handle, union label_data *data)145 int read_mbr_parts(label_t *this, service_id_t dev_handle) 126 146 { 127 147 int rc; 128 printf("mbr\n"); 129 rc = mbr_read_mbr(data->mbr, dev_handle); 148 rc = mbr_read_mbr(this->data.mbr, dev_handle); 130 149 if (rc != EOK) 131 150 return rc; 132 printf("ismbr\n");133 if (!mbr_is_mbr( data->mbr))151 152 if (!mbr_is_mbr(this->data.mbr)) 134 153 return EINVAL; 135 printf("parts\n");136 rc = mbr_read_partitions( data->mbr);154 155 rc = mbr_read_partitions(this->data.mbr); 137 156 if (rc != EOK) 138 157 return rc; 139 printf("end\n");140 return EOK; 141 } 142 143 int write_mbr_parts( service_id_t dev_handle, union label_data *data)144 { 145 int rc = mbr_write_partitions( data->mbr, dev_handle);158 159 return EOK; 160 } 161 162 int write_mbr_parts(label_t *this, service_id_t dev_handle) 163 { 164 int rc = mbr_write_partitions(this->data.mbr, dev_handle); 146 165 if (rc != EOK) { 147 166 printf("Error occured during writing: ERR: %d: %s\n", rc, str_error(rc)); … … 151 170 } 152 171 153 int extra_mbr_funcs( tinput_t *in, service_id_t dev_handle, union label_data *data)172 int extra_mbr_funcs(label_t *this, tinput_t *in, service_id_t dev_handle) 154 173 { 155 174 printf("Not implemented.\n"); … … 157 176 } 158 177 159 static int set_mbr_partition(tinput_t *in, mbr_part_t *p )178 static int set_mbr_partition(tinput_t *in, mbr_part_t *p, unsigned int alignment) 160 179 { 161 180 int c; … … 174 193 break; 175 194 default: 176 printf("Invalid type. Cancelled. ");195 printf("Invalid type. Cancelled.\n"); 177 196 return EINVAL; 178 197 } 198 199 printf("ST_LOGIC: %d, %hd\n", mbr_get_flag(p, ST_LOGIC), p->status); 179 200 180 201 printf("Set type (0-255): "); … … 200 221 if (sa == 0 && errno != EOK) 201 222 return errno; 223 224 if (alignment != 0 && alignment != 1) { 225 sa = mbr_get_next_aligned(sa, alignment); 226 printf("Starting address was aligned to %u.\n", sa); 227 } 202 228 203 229 printf("Set end addres (number): "); … … 206 232 return errno; 207 233 234 /* Align ending address, not in use */ 235 /*if (alignment != 0 && alignment != 1) { 236 ea = mbr_get_next_aligned(ea, alignment) - alignment; 237 printf("Starting address was aligned to %u.\n", ea); 238 }*/ 239 208 240 if(ea < sa) { 209 241 printf("Invalid value. Canceled.\n");
Note:
See TracChangeset
for help on using the changeset viewer.