| /* |
| * libdpkg - Debian packaging suite library routines |
| * buffer.h - buffer I/O handling routines |
| * |
| * Copyright © 1999, 2000 Wichert Akkerman <wakkerma@debian.org> |
| * Copyright © 2000-2003 Adam Heath <doogie@debian.org> |
| * Copyright © 2005 Scott James Remnant |
| * Copyright © 2008-2011 Guillem Jover <guillem@debian.org> |
| * |
| * This 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 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 LIBDPKG_BUFFER_H |
| #define LIBDPKG_BUFFER_H |
| |
| #include <sys/types.h> |
| |
| #include <dpkg/macros.h> |
| |
| DPKG_BEGIN_DECLS |
| |
| #define DPKG_BUFFER_SIZE 4096 |
| |
| #define BUFFER_WRITE_VBUF 1 |
| #define BUFFER_WRITE_FD 2 |
| #define BUFFER_WRITE_NULL 3 |
| |
| #define BUFFER_FILTER_NULL 4 |
| #define BUFFER_FILTER_MD5 5 |
| |
| #define BUFFER_READ_FD 0 |
| |
| struct buffer_data { |
| union { |
| void *ptr; |
| int i; |
| } arg; |
| int type; |
| }; |
| |
| # define buffer_md5(buf, hash, limit) \ |
| buffer_filter(buf, hash, BUFFER_FILTER_MD5, limit) |
| |
| # define fd_md5(fd, hash, limit, ...) \ |
| buffer_copy_IntPtr(fd, BUFFER_READ_FD, \ |
| hash, BUFFER_FILTER_MD5, \ |
| NULL, BUFFER_WRITE_NULL, \ |
| limit, __VA_ARGS__) |
| # define fd_fd_copy(fd1, fd2, limit, ...) \ |
| buffer_copy_IntInt(fd1, BUFFER_READ_FD, \ |
| NULL, BUFFER_FILTER_NULL, \ |
| fd2, BUFFER_WRITE_FD, \ |
| limit, __VA_ARGS__) |
| # define fd_vbuf_copy(fd, buf, limit, ...) \ |
| buffer_copy_IntPtr(fd, BUFFER_READ_FD, \ |
| NULL, BUFFER_FILTER_NULL, \ |
| buf, BUFFER_WRITE_VBUF, \ |
| limit, __VA_ARGS__) |
| # define fd_skip(fd, limit, ...) \ |
| buffer_skip_Int(fd, BUFFER_READ_FD, limit, __VA_ARGS__) |
| |
| |
| off_t buffer_copy_IntPtr(int i, int typeIn, |
| void *f, int typeFilter, |
| void *p, int typeOut, |
| off_t limit, const char *desc, |
| ...) DPKG_ATTR_PRINTF(8); |
| off_t buffer_copy_IntInt(int i1, int typeIn, |
| void *f, int typeFilter, |
| int i2, int typeOut, |
| off_t limit, const char *desc, |
| ...) DPKG_ATTR_PRINTF(8); |
| off_t buffer_skip_Int(int I, int T, off_t limit, const char *desc_fmt, ...) |
| DPKG_ATTR_PRINTF(4); |
| off_t buffer_filter(const void *buf, void *hash, int typeFilter, off_t length); |
| |
| DPKG_END_DECLS |
| |
| #endif /* LIBDPKG_BUFFER_H */ |