Brucey 3 лет назад
Родитель
Сommit
4351346679

+ 4 - 0
core.mod/common.bmx

@@ -117,6 +117,10 @@ End Enum
 
 Enum EArchiveFormat
 	CPIO = $10000
+	CPIO_POSIX = $10000 | 1
+	CPIO_BIN = $10000 | 2
+	CPIO_SVR4_NOCRC = $10000 | 4
+	CPIO_PWB = $10000 | 7
 	SHAR = $20000
 	TAR = $30000
 	USTAR = $30000 | 1

+ 33 - 0
cpio.mod/common.bmx

@@ -0,0 +1,33 @@
+' Copyright (c) 2022 Bruce A Henderson
+' All rights reserved.
+'
+' Redistribution and use in source and binary forms, with or without
+' modification, are permitted provided that the following conditions are met:
+'     * Redistributions of source code must retain the above copyright
+'       notice, this list of conditions and the following disclaimer.
+'     * Redistributions in binary form must reproduce the above copyright
+'       notice, this list of conditions and the following disclaimer in the
+'       documentation and/or other materials provided with the distribution.
+'
+' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+' EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+' WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+' DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+' DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+' (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+' LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+' ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+' (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+' SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+'
+SuperStrict
+
+Import "source.bmx"
+
+Extern
+	Function archive_read_support_format_cpio:Int(archive:Byte Ptr)
+	Function archive_write_set_format_cpio_odc:Int(archive:Byte Ptr)
+	Function archive_write_set_format_cpio_newc:Int(archive:Byte Ptr)
+	Function archive_write_set_format_cpio_pwb:Int(archive:Byte Ptr)
+	Function archive_write_set_format_cpio_bin:Int(archive:Byte Ptr)
+End Extern

+ 73 - 0
cpio.mod/cpio.bmx

@@ -0,0 +1,73 @@
+' Copyright (c) 2022 Bruce A Henderson
+' All rights reserved.
+'
+' Redistribution and use in source and binary forms, with or without
+' modification, are permitted provided that the following conditions are met:
+'     * Redistributions of source code must retain the above copyright
+'       notice, this list of conditions and the following disclaimer.
+'     * Redistributions in binary form must reproduce the above copyright
+'       notice, this list of conditions and the following disclaimer in the
+'       documentation and/or other materials provided with the distribution.
+'
+' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+' EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+' WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+' DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+' DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+' (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+' LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+' ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+' (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+' SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+'
+SuperStrict
+
+Module Archive.CPIO
+
+
+ModuleInfo "CC_OPTS: -DHAVE_CONFIG_H -D_FILE_OFFSET_BITS=64"
+?win32
+ModuleInfo "CC_OPTS: -DLIBARCHIVE_STATIC"
+?
+
+Import Archive.Core
+Import "common.bmx"
+
+Private
+
+Type TCpioArchiveFormat Extends TArchiveFormat
+
+	Method AddReadFormat:Int(archive:Byte Ptr, format:EArchiveFormat)
+		If format = EArchiveFormat.CPIO OR format = EArchiveFormat.CPIO_SVR4_NOCRC Or format = EArchiveFormat.CPIO_BIN Or format = EArchiveFormat.CPIO_PWB Then
+			archive_read_support_format_cpio(archive)
+			Return True
+		End If
+	End Method
+
+	Method AddWriteFormat:Int(archive:Byte Ptr, format:EArchiveFormat)
+		Select format
+			Case EArchiveFormat.CPIO
+				archive_write_set_format_cpio_odc(archive)
+				Return True
+			Case EArchiveFormat.CPIO_SVR4_NOCRC
+				archive_write_set_format_cpio_newc(archive)
+				Return True
+			Case EArchiveFormat.CPIO_BIN
+				archive_write_set_format_cpio_bin(archive)
+				Return True
+			Case EArchiveFormat.CPIO_PWB
+				archive_write_set_format_cpio_pwb(archive)
+				Return True
+		End Select
+	End Method
+
+	Method AddReadFilter:Int(archive:Byte Ptr, filter:EArchiveFilter)
+		Return False
+	End Method
+
+	Method AddWriteFilter:Int(archive:Byte Ptr, filter:EArchiveFilter)
+		Return False
+	End Method
+End Type
+
+New TCpioArchiveFormat

+ 34 - 0
cpio.mod/examples/example_01.bmx

@@ -0,0 +1,34 @@
+SuperStrict
+
+Framework Archive.Cpio
+Import brl.standardio
+
+Local wa:TWriteArchive = New TWriteArchive
+wa.SetFormat(EArchiveFormat.CPIO)
+
+wa.Open("data.cpio")
+
+wa.AddEntry("testdata.txt", "files/testdata.txt")
+wa.AddEntry("테스트_데이터.txt", "files/테스트_데이터.txt")
+
+wa.Close()
+
+
+Local entry:TArchiveEntry = New TArchiveEntry
+
+Local ra:TReadArchive = New TReadArchive
+ra.SetFormat(EArchiveFormat.CPIO)
+
+ra.Open("data.cpio")
+
+While ra.ReadNextHeader(entry) = ARCHIVE_OK
+	Print "File : " + entry.Pathname()
+	Print "Size : " + entry.Size()
+	Local s:String = LoadText(ra.DataStream())
+	Print "String size   : " + s.Length
+	Print "First n chars : " + s[0..17]
+	Print
+Wend
+
+ra.Free()
+

+ 9 - 0
cpio.mod/examples/testdata.txt

@@ -0,0 +1,9 @@
+This is some data we want to compress
+
+
+blah 
+
+blah 
+
+
+blah

+ 9 - 0
cpio.mod/examples/테스트_데이터.txt

@@ -0,0 +1,9 @@
+This is some data we want to compress
+
+
+blah 
+
+blah 
+
+
+blah

+ 30 - 0
cpio.mod/source.bmx

@@ -0,0 +1,30 @@
+' Copyright (c) 2022 Bruce A Henderson
+' All rights reserved.
+'
+' Redistribution and use in source and binary forms, with or without
+' modification, are permitted provided that the following conditions are met:
+'     * Redistributions of source code must retain the above copyright
+'       notice, this list of conditions and the following disclaimer.
+'     * Redistributions in binary form must reproduce the above copyright
+'       notice, this list of conditions and the following disclaimer in the
+'       documentation and/or other materials provided with the distribution.
+'
+' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+' EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+' WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+' DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+' DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+' (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+' LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+' ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+' (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+' SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+'
+SuperStrict
+
+Import "../core.mod/include/*.h"
+Import "../core.mod/libarchive/libarchive/*.h"
+Import "../core.mod/libarchive/libarchive/archive_read_support_format_cpio.c"
+Import "../core.mod/libarchive/libarchive/archive_write_set_format_cpio_odc.c"
+Import "../core.mod/libarchive/libarchive/archive_write_set_format_cpio_binary.c"
+Import "../core.mod/libarchive/libarchive/archive_write_set_format_cpio_newc.c"