filter->position += bytes_read;
if (bytes_read >= request) {
- filter->client_next = filter->client_buff + request;
+ filter->client_next =
+ ((const char *)filter->client_buff) + request;
filter->client_avail = bytes_read - request;
filter->client_total = bytes_read;
total_bytes_skipped += request;
ret = __archive_write_output(a, linkname, todo);
if(ret < ARCHIVE_WARN)
return (ret);
- ret = __archive_write_nulls(a, 0x1ff & (-todo));
+ ret = __archive_write_nulls(a, 0x1ff & (-(ssize_t)todo));
if (ret < ARCHIVE_WARN)
return (ret);
}
ret = __archive_write_output(a, pathname, todo);
if(ret < ARCHIVE_WARN)
return (ret);
- ret = __archive_write_nulls(a, 0x1ff & (-todo));
+ ret = __archive_write_nulls(a, 0x1ff & (-(ssize_t)todo));
if (ret < ARCHIVE_WARN)
return (ret);
}
#if defined(_WIN32) && !defined(__CYGWIN__)
static size_t
-mbstoutf16s(unsigned char *utf16, size_t utf16_size,
+mbstobeutf16s(unsigned char *utf16, size_t utf16_size,
const char *s, int len)
{
size_t count;
MB_PRECOMPOSED | MB_ERR_INVALID_CHARS,
s, len, (LPWSTR)tp, (int)tl);
if (count) {
- memcpy(utf16, tp, utf16_size);
+ uint16_t val = 1;
+
count = utf16_size / 2;
+ if (archive_be16dec(&val) != 1) {
+ unsigned char *xp = tp;
+ while (utf16_size > 0) {
+ archive_be16enc(
+ utf16,
+ *(uint16_t *)xp);
+ utf16 += 2;
+ xp += 2;
+ utf16_size -= 2;
+ }
+ } else
+ memcpy(utf16, tp, utf16_size);
}
free(tp);
}
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, longlinkname);
archive_entry_copy_symlink(ae, longfilename);
- archive_entry_set_mode(ae, S_IFLNK | 0755);
+ archive_entry_set_mode(ae, AE_IFLNK | 0755);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
archive_entry_free(ae);