github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/archive/tar/reader.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package tar 6 7 import ( 8 "github.com/shogo82148/std/io" 9 ) 10 11 type fileReader struct{} 12 type block struct{} 13 14 // Readerはtarアーカイブの内容に順次アクセスするためのものです。 15 // Reader.Next はアーカイブ内の次のファイル(最初のファイルを含む)に進み、 16 // その後、Readerはファイルのデータにアクセスするためのio.Readerとして扱うことができます。 17 type Reader struct { 18 r io.Reader 19 pad int64 20 curr fileReader 21 blk block 22 23 // err is a persistent error. 24 // It is only the responsibility of every exported method of Reader to 25 // ensure that this error is sticky. 26 err error 27 } 28 29 // NewReaderはrから読み取りを行う新しい [Reader] を作成します。 30 func NewReader(r io.Reader) *Reader 31 32 // Nextはtarアーカイブ内の次のエントリに進みます。 33 // Header.Sizeは次のファイルの読み取り可能なバイト数を決定します。 34 // 現在のファイルに残っているデータは自動的に破棄されます。 35 // アーカイブの末尾に達した場合、Nextはエラーio.EOFを返します。 36 // 37 // Nextが [filepath.IsLocal] によって定義されるローカルでない名前に遭遇し、 38 // GODEBUG環境変数に`tarinsecurepath=0`が含まれている場合、 39 // Nextは [ErrInsecurePath] エラーを伴うヘッダーを返します。 40 // 将来のGoのバージョンでは、この動作がデフォルトで導入される可能性があります。 41 // ローカルでない名前を受け入れたいプログラムは、 [ErrInsecurePath] エラーを無視して返されたヘッダーを使用できます。 42 func (tr *Reader) Next() (*Header, error) 43 44 // Readはtarアーカイブの現在のファイルから読み取ります。 45 // それはそのファイルの終わりに達するとき(0、io.EOF)を返します、 46 // 次のファイルに進むために [Next] が呼び出されるまで。 47 // 48 // 現在のファイルがスパースである場合、 49 // 穴としてマークされた領域はNULバイトとして読み戻されます。 50 // 51 // [TypeLink] 、 [TypeSymlink] 、 [TypeChar] 、 [TypeBlock] 、 [TypeDir] 、 [TypeFifo] などの特殊なタイプでReadを呼び出すと、 52 // [Header.Size] が示す内容に関係なく、(0, [io.EOF]) が返されます。 53 func (tr *Reader) Read(b []byte) (int, error)