On Mon, Jan 28, 2013 at 7:23 PM, Dave Reisner <[email protected]> wrote: > This allows us to support both libarchive 2.8.x as well as 3.x without > deprecation warnings on compile. > > Signed-off-by: Dave Reisner <[email protected]> > --- > Decided to just do this since libarchive 3.x has been a little scary from a > stability standpoint. Compile tested on both 3.1.1 and 3.0.4.
Apparently patches don't sit more than two hours before being pulled and pushed to master now. :) Reviewing anyway. It is silly to do one-liners in a C file where they can't be inlined; I would have done everything in the .h file itself and then the compiler could work its magic to remove these redirections completely. -Dan > lib/libalpm/Makefile.am | 1 + > lib/libalpm/libarchive-compat.c | 65 > +++++++++++++++++++++++++++++++++++++++++ > lib/libalpm/libarchive-compat.h | 33 +++++++++++++++++++++ > 3 files changed, 99 insertions(+) > create mode 100644 lib/libalpm/libarchive-compat.c > create mode 100644 lib/libalpm/libarchive-compat.h > > diff --git a/lib/libalpm/Makefile.am b/lib/libalpm/Makefile.am > index 5cf66b9..55fec9c 100644 > --- a/lib/libalpm/Makefile.am > +++ b/lib/libalpm/Makefile.am > @@ -44,6 +44,7 @@ libalpm_la_SOURCES = \ > graph.h graph.c \ > group.h group.c \ > handle.h handle.c \ > + libarchive-compat.h libarchive-compat.c \ > log.h log.c \ > package.h package.c \ > pkghash.h pkghash.c \ > diff --git a/lib/libalpm/libarchive-compat.c b/lib/libalpm/libarchive-compat.c > new file mode 100644 > index 0000000..56af2e1 > --- /dev/null > +++ b/lib/libalpm/libarchive-compat.c > @@ -0,0 +1,65 @@ > +/* > + * libarchive-compat.c > + * > + * Copyright (c) 2013 Pacman Development Team <[email protected]> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <stdint.h> > + > +#include "libarchive-compat.h" > + > +int _alpm_archive_read_free(struct archive *archive) { > +#if ARCHIVE_VERSION_NUMBER >= 3000000 > + return archive_read_free(archive); > +#else > + return archive_read_finish(archive); > +#endif > +} > + > +int64_t _alpm_archive_compressed_ftell(struct archive *archive) { > +#if ARCHIVE_VERSION_NUMBER >= 3000000 > + return archive_filter_bytes(archive, -1); > +#else > + return archive_position_compressed(archive); > +#endif > +} > + > +int _alpm_archive_read_open_file(struct archive *archive, > + const char *filename, size_t block_size) { > +#if ARCHIVE_VERSION_NUMBER >= 3000000 > + return archive_read_open_filename(archive, filename, block_size); > +#else > + return archive_read_open_file(archive, filename, block_size); > +#endif > +} > + > +int _alpm_archive_filter_code(struct archive *archive) { > +#if ARCHIVE_VERSION_NUMBER >= 3000000 > + return archive_filter_code(archive, 0); > +#else > + return archive_compression(archive); > +#endif > +} > + > +int _alpm_archive_read_support_filter_all(struct archive *archive) { > +#if ARCHIVE_VERSION_NUMBER >= 3000000 > + return archive_read_support_filter_all(archive); > +#else > + return archive_read_support_compression_all(archive); > +#endif > +} > + > +/* vim: set ts=2 sw=2 noet: */ > diff --git a/lib/libalpm/libarchive-compat.h b/lib/libalpm/libarchive-compat.h > new file mode 100644 > index 0000000..a1b379e > --- /dev/null > +++ b/lib/libalpm/libarchive-compat.h > @@ -0,0 +1,33 @@ > +/* > + * libarchive-compat.h > + * > + * Copyright (c) 2013 Pacman Development Team <[email protected]> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > +#ifndef _LIBARCHIVE_H > +#define _LIBARCHIVE_H > + > +#include <archive.h> > + > +int _alpm_archive_read_free(struct archive *archive); > +int64_t _alpm_archive_compressed_ftell(struct archive *archive); > +int _alpm_archive_read_open_file(struct archive *archive, > + const char *filename, size_t block_size); > +int _alpm_archive_filter_code(struct archive *archive); > +int _alpm_archive_read_support_filter_all(struct archive *archive); > + > +#endif /* _LIBARCHIVE_H */ > + > +/* vim: set ts=2 sw=2 noet: */ > -- > 1.8.1.1 > >
