src/fileio.cpp
changeset 9702 e69c01e76845
parent 9635 b00a9384a924
child 9916 40b0040c754b
equal deleted inserted replaced
9701:da907123be89 9702:e69c01e76845
   335 	return f;
   335 	return f;
   336 }
   336 }
   337 
   337 
   338 FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize)
   338 FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize)
   339 {
   339 {
   340 	FILE *f = fopen(entry->tar->filename, "rb");
   340 	FILE *f = fopen(entry->tar_filename, "rb");
   341 	assert(f != NULL);
   341 	assert(f != NULL);
   342 
   342 
   343 	fseek(f, entry->position, SEEK_SET);
   343 	fseek(f, entry->position, SEEK_SET);
   344 	if (filesize != NULL) *filesize = entry->size;
   344 	if (filesize != NULL) *filesize = entry->size;
   345 	return f;
   345 	return f;
   511 	if (it != _tar_list.end()) return false;
   511 	if (it != _tar_list.end()) return false;
   512 
   512 
   513 	FILE *f = fopen(filename, "rb");
   513 	FILE *f = fopen(filename, "rb");
   514 	assert(f != NULL);
   514 	assert(f != NULL);
   515 
   515 
   516 	TarListEntry *tar_entry = MallocT<TarListEntry>(1);
   516 	const char *dupped_filename = strdup(filename);
   517 	tar_entry->filename = strdup(filename);
   517 	_tar_list[filename].filename = dupped_filename;
   518 	_tar_list.insert(TarList::value_type(filename, tar_entry));
       
   519 
   518 
   520 	TarLinkList links; ///< Temporary list to collect links
   519 	TarLinkList links; ///< Temporary list to collect links
   521 
   520 
   522 	TarHeader th;
   521 	TarHeader th;
   523 	char buf[sizeof(th.name) + 1], *end;
   522 	char buf[sizeof(th.name) + 1], *end;
   573 
   572 
   574 				if (strlen(name) == 0) break;
   573 				if (strlen(name) == 0) break;
   575 
   574 
   576 				/* Store this entry in the list */
   575 				/* Store this entry in the list */
   577 				TarFileListEntry entry;
   576 				TarFileListEntry entry;
   578 				entry.tar      = tar_entry;
   577 				entry.tar_filename = dupped_filename;
   579 				entry.size     = skip;
   578 				entry.size         = skip;
   580 				entry.position = pos;
   579 				entry.position     = pos;
   581 
   580 
   582 				/* Convert to lowercase and our PATHSEPCHAR */
   581 				/* Convert to lowercase and our PATHSEPCHAR */
   583 				SimplifyFileName(name);
   582 				SimplifyFileName(name);
   584 
   583 
   585 				DEBUG(misc, 6, "Found file in tar: %s (%d bytes, %d offset)", name, skip, pos);
   584 				DEBUG(misc, 6, "Found file in tar: %s (%d bytes, %d offset)", name, skip, pos);