Skip to content

Commit 16e846f

Browse files
committed
lib: convey input character set to w3m
There is no need for w3m to guess from a <meta> tag; the charset is available from PR_INTERNET_CPID. In particular, if there was a character set conversion, <meta> is out of date (only PR_INTERNET_CPID is current). Always pass -I to w3m.
1 parent 151a4e6 commit 16e846f

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

lib/rfbl.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,18 @@ int feed_w3m(const void *inbuf, size_t len, const char *cset,
525525
fp.reset();
526526
int fout = -1;
527527
auto cl2 = HX::make_scope_exit([&]() { if (fout != -1) close(fout); });
528-
const char *const argv[] = {"w3m", "-O", "UTF-8", "-dump", filename.c_str(), nullptr};
528+
const char *argv[8];
529+
int argc = 0;
530+
argv[argc++] = "w3m";
531+
if (cset != nullptr) {
532+
argv[argc++] = "-I";
533+
argv[argc++] = cset;
534+
}
535+
argv[argc++] = "-O";
536+
argv[argc++] = "UTF-8";
537+
argv[argc++] = "-dump";
538+
argv[argc++] = filename.c_str();
539+
argv[argc] = nullptr;
529540
auto pid = popenfd(argv, nullptr, &fout, nullptr, const_cast<const char *const *>(environ));
530541
if (pid < 0)
531542
return -1;

0 commit comments

Comments
 (0)