(root)/
xz-5.4.5/
src/
liblzma/
api/
lzma/
filter.h
       1  /**
       2   * \file        lzma/filter.h
       3   * \brief       Common filter related types and functions
       4   * \note        Never include this file directly. Use <lzma.h> instead.
       5   */
       6  
       7  /*
       8   * Author: Lasse Collin
       9   *
      10   * This file has been put into the public domain.
      11   * You can do whatever you want with this file.
      12   */
      13  
      14  #ifndef LZMA_H_INTERNAL
      15  #	error Never include this file directly. Use <lzma.h> instead.
      16  #endif
      17  
      18  
      19  /**
      20   * \brief       Maximum number of filters in a chain
      21   *
      22   * A filter chain can have 1-4 filters, of which three are allowed to change
      23   * the size of the data. Usually only one or two filters are needed.
      24   */
      25  #define LZMA_FILTERS_MAX 4
      26  
      27  
      28  /**
      29   * \brief       Filter options
      30   *
      31   * This structure is used to pass a Filter ID and a pointer to the filter's
      32   * options to liblzma. A few functions work with a single lzma_filter
      33   * structure, while most functions expect a filter chain.
      34   *
      35   * A filter chain is indicated with an array of lzma_filter structures.
      36   * The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter
      37   * array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to
      38   * be able to hold any arbitrary filter chain. This is important when
      39   * using lzma_block_header_decode() from block.h, because a filter array
      40   * that is too small would make liblzma write past the end of the array.
      41   */
      42  typedef struct {
      43  	/**
      44  	 * \brief       Filter ID
      45  	 *
      46  	 * Use constants whose name begin with `LZMA_FILTER_' to specify
      47  	 * different filters. In an array of lzma_filter structures, use
      48  	 * LZMA_VLI_UNKNOWN to indicate end of filters.
      49  	 *
      50  	 * \note        This is not an enum, because on some systems enums
      51  	 *              cannot be 64-bit.
      52  	 */
      53  	lzma_vli id;
      54  
      55  	/**
      56  	 * \brief       Pointer to filter-specific options structure
      57  	 *
      58  	 * If the filter doesn't need options, set this to NULL. If id is
      59  	 * set to LZMA_VLI_UNKNOWN, options is ignored, and thus
      60  	 * doesn't need be initialized.
      61  	 */
      62  	void *options;
      63  
      64  } lzma_filter;
      65  
      66  
      67  /**
      68   * \brief       Test if the given Filter ID is supported for encoding
      69   *
      70   * \param       id      Filter ID
      71   *
      72   * \return      lzma_bool:
      73   *              - true if the Filter ID is supported for encoding by this
      74   *                liblzma build.
      75    *             - false otherwise.
      76   */
      77  extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id)
      78  		lzma_nothrow lzma_attr_const;
      79  
      80  
      81  /**
      82   * \brief       Test if the given Filter ID is supported for decoding
      83   *
      84   * \param       id      Filter ID
      85   *
      86   * \return      lzma_bool:
      87   *              - true if the Filter ID is supported for decoding by this
      88   *                liblzma build.
      89   *              - false otherwise.
      90   */
      91  extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id)
      92  		lzma_nothrow lzma_attr_const;
      93  
      94  
      95  /**
      96   * \brief       Copy the filters array
      97   *
      98   * Copy the Filter IDs and filter-specific options from src to dest.
      99   * Up to LZMA_FILTERS_MAX filters are copied, plus the terminating
     100   * .id == LZMA_VLI_UNKNOWN. Thus, dest should have at least
     101   * LZMA_FILTERS_MAX + 1 elements space unless the caller knows that
     102   * src is smaller than that.
     103   *
     104   * Unless the filter-specific options is NULL, the Filter ID has to be
     105   * supported by liblzma, because liblzma needs to know the size of every
     106   * filter-specific options structure. The filter-specific options are not
     107   * validated. If options is NULL, any unsupported Filter IDs are copied
     108   * without returning an error.
     109   *
     110   * Old filter-specific options in dest are not freed, so dest doesn't
     111   * need to be initialized by the caller in any way.
     112   *
     113   * If an error occurs, memory possibly already allocated by this function
     114   * is always freed. liblzma versions older than 5.2.7 may modify the dest
     115   * array and leave its contents in an undefined state if an error occurs.
     116   * liblzma 5.2.7 and newer only modify the dest array when returning LZMA_OK.
     117   *
     118   * \param       src         Array of filters terminated with
     119   *                          .id == LZMA_VLI_UNKNOWN.
     120   * \param[out]  dest        Destination filter array
     121   * \param       allocator   lzma_allocator for custom allocator functions.
     122   *                          Set to NULL to use malloc() and free().
     123   *
     124   * \return      Possible lzma_ret values:
     125   *              - LZMA_OK
     126   *              - LZMA_MEM_ERROR
     127   *              - LZMA_OPTIONS_ERROR: Unsupported Filter ID and its options
     128   *                is not NULL.
     129   *              - LZMA_PROG_ERROR: src or dest is NULL.
     130   */
     131  extern LZMA_API(lzma_ret) lzma_filters_copy(
     132  		const lzma_filter *src, lzma_filter *dest,
     133  		const lzma_allocator *allocator)
     134  		lzma_nothrow lzma_attr_warn_unused_result;
     135  
     136  
     137  /**
     138   * \brief       Free the options in the array of lzma_filter structures
     139   *
     140   * This frees the filter chain options. The filters array itself is not freed.
     141   *
     142   * The filters array must have at most LZMA_FILTERS_MAX + 1 elements
     143   * including the terminating element which must have .id = LZMA_VLI_UNKNOWN.
     144   * For all elements before the terminating element:
     145   *   - options will be freed using the given lzma_allocator or,
     146   *     if allocator is NULL, using free().
     147   *   - options will be set to NULL.
     148   *   - id will be set to LZMA_VLI_UNKNOWN.
     149   *
     150   * If filters is NULL, this does nothing. Again, this never frees the
     151   * filters array itself.
     152   *
     153   * \param       filters     Array of filters terminated with
     154   *                          .id == LZMA_VLI_UNKNOWN.
     155   * \param       allocator   lzma_allocator for custom allocator functions.
     156   *                          Set to NULL to use malloc() and free().
     157   */
     158  extern LZMA_API(void) lzma_filters_free(
     159  		lzma_filter *filters, const lzma_allocator *allocator)
     160  		lzma_nothrow;
     161  
     162  
     163  /**
     164   * \brief       Calculate approximate memory requirements for raw encoder
     165   *
     166   * This function can be used to calculate the memory requirements for
     167   * Block and Stream encoders too because Block and Stream encoders don't
     168   * need significantly more memory than raw encoder.
     169   *
     170   * \param       filters     Array of filters terminated with
     171   *                          .id == LZMA_VLI_UNKNOWN.
     172   *
     173   * \return      Number of bytes of memory required for the given
     174   *              filter chain when encoding or UINT64_MAX on error.
     175   */
     176  extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters)
     177  		lzma_nothrow lzma_attr_pure;
     178  
     179  
     180  /**
     181   * \brief       Calculate approximate memory requirements for raw decoder
     182   *
     183   * This function can be used to calculate the memory requirements for
     184   * Block and Stream decoders too because Block and Stream decoders don't
     185   * need significantly more memory than raw decoder.
     186   *
     187   * \param       filters     Array of filters terminated with
     188   *                          .id == LZMA_VLI_UNKNOWN.
     189   *
     190   * \return      Number of bytes of memory required for the given
     191   *              filter chain when decoding or UINT64_MAX on error.
     192   */
     193  extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters)
     194  		lzma_nothrow lzma_attr_pure;
     195  
     196  
     197  /**
     198   * \brief       Initialize raw encoder
     199   *
     200   * This function may be useful when implementing custom file formats.
     201   *
     202   * The `action' with lzma_code() can be LZMA_RUN, LZMA_SYNC_FLUSH (if the
     203   * filter chain supports it), or LZMA_FINISH.
     204   *
     205   * \param       strm      Pointer to lzma_stream that is at least
     206   *                        initialized with LZMA_STREAM_INIT.
     207   * \param       filters   Array of filters terminated with
     208   *                        .id == LZMA_VLI_UNKNOWN.
     209   *
     210   * \return      Possible lzma_ret values:
     211   *              - LZMA_OK
     212   *              - LZMA_MEM_ERROR
     213   *              - LZMA_OPTIONS_ERROR
     214   *              - LZMA_PROG_ERROR
     215   */
     216  extern LZMA_API(lzma_ret) lzma_raw_encoder(
     217  		lzma_stream *strm, const lzma_filter *filters)
     218  		lzma_nothrow lzma_attr_warn_unused_result;
     219  
     220  
     221  /**
     222   * \brief       Initialize raw decoder
     223   *
     224   * The initialization of raw decoder goes similarly to raw encoder.
     225   *
     226   * The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using
     227   * LZMA_FINISH is not required, it is supported just for convenience.
     228   *
     229   * \param       strm      Pointer to lzma_stream that is at least
     230   *                        initialized with LZMA_STREAM_INIT.
     231   * \param       filters   Array of filters terminated with
     232   *                        .id == LZMA_VLI_UNKNOWN.
     233   *
     234   * \return      Possible lzma_ret values:
     235   *              - LZMA_OK
     236   *              - LZMA_MEM_ERROR
     237   *              - LZMA_OPTIONS_ERROR
     238   *              - LZMA_PROG_ERROR
     239   */
     240  extern LZMA_API(lzma_ret) lzma_raw_decoder(
     241  		lzma_stream *strm, const lzma_filter *filters)
     242  		lzma_nothrow lzma_attr_warn_unused_result;
     243  
     244  
     245  /**
     246   * \brief       Update the filter chain in the encoder
     247   *
     248   * This function may be called after lzma_code() has returned LZMA_STREAM_END
     249   * when LZMA_FULL_BARRIER, LZMA_FULL_FLUSH, or LZMA_SYNC_FLUSH was used:
     250   *
     251   *  - After LZMA_FULL_BARRIER or LZMA_FULL_FLUSH: Single-threaded .xz Stream
     252   *    encoder (lzma_stream_encoder()) and (since liblzma 5.4.0) multi-threaded
     253   *    Stream encoder (lzma_stream_encoder_mt()) allow setting a new filter
     254   *    chain to be used for the next Block(s).
     255   *
     256   *  - After LZMA_SYNC_FLUSH: Raw encoder (lzma_raw_encoder()),
     257   *    Block encoder (lzma_block_encoder()), and single-threaded .xz Stream
     258   *    encoder (lzma_stream_encoder()) allow changing certain filter-specific
     259   *    options in the middle of encoding. The actual filters in the chain
     260   *    (Filter IDs) must not be changed! Currently only the lc, lp, and pb
     261   *    options of LZMA2 (not LZMA1) can be changed this way.
     262   *
     263   *  - In the future some filters might allow changing some of their options
     264   *    without any barrier or flushing but currently such filters don't exist.
     265   *
     266   * This function may also be called when no data has been compressed yet
     267   * although this is rarely useful. In that case, this function will behave
     268   * as if LZMA_FULL_FLUSH (Stream encoders) or LZMA_SYNC_FLUSH (Raw or Block
     269   * encoder) had been used right before calling this function.
     270   *
     271   * \param       strm      Pointer to lzma_stream that is at least
     272   *                        initialized with LZMA_STREAM_INIT.
     273   * \param       filters   Array of filters terminated with
     274   *                        .id == LZMA_VLI_UNKNOWN.
     275   *
     276   * \return      Possible lzma_ret values:
     277   *              - LZMA_OK
     278   *              - LZMA_MEM_ERROR
     279   *              - LZMA_MEMLIMIT_ERROR
     280   *              - LZMA_OPTIONS_ERROR
     281   *              - LZMA_PROG_ERROR
     282   */
     283  extern LZMA_API(lzma_ret) lzma_filters_update(
     284  		lzma_stream *strm, const lzma_filter *filters) lzma_nothrow;
     285  
     286  
     287  /**
     288   * \brief       Single-call raw encoder
     289   *
     290   * \note        There is no function to calculate how big output buffer
     291   *              would surely be big enough. (lzma_stream_buffer_bound()
     292   *              works only for lzma_stream_buffer_encode(); raw encoder
     293   *              won't necessarily meet that bound.)
     294   *
     295   * \param       filters     Array of filters terminated with
     296   *                          .id == LZMA_VLI_UNKNOWN.
     297   * \param       allocator   lzma_allocator for custom allocator functions.
     298   *                          Set to NULL to use malloc() and free().
     299   * \param       in          Beginning of the input buffer
     300   * \param       in_size     Size of the input buffer
     301   * \param[out]  out         Beginning of the output buffer
     302   * \param[out]  out_pos     The next byte will be written to out[*out_pos].
     303   *                          *out_pos is updated only if encoding succeeds.
     304   * \param       out_size    Size of the out buffer; the first byte into
     305   *                          which no data is written to is out[out_size].
     306   *
     307   * \return      Possible lzma_ret values:
     308   *              - LZMA_OK: Encoding was successful.
     309   *              - LZMA_BUF_ERROR: Not enough output buffer space.
     310   *              - LZMA_OPTIONS_ERROR
     311   *              - LZMA_MEM_ERROR
     312   *              - LZMA_DATA_ERROR
     313   *              - LZMA_PROG_ERROR
     314   */
     315  extern LZMA_API(lzma_ret) lzma_raw_buffer_encode(
     316  		const lzma_filter *filters, const lzma_allocator *allocator,
     317  		const uint8_t *in, size_t in_size, uint8_t *out,
     318  		size_t *out_pos, size_t out_size) lzma_nothrow;
     319  
     320  
     321  /**
     322   * \brief       Single-call raw decoder
     323   *
     324   * \param       filters     Array of filters terminated with
     325   *                          .id == LZMA_VLI_UNKNOWN.
     326   * \param       allocator   lzma_allocator for custom allocator functions.
     327   *                          Set to NULL to use malloc() and free().
     328   * \param       in          Beginning of the input buffer
     329   * \param       in_pos      The next byte will be read from in[*in_pos].
     330   *                          *in_pos is updated only if decoding succeeds.
     331   * \param       in_size     Size of the input buffer; the first byte that
     332   *                          won't be read is in[in_size].
     333   * \param[out]  out         Beginning of the output buffer
     334   * \param[out]  out_pos     The next byte will be written to out[*out_pos].
     335   *                          *out_pos is updated only if encoding succeeds.
     336   * \param       out_size    Size of the out buffer; the first byte into
     337   *                          which no data is written to is out[out_size].
     338   *
     339   * \return      Possible lzma_ret values:
     340   *              - LZMA_OK: Decoding was successful.
     341   *              - LZMA_BUF_ERROR: Not enough output buffer space.
     342   *              - LZMA_OPTIONS_ERROR
     343   *              - LZMA_MEM_ERROR
     344   *              - LZMA_DATA_ERROR
     345   *              - LZMA_PROG_ERROR
     346   */
     347  extern LZMA_API(lzma_ret) lzma_raw_buffer_decode(
     348  		const lzma_filter *filters, const lzma_allocator *allocator,
     349  		const uint8_t *in, size_t *in_pos, size_t in_size,
     350  		uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow;
     351  
     352  
     353  /**
     354   * \brief       Get the size of the Filter Properties field
     355   *
     356   * This function may be useful when implementing custom file formats
     357   * using the raw encoder and decoder.
     358   *
     359   * \note        This function validates the Filter ID, but does not
     360   *              necessarily validate the options. Thus, it is possible
     361   *              that this returns LZMA_OK while the following call to
     362   *              lzma_properties_encode() returns LZMA_OPTIONS_ERROR.
     363   *
     364   * \param[out]  size    Pointer to uint32_t to hold the size of the properties
     365   * \param       filter  Filter ID and options (the size of the properties may
     366   *                      vary depending on the options)
     367   *
     368   * \return      Possible lzma_ret values:
     369   *              - LZMA_OK
     370   *              - LZMA_OPTIONS_ERROR
     371   *              - LZMA_PROG_ERROR
     372   */
     373  extern LZMA_API(lzma_ret) lzma_properties_size(
     374  		uint32_t *size, const lzma_filter *filter) lzma_nothrow;
     375  
     376  
     377  /**
     378   * \brief       Encode the Filter Properties field
     379   *
     380   * \note        Even this function won't validate more options than actually
     381   *              necessary. Thus, it is possible that encoding the properties
     382   *              succeeds but using the same options to initialize the encoder
     383   *              will fail.
     384   *
     385   * \note        If lzma_properties_size() indicated that the size
     386   *              of the Filter Properties field is zero, calling
     387   *              lzma_properties_encode() is not required, but it
     388   *              won't do any harm either.
     389   *
     390   * \param       filter  Filter ID and options
     391   * \param[out]  props   Buffer to hold the encoded options. The size of
     392   *                      the buffer must have been already determined with
     393   *                      lzma_properties_size().
     394   *
     395   * \return      Possible lzma_ret values:
     396   *              - LZMA_OK
     397   *              - LZMA_PROG_ERROR
     398   */
     399  extern LZMA_API(lzma_ret) lzma_properties_encode(
     400  		const lzma_filter *filter, uint8_t *props) lzma_nothrow;
     401  
     402  
     403  /**
     404   * \brief       Decode the Filter Properties field
     405   *
     406   * \param       filter      filter->id must have been set to the correct
     407   *                          Filter ID. filter->options doesn't need to be
     408   *                          initialized (it's not freed by this function). The
     409   *                          decoded options will be stored in filter->options;
     410   *                          it's application's responsibility to free it when
     411   *                          appropriate. filter->options is set to NULL if
     412   *                          there are no properties or if an error occurs.
     413   * \param       allocator   lzma_allocator for custom allocator functions.
     414   *                          Set to NULL to use malloc() and free().
     415   *                          and in case of an error, also free().
     416   * \param       props       Input buffer containing the properties.
     417   * \param       props_size  Size of the properties. This must be the exact
     418   *                          size; giving too much or too little input will
     419   *                          return LZMA_OPTIONS_ERROR.
     420   *
     421   * \return      Possible lzma_ret values:
     422   *              - LZMA_OK
     423   *              - LZMA_OPTIONS_ERROR
     424   *              - LZMA_MEM_ERROR
     425   */
     426  extern LZMA_API(lzma_ret) lzma_properties_decode(
     427  		lzma_filter *filter, const lzma_allocator *allocator,
     428  		const uint8_t *props, size_t props_size) lzma_nothrow;
     429  
     430  
     431  /**
     432   * \brief       Calculate encoded size of a Filter Flags field
     433   *
     434   * Knowing the size of Filter Flags is useful to know when allocating
     435   * memory to hold the encoded Filter Flags.
     436   *
     437   * \note        If you need to calculate size of List of Filter Flags,
     438   *              you need to loop over every lzma_filter entry.
     439   *
     440   * \param[out]  size    Pointer to integer to hold the calculated size
     441   * \param       filter  Filter ID and associated options whose encoded
     442   *                      size is to be calculated
     443   *
     444   * \return      Possible lzma_ret values:
     445   *              - LZMA_OK: *size set successfully. Note that this doesn't
     446   *                guarantee that filter->options is valid, thus
     447   *                lzma_filter_flags_encode() may still fail.
     448   *              - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options.
     449   *              - LZMA_PROG_ERROR: Invalid options
     450   */
     451  extern LZMA_API(lzma_ret) lzma_filter_flags_size(
     452  		uint32_t *size, const lzma_filter *filter)
     453  		lzma_nothrow lzma_attr_warn_unused_result;
     454  
     455  
     456  /**
     457   * \brief       Encode Filter Flags into given buffer
     458   *
     459   * In contrast to some functions, this doesn't allocate the needed buffer.
     460   * This is due to how this function is used internally by liblzma.
     461   *
     462   * \param       filter      Filter ID and options to be encoded
     463   * \param[out]  out         Beginning of the output buffer
     464   * \param[out]  out_pos     out[*out_pos] is the next write position. This
     465   *                          is updated by the encoder.
     466   * \param       out_size    out[out_size] is the first byte to not write.
     467   *
     468   * \return      Possible lzma_ret values:
     469   *              - LZMA_OK: Encoding was successful.
     470   *              - LZMA_OPTIONS_ERROR: Invalid or unsupported options.
     471   *              - LZMA_PROG_ERROR: Invalid options or not enough output
     472   *                buffer space (you should have checked it with
     473   *                lzma_filter_flags_size()).
     474   */
     475  extern LZMA_API(lzma_ret) lzma_filter_flags_encode(const lzma_filter *filter,
     476  		uint8_t *out, size_t *out_pos, size_t out_size)
     477  		lzma_nothrow lzma_attr_warn_unused_result;
     478  
     479  
     480  /**
     481   * \brief       Decode Filter Flags from given buffer
     482   *
     483   * The decoded result is stored into *filter. The old value of
     484   * filter->options is not free()d. If anything other than LZMA_OK
     485   * is returned, filter->options is set to NULL.
     486   *
     487   * \param[out]  filter      Destination filter. The decoded Filter ID will
     488   *                          be stored in filter->id. If options are needed
     489   *                          they will be allocated and the pointer will be
     490   *                          stored in filter->options.
     491   * \param       allocator   lzma_allocator for custom allocator functions.
     492   *                          Set to NULL to use malloc() and free().
     493   * \param       in          Beginning of the input buffer
     494   * \param[out]  in_pos      The next byte will be read from in[*in_pos].
     495   *                          *in_pos is updated only if decoding succeeds.
     496   * \param       in_size     Size of the input buffer; the first byte that
     497   *                          won't be read is in[in_size].
     498   *
     499   * \return      Possible lzma_ret values:
     500   *              - LZMA_OK
     501   *              - LZMA_OPTIONS_ERROR
     502   *              - LZMA_MEM_ERROR
     503   *              - LZMA_DATA_ERROR
     504   *              - LZMA_PROG_ERROR
     505   */
     506  extern LZMA_API(lzma_ret) lzma_filter_flags_decode(
     507  		lzma_filter *filter, const lzma_allocator *allocator,
     508  		const uint8_t *in, size_t *in_pos, size_t in_size)
     509  		lzma_nothrow lzma_attr_warn_unused_result;
     510  
     511  
     512  /***********
     513   * Strings *
     514   ***********/
     515  
     516  /**
     517   * \brief       Allow or show all filters
     518   *
     519   * By default only the filters supported in the .xz format are accept by
     520   * lzma_str_to_filters() or shown by lzma_str_list_filters().
     521   */
     522  #define LZMA_STR_ALL_FILTERS    UINT32_C(0x01)
     523  
     524  
     525  /**
     526   * \brief       Do not validate the filter chain in lzma_str_to_filters()
     527   *
     528   * By default lzma_str_to_filters() can return an error if the filter chain
     529   * as a whole isn't usable in the .xz format or in the raw encoder or decoder.
     530   * With this flag, this validation is skipped. This flag doesn't affect the
     531   * handling of the individual filter options. To allow non-.xz filters also
     532   * LZMA_STR_ALL_FILTERS is needed.
     533   */
     534  #define LZMA_STR_NO_VALIDATION  UINT32_C(0x02)
     535  
     536  
     537  /**
     538   * \brief       Stringify encoder options
     539   *
     540   * Show the filter-specific options that the encoder will use.
     541   * This may be useful for verbose diagnostic messages.
     542   *
     543   * Note that if options were decoded from .xz headers then the encoder options
     544   * may be undefined. This flag shouldn't be used in such a situation.
     545   */
     546  #define LZMA_STR_ENCODER        UINT32_C(0x10)
     547  
     548  
     549  /**
     550   * \brief       Stringify decoder options
     551   *
     552   * Show the filter-specific options that the decoder will use.
     553   * This may be useful for showing what filter options were decoded
     554   * from file headers.
     555   */
     556  #define LZMA_STR_DECODER        UINT32_C(0x20)
     557  
     558  
     559  /**
     560   * \brief       Produce xz-compatible getopt_long() syntax
     561   *
     562   * That is, "delta:dist=2 lzma2:dict=4MiB,pb=1,lp=1" becomes
     563   * "--delta=dist=2 --lzma2=dict=4MiB,pb=1,lp=1".
     564   *
     565   * This syntax is compatible with xz 5.0.0 as long as the filters and
     566   * their options are supported too.
     567   */
     568  #define LZMA_STR_GETOPT_LONG    UINT32_C(0x40)
     569  
     570  
     571  /**
     572   * \brief       Use two dashes "--" instead of a space to separate filters
     573   *
     574   * That is, "delta:dist=2 lzma2:pb=1,lp=1" becomes
     575   * "delta:dist=2--lzma2:pb=1,lp=1". This looks slightly odd but this
     576   * kind of strings should be usable on the command line without quoting.
     577   * However, it is possible that future versions with new filter options
     578   * might produce strings that require shell quoting anyway as the exact
     579   * set of possible characters isn't frozen for now.
     580   *
     581   * It is guaranteed that the single quote (') will never be used in
     582   * filter chain strings (even if LZMA_STR_NO_SPACES isn't used).
     583   */
     584  #define LZMA_STR_NO_SPACES      UINT32_C(0x80)
     585  
     586  
     587  /**
     588   * \brief       Convert a string to a filter chain
     589   *
     590   * This tries to make it easier to write applications that allow users
     591   * to set custom compression options. This only handles the filter
     592   * configuration (including presets) but not the number of threads,
     593   * block size, check type, or memory limits.
     594   *
     595   * The input string can be either a preset or a filter chain. Presets
     596   * begin with a digit 0-9 and may be followed by zero or more flags
     597   * which are lower-case letters. Currently only "e" is supported, matching
     598   * LZMA_PRESET_EXTREME. For partial xz command line syntax compatibility,
     599   * a preset string may start with a single dash "-".
     600   *
     601   * A filter chain consists of one or more "filtername:opt1=value1,opt2=value2"
     602   * strings separated by one or more spaces. Leading and trailing spaces are
     603   * ignored. All names and values must be lower-case. Extra commas in the
     604   * option list are ignored. The order of filters is significant: when
     605   * encoding, the uncompressed input data goes to the leftmost filter first.
     606   * Normally "lzma2" is the last filter in the chain.
     607   *
     608   * If one wishes to avoid spaces, for example, to avoid shell quoting,
     609   * it is possible to use two dashes "--" instead of spaces to separate
     610   * the filters.
     611   *
     612   * For xz command line compatibility, each filter may be prefixed with
     613   * two dashes "--" and the colon ":" separating the filter name from
     614   * the options may be replaced with an equals sign "=".
     615   *
     616   * By default, only filters that can be used in the .xz format are accepted.
     617   * To allow all filters (LZMA1) use the flag LZMA_STR_ALL_FILTERS.
     618   *
     619   * By default, very basic validation is done for the filter chain as a whole,
     620   * for example, that LZMA2 is only used as the last filter in the chain.
     621   * The validation isn't perfect though and it's possible that this function
     622   * succeeds but using the filter chain for encoding or decoding will still
     623   * result in LZMA_OPTIONS_ERROR. To disable this validation, use the flag
     624   * LZMA_STR_NO_VALIDATION.
     625   *
     626   * The available filter names and their options are available via
     627   * lzma_str_list_filters(). See the xz man page for the description
     628   * of filter names and options.
     629   *
     630   * For command line applications, below is an example how an error message
     631   * can be displayed. Note the use of an empty string for the field width.
     632   * If "^" was used there it would create an off-by-one error except at
     633   * the very beginning of the line.
     634   *
     635   * \code{.c}
     636   * const char *str = ...; // From user
     637   * lzma_filter filters[LZMA_FILTERS_MAX + 1];
     638   * int pos;
     639   * const char *msg = lzma_str_to_filters(str, &pos, filters, 0, NULL);
     640   * if (msg != NULL) {
     641   *     printf("%s: Error in XZ compression options:\n", argv[0]);
     642   *     printf("%s: %s\n", argv[0], str);
     643   *     printf("%s: %*s^\n", argv[0], errpos, "");
     644   *     printf("%s: %s\n", argv[0], msg);
     645   * }
     646   * \endcode
     647   *
     648   * \param       str         User-supplied string describing a preset or
     649   *                          a filter chain. If a default value is needed and
     650   *                          you don't know what would be good, use "6" since
     651   *                          that is the default preset in xz too.
     652   * \param[out]  error_pos   If this isn't NULL, this value will be set on
     653   *                          both success and on all errors. This tells the
     654   *                          location of the error in the string. This is
     655   *                          an int to make it straightforward to use this
     656   *                          as printf() field width. The value is guaranteed
     657   *                          to be in the range [0, INT_MAX] even if strlen(str)
     658   *                          somehow was greater than INT_MAX.
     659   * \param[out]  filters     An array of lzma_filter structures. There must
     660   *                          be LZMA_FILTERS_MAX + 1 (that is, five) elements
     661   *                          in the array. The old contents are ignored so it
     662   *                          doesn't need to be initialized. This array is
     663   *                          modified only if this function returns NULL.
     664   *                          Once the allocated filter options are no longer
     665   *                          needed, lzma_filters_free() can be used to free the
     666   *                          options (it doesn't free the filters array itself).
     667   * \param       flags       Bitwise-or of zero or more of the flags
     668   *                          LZMA_STR_ALL_FILTERS and LZMA_STR_NO_VALIDATION.
     669   * \param       allocator   lzma_allocator for custom allocator functions.
     670   *                          Set to NULL to use malloc() and free().
     671   *
     672   * \return      On success, NULL is returned. On error, a statically-allocated
     673   *              error message is returned which together with the error_pos
     674   *              should give some idea what is wrong.
     675   */
     676  extern LZMA_API(const char *) lzma_str_to_filters(
     677  		const char *str, int *error_pos, lzma_filter *filters,
     678  		uint32_t flags, const lzma_allocator *allocator)
     679  		lzma_nothrow lzma_attr_warn_unused_result;
     680  
     681  
     682  /**
     683   * \brief       Convert a filter chain to a string
     684   *
     685   * Use cases:
     686   *
     687   *   - Verbose output showing the full encoder options to the user
     688   *     (use LZMA_STR_ENCODER in flags)
     689   *
     690   *   - Showing the filters and options that are required to decode a file
     691   *     (use LZMA_STR_DECODER in flags)
     692   *
     693   *   - Showing the filter names without any options in informational messages
     694   *     where the technical details aren't important (no flags). In this case
     695   *     the .options in the filters array are ignored and may be NULL even if
     696   *     a filter has a mandatory options structure.
     697   *
     698   * Note that even if the filter chain was specified using a preset,
     699   * the resulting filter chain isn't reversed to a preset. So if you
     700   * specify "6" to lzma_str_to_filters() then lzma_str_from_filters()
     701   * will produce a string containing "lzma2".
     702   *
     703   * \param[out]  str         On success *str will be set to point to an
     704   *                          allocated string describing the given filter
     705   *                          chain. Old value is ignored. On error *str is
     706   *                          always set to NULL.
     707   * \param       filters     Array of filters terminated with
     708   *                          .id == LZMA_VLI_UNKNOWN.
     709   * \param       flags       Bitwise-or of zero or more of the flags
     710   *                          LZMA_STR_ENCODER, LZMA_STR_DECODER,
     711   *                          LZMA_STR_GETOPT_LONG, and LZMA_STR_NO_SPACES.
     712   * \param       allocator   lzma_allocator for custom allocator functions.
     713   *                          Set to NULL to use malloc() and free().
     714   *
     715   * \return      Possible lzma_ret values:
     716   *              - LZMA_OK
     717   *              - LZMA_OPTIONS_ERROR: Empty filter chain
     718   *                (filters[0].id == LZMA_VLI_UNKNOWN) or the filter chain
     719   *                includes a Filter ID that is not supported by this function.
     720   *              - LZMA_MEM_ERROR
     721   *              - LZMA_PROG_ERROR
     722   */
     723  extern LZMA_API(lzma_ret) lzma_str_from_filters(
     724  		char **str, const lzma_filter *filters, uint32_t flags,
     725  		const lzma_allocator *allocator)
     726  		lzma_nothrow lzma_attr_warn_unused_result;
     727  
     728  
     729  /**
     730   * \brief       List available filters and/or their options (for help message)
     731   *
     732   * If a filter_id is given then only one line is created which contains the
     733   * filter name. If LZMA_STR_ENCODER or LZMA_STR_DECODER is used then the
     734   * options read by the encoder or decoder are printed on the same line.
     735   *
     736   * If filter_id is LZMA_VLI_UNKNOWN then all supported .xz-compatible filters
     737   * are listed:
     738   *
     739   *   - If neither LZMA_STR_ENCODER nor LZMA_STR_DECODER is used then
     740   *     the supported filter names are listed on a single line separated
     741   *     by spaces.
     742   *
     743   *   - If LZMA_STR_ENCODER or LZMA_STR_DECODER is used then filters and
     744   *     the supported options are listed one filter per line. There won't
     745   *     be a newline after the last filter.
     746   *
     747   *   - If LZMA_STR_ALL_FILTERS is used then the list will include also
     748   *     those filters that cannot be used in the .xz format (LZMA1).
     749   *
     750   * \param       str         On success *str will be set to point to an
     751   *                          allocated string listing the filters and options.
     752   *                          Old value is ignored. On error *str is always set
     753   *                          to NULL.
     754   * \param       filter_id   Filter ID or LZMA_VLI_UNKNOWN.
     755   * \param       flags       Bitwise-or of zero or more of the flags
     756   *                          LZMA_STR_ALL_FILTERS, LZMA_STR_ENCODER,
     757   *                          LZMA_STR_DECODER, and LZMA_STR_GETOPT_LONG.
     758   * \param       allocator   lzma_allocator for custom allocator functions.
     759   *                          Set to NULL to use malloc() and free().
     760   *
     761   * \return      Possible lzma_ret values:
     762   *              - LZMA_OK
     763   *              - LZMA_OPTIONS_ERROR: Unsupported filter_id or flags
     764   *              - LZMA_MEM_ERROR
     765   *              - LZMA_PROG_ERROR
     766   */
     767  extern LZMA_API(lzma_ret) lzma_str_list_filters(
     768  		char **str, lzma_vli filter_id, uint32_t flags,
     769  		const lzma_allocator *allocator)
     770  		lzma_nothrow lzma_attr_warn_unused_result;