mirror of
https://github.com/cmclark00/retro-imager.git
synced 2025-05-19 08:25:21 +01:00
209 lines
6.4 KiB
Text
209 lines
6.4 KiB
Text
|
ARCHIVE_WRITE_OPEN(3) manual page
|
||
|
== NAME ==
|
||
|
'''archive_write_open''',
|
||
|
'''archive_write_open_fd''',
|
||
|
'''archive_write_open_FILE''',
|
||
|
'''archive_write_open_filename''',
|
||
|
'''archive_write_open_memory'''
|
||
|
- functions for creating archives
|
||
|
== LIBRARY ==
|
||
|
Streaming Archive Library (libarchive, -larchive)
|
||
|
== SYNOPSIS ==
|
||
|
'''<nowiki>#include <archive.h></nowiki>'''
|
||
|
<br>
|
||
|
''int''
|
||
|
<br>
|
||
|
'''archive_write_open'''(''struct archive *'', ''void *client_data'', ''archive_open_callback *'', ''archive_write_callback *'', ''archive_close_callback *'');
|
||
|
<br>
|
||
|
''int''
|
||
|
<br>
|
||
|
'''archive_write_open_fd'''(''struct archive *'', ''int fd'');
|
||
|
<br>
|
||
|
''int''
|
||
|
<br>
|
||
|
'''archive_write_open_FILE'''(''struct archive *'', ''FILE *file'');
|
||
|
<br>
|
||
|
''int''
|
||
|
<br>
|
||
|
'''archive_write_open_filename'''(''struct archive *'', ''const char *filename'');
|
||
|
<br>
|
||
|
''int''
|
||
|
<br>
|
||
|
'''archive_write_open_memory'''(''struct archive *'', ''void *buffer'', ''size_t bufferSize'', ''size_t *outUsed'');
|
||
|
== DESCRIPTION ==
|
||
|
<dl>
|
||
|
<dt>'''archive_write_open'''()</dt><dd>
|
||
|
Freeze the settings, open the archive, and prepare for writing entries.
|
||
|
This is the most generic form of this function, which accepts
|
||
|
pointers to three callback functions which will be invoked by
|
||
|
the compression layer to write the constructed archive.
|
||
|
This does not alter the default archive padding.
|
||
|
</dd><dt>'''archive_write_open_fd'''()</dt><dd>
|
||
|
A convenience form of
|
||
|
'''archive_write_open'''()
|
||
|
that accepts a file descriptor.
|
||
|
The
|
||
|
'''archive_write_open_fd'''()
|
||
|
function is safe for use with tape drives or other
|
||
|
block-oriented devices.
|
||
|
</dd><dt>'''archive_write_open_FILE'''()</dt><dd>
|
||
|
A convenience form of
|
||
|
'''archive_write_open'''()
|
||
|
that accepts a
|
||
|
''FILE *''
|
||
|
pointer.
|
||
|
Note that
|
||
|
'''archive_write_open_FILE'''()
|
||
|
is not safe for writing to tape drives or other devices
|
||
|
that require correct blocking.
|
||
|
</dd><dt>'''archive_write_open_file'''()</dt><dd>
|
||
|
A deprecated synonym for
|
||
|
'''archive_write_open_filename'''().
|
||
|
</dd><dt>'''archive_write_open_filename'''()</dt><dd>
|
||
|
A convenience form of
|
||
|
'''archive_write_open'''()
|
||
|
that accepts a filename.
|
||
|
A NULL argument indicates that the output should be written to standard output;
|
||
|
an argument of
|
||
|
"-"
|
||
|
will open a file with that name.
|
||
|
If you have not invoked
|
||
|
'''archive_write_set_bytes_in_last_block'''(),
|
||
|
then
|
||
|
'''archive_write_open_filename'''()
|
||
|
will adjust the last-block padding depending on the file:
|
||
|
it will enable padding when writing to standard output or
|
||
|
to a character or block device node, it will disable padding otherwise.
|
||
|
You can override this by manually invoking
|
||
|
'''archive_write_set_bytes_in_last_block'''()
|
||
|
before calling
|
||
|
'''archive_write_open'''().
|
||
|
The
|
||
|
'''archive_write_open_filename'''()
|
||
|
function is safe for use with tape drives or other
|
||
|
block-oriented devices.
|
||
|
</dd><dt>'''archive_write_open_memory'''()</dt><dd>
|
||
|
A convenience form of
|
||
|
'''archive_write_open'''()
|
||
|
that accepts a pointer to a block of memory that will receive
|
||
|
the archive.
|
||
|
The final
|
||
|
''size_t *''
|
||
|
argument points to a variable that will be updated
|
||
|
after each write to reflect how much of the buffer
|
||
|
is currently in use.
|
||
|
You should be careful to ensure that this variable
|
||
|
remains allocated until after the archive is
|
||
|
closed.
|
||
|
This function will disable padding unless you
|
||
|
have specifically set the block size.
|
||
|
</dd></dl>
|
||
|
More information about the
|
||
|
''struct'' archive
|
||
|
object and the overall design of the library can be found in the
|
||
|
[[ManPageibarchive3]]
|
||
|
overview.
|
||
|
|
||
|
Note that the convenience forms above vary in how
|
||
|
they block the output.
|
||
|
See
|
||
|
[[ManPagerchiveritelocksize3]]
|
||
|
if you need to control the block size used for writes
|
||
|
or the end-of-file padding behavior.
|
||
|
== CLIENT CALLBACKS ==
|
||
|
To use this library, you will need to define and register
|
||
|
callback functions that will be invoked to write data to the
|
||
|
resulting archive.
|
||
|
These functions are registered by calling
|
||
|
'''archive_write_open'''():
|
||
|
<ul>
|
||
|
<li>
|
||
|
''typedef int''
|
||
|
'''archive_open_callback'''(''struct archive *'', ''void *client_data'')
|
||
|
</li></ul>
|
||
|
|
||
|
The open callback is invoked by
|
||
|
'''archive_write_open'''().
|
||
|
It should return
|
||
|
'''ARCHIVE_OK'''
|
||
|
if the underlying file or data source is successfully
|
||
|
opened.
|
||
|
If the open fails, it should call
|
||
|
'''archive_set_error'''()
|
||
|
to register an error code and message and return
|
||
|
'''ARCHIVE_FATAL'''.
|
||
|
<ul>
|
||
|
<li>
|
||
|
''typedef la_ssize_t''
|
||
|
'''archive_write_callback'''(''struct archive *'', ''void *client_data'', ''const void *buffer'', ''size_t length'')
|
||
|
</li></ul>
|
||
|
|
||
|
The write callback is invoked whenever the library
|
||
|
needs to write raw bytes to the archive.
|
||
|
For correct blocking, each call to the write callback function
|
||
|
should translate into a single
|
||
|
[[write(2)|http://www.freebsd.org/cgi/man.cgi?query=write&sektion=2]]
|
||
|
system call.
|
||
|
This is especially critical when writing archives to tape drives.
|
||
|
On success, the write callback should return the
|
||
|
number of bytes actually written.
|
||
|
On error, the callback should invoke
|
||
|
'''archive_set_error'''()
|
||
|
to register an error code and message and return -1.
|
||
|
<ul>
|
||
|
<li>
|
||
|
''typedef int''
|
||
|
'''archive_close_callback'''(''struct archive *'', ''void *client_data'')
|
||
|
</li></ul>
|
||
|
|
||
|
The close callback is invoked by archive_close when
|
||
|
the archive processing is complete.
|
||
|
The callback should return
|
||
|
'''ARCHIVE_OK'''
|
||
|
on success.
|
||
|
On failure, the callback should invoke
|
||
|
'''archive_set_error'''()
|
||
|
to register an error code and message and
|
||
|
return
|
||
|
'''ARCHIVE_FATAL'''.
|
||
|
|
||
|
Note that if the client-provided write callback function
|
||
|
returns a non-zero value, that error will be propagated back to the caller
|
||
|
through whatever API function resulted in that call, which
|
||
|
may include
|
||
|
'''archive_write_header'''(),
|
||
|
'''archive_write_data'''(),
|
||
|
'''archive_write_close'''(),
|
||
|
'''archive_write_finish'''(),
|
||
|
or
|
||
|
'''archive_write_free'''().
|
||
|
The client callback can call
|
||
|
'''archive_set_error'''()
|
||
|
to provide values that can then be retrieved by
|
||
|
'''archive_errno'''()
|
||
|
and
|
||
|
'''archive_error_string'''().
|
||
|
== RETURN VALUES ==
|
||
|
These functions return
|
||
|
'''ARCHIVE_OK'''
|
||
|
on success, or
|
||
|
'''ARCHIVE_FATAL'''.
|
||
|
== ERRORS ==
|
||
|
Detailed error codes and textual descriptions are available from the
|
||
|
'''archive_errno'''()
|
||
|
and
|
||
|
'''archive_error_string'''()
|
||
|
functions.
|
||
|
== SEE ALSO ==
|
||
|
[[ManPageBsdtar1]],
|
||
|
[[ManPagerchiverite3]],
|
||
|
[[ManPagerchiveritelocksize3]],
|
||
|
[[ManPagerchiveriteilter3]],
|
||
|
[[ManPagerchiveriteormat3]],
|
||
|
[[ManPagerchiveriteew3]],
|
||
|
[[ManPagerchiveriteetptions3]],
|
||
|
[[ManPageibarchive3]],
|
||
|
[[ManPageCpio5]],
|
||
|
[[ManPageMtree5]],
|
||
|
[[ManPageTar5]]
|