Changeset 75698 in vbox for trunk/src/VBox/Runtime/common/fs
- Timestamp:
- Nov 24, 2018 12:42:50 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/fs/isomakercmd.cpp
r71014 r75698 1692 1692 1693 1693 /** 1694 * Adds a directory, from a VFS chain or real file system.1695 *1696 * @returns IPRT status code.1697 * @param pOpts The ISO maker command instance.1698 * @param pszSrc The path to the source directory.1699 * @param pParsed The parsed names.1700 */1701 static int rtFsIsoMakerCmdAddDir(PRTFSISOMAKERCMDOPTS pOpts, const char *pszSrc, PCRTFSISOMKCMDPARSEDNAMES pParsed)1702 {1703 RT_NOREF(pParsed);1704 return rtFsIsoMakerCmdErrorRc(pOpts, VERR_NOT_IMPLEMENTED, "Adding directory '%s' failed: not implemented", pszSrc);1705 }1706 1707 1708 /**1709 1694 * Worker for rtFsIsoMakerCmdAddVfsDir that does the recursion. 1710 1695 * … … 1872 1857 1873 1858 /** 1874 * Adds a directory, from the source VFS.1859 * Common directory adding worker. 1875 1860 * 1876 1861 * @returns IPRT status code. 1877 1862 * @param pOpts The ISO maker command instance. 1863 * @param hVfsSrcDir The directory being added. 1864 * @param pszSrc The source directory name. 1878 1865 * @param pParsed The parsed names. 1879 1866 * @param pidxObj Where to return the configuration index for the 1880 1867 * added file. Optional. 1881 1868 */ 1882 static int rtFsIsoMakerCmdAddVfsDir(PRTFSISOMAKERCMDOPTS pOpts, PCRTFSISOMKCMDPARSEDNAMES pParsed, PCRTFSOBJINFO pObjInfo) 1883 { 1884 Assert(pParsed->cNames < pParsed->cNamesWithSrc); 1885 1886 /* 1887 * Open the directory. 1888 */ 1889 char *pszDir = pParsed->aNames[pParsed->cNamesWithSrc - 1].szPath; 1890 RTPathChangeToUnixSlashes(pszDir, true /*fForce*/); /* VFS currently only understand unix slashes. */ 1891 RTVFSDIR hVfsDirSrc; 1892 int rc = RTVfsDirOpenDir(pOpts->aSrcStack[pOpts->iSrcStack].hSrcDir, pszDir, 0 /*fFlags*/, &hVfsDirSrc); 1893 if (RT_FAILURE(rc)) 1894 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Error opening directory '%s' (%s '%s'): %Rrc", pszDir, 1895 pOpts->aSrcStack[pOpts->iSrcStack].pszSrcVfsOption ? "inside" : "relative to", 1896 pOpts->aSrcStack[pOpts->iSrcStack].pszSrcVfs, rc); 1897 1869 static int rtFsIsoMakerCmdAddVfsDirCommon(PRTFSISOMAKERCMDOPTS pOpts, RTVFSDIR hVfsDirSrc, char *pszSrc, 1870 PCRTFSISOMKCMDPARSEDNAMES pParsed, PCRTFSOBJINFO pObjInfo) 1871 { 1898 1872 /* 1899 1873 * Add the directory if it doesn't exist. … … 1912 1886 } 1913 1887 } 1888 int rc = VINF_SUCCESS; 1914 1889 if (idxObj == UINT32_MAX) 1915 1890 { … … 1928 1903 for (uint32_t i = 0; i < pParsed->cNames; i++) 1929 1904 fNamespaces |= pParsed->aNames[i].fNameSpecifiers & RTFSISOMAKERCMDNAME_MAJOR_MASK; 1930 rc = rtFsIsoMakerCmdAddVfsDirRecursive(pOpts, hVfsDirSrc, idxObj, psz Dir,1905 rc = rtFsIsoMakerCmdAddVfsDirRecursive(pOpts, hVfsDirSrc, idxObj, pszSrc, 1931 1906 pParsed->aNames[pParsed->cNamesWithSrc - 1].cchPath, fNamespaces, 0 /*cDepth*/); 1932 1907 } 1933 RTVfsDirRelease(hVfsDirSrc); 1908 1934 1909 return rc; 1935 1910 } 1936 1911 1937 1912 1913 /** 1914 * Adds a directory, from the source VFS. 1915 * 1916 * @returns IPRT status code. 1917 * @param pOpts The ISO maker command instance. 1918 * @param pParsed The parsed names. 1919 * @param pidxObj Where to return the configuration index for the 1920 * added file. Optional. 1921 */ 1922 static int rtFsIsoMakerCmdAddVfsDir(PRTFSISOMAKERCMDOPTS pOpts, PCRTFSISOMKCMDPARSEDNAMES pParsed, PCRTFSOBJINFO pObjInfo) 1923 { 1924 Assert(pParsed->cNames < pParsed->cNamesWithSrc); 1925 char *pszSrc = pParsed->aNames[pParsed->cNamesWithSrc - 1].szPath; 1926 RTPathChangeToUnixSlashes(pszSrc, true /*fForce*/); /* VFS currently only understand unix slashes. */ 1927 RTVFSDIR hVfsDirSrc; 1928 int rc = RTVfsDirOpenDir(pOpts->aSrcStack[pOpts->iSrcStack].hSrcDir, pszSrc, 0 /*fFlags*/, &hVfsDirSrc); 1929 if (RT_SUCCESS(rc)) 1930 { 1931 rc = rtFsIsoMakerCmdAddVfsDirCommon(pOpts, hVfsDirSrc, pszSrc, pParsed, pObjInfo); 1932 RTVfsDirRelease(hVfsDirSrc); 1933 } 1934 else 1935 rc = rtFsIsoMakerCmdErrorRc(pOpts, rc, "Error opening directory '%s' (%s '%s'): %Rrc", pszSrc, 1936 pOpts->aSrcStack[pOpts->iSrcStack].pszSrcVfsOption ? "inside" : "relative to", 1937 pOpts->aSrcStack[pOpts->iSrcStack].pszSrcVfs, rc); 1938 return rc; 1939 } 1940 1941 1942 /** 1943 * Adds a directory, from a VFS chain or real file system. 1944 * 1945 * @returns IPRT status code. 1946 * @param pOpts The ISO maker command instance. 1947 * @param pszSrc The path to the source directory. 1948 * @param pParsed The parsed names. 1949 */ 1950 static int rtFsIsoMakerCmdAddDir(PRTFSISOMAKERCMDOPTS pOpts, PCRTFSISOMKCMDPARSEDNAMES pParsed, PCRTFSOBJINFO pObjInfo) 1951 { 1952 Assert(pParsed->cNames < pParsed->cNamesWithSrc); 1953 char *pszSrc = pParsed->aNames[pParsed->cNamesWithSrc - 1].szPath; 1954 RTERRINFOSTATIC ErrInfo; 1955 uint32_t offError; 1956 RTVFSDIR hVfsDirSrc; 1957 int rc = RTVfsChainOpenDir(pszSrc, 0 /*fOpen*/, &hVfsDirSrc, &offError, RTErrInfoInitStatic(&ErrInfo)); 1958 if (RT_SUCCESS(rc)) 1959 { 1960 rc = rtFsIsoMakerCmdAddVfsDirCommon(pOpts, hVfsDirSrc, pszSrc, pParsed, pObjInfo); 1961 RTVfsDirRelease(hVfsDirSrc); 1962 } 1963 else 1964 rc = rtFsIsoMakerCmdChainError(pOpts, "RTVfsChainOpenDir", pszSrc, rc, offError, &ErrInfo.Core); 1965 return rc; 1966 } 1938 1967 1939 1968 … … 2061 2090 if (Parsed.enmSrcType == RTFSISOMKCMDPARSEDNAMES::kSrcType_NormalSrcStack) 2062 2091 return rtFsIsoMakerCmdAddVfsDir(pOpts, &Parsed, &ObjInfo); 2063 return rtFsIsoMakerCmdAddDir(pOpts, pszSrc, &Parsed);2092 return rtFsIsoMakerCmdAddDir(pOpts, &Parsed, &ObjInfo); 2064 2093 } 2065 2094
Note:
See TracChangeset
for help on using the changeset viewer.