2
* Copyright (c) 2003-2007 Tim Kientzle
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
14
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
* $FreeBSD: head/lib/libarchive/archive_write_private.h 201155 2009-12-29 05:20:12Z kientzle $
28
#ifndef __LIBARCHIVE_BUILD
29
#error This header is only to be used internally to libarchive.
32
#ifndef ARCHIVE_WRITE_PRIVATE_H_INCLUDED
33
#define ARCHIVE_WRITE_PRIVATE_H_INCLUDED
36
#include "archive_string.h"
37
#include "archive_private.h"
39
struct archive_write {
40
struct archive archive;
42
/* Dev/ino of the archive being written. */
44
int64_t skip_file_ino;
46
/* Utility: Pointer to a block of nulls. */
47
const unsigned char *nulls;
50
/* Callbacks to open/read/write/close archive stream. */
51
archive_open_callback *client_opener;
52
archive_write_callback *client_writer;
53
archive_close_callback *client_closer;
57
* Blocking information. Note that bytes_in_last_block is
58
* misleadingly named; I should find a better name. These
59
* control the final output from all compressors, including
63
int bytes_in_last_block;
66
* These control whether data within a gzip/bzip2 compressed
67
* stream gets padded or not. If pad_uncompressed is set,
68
* the data will be padded to a full block before being
69
* compressed. The pad_uncompressed_byte determines the value
70
* that will be used for padding. Note that these have no
71
* effect on compression "none."
74
int pad_uncompressed_byte; /* TODO: Support this. */
77
* On write, the client just invokes an archive_write_set function
78
* which sets up the data here directly.
83
int (*init)(struct archive_write *);
84
int (*options)(struct archive_write *,
85
const char *key, const char *value);
86
int (*finish)(struct archive_write *);
87
int (*write)(struct archive_write *, const void *, size_t);
91
* Pointers to format-specific functions for writing. They're
92
* initialized by archive_write_set_format_XXX() calls.
95
const char *format_name;
96
int (*format_init)(struct archive_write *);
97
int (*format_options)(struct archive_write *,
98
const char *key, const char *value);
99
int (*format_finish)(struct archive_write *);
100
int (*format_destroy)(struct archive_write *);
101
int (*format_finish_entry)(struct archive_write *);
102
int (*format_write_header)(struct archive_write *,
103
struct archive_entry *);
104
ssize_t (*format_write_data)(struct archive_write *,
105
const void *buff, size_t);
109
* Utility function to format a USTAR header into a buffer. If
110
* "strict" is set, this tries to create the absolutely most portable
111
* version of a ustar header. If "strict" is set to 0, then it will
112
* relax certain requirements.
114
* Generally, format-specific declarations don't belong in this
115
* header; this is a rare example of a function that is shared by
116
* two very similar formats (ustar and pax).
119
__archive_write_format_header_ustar(struct archive_write *, char buff[512],
120
struct archive_entry *, int tartype, int strict);