isofs.h revision ecd3f4c6194d87e9a53684b17e02ca96c7a7d1a7
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * IPRT - ISO 9660 file system handling.
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * Copyright (C) 2010 Oracle Corporation
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * available from http://www.virtualbox.org. This file is free software;
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * you can redistribute it and/or modify it under the terms of the GNU
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * General Public License (GPL) as published by the Free Software
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * The contents of this file may alternatively be used under the terms
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * of the Common Development and Distribution License Version 1.0
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * VirtualBox OSE distribution, in which case the provisions of the
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * CDDL are applicable instead of those of the GPL.
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * You may elect to license modified versions of this file under the
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * terms and conditions of either the GPL or the CDDL or both.
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync/** @defgroup grp_rt_isofs RTIsoFs - ISO 9660 Filesystem
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * @ingroup grp_rt
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync/** Standard ID of volume descriptors. */
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync/** Default sector size. */
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync/* Directory Record. */
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync uint32_t extent_data_length; /* Number of bytes (file) / len (directory). */
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync /* Starting here there will be the actual directory entry name
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * and a padding of 1 byte if name_len is odd. */
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync/* Primary Volume Descriptor. */
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync uint32_t volume_space_size; /* Number of sectors, Little Endian. */
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync uint32_t volume_space_size_big; /* Number of sectors Big Endian. */
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync /** Sector of starting directory table. */
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync /** Index of parent directory (1 for the root). */
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync /* Starting here there will be the name of the directory,
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync * specified by length above. */
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsynctypedef struct RTISOFSFILE
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * Opens an ISO file.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * The following limitations apply:
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * - Fixed sector size (2048 bytes).
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * - No extensions (Joliet, RockRidge etc.) support (yet).
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * - Only primary volume descriptor (PVD) handled.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @return IPRT status code.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pFile Pointer to ISO handle.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pszFileName Path to ISO file to open.
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsyncRTR3DECL(int) RTIsoFsOpen(PRTISOFSFILE pFile, const char *pszFileName);
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * Closes an ISO file.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pFile Pointer to open ISO file returned by RTIsoFsOpen().
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * Retrieves the offset + length (both in bytes) of a given file
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * stored in the ISO.
ecd3f4c6194d87e9a53684b17e02ca96c7a7d1a7vboxsync * @note According to the standard, a file cannot be larger than 2^32-1 bytes.
ecd3f4c6194d87e9a53684b17e02ca96c7a7d1a7vboxsync * Therefore using size_t / uint32_t is not a problem.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @return IPRT status code.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pFile Pointer to open ISO file returned by RTIsoFsOpen().
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pszPath Path of file within the ISO to retrieve information for.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pcbOffset Pointer to store the file's absolute offset within the ISO.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pcbLength Pointer to store the file's size.
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsyncRTR3DECL(int) RTIsoFsGetFileInfo(PRTISOFSFILE pFile, const char *pszPath,
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * Extracts a file from an ISO to the given destination.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @return IPRT status code.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pFile Pointer to open ISO file returned by RTIsoFsOpen().
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pszPath Path of file within the ISO to extract.
87f68d052aecda193e89e8f41ec147606c7f4e0bvboxsync * @param pszDest Where to store the extracted file.
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsyncRTR3DECL(int) RTIsoFsExtractFile(PRTISOFSFILE pFile, const char *pszSource,
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync const char *pszDest);
5c2e23084fe3d3163d8f441b99cfd9d2f76b6b2avboxsync#endif /* IN_RING3 */