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)