anchor.diff:  %%% API
   %%%===================================================================
   
  --spec open_archive() -> state().
  -open_archive() ->
  -    open_archive(#{gzip => true}).
  -
  -
  --spec open_archive(options()) -> state().
  -open_archive(Options) ->
  +-spec open_archive_stream() -> state().
  +open_archive_stream() ->
  +    open_archive_stream(#{gzip => true}).
  +
  +
  +-spec open_archive_stream(options()) -> state().
  +open_archive_stream(Options) ->
       ZStream = case maps:get(gzip, Options, false) of
           false -> undefined;
           true ->
  
positive.code: %%% @end
  %%%--------------------------------------------------------------------
  %%% @doc
  %%% This module contains utility functions allowing for creating TAR archives.
  %%% @end
  %%%--------------------------------------------------------------------
  -module(tar_utils).
  -author("Michal Stanisz").
  
  %% API
  -export([open_archive/0, open_archive/1]).
  -export([new_file_entry/6]).
  -export([append_to_file_content/2, append_to_file_content/3]).
  -export([close_archive/1]).
  -export([read_bytes/1]).
  
  -define(BLOCK_SIZE, 512).
  -define(DIRECTORY_TYPE_FLAG, <<"5">>).
  
negative.code: 
  
  %% @private
  -spec ending_marker() -> bytes().
  ending_marker() ->
      binary:copy(?NUL, 2 * ?BLOCK_SIZE).
  
  
  %% @private
  -spec data_padding(state() | non_neg_integer()) -> bytes().
  data_padding(#state{current_file_size = FileSize}) ->
      data_padding(FileSize);
  data_padding(FileSize) when FileSize rem ?BLOCK_SIZE == 0 ->
      <<>>;
  data_padding(FileSize) ->
      BytesToFill = (?BLOCK_SIZE - FileSize rem ?BLOCK_SIZE),
      binary:copy(?NUL, BytesToFill).
  
  
  %% @private
  -spec format_octal(integer()) -> 
      binary().
  format_octal(Octal) ->
  