31 #ifndef _FILE_OFFSET_BITS
32 #define _FILE_OFFSET_BITS 64
37 #include <http_core.h>
39 #include <archive_entry.h>
40 #ifdef HAVE_SYS_TYPES_H
41 #include <sys/types.h>
43 #ifdef HAVE_SYS_STAT_H
51 #define OT_SEND_DATA 0
52 #define OT_SEND_SIZE 1
54 #define RWBUFSIZE 8192
56 #define QSKIP_CHECKS(q) (!(q->flags & EF_ALLOWTARBALL))
71 wrapwrite(
struct archive *a,
void *client_data,
const void *buff,
size_t n)
73 struct cdata *mydata = client_data;
75 return (ap_rwrite(buff, n, mydata->
r));
79 wrapwritesize(
struct archive *a,
void *client_data,
const void *buff,
size_t n)
81 ssize_t *mysize = client_data;
107 struct archive_entry *entry;
117 if (!(a = archive_write_new()))
120 if (!(entry = archive_entry_new()))
123 archive_write_set_compression_none(a);
124 archive_write_set_format_ustar(a);
133 for (; q; q = q->
next) {
138 archive_entry_clear(entry);
139 archive_entry_copy_stat(entry, &st);
140 archive_entry_set_pathname(entry, q->
file);
141 archive_write_header(a, entry);
145 len = fread(buff, 1,
sizeof(buff), file);
148 archive_write_data(a, buff, len);
149 len = fread(buff, 1,
sizeof(buff), file);
155 len = (
likely(fsize >
sizeof(buff)) ?
sizeof(buff) : fsize);
157 fsize -= archive_write_data(a, buff, len);
158 len = (
likely(fsize >
sizeof(buff)) ?
sizeof(buff) : fsize);
163 archive_entry_free(entry);
165 archive_write_finish(a);