| @@ -1,35 +1,50 @@ | | | @@ -1,35 +1,50 @@ |
1 | $NetBSD: patch-src_charset.cxx,v 1.1 2019/09/14 12:19:40 nia Exp $ | | 1 | $NetBSD: patch-src_charset.cxx,v 1.2 2019/10/24 21:50:08 kamil Exp $ |
2 | | | 2 | |
3 | Don't strip constness for the iconv input on SunOS and NetBSD, | | 3 | Don't strip constness for the iconv input on SunOS and old NetBSD. |
4 | which continue to have the input as const. | | | |
5 | | | 4 | |
6 | --- src/charset.cxx.orig 2019-04-10 09:08:34.000000000 +0000 | | 5 | --- src/charset.cxx.orig 2019-09-14 12:24:35.000000000 +0000 |
7 | +++ src/charset.cxx | | 6 | +++ src/charset.cxx |
8 | @@ -64,9 +64,13 @@ Iconv(iconv_t i, | | 7 | @@ -20,6 +20,15 @@ |
| | | 8 | #include "charset.hxx" |
| | | 9 | #include "util/ScopeExit.hxx" |
| | | 10 | |
| | | 11 | +#if defined(__NetBSD__) |
| | | 12 | +#include <sys/param.h> |
| | | 13 | +#if __NetBSD_Prereq__(9,99,17) |
| | | 14 | +#define NETBSD_POSIX_ICONV 1 |
| | | 15 | +#else |
| | | 16 | +#define NETBSD_POSIX_ICONV 0 |
| | | 17 | +#endif |
| | | 18 | +#endif |
| | | 19 | + |
| | | 20 | #include <algorithm> |
| | | 21 | |
| | | 22 | #include <assert.h> |
| | | 23 | @@ -64,9 +73,13 @@ Iconv(iconv_t i, |
9 | --dest_size; /* reserve once byte for the null terminator */ | | 24 | --dest_size; /* reserve once byte for the null terminator */ |
10 | | | 25 | |
11 | while (src_length > 0) { | | 26 | while (src_length > 0) { |
12 | +#if !defined(__NetBSD__) && !defined(__sun) | | 27 | +#if (defined(__NetBSD__) && !NETBSD_POSIX_ICONV) || defined(__sun) |
| | | 28 | + size_t err = iconv(i, &src, &src_length, &dest, &dest_size); |
| | | 29 | +#else |
13 | size_t err = iconv(i, | | 30 | size_t err = iconv(i, |
14 | const_cast<char **>(&src), &src_length, | | 31 | const_cast<char **>(&src), &src_length, |
15 | &dest, &dest_size); | | 32 | &dest, &dest_size); |
16 | +#else | | | |
17 | + size_t err = iconv(i, &src, &src_length, &dest, &dest_size); | | | |
18 | +#endif | | 33 | +#endif |
19 | if (err == (size_t)-1) { | | 34 | if (err == (size_t)-1) { |
20 | switch (errno) { | | 35 | switch (errno) { |
21 | case EILSEQ: | | 36 | case EILSEQ: |
22 | @@ -130,9 +134,13 @@ Iconv(iconv_t i, | | 37 | @@ -130,9 +143,13 @@ Iconv(iconv_t i, |
23 | char buffer[1024], *outbuf = buffer; | | 38 | char buffer[1024], *outbuf = buffer; |
24 | size_t outbytesleft = sizeof(buffer); | | 39 | size_t outbytesleft = sizeof(buffer); |
25 | | | 40 | |
26 | +#if !defined(__NetBSD__) && !defined(__sun) | | 41 | +#if (defined(__NetBSD__) && !NETBSD_POSIX_ICONV) || defined(__sun) |
| | | 42 | + size_t err = iconv(i, &src, &src_length, &outbuf, &outbytesleft); |
| | | 43 | +#else |
27 | size_t err = iconv(i, | | 44 | size_t err = iconv(i, |
28 | const_cast<char **>(&src), &src_length, | | 45 | const_cast<char **>(&src), &src_length, |
29 | &outbuf, &outbytesleft); | | 46 | &outbuf, &outbytesleft); |
30 | +#else | | | |
31 | + size_t err = iconv(i, &src, &src_length, &outbuf, &outbytesleft); | | | |
32 | +#endif | | 47 | +#endif |
33 | dest.append(buffer, outbuf); | | 48 | dest.append(buffer, outbuf); |
34 | if (err == (size_t)-1) { | | 49 | if (err == (size_t)-1) { |
35 | switch (errno) { | | 50 | switch (errno) { |