Changes in uspace/app/hdisk/func_mbr.c [6e8e4e19:a2aa81cb] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/func_mbr.c
r6e8e4e19 ra2aa81cb 41 41 #include "input.h" 42 42 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) 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) 63 46 { 64 47 int rc; 65 48 66 49 mbr_part_t *part = mbr_alloc_partition(); 67 68 set_mbr_partition(in, part , this->alignment);69 70 rc = mbr_add_partition( this->data.mbr, part);71 if (rc != E RR_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)50 51 set_mbr_partition(in, part); 52 53 rc = mbr_add_partition(data->mbr, part); 54 if (rc != EOK) { 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) 79 62 { 80 63 int rc; 81 64 size_t idx; 82 65 83 66 printf("Number of the partition to delete (counted from 0): "); 84 67 idx = get_input_size_t(in); … … 87 70 return errno; 88 71 89 rc = mbr_remove_partition( this->data.mbr, idx);72 rc = mbr_remove_partition(data->mbr, idx); 90 73 if(rc != EOK) { 91 74 printf("Error: something.\n"); 92 75 } 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)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) 107 90 return ENOMEM; 108 91 else … … 111 94 112 95 /** Print current partition scheme */ 113 int print_mbr_parts( label_t *this)96 int print_mbr_parts(union label_data *data) 114 97 { 115 98 int num = 0; 116 117 printf("Current partition scheme (MBR):\n");99 100 printf("Current partition scheme:\n"); 118 101 //printf("\t\tBootable:\tStart:\tEnd:\tLength:\tType:\n"); 119 102 printf("\t\t%10s %10s %10s %10s %7s\n", "Bootable:", "Start:", "End:", "Length:", "Type:"); 120 103 121 104 mbr_part_t *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) { 105 mbr_part_foreach(data->mbr->parts, it) { 126 106 if (it->type == PT_UNUSED) 127 107 continue; 128 108 129 109 printf("\tP%d:\t", num); 130 110 if (mbr_get_flag(it, ST_BOOT)) … … 132 112 else 133 113 printf(" "); 134 114 135 115 printf("\t%10u %10u %10u %7u\n", it->start_addr, it->start_addr + it->length, it->length, it->type); 136 137 //++num;138 } 139 116 117 ++num; 118 } 119 140 120 printf("%d partitions found.\n", num); 141 121 … … 143 123 } 144 124 145 int read_mbr_parts( label_t *this, service_id_t dev_handle)125 int read_mbr_parts(service_id_t dev_handle, union label_data *data) 146 126 { 147 127 int rc; 148 rc = mbr_read_mbr(this->data.mbr, dev_handle); 128 printf("mbr\n"); 129 rc = mbr_read_mbr(data->mbr, dev_handle); 149 130 if (rc != EOK) 150 131 return rc; 151 152 if (!mbr_is_mbr( this->data.mbr))132 printf("ismbr\n"); 133 if (!mbr_is_mbr(data->mbr)) 153 134 return EINVAL; 154 155 rc = mbr_read_partitions( this->data.mbr);135 printf("parts\n"); 136 rc = mbr_read_partitions(data->mbr); 156 137 if (rc != EOK) 157 138 return rc; 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);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); 165 146 if (rc != EOK) { 166 147 printf("Error occured during writing: ERR: %d: %s\n", rc, str_error(rc)); … … 170 151 } 171 152 172 int extra_mbr_funcs( label_t *this, tinput_t *in, service_id_t dev_handle)153 int extra_mbr_funcs(tinput_t *in, service_id_t dev_handle, union label_data *data) 173 154 { 174 155 printf("Not implemented.\n"); … … 176 157 } 177 158 178 static int set_mbr_partition(tinput_t *in, mbr_part_t *p , unsigned int alignment)159 static int set_mbr_partition(tinput_t *in, mbr_part_t *p) 179 160 { 180 161 int c; … … 193 174 break; 194 175 default: 195 printf("Invalid type. Cancelled. \n");176 printf("Invalid type. Cancelled."); 196 177 return EINVAL; 197 178 } 198 199 printf("ST_LOGIC: %d, %hd\n", mbr_get_flag(p, ST_LOGIC), p->status);200 179 201 180 printf("Set type (0-255): "); … … 221 200 if (sa == 0 && errno != EOK) 222 201 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 }228 202 229 203 printf("Set end addres (number): "); … … 232 206 return errno; 233 207 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 240 208 if(ea < sa) { 241 209 printf("Invalid value. Canceled.\n");
Note:
See TracChangeset
for help on using the changeset viewer.