Lines Matching refs:volume

161 InitVolDesc(iso9660_volume *volume, char *buffer)
165 volume->volDescType = *(uint8 *)buffer;
166 buffer += sizeof(volume->volDescType);
168 const size_t kStdIDStringLen = sizeof(volume->stdIDString) - 1;
169 volume->stdIDString[kStdIDStringLen] = '\0';
170 strncpy(volume->stdIDString, buffer, kStdIDStringLen);
173 volume->volDescVersion = *(uint8 *)buffer;
174 buffer += sizeof(volume->volDescVersion);
176 buffer += sizeof(volume->unused1); // skip unused 8th byte
178 const size_t kSystemIDStringLen = sizeof(volume->systemIDString) - 1;
179 volume->systemIDString[kSystemIDStringLen] = '\0';
180 strncpy(volume->systemIDString, buffer, kSystemIDStringLen);
182 TRACE(("InitVolDesc - system id string is %s\n", volume->systemIDString));
184 const size_t kVolIDStringLen = sizeof(volume->volIDString) - 1;
185 volume->volIDString[kVolIDStringLen] = '\0';
186 strncpy(volume->volIDString, buffer, kVolIDStringLen);
188 TRACE(("InitVolDesc - volume id string is %s\n", volume->volIDString));
190 buffer += sizeof(volume->unused2) - 1; // skip unused 73-80 bytes
192 volume->volSpaceSize[LSB_DATA] = *(uint32 *)buffer;
193 buffer += sizeof(volume->volSpaceSize[LSB_DATA]);
194 volume->volSpaceSize[MSB_DATA] = *(uint32 *)buffer;
195 buffer += sizeof(volume->volSpaceSize[MSB_DATA]);
197 buffer += sizeof(volume->unused3) - 1; // skip unused 89-120 bytes
199 volume->volSetSize[LSB_DATA] = *(uint16*)buffer;
200 buffer += sizeof(volume->volSetSize[LSB_DATA]);
201 volume->volSetSize[MSB_DATA] = *(uint16*)buffer;
202 buffer += sizeof(volume->volSetSize[MSB_DATA]);
204 volume->volSeqNum[LSB_DATA] = *(uint16*)buffer;
205 buffer += sizeof(volume->volSeqNum[LSB_DATA]);
206 volume->volSeqNum[MSB_DATA] = *(uint16*)buffer;
207 buffer += sizeof(volume->volSeqNum[MSB_DATA]);
209 volume->logicalBlkSize[LSB_DATA] = *(uint16*)buffer;
210 buffer += sizeof(volume->logicalBlkSize[LSB_DATA]);
211 volume->logicalBlkSize[MSB_DATA] = *(uint16*)buffer;
212 buffer += sizeof(volume->logicalBlkSize[MSB_DATA]);
214 volume->pathTblSize[LSB_DATA] = *(uint32*)buffer;
215 buffer += sizeof(volume->pathTblSize[LSB_DATA]);
216 volume->pathTblSize[MSB_DATA] = *(uint32*)buffer;
217 buffer += sizeof(volume->pathTblSize[MSB_DATA]);
219 volume->lPathTblLoc[LSB_DATA] = *(uint16*)buffer;
220 buffer += sizeof(volume->lPathTblLoc[LSB_DATA]);
221 volume->lPathTblLoc[MSB_DATA] = *(uint16*)buffer;
222 buffer += sizeof(volume->lPathTblLoc[MSB_DATA]);
224 volume->optLPathTblLoc[LSB_DATA] = *(uint16*)buffer;
225 buffer += sizeof(volume->optLPathTblLoc[LSB_DATA]);
226 volume->optLPathTblLoc[MSB_DATA] = *(uint16*)buffer;
227 buffer += sizeof(volume->optLPathTblLoc[MSB_DATA]);
229 volume->mPathTblLoc[LSB_DATA] = *(uint16*)buffer;
230 buffer += sizeof(volume->mPathTblLoc[LSB_DATA]);
231 volume->mPathTblLoc[MSB_DATA] = *(uint16*)buffer;
232 buffer += sizeof(volume->mPathTblLoc[MSB_DATA]);
234 volume->optMPathTblLoc[LSB_DATA] = *(uint16*)buffer;
235 buffer += sizeof(volume->optMPathTblLoc[LSB_DATA]);
236 volume->optMPathTblLoc[MSB_DATA] = *(uint16*)buffer;
237 buffer += sizeof(volume->optMPathTblLoc[MSB_DATA]);
240 volume->joliet_level = 0;
241 InitNode(volume, &volume->rootDirRec, buffer, NULL);
243 volume->rootDirRec.id = ISO_ROOTNODE_ID;
246 const size_t kVolSetIDStringLen = sizeof(volume->volSetIDString) - 1;
247 volume->volSetIDString[kVolSetIDStringLen] = '\0';
248 strncpy(volume->volSetIDString, buffer, kVolSetIDStringLen);
250 TRACE(("InitVolDesc - volume set id string is %s\n", volume->volSetIDString));
252 const size_t kPubIDStringLen = sizeof(volume->pubIDString) - 1;
253 volume->pubIDString[kPubIDStringLen] = '\0';
254 strncpy(volume->pubIDString, buffer, kPubIDStringLen);
256 TRACE(("InitVolDesc - volume pub id string is %s\n", volume->pubIDString));
258 const size_t kDataPreparerLen = sizeof(volume->dataPreparer) - 1;
259 volume->dataPreparer[kDataPreparerLen] = '\0';
260 strncpy(volume->dataPreparer, buffer, kDataPreparerLen);
262 TRACE(("InitVolDesc - volume dataPreparer string is %s\n", volume->dataPreparer));
264 const size_t kAppIDStringLen = sizeof(volume->appIDString) - 1;
265 volume->appIDString[kAppIDStringLen] = '\0';
266 strncpy(volume->appIDString, buffer, kAppIDStringLen);
268 TRACE(("InitVolDesc - volume app id string is %s\n", volume->appIDString));
270 const size_t kCopyrightLen = sizeof(volume->copyright) - 1;
271 volume->copyright[kCopyrightLen] = '\0';
272 strncpy(volume->copyright, buffer, kCopyrightLen);
274 TRACE(("InitVolDesc - copyright is %s\n", volume->copyright));
276 const size_t kAbstractFNameLen = sizeof(volume->abstractFName) - 1;
277 volume->abstractFName[kAbstractFNameLen] = '\0';
278 strncpy(volume->abstractFName, buffer, kAbstractFNameLen);
281 const size_t kBiblioFNameLen = sizeof(volume->biblioFName) - 1;
282 volume->biblioFName[kBiblioFNameLen] = '\0';
283 strncpy(volume->biblioFName, buffer, kBiblioFNameLen);
286 init_volume_date(&volume->createDate, buffer);
289 init_volume_date(&volume->modDate, buffer);
292 init_volume_date(&volume->expireDate, buffer);
295 init_volume_date(&volume->effectiveDate, buffer);
298 volume->fileStructVers = *(uint8*)buffer;
304 parse_rock_ridge(iso9660_volume* volume, iso9660_inode* node, char* buffer,
545 char* buffer = (char*)block_cache_get(volume->fBlockCache,
550 InitNode(volume, node, buffer, NULL, true);
551 block_cache_put(volume->fBlockCache,
604 // determine if it is an ISO volume.
612 iso9660_volume *volume;
618 volume = (iso9660_volume *)calloc(sizeof(iso9660_volume), 1);
619 if (volume == NULL) {
627 volume->fdOfSession = open(path, O_RDONLY);
630 if (volume->fdOfSession >= 0) {
631 if (ioctl(volume->fdOfSession, B_GET_PARTITION_INFO, &partitionInfo,
638 volume->fd = open(partitionInfo.device, O_RDONLY);
641 if (volume->fdOfSession < 0 || volume->fd < 0) {
642 close(volume->fd);
643 close(volume->fdOfSession);
646 free(volume);
650 deviceBlockSize = get_device_block_size(volume->fdOfSession);
653 close(volume->fd);
654 close(volume->fdOfSession);
656 free(volume);
660 volume->joliet_level = 0;
662 retval = read_pos(volume->fdOfSession, offset, (void*)buffer,
674 TRACE(("ISOMount: Is an ISO9660 volume, initting rec\n"));
676 InitVolDesc(volume, buffer);
677 strncpy(volume->devicePath,path,127);
678 volume->id = ISO_ROOTNODE_ID;
679 TRACE(("ISO9660: volume->blockSize = %d\n", volume->logicalBlkSize[FS_DATA_FORMAT]));
682 int multiplier = deviceBlockSize / volume->logicalBlkSize[FS_DATA_FORMAT];
689 / volume->logicalBlkSize[FS_DATA_FORMAT];
691 maxBlocks = volume->volSpaceSize[FS_DATA_FORMAT];
694 TRACE(("ISO9660: cache init: dev %d, max blocks %lld\n", volume->fd, maxBlocks));
695 volume->fBlockCache = block_cache_create(volume->fd, maxBlocks,
696 volume->logicalBlkSize[FS_DATA_FORMAT], true);
705 case 0x40: volume->joliet_level = 1; break;
706 case 0x43: volume->joliet_level = 2; break;
707 case 0x45: volume->joliet_level = 3; break;
710 TRACE(("ISO9660 Extensions: Microsoft Joliet Level %d\n", volume->joliet_level));
714 if (volume->joliet_level > 0) {
715 InitNode(volume, &volume->rootDirRec, &buffer[156],
730 close(volume->fdOfSession);
731 close(volume->fd);
732 free(volume);
734 TRACE(("ISOMount: Not an ISO9660 volume!\n"));
738 TRACE(("ISOMount - EXIT, returning %p\n", volume));
739 *_newVolume = volume;
750 ISOReadDirEnt(iso9660_volume *volume, dircookie *cookie, struct dirent *dirent,
760 * volume->logicalBlkSize[FS_DATA_FORMAT];
766 = (char*)block_cache_get(volume->fBlockCache, cookie->block);
769 block_cache_put(volume->fBlockCache, cookie->block);
772 += volume->logicalBlkSize[FS_DATA_FORMAT] - cookie->pos;
787 result = InitNode(volume, &node, blockData + cookie->pos,
797 dirent->d_dev = volume->id;
821 if (cookie->pos == volume->logicalBlkSize[FS_DATA_FORMAT]) {
834 block_cache_put(volume->fBlockCache, cacheBlock);
845 InitNode(iso9660_volume* volume, iso9660_inode* node, char* buffer,
903 TRACE(("InitNode - volume seq num is %d\n", (int)node->volSeqNum));
938 } else if (volume->joliet_level > 0) {
986 return parse_rock_ridge(volume, node, buffer, end, relocated);