예제 #1
0
        /// <summary>
        /// Adds a file entry to a <see cref="CpioFile"/>.
        /// </summary>
        /// <param name="entry">
        /// The file entry to add.
        /// </param>
        /// <param name="cpioFile">
        /// The <see cref="CpioFile"/> to which to add the entry.
        /// </param>
        public void AddFile(ArchiveEntry entry, CpioFile cpioFile)
        {
            var targetPath = entry.TargetPath;

            if (!targetPath.StartsWith("."))
            {
                targetPath = "." + targetPath;
            }

            using (Stream fileStream = File.OpenRead(entry.SourceFilename))
            {
                CpioHeader cpioHeader = new CpioHeader()
                {
                    Check        = 0,
                    DevMajor     = 1,
                    DevMinor     = 0,
                    FileSize     = entry.FileSize,
                    Gid          = 0, // root
                    Uid          = 0, // root
                    Ino          = entry.Inode,
                    FileMode     = entry.Mode,
                    LastModified = entry.Modified,
                    NameSize     = (uint)entry.TargetPath.Length + 1,
                    Nlink        = 1,
                    RDevMajor    = 0,
                    RDevMinor    = 0,
                    Signature    = "070701",
                };

                cpioFile.Write(cpioHeader, targetPath, fileStream);
            }
        }
예제 #2
0
        /// <summary>
        /// Adds a directory entry to the <see cref="CpioFile"/>.
        /// </summary>
        /// <param name="entry">
        /// The <see cref="ArchiveEntry"/> which represents the directory.
        /// </param>
        /// <param name="cpioFile">
        /// The <see cref="CpioFile"/> to which to add the directory entry.
        /// </param>
        public void AddDirectory(ArchiveEntry entry, CpioFile cpioFile)
        {
            // Write out an entry for the current directory
            CpioHeader directoryHeader = new CpioHeader()
            {
                Check        = 0,
                DevMajor     = 1,
                DevMinor     = 0,
                FileSize     = 0,
                Gid          = 0,
                Ino          = entry.Inode,
                FileMode     = entry.Mode,
                LastModified = entry.Modified,
                Nlink        = 1,
                RDevMajor    = 0,
                RDevMinor    = 0,
                Signature    = "070701",
                Uid          = 0,
                NameSize     = 0
            };

            var targetPath = entry.TargetPath;

            if (!targetPath.StartsWith("."))
            {
                targetPath = "." + targetPath;
            }

            cpioFile.Write(directoryHeader, targetPath, new MemoryStream(Array.Empty <byte>()));
        }
예제 #3
0
        /// <summary>
        /// Adds a symlink entry to a <see cref="CpioFile"/>.
        /// </summary>
        /// <param name="entry">
        /// The symlink entry to add.
        /// </param>
        /// <param name="cpioFile">
        /// The <see cref="CpioFile"/> to which to add the entry.
        /// </param>
        public void AddSymlink(ArchiveEntry entry, CpioFile cpioFile)
        {
            var targetPath = entry.TargetPath;

            if (!targetPath.StartsWith("."))
            {
                targetPath = "." + targetPath;
            }

            CpioHeader cpioHeader = new CpioHeader()
            {
                Check        = 0,
                DevMajor     = 1,
                DevMinor     = 0,
                FileSize     = entry.FileSize,
                Gid          = 0, // root
                Uid          = 0, // root
                Ino          = entry.Inode,
                FileMode     = entry.Mode,
                LastModified = entry.Modified,
                NameSize     = (uint)entry.TargetPath.Length + 1,
                Nlink        = 1,
                RDevMajor    = 0,
                RDevMinor    = 0,
                Signature    = "070701",
            };

            cpioFile.Write(cpioHeader, targetPath, new MemoryStream(Encoding.UTF8.GetBytes(entry.LinkTo)));
        }