Move archive_read_data_into_buffer into archive_read.c, simplify its

implementation, and mark it as deprecated.  It will be removed entirely
in libarchive 3.0 (in FreeBSD 8.0?) but there's no reason for anyone to
use it instead of archive_read_data.

Approved by:	kientzle
This commit is contained in:
Colin Percival 2007-04-05 15:51:19 +00:00
parent 56c62ab69c
commit ceb38a3142
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=168388
4 changed files with 23 additions and 55 deletions

View file

@ -46,7 +46,6 @@ SRCS= archive.h \
archive_check_magic.c \
archive_entry.c \
archive_read.c \
archive_read_data_into_buffer.c \
archive_read_data_into_fd.c \
archive_read_extract.c \
archive_read_open_fd.c \

View file

@ -50,7 +50,9 @@
.Nm archive_read_data ,
.Nm archive_read_data_block ,
.Nm archive_read_data_skip ,
.\" #if ARCHIVE_API_VERSION < 3
.Nm archive_read_data_into_buffer ,
.\" #endif
.Nm archive_read_data_into_fd ,
.Nm archive_read_extract ,
.Nm archive_read_extract_set_progress_callback ,
@ -103,8 +105,10 @@
.Fn archive_read_data_block "struct archive *" "const void **buff" "size_t *len" "off_t *offset"
.Ft int
.Fn archive_read_data_skip "struct archive *"
.\" #if ARCHIVE_API_VERSION < 3
.Ft int
.Fn archive_read_data_into_buffer "struct archive *" "void *" "ssize_t len"
.\" #endif
.Ft int
.Fn archive_read_data_into_fd "struct archive *" "int fd"
.Ft int
@ -224,11 +228,10 @@ and internal buffer optimizations.
A convenience function that repeatedly calls
.Fn archive_read_data_block
to skip all of the data for this archive entry.
.\" #if ARCHIVE_API_VERSION < 3
.It Fn archive_read_data_into_buffer
A convenience function that repeatedly calls
.Fn archive_read_data_block
to copy the entire entry into the client-supplied buffer.
Note that the client is responsible for sizing the buffer appropriately.
This function is deprecated and should not be used.
.\" #endif
.It Fn archive_read_data_into_fd
A convenience function that repeatedly calls
.Fn archive_read_data_block

View file

@ -506,6 +506,22 @@ archive_read_data(struct archive *_a, void *buff, size_t s)
return (bytes_read);
}
#if ARCHIVE_API_VERSION < 3
/*
* Obsolete function provided for compatibility only. Note that the API
* of this function doesn't allow the caller to detect if the remaining
* data from the archive entry is shorter than the buffer provided, or
* even if an error occurred while reading data.
*/
int
archive_read_data_into_buffer(struct archive *a, void *d, ssize_t len)
{
archive_read_data(a, d, len);
return (ARCHIVE_OK);
}
#endif
/*
* Skip over all remaining data in this entry.
*/

View file

@ -1,50 +0,0 @@
/*-
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "archive_platform.h"
__FBSDID("$FreeBSD$");
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#include "archive.h"
int
archive_read_data_into_buffer(struct archive *a, void *d, ssize_t len)
{
char *dest;
ssize_t bytes_read, total_bytes;
dest = (char *)d;
total_bytes = 0;
bytes_read = archive_read_data(a, dest, len);
while (bytes_read > 0) {
total_bytes += bytes_read;
bytes_read = archive_read_data(a, dest + total_bytes,
len - total_bytes);
}
return (ARCHIVE_OK);
}