Changeset 5c702a8 in mainline for uspace/srv/fs/udf/udf_volume.c
- Timestamp:
- 2012-08-27T17:21:38Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0d57c3e
- Parents:
- 5d94b16c
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/udf/udf_volume.c
r5d94b16c r5c702a8 151 151 * 152 152 */ 153 void udf_prepare_tag(udf_descriptor_tag_t *tag)153 static void udf_prepare_tag(udf_descriptor_tag_t *tag) 154 154 { 155 155 GET_LE16(tag->id); … … 159 159 GET_LE16(tag->descriptor_crc_length); 160 160 GET_LE32(tag->location); 161 } 162 163 /** Read AVD by using one of default sector size from array 164 * 165 * @param service_id 166 * @param avd Returned value - Anchor Volume Descriptor 167 * @param sector_size Expected sector size 168 * 169 * @return EOK on success or a negative error code. 170 * 171 */ 172 static int udf_get_anchor_volume_descriptor_by_ssize(service_id_t service_id, 173 udf_anchor_volume_descriptor_t *avd, uint32_t sector_size) 174 { 175 int rc = block_read_bytes_direct(service_id, 176 UDF_AVDP_SECTOR * sector_size, 177 sizeof(udf_anchor_volume_descriptor_t), avd); 178 if (rc != EOK) 179 return rc; 180 181 if (avd->tag.checksum != udf_tag_checksum((uint8_t *) &avd->tag)) 182 return EINVAL; 183 184 // TODO: Should be tested in big-endian mode 185 udf_prepare_tag(&avd->tag); 186 187 if (avd->tag.id != UDF_TAG_AVDP) 188 return EINVAL; 189 190 GET_LE32(avd->main_extent.length); 191 GET_LE32(avd->main_extent.location); 192 GET_LE32(avd->reserve_extent.length); 193 GET_LE32(avd->reserve_extent.location); 194 195 return EOK; 161 196 } 162 197 … … 200 235 201 236 return EINVAL; 202 }203 204 /** Read AVD by using one of default sector size from array205 *206 * @param service_id207 * @param avd Returned value - Anchor Volume Descriptor208 * @param sector_size Expected sector size209 *210 * @return EOK on success or a negative error code.211 *212 */213 int udf_get_anchor_volume_descriptor_by_ssize(service_id_t service_id,214 udf_anchor_volume_descriptor_t *avd, uint32_t sector_size)215 {216 int rc = block_read_bytes_direct(service_id,217 UDF_AVDP_SECTOR * sector_size,218 sizeof(udf_anchor_volume_descriptor_t), avd);219 if (rc != EOK)220 return rc;221 222 if (avd->tag.checksum != udf_tag_checksum((uint8_t *) &avd->tag))223 return EINVAL;224 225 // TODO: Should be tested in BegEndian mode226 udf_prepare_tag(&avd->tag);227 228 if (avd->tag.id != UDF_TAG_AVDP)229 return EINVAL;230 231 GET_LE32(avd->main_extent.length);232 GET_LE32(avd->main_extent.location);233 GET_LE32(avd->reserve_extent.length);234 GET_LE32(avd->reserve_extent.location);235 236 return EOK;237 237 } 238 238
Note:
See TracChangeset
for help on using the changeset viewer.