diff options
author | Tatsuya Kinoshita <tats@debian.org> | 2015-01-24 14:36:40 +0000 |
---|---|---|
committer | Tatsuya Kinoshita <tats@debian.org> | 2015-01-24 14:37:05 +0000 |
commit | 8595cb4102d547388d0d9e699d10a14f8f7aa71c (patch) | |
tree | cd27e4b710769000b651b9af4db2704a1cd328dd /debian/patches | |
parent | Update Vcs-Browser (diff) | |
download | w3m-8595cb4102d547388d0d9e699d10a14f8f7aa71c.tar.gz w3m-8595cb4102d547388d0d9e699d10a14f8f7aa71c.zip |
Integrate Debian changes into 020_debian.patch (closes: #776112)
(debian/patches/*.patch except 010_upstream.patch are merged)
Diffstat (limited to '')
53 files changed, 11827 insertions, 12528 deletions
diff --git a/debian/patches/015_debian-version.patch b/debian/patches/015_debian-version.patch deleted file mode 100644 index f9373d1..0000000 --- a/debian/patches/015_debian-version.patch +++ /dev/null @@ -1,42 +0,0 @@ -Subject: Update CURRENT_VERSION to 0.5.3+gitYYYYMMDD (generate from ChangeLog) -From: Tatsuya Kinoshita <tats@debian.org> - -diff --git a/acinclude.m4 b/acinclude.m4 -index 52c8874..541cb74 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -6,7 +6,8 @@ dnl w3m autoconf macros - AC_DEFUN([AC_W3M_VERSION], - [AC_SUBST(CURRENT_VERSION) - cvsver=`$AWK '\$[1] ~ /Id:/ { print \$[3]}' $srcdir/ChangeLog` -- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c -+ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog` -+ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c - CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`]) - # - # ---------------------------------------------------------------- -diff --git a/configure b/configure -index 2e37bb1..c09d70a 100755 ---- a/configure -+++ b/configure -@@ -9084,7 +9084,8 @@ _ACEOF - - - cvsver=`$AWK '\$1 ~ /Id:/ { print \$3}' $srcdir/ChangeLog` -- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c -+ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog` -+ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c - CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c` - ac_config_files="$ac_config_files Makefile posubst po/Makefile.in scripts/Makefile scripts/dirlist.cgi scripts/w3mhelp.cgi scripts/w3mmail.cgi scripts/xface2xpm scripts/multipart/Makefile scripts/multipart/multipart.cgi scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 scripts/w3mman/w3mman2html.cgi libwc/Makefile w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mimg/win/Makefile w3mhelp-w3m_en.html w3mhelp-w3m_ja.html w3mhelp-lynx_en.html w3mhelp-lynx_ja.html" - -diff --git a/version.c.in b/version.c.in -index 31d30e4..ab25163 100644 ---- a/version.c.in -+++ b/version.c.in -@@ -1,5 +1,5 @@ - /* $Id: version.c.in,v 1.49 2012/05/22 09:45:56 inu Exp $ */ --#define CURRENT_VERSION "w3m/0.5.3+cvs" -+#define CURRENT_VERSION "w3m/0.5.3+gitYYYYMMDD" - - #ifndef FM_H - char *w3m_version = CURRENT_VERSION; diff --git a/debian/patches/020_button.patch b/debian/patches/020_button.patch deleted file mode 100644 index 0ed7b87..0000000 --- a/debian/patches/020_button.patch +++ /dev/null @@ -1,439 +0,0 @@ -Description: Support the button element as defined in HTML 4.01 -Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/201009.month/4411.html -Bug-Debian: http://bugs.debian.org/136810 - -Index: file.c -=================================================================== -RCS file: /cvsroot/w3m/w3m/file.c,v -retrieving revision 1.264 -diff -u -r1.264 file.c ---- w3m.orig/file.c 3 Aug 2010 10:02:16 -0000 1.264 -+++ w3m/file.c 17 Sep 2010 12:18:55 -0000 -@@ -2467,6 +2467,7 @@ - bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor, - sizeof(obuf->anchor)); - obuf->bp.img_alt = obuf->img_alt; -+ obuf->bp.input_alt = obuf->input_alt; - obuf->bp.in_bold = obuf->in_bold; - obuf->bp.in_italic = obuf->in_italic; - obuf->bp.in_under = obuf->in_under; -@@ -2484,6 +2485,7 @@ - bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor, - sizeof(obuf->anchor)); - obuf->img_alt = obuf->bp.img_alt; -+ obuf->input_alt = obuf->bp.input_alt; - obuf->in_bold = obuf->bp.in_bold; - obuf->in_italic = obuf->bp.in_italic; - obuf->in_under = obuf->bp.in_under; -@@ -2727,7 +2729,7 @@ - Str line = obuf->line, pass = NULL; - char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL, - *hidden_under = NULL, *hidden_italic = NULL, *hidden_strike = NULL, -- *hidden_ins = NULL, *hidden = NULL; -+ *hidden_ins = NULL, *hidden_input, *hidden = NULL; - - #ifdef DEBUG - if (w3m_debug) { -@@ -2759,6 +2761,12 @@ - hidden = hidden_img; - } - } -+ if (obuf->input_alt.in) { -+ if ((hidden_input = has_hidden_link(obuf, HTML_INPUT_ALT)) != NULL) { -+ if (!hidden || hidden_input < hidden) -+ hidden = hidden_input; -+ } -+ } - if (obuf->in_bold) { - if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) { - if (!hidden || hidden_bold < hidden) -@@ -2810,6 +2818,8 @@ - Strcat_charp(line, "</a>"); - if (obuf->img_alt && !hidden_img) - Strcat_charp(line, "</img_alt>"); -+ if (obuf->input_alt.in && !hidden_input) -+ Strcat_charp(line, "</input_alt>"); - if (obuf->in_bold && !hidden_bold) - Strcat_charp(line, "</b>"); - if (obuf->in_italic && !hidden_italic) -@@ -3020,6 +3030,18 @@ - Strcat_charp(tmp, "\">"); - push_tag(obuf, tmp->ptr, HTML_IMG_ALT); - } -+ if (!hidden_input && obuf->input_alt.in) { -+ Str tmp; -+ if (obuf->input_alt.hseq > 0) -+ obuf->input_alt.hseq = - obuf->input_alt.hseq; -+ tmp = Sprintf("<INPUT_ALT hseq=\"%d\" fid=\"%d\" name=\"%s\" type=\"%s\" value=\"%s\">", -+ obuf->input_alt.hseq, -+ obuf->input_alt.fid, -+ obuf->input_alt.name->ptr, -+ obuf->input_alt.type->ptr, -+ obuf->input_alt.value->ptr); -+ push_tag(obuf, tmp->ptr, HTML_INPUT_ALT); -+ } - if (!hidden_bold && obuf->in_bold) - push_tag(obuf, "<B>", HTML_B); - if (!hidden_italic && obuf->in_italic) -@@ -3730,6 +3752,63 @@ - } - - Str -+process_button(struct parsed_tag *tag) -+{ -+ Str tmp = NULL; -+ char *p, *q, *r, *qq = ""; -+ int qlen, v; -+ -+ if (cur_form_id < 0) { -+ char *s = "<form_int method=internal action=none>"; -+ tmp = process_form(parse_tag(&s, TRUE)); -+ } -+ if (tmp == NULL) -+ tmp = Strnew(); -+ -+ p = "submit"; -+ parsedtag_get_value(tag, ATTR_TYPE, &p); -+ q = NULL; -+ parsedtag_get_value(tag, ATTR_VALUE, &q); -+ r = ""; -+ parsedtag_get_value(tag, ATTR_NAME, &r); -+ -+ v = formtype(p); -+ if (v == FORM_UNKNOWN) -+ return NULL; -+ -+ if (!q) { -+ switch (v) { -+ case FORM_INPUT_SUBMIT: -+ case FORM_INPUT_BUTTON: -+ q = "SUBMIT"; -+ break; -+ case FORM_INPUT_RESET: -+ q = "RESET"; -+ break; -+ } -+ } -+ if (q) { -+ qq = html_quote(q); -+ qlen = strlen(q); -+ } -+ -+ // Strcat_charp(tmp, "<pre_int>"); -+ Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s " -+ "name=\"%s\" value=\"%s\">", -+ cur_hseq++, cur_form_id, p, html_quote(r), qq)); -+ return tmp; -+} -+ -+Str -+process_n_button(void) -+{ -+ Str tmp = Strnew(); -+ Strcat_charp(tmp, "</input_alt>"); -+ // Strcat_charp(tmp, "</pre_int>"); -+ return tmp; -+} -+ -+Str - process_select(struct parsed_tag *tag) - { - Str tmp = NULL; -@@ -4859,7 +4938,35 @@ - if (i > obuf->bottom_margin) - obuf->bottom_margin = i; - } -+ if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) { -+ obuf->input_alt.hseq = hseq; -+ } -+ if (parsedtag_get_value(tag, ATTR_FID, &i)) { -+ obuf->input_alt.fid = i; -+ } -+ if (parsedtag_get_value(tag, ATTR_TYPE, &p)) { -+ obuf->input_alt.type = Strnew_charp(p); -+ } -+ if (parsedtag_get_value(tag, ATTR_VALUE, &p)) { -+ obuf->input_alt.value = Strnew_charp(p); -+ } -+ if (parsedtag_get_value(tag, ATTR_NAME, &p)) { -+ obuf->input_alt.name = Strnew_charp(p); -+ } -+ obuf->input_alt.in = 1; - return 0; -+ case HTML_N_INPUT_ALT: -+ if (obuf->input_alt.in) { -+ if (!close_effect0(obuf, HTML_INPUT_ALT)) -+ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT); -+ obuf->input_alt.hseq = 0; -+ obuf->input_alt.fid = -1; -+ obuf->input_alt.in = 0; -+ obuf->input_alt.type = NULL; -+ obuf->input_alt.name = NULL; -+ obuf->input_alt.value = NULL; -+ } -+ return 1; - case HTML_TABLE: - close_anchor(h_env, obuf); - obuf->table_level++; -@@ -4968,6 +5075,16 @@ - case HTML_INPUT: - close_anchor(h_env, obuf); - tmp = process_input(tag); -+ if (tmp) -+ HTMLlineproc1(tmp->ptr, h_env); -+ return 1; -+ case HTML_BUTTON: -+ tmp = process_button(tag); -+ if (tmp) -+ HTMLlineproc1(tmp->ptr, h_env); -+ return 1; -+ case HTML_N_BUTTON: -+ tmp = process_n_button(); - if (tmp) - HTMLlineproc1(tmp->ptr, h_env); - return 1; -@@ -5680,6 +5797,21 @@ - putHmarker(buf->hmarklist, currentLn(buf), - hpos, hseq - 1); - } -+ else if (hseq < 0) { -+ int h = -hseq - 1; -+ int hpos = pos; -+ if (*str == '[') -+ hpos++; -+ if (buf->hmarklist && -+ h < buf->hmarklist->nmark && -+ buf->hmarklist->marks[h].invalid) { -+ buf->hmarklist->marks[h].pos = hpos; -+ buf->hmarklist->marks[h].line = currentLn(buf); -+ buf->hmarklist->marks[h].invalid = 0; -+ hseq = -hseq; -+ } -+ } -+ - if (!form->target) - form->target = buf->baseTarget; - if (a_textarea && -@@ -6747,6 +6879,12 @@ - obuf->nobr_level = 0; - bzero((void *)&obuf->anchor, sizeof(obuf->anchor)); - obuf->img_alt = 0; -+ obuf->input_alt.hseq = 0; -+ obuf->input_alt.fid = -1; -+ obuf->input_alt.in = 0; -+ obuf->input_alt.type = NULL; -+ obuf->input_alt.name = NULL; -+ obuf->input_alt.value = NULL; - obuf->in_bold = 0; - obuf->in_italic = 0; - obuf->in_under = 0; -@@ -6782,6 +6920,15 @@ - push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT); - obuf->img_alt = NULL; - } -+ if (obuf->input_alt.in) { -+ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT); -+ obuf->input_alt.hseq = 0; -+ obuf->input_alt.fid = -1; -+ obuf->input_alt.in = 0; -+ obuf->input_alt.type = NULL; -+ obuf->input_alt.name = NULL; -+ obuf->input_alt.value = NULL; -+ } - if (obuf->in_bold) { - push_tag(obuf, "</b>", HTML_N_B); - obuf->in_bold = 0; -Index: fm.h -=================================================================== -RCS file: /cvsroot/w3m/w3m/fm.h,v -retrieving revision 1.149 -diff -u -r1.149 fm.h ---- w3m.orig/fm.h 20 Aug 2010 09:47:09 -0000 1.149 -+++ w3m/fm.h 17 Sep 2010 12:18:55 -0000 -@@ -562,6 +562,13 @@ - #define INIT_BUFFER_WIDTH ((_INIT_BUFFER_WIDTH > 0) ? _INIT_BUFFER_WIDTH : 0) - #define FOLD_BUFFER_WIDTH (FoldLine ? (INIT_BUFFER_WIDTH + 1) : -1) - -+struct input_alt_attr { -+ int hseq; -+ int fid; -+ int in; -+ Str type, name, value; -+}; -+ - typedef struct { - int pos; - int len; -@@ -569,6 +576,7 @@ - long flag; - Anchor anchor; - Str img_alt; -+ struct input_alt_attr input_alt; - char fontstat[FONTSTAT_SIZE]; - short nobr_level; - Lineprop prev_ctype; -@@ -591,6 +599,7 @@ - short nobr_level; - Anchor anchor; - Str img_alt; -+ struct input_alt_attr input_alt; - char fontstat[FONTSTAT_SIZE]; - char fontstat_stack[FONT_STACK_SIZE][FONTSTAT_SIZE]; - int fontstat_sp; -Index: html.c -=================================================================== -RCS file: /cvsroot/w3m/w3m/html.c,v -retrieving revision 1.32 -diff -u -r1.32 html.c ---- w3m.orig/html.c 14 Aug 2010 01:29:40 -0000 1.32 -+++ w3m/html.c 17 Sep 2010 12:18:55 -0000 -@@ -56,6 +56,9 @@ - ATTR_CORE - }; - #define MAXA_INPUT MAXA_CORE + 12 -+unsigned char ALST_BUTTON[] = -+ { ATTR_TYPE, ATTR_VALUE, ATTR_NAME, ATTR_CORE }; -+#define MAXA_BUTTON MAXA_CORE + 3 - unsigned char ALST_TEXTAREA[] = - { ATTR_COLS, ATTR_ROWS, ATTR_NAME, ATTR_READONLY, ATTR_CORE }; - #define MAXA_TEXTAREA MAXA_CORE + 4 -@@ -247,24 +250,24 @@ - {"/bdo", NULL, 0, TFLG_END}, /* 121 HTML_N_BDO */ - {"big", ALST_NOP, MAXA_NOP, 0}, /* 122 HTML_BIG */ - {"/big", NULL, 0, TFLG_END}, /* 123 HTML_N_BIG */ -- {"button", ALST_NOP, MAXA_NOP, 0}, /* 124 HTML_BUTTON */ -- {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 125 HTML_FIELDSET */ -- {"/fieldset", NULL, 0, TFLG_END}, /* 126 HTML_N_FIELDSET */ -- {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 127 HTML_IFRAME */ -- {"label", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_LABEL */ -- {"/label", NULL, 0, TFLG_END}, /* 129 HTML_N_LABEL */ -- {"legend", ALST_NOP, MAXA_NOP, 0}, /* 130 HTML_LEGEND */ -- {"/legend", NULL, 0, TFLG_END}, /* 131 HTML_N_LEGEND */ -- {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 132 HTML_NOSCRIPT */ -- {"/noscript", NULL, 0, TFLG_END}, /* 133 HTML_N_NOSCRIPT */ -- {"object", ALST_NOP, MAXA_NOP, 0}, /* 134 HTML_OBJECT */ -- {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OPTGROUP */ -- {"/optgroup", NULL, 0, TFLG_END}, /* 136 HTML_N_OPTGROUP */ -- {"param", ALST_NOP, MAXA_NOP, 0}, /* 137 HTML_PARAM */ -- {"small", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_SMALL */ -- {"/small", NULL, 0, TFLG_END}, /* 139 HTML_N_SMALL */ -+ {"button", ALST_BUTTON, MAXA_BUTTON, 0}, /* 124 HTML_BUTTON */ -+ {"/button", NULL, 0, TFLG_END}, /* 125 HTML_N_BUTTON */ -+ {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 126 HTML_FIELDSET */ -+ {"/fieldset", NULL, 0, TFLG_END}, /* 127 HTML_N_FIELDSET */ -+ {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_IFRAME */ -+ {"label", ALST_NOP, MAXA_NOP, 0}, /* 129 HTML_LABEL */ -+ {"/label", NULL, 0, TFLG_END}, /* 130 HTML_N_LABEL */ -+ {"legend", ALST_NOP, MAXA_NOP, 0}, /* 131 HTML_LEGEND */ -+ {"/legend", NULL, 0, TFLG_END}, /* 132 HTML_N_LEGEND */ -+ {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 133 HTML_NOSCRIPT */ -+ {"/noscript", NULL, 0, TFLG_END}, /* 134 HTML_N_NOSCRIPT */ -+ {"object", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OBJECT */ -+ {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 136 HTML_OPTGROUP */ -+ {"/optgroup", NULL, 0, TFLG_END}, /* 137 HTML_N_OPTGROUP */ -+ {"param", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_PARAM */ -+ {"small", ALST_NOP, MAXA_NOP, 0}, /* 139 HTML_SMALL */ -+ {"/small", NULL, 0, TFLG_END}, /* 140 HTML_N_SMALL */ - -- {NULL, NULL, 0, 0}, /* 140 Undefined */ - {NULL, NULL, 0, 0}, /* 141 Undefined */ - {NULL, NULL, 0, 0}, /* 142 Undefined */ - {NULL, NULL, 0, 0}, /* 143 Undefined */ -Index: html.h -=================================================================== -RCS file: /cvsroot/w3m/w3m/html.h,v -retrieving revision 1.31 -diff -u -r1.31 html.h ---- w3m.orig/html.h 14 Aug 2010 01:29:40 -0000 1.31 -+++ w3m/html.h 17 Sep 2010 12:18:55 -0000 -@@ -214,21 +214,22 @@ - #define HTML_BIG 122 - #define HTML_N_BIG 123 - #define HTML_BUTTON 124 --#define HTML_FIELDSET 125 --#define HTML_N_FIELDSET 126 --#define HTML_IFRAME 127 --#define HTML_LABEL 128 --#define HTML_N_LABEL 129 --#define HTML_LEGEND 130 --#define HTML_N_LEGEND 131 --#define HTML_NOSCRIPT 132 --#define HTML_N_NOSCRIPT 133 --#define HTML_OBJECT 134 --#define HTML_OPTGROUP 135 --#define HTML_N_OPTGROUP 136 --#define HTML_PARAM 137 --#define HTML_SMALL 138 --#define HTML_N_SMALL 139 -+#define HTML_N_BUTTON 125 -+#define HTML_FIELDSET 126 -+#define HTML_N_FIELDSET 127 -+#define HTML_IFRAME 128 -+#define HTML_LABEL 129 -+#define HTML_N_LABEL 130 -+#define HTML_LEGEND 131 -+#define HTML_N_LEGEND 132 -+#define HTML_NOSCRIPT 133 -+#define HTML_N_NOSCRIPT 134 -+#define HTML_OBJECT 135 -+#define HTML_OPTGROUP 136 -+#define HTML_N_OPTGROUP 137 -+#define HTML_PARAM 138 -+#define HTML_SMALL 139 -+#define HTML_N_SMALL 140 - - /* pseudo tag */ - #define HTML_SELECT_INT 160 -Index: proto.h -=================================================================== -RCS file: /cvsroot/w3m/w3m/proto.h,v -retrieving revision 1.104 -diff -u -r1.104 proto.h ---- w3m.orig/proto.h 25 Jul 2010 09:55:05 -0000 1.104 -+++ w3m/proto.h 17 Sep 2010 12:18:55 -0000 -@@ -207,6 +207,8 @@ - extern Str process_img(struct parsed_tag *tag, int width); - extern Str process_anchor(struct parsed_tag *tag, char *tagbuf); - extern Str process_input(struct parsed_tag *tag); -+extern Str process_button(struct parsed_tag *tag); -+extern Str process_n_button(void); - extern Str process_select(struct parsed_tag *tag); - extern Str process_n_select(void); - extern void feed_select(char *str); -Index: table.c -=================================================================== -RCS file: /cvsroot/w3m/w3m/table.c,v -retrieving revision 1.58 -diff -u -r1.58 table.c ---- w3m.orig/table.c 9 Aug 2010 11:59:19 -0000 1.58 -+++ w3m/table.c 17 Sep 2010 12:18:55 -0000 -@@ -2878,6 +2878,14 @@ - tmp = process_input(tag); - feed_table1(tbl, tmp, mode, width); - break; -+ case HTML_BUTTON: -+ tmp = process_button(tag); -+ feed_table1(tbl, tmp, mode, width); -+ break; -+ case HTML_N_BUTTON: -+ tmp = process_n_button(); -+ feed_table1(tbl, tmp, mode, width); -+ break; - case HTML_SELECT: - tmp = process_select(tag); - if (tmp) -Index: tagtable.tab -=================================================================== -RCS file: /cvsroot/w3m/w3m/tagtable.tab,v -retrieving revision 1.14 -diff -u -r1.14 tagtable.tab ---- w3m.orig/tagtable.tab 14 Aug 2010 01:29:40 -0000 1.14 -+++ w3m/tagtable.tab 17 Sep 2010 12:18:55 -0000 -@@ -176,6 +176,7 @@ - big HTML_BIG - /big HTML_N_BIG - button HTML_BUTTON -+/button HTML_N_BUTTON - fieldset HTML_FIELDSET - /fieldset HTML_N_FIELDSET - iframe HTML_IFRAME diff --git a/debian/patches/020_debian.patch b/debian/patches/020_debian.patch new file mode 100644 index 0000000..a53d97c --- /dev/null +++ b/debian/patches/020_debian.patch @@ -0,0 +1,11826 @@ +Description: Git master branch of Debian's w3m +Origin: http://anonscm.debian.org/cgit/collab-maint/w3m.git + +diff --git a/ChangeLog b/ChangeLog +index 88358ef..7629962 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,605 @@ ++2015-01-24 Tatsuya Kinoshita <tats@debian.org> ++ ++ * acinclude.m4, configure, version.c.in: ++ Update to 0.5.3+gitYYYYMMDD (generate from ChangeLog). ++ ++2015-01-15 Tatsuya Kinoshita <tats@debian.org> ++ ++ * alloc.h, main.c: Drop C99 features. ++ ++2015-01-15 Scarlett <scarlett@xavin.net> ++ ++ Add overflow detection. ++ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2 ++ * main.c: Call exit(1) when out of memory to avoid dereferencing null ++ pointers when gc's malloc fails. ++ * alloc.h: Replacements for w3m's allocation macros which add ++ overflow detection and concentrate the macros in one file. ++ * indep.h, libwc/charset.c, libwc/status.c, matrix.c: Use the ++ overflow-detecting allocation macros from alloc.h. ++ ++2015-01-15 Tatsuya Kinoshita <tats@debian.org> ++ ++ * Str.c, cookie.c, map.c: ++ Do not use C99 printf format specifiers and asprintf. ++ ++2015-01-15 Scarlett <scarlett@xavin.net> ++ ++ Correct printf arguments and use asprintf. ++ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2 ++ * Str.c: Use asprintf() instead of rolling our own printf string ++ length detection. ++ * cookie.c: Pass the char pointer in the string struct to printf %s ++ instead of the string struct itself. ++ Print time_t using %lld instead of %ld to allow for 64-bit time_t. ++ * main.c: Print a long int using the correct format specifier. ++ * map.c: Print size_t using the correct format specifier. ++ ++2014-12-06 Araki Ken <arakiken@users.sf.net> ++ ++ Support OSC 5379 remote imaging and sixel graphics. ++ Origin: https://bitbucket.org/arakiken/w3m/branch/remoteimg (2014-11-16) ++ ++ * doc/README.sixel, terms.c: Add README.sixel. W3M_IMG2SIXEL ++ environmental variable enables to specify options of img2sixel. ++ ++ * image.c, terms.c: ++ Add n_terminal_image argument to put_image_{sixel|osc5379}(). ++ Use struct winsize to calculate ppc and ppl. ++ ++ * terms.c: If SCREEN_VARIANT=sixel on GNU screen, exec img2sixel ++ without -P option. ++ ++ * terms.c: ttymode_set() -> ttymode_reset(). ++ ++ * terms.c: Fix. ++ ++ * terms.c: Support GNU screen. ++ ++ * terms.c: Show GIF (except animation GIF) correctly. ++ ++ * main.c, terms.c: img2sixel exits by Ctrl+C. Enable GIF Animation if ++ 'I' is pressed to show it. ++ ++ * image.c: Add declaration of get_pixel_per_cell(). ++ ++ * terms.c: Show the first frame of animation gif files. ++ ++ * terms.c: system() -> fork()&execvp() ++ ++ * display.c: Draw underline on anchor which contains cboth text and ++ images. ++ ++ * etc.c: Remove close_tty() from setup_child() because close_tty() ++ sometimes interrupts loadGeneralFile() in loadImage() and corrupt ++ image data can be cached in ~/.w3m. ++ ++ * image.c: Minor fix. ++ ++ * image.c: Cache image files if at all possible and convert them to ++ sixel when -sixel option is specified. ++ ++ * image.c: Init pixel_per_{char|line}_i if get_pixel_per_cell() fails. ++ ++ * display.c, file.c, fm.h, image.c, main.c, terms.c: ++ Add -sixel option which supports image processing by img2sixel. ++ ++ * image.c: Don't download image files whose size is specified in ++ <img> tag. ++ ++ * image.c: Minor fixes of parseImageHeader(). ++ ++ * image.c: Determine the format of an image file by its header data ++ not by its file name suffix. ++ ++ * image.c: Read width and height from jpeg, png and gif files directly ++ instead of executing w3mimgdisplay -size. ++ ++ * display.c: display.c: Draw underline on anchor text which is not ++ overlapped with any image. ++ ++ * terms.c: Clear fd_set by FD_ZERO() before select(). ++ ++ * file.c: nw and ni are rounded up instead of rounded off to show ++ every corner of images. ++ ++ * terms.c: Change time to wait for the response of "\x1b[14t\x1b[18t" ++ from 0.1 sec to 0.5 sec. ++ ++ * image.c: ++ - clearImage() works. ++ - Use cached image files created by w3m in getImage(). ++ ++ * file.c: Hack for alignment. ++ ++ * fm.h, image.c, terms.c: ++ - Adjust the image size to the terminal cell size. ++ - If the image size is specified in html source, skip to load the image. ++ ++ * display.c, fm.h, image.c, main.c, terms.c, w3mimg/x11/x11_w3mimg.c: ++ Support remote image by OSC 5379 show_picture sequence. ++ ++2014-12-06 Olaf Hering <olh@suse.de> ++ ++ * parsetagx.c: Fix crash in parse_tag() during every start. ++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-parsetagx-crash.patch?expand=1 ++ ++ * fm.h: Change the default to alt_entity=0. ++ Change the default for the option "Use ASCII equivalents to ++ display entities" from YES to NO. ++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.5.1-no-ASCII-equivalents-by-default.patch?expand=1 ++ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=247397 ++ ++ * anchor.c, libwc/gb18030.c, libwc/ucs.c, regex.c: ++ Fix a few harmless uninitialized variables. ++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-uninitialized.patch?expand=1 ++ ++2014-12-06 Peter Poeml <poeml@suse.de> ++ ++ * terms.c: Prevent segfault when editing a textarea field with vi. ++ Add fix for segfault that can occur when editing a textarea field ++ with vi, and returning to w3m (it seems to happen if the terminal ++ is not writable, as when using w3m after 'su - some_user') ++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.4.1-textarea-segfault.dif?expand=1 ++ ++2014-12-04 Tatsuya Kinoshita <tats@debian.org> ++ ++ * acinclude.m4: Follow updated configure. ++ ++2014-12-03 Yusuke Baba <babayaga1@y8.dion.ne.jp> ++ ++ * configure, w3mimg/fb/fb.c, w3mimg/fb/fb.h, w3mimg/fb/fb_w3mimg.c: ++ Support FreeBSD framebuffer. ++ Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html ++ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673 ++ ++2014-12-02 Naohiro Aota <naota@gentoo.org> ++ ++ * acinclude.m4, configure, w3mimg/fb/fb_gdkpixbuf.c: ++ * w3mimg/x11/x11_w3mimg.c: ++ Depend on gdk-pixbuf instead of gtk when gtk2. ++ Origin: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-gdk-pixbuf.patch?revision=1.1 ++ ++2014-12-02 Jeroen Roovers <jer@gentoo.org> ++ ++ * acinclude.m4, configure: Add tinfo to with_termlib. ++ Fix building against sys-libs/ncurses[tinfo]. ++ Origin: https://504588.bugs.gentoo.org/attachment.cgi?id=372650 ++ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=504588 ++ ++2014-12-01 OBATA Akio <obache@netbsd.org> ++ ++ * acinclude.m4, configure: ++ Assume defined PKG_CONFIG points right location when gtk2. ++ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-aa?rev=1.13&content-type=text/x-cvsweb-markup ++ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-ak?rev=1.1&content-type=text/x-cvsweb-markup ++ ++2014-12-01 Vsevolod Stakhov <vsevolod@FreeBSD.org> ++ ++ * config.h.in: Disable USE_EGD for LibreSSL. ++ Disable use of RAND_egd as it is absent in FreeBSD. ++ This also fixes build error with LibreSSL. ++ Origin: https://bz-attachments.freebsd.org/attachment.cgi?id=144635 ++ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191852 ++ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191956 ++ ++2014-12-01 zimous <zimous@matfyz.cz> ++ ++ * po/ja.po: Set Language tag properly for Japanese translation. ++ Origin: https://512722.bugs.gentoo.org/attachment.cgi?id=378452 ++ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=512722 ++ ++2014-11-30 Tatsuya Kinoshita <tats@debian.org> ++ ++ * doc/w3m.1: Typo fix. ++ ++2014-11-30 Markus Hiereth <post@hiereth.de> ++ ++ * doc/w3m.1: Miscellaneous changes to improve English manpage. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 ++ ++2014-11-29 Markus Hiereth <post@hiereth.de> ++ ++ * doc/w3m.1: Improve FILES. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 ++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=403634 ++ ++ * doc/w3m.1: Improve EXAMPLES. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 ++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=380560 ++ ++ * doc/w3m.1: Improve explanation about option -N. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 ++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=345084 ++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=530468 ++ ++ * doc/w3m.1: Note that -cols only affects when HTML is rendered. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 ++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=285251 ++ ++ * doc/w3m.1: Add more info on configuration. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 ++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=268211 ++ ++2014-11-29 Justin B Rye <justin.byam.rye@gmail.com> ++ ++ * scripts/w3mman/w3mman.1.in: Tweak for W3MMAN_W3M. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771003#5 ++ ++ * scripts/w3mman/w3mman.1.in: English fixes. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#25 ++ ++2014-11-29 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-19+. ++ ++2014-11-29 Justin B Rye <justin.byam.rye@gmail.com> ++ ++ * scripts/w3mman/w3mman2html.cgi.in: Fix Perl warnings. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771004 ++ ++2014-10-21 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-19 ++ ++ * po/LINGUAS: Correct LINGUAS to a whitespace separated list ++ ++2014-10-21 Markus Hiereth <markus.hiereth@freenet.de> ++ ++ * po/LINGUAS, po/de.po: Add German translation ++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763964 ++ ++2014-10-15 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-18 ++ ++ * doc-jp/README.SSL: Update README.SSL to follow default values ++ ++ * config.sub: Update config.sub with autotools-dev 20140911.1 ++ ++ * fm.h: Disable SSLv3 by default [CVE-2014-3566] ++ cf. https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/ ++ ++2014-10-15 Ludwig Nussel <ludwig.nussel@suse.de> ++ ++ * fm.h: Force ssl_verify_server on and disable SSLv2 support ++ Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4 ++ ++2014-10-13 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-17+ ++ ++2014-10-04 Tatsuya Kinoshita <tats@debian.org> ++ ++ * libwc/ambwidth_map.awk, libwc/map/ucs_ambwidth.map: ++ Fix incorrect generation of ucs_ambwidth_map ++ ++2014-08-22 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-17 ++ ++ * config.guess: ++ Update config.guess to 2014-03-23 with autotools-dev 20140510.1 ++ ++ * config.sub: ++ Update config.sub to 2014-05-01 with autotools-dev 20140510.1 ++ ++2014-08-22 Micah Cowan <micah@addictivecode.org> ++ ++ * main.c: Support Boehm GC 7.2 ++ Replace Gentoo's patch to prevent segfaults due to infinite recursion. ++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=080_gc72.patch;att=1;bug=758831 ++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758831 ++ Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=555467 ++ Bug: http://sourceforge.net/p/w3m/patches/63/ ++ Bug: http://sourceforge.net/p/w3m/patches/59/ ++ ++2014-08-22 Tatsuya Kinoshita <tats@debian.org> ++ ++ * main.c: ++ Revert "Support Boehm GC 7.2" (w3m-0.5.2-gc72.patch from Gentoo) ++ This reverts commit 4331db3e3e673ac4dbfe8e9f2b42a8e0478dc98a. ++ ++2014-06-23 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-16 ++ ++ * url.c: Disable ciphers that use keys smaller than 128 bits ++ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1325674 ++ ++2014-01-04 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-15 ++ ++2014-01-03 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-14 ++ ++ * acinclude.m4, configure: Use pkg-config to build with imlib2 1.4.6 ++ ++ * doc/HISTORY, doc/README.cookie, doc/README.m17n: ++ Prefer US-ASCII rathar than Japanese encodings in English documents ++ ++2013-12-27 Tatsuya Kinoshita <tats@debian.org> ++ ++ * doc-jp/MANUAL.html, doc/MANUAL.html: ++ Cleanup unusable links in MANUAL.html ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517315 ++ ++ * version.c.in: Update to 0.5.3+debian-13+ ++ ++2013-12-17 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-13 ++ ++2013-12-14 Tatsuya Kinoshita <tats@debian.org> ++ ++ * config.guess: ++ Update config.guess to 2013-06-10 with autotools-dev 20130810.1 ++ ++ * config.sub: ++ Update config.sub to 2013-08-10 with autotools-dev 20130810.1 ++ ++2013-12-07 Reinhard Max <max@suse.de> ++ ++ * local.c: Fix a directory descriptor leak in loadLocalDir ++ Patch from openSUSE on 2009-09-07. ++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-closedir.patch ++ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=531675 ++ ++2013-12-07 AIDA Shinra <shinra@j10n.org> ++ ++ * main.c: Fix crash after SEARCH_NEXT ++ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-search-next.patch>, ++ [w3m-dev:04473] on 2013-12-07. ++ ++2013-11-11 Paul Boekholt <p.boekholt@gmail.com> ++ ++ * file.c: Add support for single quoted meta refresh URL ++ Bug: https://sourceforge.net/p/w3m/patches/53/ ++ ++2013-11-07 Cristian Rodriguez <crrodriguez@opensuse.org> ++ ++ * url.c: Use SSL_OP_NO_COMPRESSION if available ++ Due to the "CRIME attack" (CVE-2012-4929) HTTPS clients that ++ negotiate TLS-level compression can be abused for MITM attacks. ++ * url.c: Use SSL_MODE_RELEASE_BUFFERS if available ++ Patch from openSUSE on 2012-11-12: ++ https://build.opensuse.org/request/show/141054 ++ ++2013-10-15 Tatsuya Kinoshita <tats@debian.org> ++ ++ * Makefile.in: ++ Depend on funcname.tab to fix parallel make issue of scripts ++ Bug: https://sourceforge.net/p/w3m/patches/64/ ++ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=362249 ++ ++ * w3mimg/Makefile.in: ++ Avoid prerequisite $(IMGOBJS) to fix parallel make issue of w3mimg ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726188 ++ ++ * acinclude.m4, configure: ++ Explicitly add -lX11 to IMGX11LDFLAGS only when gtk2 ++ Bug: https://sourceforge.net/p/w3m/patches/57/ ++ ++ * w3mimg/Makefile.in: Revert "Fix parallel make issue" ++ This reverts commit aa6f871c6dcc108118142bcc786e4a6ac3d46867. ++ ++ * Makefile.in: ++ Revert "Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5" ++ This reverts commit 7410954066d68ac2ad6aea638801714447321fec. ++ ++2013-10-14 AIDA Shinra <shinra@j10n.org> ++ ++ * url.c: Define schemeNumToName() to fix scheme bug ++ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-schemebug.patch>, ++ [w3m-dev:04470] on 2013-10-14. ++ Bug: https://sourceforge.net/p/w3m/patches/60/ ++ ++ * config.h.in, file.c, fm.h, html.h, image.c, indep.c, indep.h: ++ * istream.c, istream.h, local.c, main.c, mimehead.c, proto.h: ++ Workaround of GC crash on Cygwin64 ++ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch>, ++ [w3m-dev:04469] on 2013-10-14. ++ ++2013-10-14 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-12+ ++ ++2013-10-14 Jarek Czekalski <jarekczek@poczta.onet.pl> ++ ++ * terms.c: Fix paren in check_cygwin_console() ++ Bug: https://sourceforge.net/p/w3m/patches/66/ ++ ++2013-10-13 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-12 ++ ++ * doc-jp/MANUAL.html, doc-jp/w3m.1, doc/MANUAL.html, doc/w3m.1: ++ Update document for the -s option change ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527 ++ ++ * terms.c: Do not fail when LANG is not set ++ Check whether the value of LC_ALL, LC_CTYPE or LANG is not NULL in ++ check_cygwin_console(). ++ Bug: https://sourceforge.net/p/w3m/patches/66/ ++ ++2013-10-12 Tatsuya Kinoshita <tats@debian.org> ++ ++ * table.h: Bump MAXCOL to 256 ++ Bug: https://sourceforge.net/p/w3m/feature-requests/24/ ++ ++2013-10-12 Laurence Richert <laurencerichert@yahoo.de> ++ ++ * main.c, proto.h: vim/-perator like handling ++ - half page scrolling ++ - jumping to elements numbered by getLinkNumberStr() from Karsten ++ Schoelzel ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028 ++ ++2013-10-12 Tatsuya Kinoshita <tats@debian.org> ++ ++ * doc-jp/README, doc/README: ++ Mention project page rather than unavailable mailing lists ++ ++2013-10-09 Rafael Laboissiere <rafael@laboissiere.net> ++ ++ * doc/README.img: Fix typo ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=725892 ++ ++2013-08-12 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-11+ ++ ++ * ChangeLog: Update ChangeLog to use contributor's name ++ ++2013-08-08 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-11 ++ ++2013-08-04 Tatsuya Kinoshita <tats@debian.org> ++ ++ * Str.c: Check length for Strchop() ++ ++ * main.c: Fix potentially segfault of execdict() ++ ++ * version.c.in: Update to 0.5.3+debian-10+ ++ ++ * file.c: Fix segfault of loadGeneralFile() ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718612 ++ ++2013-08-02 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-10 ++ ++2013-08-02 Piotr P. Karwasz <piotr.p@karwasz.org> ++ ++ * scripts/w3mman/w3mman2html.cgi.in: ++ Correct underline processing and more UTF-8 support for w3mman2html.cgi ++ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/680202> ++ on 2010-11-23. ++ ++2013-08-01 Hilko Bengen <bengen@debian.org> ++ ++ * entity.c: Ignore SOFT HYPHEN to prevent drawing hyphens everywhere ++ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441934> ++ on 2011-03-01. ++ ++2013-08-01 Tatsuya Kinoshita <tats@debian.org> ++ ++ * doc-jp/README, doc/README: Update contact list in README ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696209 ++ ++2013-07-30 Tatsuya Kinoshita <tats@debian.org> ++ ++ * config.guess, config.sub: ++ Update config.guess and config.sub to supprot aarch64 ++ Updated with Debian autotools-dev version 20130515.1. ++ ++2013-07-30 Conrad J.C. Hughes <debbugs@xrad.org> ++ ++ * main.c: Sort anchors by sequence number in -dump ++ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657666> ++ on 2012-01-27. ++ ++2013-07-30 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update to 0.5.3+debian-9+ ++ ++2013-07-29 Tatsuya Kinoshita <tats@debian.org> ++ ++ * version.c.in: Update version to w3m/0.5.3+debian-9 ++ ++ * version.c.in: Set CURRENT_VERSION to debian version ++ ++2013-07-28 Tatsuya Kinoshita <tats@debian.org> ++ ++ * file.c: Fix segfault of process_button() ++ ++2013-04-08 AIDA Shinra <shinra@j10n.org> ++ ++ * file.c: One more patch for siteconf from [w3m-dev 04464] ++ ++ * anchor.c, config.h.in, display.c, doc-jp/README.siteconf: ++ * doc/README.siteconf, file.c, fm.h, form.c, frame.c, func.c: ++ * history.c, indep.c, indep.h, linein.c, main.c, map.c, menu.c: ++ * po/ja.po, proto.h, rc.c, url.c: Support the siteconf feature ++ Patch to support the siteconf feature, from [w3m-dev 04463] ++ on 2012-06-27. ++ ++2013-04-08 Hayaki Saito <user@zuse.jp> ++ ++ * keybind.c, main.c, proto.h, terms.c: ++ Support SGR 1006 mouse reporting ++ Patch to support SGR 1006 mouse reporting, from [w3m-dev 04466] ++ on 2012-07-15. ++ ++2012-05-19 Hilko Bengen <bengen@debian.org> ++ ++ * form.c: Assume "text" if an input type is unknown ++ Patch from <http://bugs.debian.org/615843> on 2011-03-01. ++ ++2012-05-19 Simon Ruderich <simon@ruderich.org> ++ ++ * Makefile.in: Use $(CPPFLAGS) with $(CPP) ++ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665491> ++ on 2012-03-24. ++ ++2012-05-03 Miroslav Šulc <fordfrog@gentoo.org> ++ ++ * w3mimg/Makefile.in: Fix parallel make issue ++ Patch from Gentoo ++ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-parallel-make.patch?revision=1.1&view=markup> ++ <https://bugs.gentoo.org/show_bug.cgi?id=353390> on 2011-02-01. ++ ++2012-05-03 MATSUU Takuto <matsuu@gentoo.org> ++ ++ * main.c: Support Boehm GC 7.2 ++ Patch from Gentoo ++ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.2-gc72.patch?revision=1.1&view=markup> ++ on 2009-12-13. ++ ++2012-05-02 Reinhard Tartler <siretart@tauware.de> ++ ++ * istream.c, istream.h: ++ Fix that struct file_handle conflicts with glibc 2.14 ++ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/935540> ++ on 2012-02-19. ++ ++2011-10-30 Colin Watson <cjwatson@ubuntu.com> ++ ++ * acinclude.m4, configure, w3mbookmark.c: ++ Appease gcc -Werror=format-security. ++ Patch from 0.5.3-3ubuntu1 on 2011-10-23. ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646321 ++ ++2011-06-19 Martin Pitt <martin.pitt@ubuntu.com> ++ ++ * Makefile.in: ++ Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5 ++ Patch from 0.5.2-10ubuntu1 on 2010-12-03. ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605761 ++ ++2011-06-19 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * main.c: ++ Change the -s option to "squeeze multiple blank lines" for pager ++ Change the -s option from "display charset Shift_JIS" to "squeeze ++ multiple blank lines" to work as /usr/bin/pager. In addition, the ++ options -j and -e are disabled. To specify the display charset, ++ use -O{s|j|e} instead. ++ Patch from [w3m-dev 01275] on 2000-10-26. ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527 ++ ++2011-06-19 Hiroyuki Ito <ZXB01226@nifty.com> ++ ++ * file.c, fm.h, html.c, html.h, proto.h, table.c, tagtable.tab: ++ Support the button element as defined in HTML 4.01 ++ Patch from upstream, [w3m-dev 04411] on 2010-09-17, to support the ++ button element. It is discussed upstream and incomplete, but enough ++ to login Launchpad. ++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=136810 ++ + 2012-05-22 Tatsuya Kinoshita <tats@vega.ocn.ne.jp> + + * [w3m-dev 04451] w3m/entity.h should be removed when `make clean' +diff --git a/Makefile.in b/Makefile.in +index 7d692f9..8fa799e 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -150,7 +150,7 @@ parsetagx.o: html.c + + funcname.tab: $(DEFUNS) + (echo '#define DEFUN(x,y,z) x y';\ +- sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) - | \ ++ sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) $(CPPFLAGS) - | \ + awk '$$1 ~ /^[_A-Za-z]/ { \ + for (i=2;i<=NF;i++) { print $$i, $$1} \ + }' > $@.tmp +@@ -250,7 +250,7 @@ install-po: + (cd $$subdir && $(MAKE) install); \ + done + +-all-scripts: ++all-scripts: funcname.tab + for dir in $(SCRIPTSUBDIRS); \ + do \ + (cd $$dir && $(MAKE) $(MAKE_ARGS)); \ +diff --git a/Str.c b/Str.c +index e5a0982..eff82a4 100644 +--- a/Str.c ++++ b/Str.c +@@ -278,8 +278,8 @@ void + Strchop(Str s) + { + STR_LENGTH_CHECK(s); +- while ((s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r') && +- s->length > 0) { ++ while (s->length > 0 && ++ (s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r')) { + s->length--; + } + s->ptr[s->length] = '\0'; +diff --git a/acinclude.m4 b/acinclude.m4 +index e4ccc3d..60705f4 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -6,7 +6,8 @@ dnl w3m autoconf macros + AC_DEFUN([AC_W3M_VERSION], + [AC_SUBST(CURRENT_VERSION) + cvsver=`$AWK '\$[1] ~ /Id:/ { print \$[3]}' $srcdir/ChangeLog` +- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c ++ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog` ++ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c + CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`]) + # + # ---------------------------------------------------------------- +@@ -400,10 +401,10 @@ AC_DEFUN([AC_W3M_TERMLIB], + AC_ARG_WITH(termlib, + [ --with-termlib[=LIBS] terminal library + LIBS is space separated list of: +- terminfo mytinfo termcap ncurses curses],, ++ terminfo mytinfo termcap tinfo ncurses curses],, + [with_termlib="yes"]) + AC_MSG_RESULT($with_termlib) +- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses" ++ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses" + for lib in $with_termlib; do + AC_CHECK_LIB($lib, tgetent, [W3M_LIBS="$W3M_LIBS -l$lib"; break]) + done +@@ -600,7 +601,7 @@ AC_DEFUN([AC_W3M_IMAGE], + if test x"$enable_image" = xyes; then + enable_image=x11 + case "`uname -s`" in +- Linux|linux|LINUX) ++ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD) + if test -c /dev/fb0; then + enable_image=x11,fb + fi;; +@@ -649,6 +650,9 @@ AC_DEFUN([AC_W3M_IMAGE], + fi;; + imlib2) + with_imlib2="yes" ++ if test x"$PKG_CONFIG" = x; then ++ PKG_CONFIG=pkg-config ++ fi + if test x"$IMLIB2_CONFIG" = x; then + IMLIB2_CONFIG=imlib2-config + fi;; +@@ -661,8 +665,6 @@ AC_DEFUN([AC_W3M_IMAGE], + with_gtk2="yes" + if test x"$PKG_CONFIG" = x; then + PKG_CONFIG=pkg-config +- else +- PKG_CONFIG=: + fi;; + esac + done +@@ -705,8 +707,8 @@ AC_DEFUN([AC_W3M_IMAGE], + IMGTARGETS="x11" + AC_DEFINE(USE_GDKPIXBUF) + AC_DEFINE(USE_GTK2) +- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" +- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" ++ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`" ++ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`" + elif test x"$have_gdkpixbuf" = xyes; then + AC_DEFINE(USE_W3MIMG_X11) + IMGOBJS="$IMGOBJS x11/x11_w3mimg.o" +@@ -728,7 +730,7 @@ AC_DEFUN([AC_W3M_IMAGE], + IMGTARGETS="x11" + AC_DEFINE(USE_IMLIB2) + IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`" +- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`" ++ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`" + else + AC_MSG_WARN([unable to build w3mimgdisplay with X11 support]) + fi +@@ -740,8 +742,8 @@ AC_DEFUN([AC_W3M_IMAGE], + IMGTARGETS="${IMGTARGETS} fb" + AC_DEFINE(USE_GDKPIXBUF) + AC_DEFINE(USE_GTK2) +- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`" +- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`" ++ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`" ++ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`" + elif test x"$have_gdkpixbuf" = xyes; then + AC_DEFINE(USE_W3MIMG_FB) + IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o" +@@ -756,7 +758,7 @@ AC_DEFUN([AC_W3M_IMAGE], + AC_DEFINE(USE_IMLIB2) + IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o" + IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`" +- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`" ++ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`" + else + AC_MSG_WARN([unable to build w3mimgdisplay with FB support]) + fi +@@ -866,7 +868,7 @@ AC_MSG_CHECKING(for sys_errlist) + AC_TRY_COMPILE( + changequote(<<,>>)dnl + <<extern char *sys_errlist[];>>, +-<<printf(sys_errlist[0]);>>, ++<<printf("%s", sys_errlist[0]);>>, + changequote([,])dnl + [have_sys_errlist="yes"; AC_DEFINE(HAVE_SYS_ERRLIST)], + [have_sys_errlist="no"]) +diff --git a/alloc.h b/alloc.h +new file mode 100644 +index 0000000..fa0d391 +--- /dev/null ++++ b/alloc.h +@@ -0,0 +1,39 @@ ++/* ++ * by Scarlett. public domain. ++ * replacements for w3m's allocation macros which add overflow ++ * detection and concentrate the macros in one file ++ */ ++#ifndef W3_ALLOC_H ++#define W3_ALLOC_H ++#include <gc.h> ++#include <stdlib.h> ++#include <stdio.h> ++#include <limits.h> ++ ++static inline size_t ++z_mult_no_oflow_(size_t n, size_t size) ++{ ++ if (size != 0 && n > ULONG_MAX / size) { ++ fprintf(stderr, ++ "w3m: overflow in malloc, %lu*%lu\n", (unsigned long)n, (unsigned long)size); ++ exit(1); ++ } ++ return n * size; ++} ++ ++#define New(type) \ ++ (GC_MALLOC(sizeof(type))) ++ ++#define NewAtom(type) \ ++ (GC_MALLOC_ATOMIC(sizeof(type))) ++ ++#define New_N(type, n) \ ++ (GC_MALLOC(z_mult_no_oflow_((n), sizeof(type)))) ++ ++#define NewAtom_N(type, n) \ ++ (GC_MALLOC_ATOMIC(z_mult_no_oflow_((n), sizeof(type)))) ++ ++#define New_Reuse(type, ptr, n) \ ++ (GC_REALLOC((ptr), z_mult_no_oflow_((n), sizeof(type)))) ++ ++#endif /* W3_ALLOC_H */ +diff --git a/anchor.c b/anchor.c +index 27bbd56..a353bb9 100644 +--- a/anchor.c ++++ b/anchor.c +@@ -11,7 +11,7 @@ putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return, + { + int n, i, j; + Anchor *a; +- BufferPoint bp; ++ BufferPoint bp = { 0 }; + if (al == NULL) { + al = New(AnchorList); + al->anchors = NULL; +@@ -200,10 +200,11 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos) + if (*(p2 - 1) == '>') + p2--; + } +- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset, +- buf->document_charset); +- tmp = Sprintf("news:%s", file_quote(tmp->ptr)); +- return registerHref(buf, tmp->ptr, NULL, NO_REFERER, NULL, '\0', line, ++ tmp = Strnew_charp("news:"); ++ Strcat_charp_n(tmp, p1, p2 - p1); ++ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf), ++ buf->document_charset), ++ NULL, NO_REFERER, NULL, '\0', line, + pos); + } + #endif /* USE_NNTP */ +@@ -213,9 +214,10 @@ _put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos) + { + Str tmp; + +- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset, +- buf->document_charset); +- return registerHref(buf, url_quote(tmp->ptr), NULL, NO_REFERER, NULL, ++ tmp = Strnew_charp_n(p1, p2 - p1); ++ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf), ++ buf->document_charset), ++ NULL, NO_REFERER, NULL, + '\0', line, pos); + } + +@@ -756,7 +758,7 @@ link_list_panel(Buffer *buf) + p = parsedURL2Str(&pu)->ptr; + u = html_quote(p); + if (DecodeURL) +- p = html_quote(url_unquote_conv(p, buf->document_charset)); ++ p = html_quote(url_decode2(p, buf)); + else + p = u; + } +@@ -787,7 +789,7 @@ link_list_panel(Buffer *buf) + p = parsedURL2Str(&pu)->ptr; + u = html_quote(p); + if (DecodeURL) +- p = html_quote(url_unquote_conv(p, buf->document_charset)); ++ p = html_quote(url_decode2(p, buf)); + else + p = u; + t = getAnchorText(buf, al, a); +@@ -809,16 +811,13 @@ link_list_panel(Buffer *buf) + p = parsedURL2Str(&pu)->ptr; + u = html_quote(p); + if (DecodeURL) +- p = html_quote(url_unquote_conv(p, buf->document_charset)); ++ p = html_quote(url_decode2(p, buf)); + else + p = u; + if (a->title && *a->title) + t = html_quote(a->title); +- else if (DecodeURL) +- t = html_quote(url_unquote_conv +- (a->url, buf->document_charset)); + else +- t = html_quote(a->url); ++ t = html_quote(url_decode2(a->url, buf)); + Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p, + "\n", NULL); + a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos); +@@ -842,19 +841,13 @@ link_list_panel(Buffer *buf) + p = parsedURL2Str(&pu)->ptr; + u = html_quote(p); + if (DecodeURL) +- p = html_quote(url_unquote_conv(p, +- buf-> +- document_charset)); ++ p = html_quote(url_decode2(p, buf)); + else + p = u; + if (m->alt && *m->alt) + t = html_quote(m->alt); +- else if (DecodeURL) +- t = html_quote(url_unquote_conv(m->url, +- buf-> +- document_charset)); + else +- t = html_quote(m->url); ++ t = html_quote(url_decode2(m->url, buf)); + Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, + "</a><br>", p, "\n", NULL); + } +diff --git a/config.guess b/config.guess +index 51fab47..1f5c50c 100755 +--- a/config.guess ++++ b/config.guess +@@ -1,13 +1,12 @@ + #! /bin/sh + # Attempt to guess a canonical system name. +-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ++# Copyright 1992-2014 Free Software Foundation, Inc. + +-timestamp='2004-03-12' ++timestamp='2014-03-23' + + # This file 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 ++# the Free Software Foundation; either version 3 of the License, or + # (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, but +@@ -16,24 +15,22 @@ timestamp='2004-03-12' + # General Public License for more details. + # + # You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++# along with this program; if not, see <http://www.gnu.org/licenses/>. + # + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a + # configuration script generated by Autoconf, you may include it under +-# the same distribution terms that you use for the rest of that program. +- +-# Originally written by Per Bothner <per@bothner.com>. +-# Please send patches to <config-patches@gnu.org>. Submit a context +-# diff and a properly formatted ChangeLog entry. ++# the same distribution terms that you use for the rest of that ++# program. This Exception is an additional permission under section 7 ++# of the GNU General Public License, version 3 ("GPLv3"). ++# ++# Originally written by Per Bothner. + # +-# This script attempts to guess a canonical system name similar to +-# config.sub. If it succeeds, it prints the system name on stdout, and +-# exits with 0. Otherwise, it exits with 1. ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + # +-# The plan is that this can be called by configure scripts if you +-# don't specify an explicit build system type. ++# Please send patches with a ChangeLog entry to config-patches@gnu.org. ++ + + me=`echo "$0" | sed -e 's,.*/,,'` + +@@ -53,8 +50,7 @@ version="\ + GNU config.guess ($timestamp) + + Originally written by Per Bothner. +-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +-Free Software Foundation, Inc. ++Copyright 1992-2014 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -66,11 +62,11 @@ Try \`$me --help' for more information." + while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) +- echo "$timestamp" ; exit 0 ;; ++ echo "$timestamp" ; exit ;; + --version | -v ) +- echo "$version" ; exit 0 ;; ++ echo "$version" ; exit ;; + --help | --h* | -h ) +- echo "$usage"; exit 0 ;; ++ echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. +@@ -104,7 +100,7 @@ set_cc_for_build=' + trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; + trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; + : ${TMPDIR=/tmp} ; +- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || ++ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +@@ -123,7 +119,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +-esac ;' ++esac ; set_cc_for_build= ;' + + # This is needed to find uname on a Pyramid OSx when run in the BSD universe. + # (ghazi@noc.rutgers.edu 1994-08-24) +@@ -136,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown + UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown + UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + ++case "${UNAME_SYSTEM}" in ++Linux|GNU|GNU/*) ++ # If the system lacks a compiler, then just pick glibc. ++ # We could probably try harder. ++ LIBC=gnu ++ ++ eval $set_cc_for_build ++ cat <<-EOF > $dummy.c ++ #include <features.h> ++ #if defined(__UCLIBC__) ++ LIBC=uclibc ++ #elif defined(__dietlibc__) ++ LIBC=dietlibc ++ #else ++ LIBC=gnu ++ #endif ++ EOF ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ++ ;; ++esac ++ + # Note: order is significant - the case branches are not exclusive. + + case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or +- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, ++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward +@@ -158,6 +175,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; ++ sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched +@@ -166,7 +184,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ +- | grep __ELF__ >/dev/null ++ | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? +@@ -176,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + fi + ;; + *) +- os=netbsd ++ os=netbsd + ;; + esac + # The OS release +@@ -196,71 +214,34 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" +- exit 0 ;; +- amd64:OpenBSD:*:*) +- echo x86_64-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- amiga:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- arc:OpenBSD:*:*) +- echo mipsel-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- cats:OpenBSD:*:*) +- echo arm-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- hp300:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- mac68k:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- macppc:OpenBSD:*:*) +- echo powerpc-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- mvme68k:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- mvme88k:OpenBSD:*:*) +- echo m88k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- mvmeppc:OpenBSD:*:*) +- echo powerpc-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- pegasos:OpenBSD:*:*) +- echo powerpc-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- pmax:OpenBSD:*:*) +- echo mipsel-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- sgi:OpenBSD:*:*) +- echo mipseb-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- sun3:OpenBSD:*:*) +- echo m68k-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; +- wgrisc:OpenBSD:*:*) +- echo mipsel-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; ++ *:Bitrig:*:*) ++ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} ++ exit ;; + *:OpenBSD:*:*) +- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} +- exit 0 ;; ++ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} ++ exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; ++ *:SolidBSD:*:*) ++ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} ++ exit ;; + macppc:MirBSD:*:*) +- echo powerppc-unknown-mirbsd${UNAME_RELEASE} +- exit 0 ;; ++ echo powerpc-unknown-mirbsd${UNAME_RELEASE} ++ exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) +- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on +@@ -306,40 +287,46 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +- exit 0 ;; +- Alpha*:OpenVMS:*:*) +- echo alpha-hp-vms +- exit 0 ;; ++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code. ++ exitcode=$? ++ trap '' 0 ++ exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix +- exit 0 ;; ++ exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 +- exit 0 ;; ++ exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 +- exit 0;; ++ exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos +- exit 0 ;; ++ exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos +- exit 0 ;; ++ exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition +- exit 0 ;; ++ exit ;; ++ *:z/VM:*:*) ++ echo s390-ibm-zvmoe ++ exit ;; + *:OS400:*:*) +- echo powerpc-ibm-os400 +- exit 0 ;; ++ echo powerpc-ibm-os400 ++ exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} +- exit 0;; ++ exit ;; ++ arm*:riscos:*:*|arm*:RISCOS:*:*) ++ echo arm-unknown-riscos ++ exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp +- exit 0;; ++ exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then +@@ -347,32 +334,51 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + else + echo pyramid-pyramid-bsd + fi +- exit 0 ;; ++ exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 +- exit 0 ;; ++ exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 +- exit 0 ;; +- DRS?6000:UNIX_SV:4.2*:7*) ++ exit ;; ++ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in +- sparc) echo sparc-icl-nx7 && exit 0 ;; ++ sparc) echo sparc-icl-nx7; exit ;; + esac ;; ++ s390x:SunOS:*:*) ++ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; ++ exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; +- i86pc:SunOS:5.*:*) +- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; ++ exit ;; ++ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) ++ echo i386-pc-auroraux${UNAME_RELEASE} ++ exit ;; ++ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) ++ eval $set_cc_for_build ++ SUN_ARCH="i386" ++ # If there is a compiler, see if it is configured for 64-bit objects. ++ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. ++ # This test works for both compilers. ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ SUN_ARCH="x86_64" ++ fi ++ fi ++ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; ++ exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) +@@ -381,10 +387,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` +- exit 0 ;; ++ exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 +@@ -396,10 +402,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac +- exit 0 ;; ++ exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor +@@ -409,41 +415,41 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) +- echo m68k-atari-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) +- echo m68k-atari-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) +- echo m68k-milan-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-milan-mint${UNAME_RELEASE} ++ exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) +- echo m68k-hades-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-hades-mint${UNAME_RELEASE} ++ exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) +- echo m68k-unknown-mint${UNAME_RELEASE} +- exit 0 ;; ++ echo m68k-unknown-mint${UNAME_RELEASE} ++ exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 +- exit 0 ;; ++ exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +@@ -467,35 +473,36 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + exit (-1); + } + EOF +- $CC_FOR_BUILD -o $dummy $dummy.c \ +- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ +- && exit 0 ++ $CC_FOR_BUILD -o $dummy $dummy.c && ++ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && ++ SYSTEM_NAME=`$dummy $dummyarg` && ++ { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax +- exit 0 ;; ++ exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax +- exit 0 ;; ++ exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax +- exit 0 ;; ++ exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix +- exit 0 ;; ++ exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 +- exit 0 ;; ++ exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 +- exit 0 ;; ++ exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 +- exit 0 ;; ++ exit ;; + AViiON:dgux:*:*) +- # DG/UX returns AViiON for all architectures +- UNAME_PROCESSOR=`/usr/bin/uname -p` ++ # DG/UX returns AViiON for all architectures ++ UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ +@@ -508,29 +515,29 @@ EOF + else + echo i586-dg-dgux${UNAME_RELEASE} + fi +- exit 0 ;; ++ exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 +- exit 0 ;; ++ exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 +- exit 0 ;; ++ exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 +- exit 0 ;; ++ exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd +- exit 0 ;; ++ exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` +- exit 0 ;; ++ exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. +- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id +- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' ++ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id ++ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix +- exit 0 ;; ++ exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` +@@ -538,7 +545,7 @@ EOF + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} +- exit 0 ;; ++ exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build +@@ -553,15 +560,19 @@ EOF + exit(0); + } + EOF +- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 +- echo rs6000-ibm-aix3.2.5 ++ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` ++ then ++ echo "$SYSTEM_NAME" ++ else ++ echo rs6000-ibm-aix3.2.5 ++ fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi +- exit 0 ;; +- *:AIX:*:[45]) ++ exit ;; ++ *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 +@@ -574,28 +585,28 @@ EOF + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} +- exit 0 ;; ++ exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix +- exit 0 ;; ++ exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 +- exit 0 ;; ++ exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to +- exit 0 ;; # report: romp-ibm BSD 4.3 ++ exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx +- exit 0 ;; ++ exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 +- exit 0 ;; ++ exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd +- exit 0 ;; ++ exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 +- exit 0 ;; ++ exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in +@@ -604,52 +615,52 @@ EOF + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` +- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` +- case "${sc_cpu_version}" in +- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 +- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 +- 532) # CPU_PA_RISC2_0 +- case "${sc_kernel_bits}" in +- 32) HP_ARCH="hppa2.0n" ;; +- 64) HP_ARCH="hppa2.0w" ;; ++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` ++ case "${sc_cpu_version}" in ++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 ++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 ++ 532) # CPU_PA_RISC2_0 ++ case "${sc_kernel_bits}" in ++ 32) HP_ARCH="hppa2.0n" ;; ++ 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 +- esac ;; +- esac ++ esac ;; ++ esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c ++ sed 's/^ //' << EOF >$dummy.c + +- #define _HPUX_SOURCE +- #include <stdlib.h> +- #include <unistd.h> ++ #define _HPUX_SOURCE ++ #include <stdlib.h> ++ #include <unistd.h> + +- int main () +- { +- #if defined(_SC_KERNEL_BITS) +- long bits = sysconf(_SC_KERNEL_BITS); +- #endif +- long cpu = sysconf (_SC_CPU_VERSION); ++ int main () ++ { ++ #if defined(_SC_KERNEL_BITS) ++ long bits = sysconf(_SC_KERNEL_BITS); ++ #endif ++ long cpu = sysconf (_SC_CPU_VERSION); + +- switch (cpu) +- { +- case CPU_PA_RISC1_0: puts ("hppa1.0"); break; +- case CPU_PA_RISC1_1: puts ("hppa1.1"); break; +- case CPU_PA_RISC2_0: +- #if defined(_SC_KERNEL_BITS) +- switch (bits) +- { +- case 64: puts ("hppa2.0w"); break; +- case 32: puts ("hppa2.0n"); break; +- default: puts ("hppa2.0"); break; +- } break; +- #else /* !defined(_SC_KERNEL_BITS) */ +- puts ("hppa2.0"); break; +- #endif +- default: puts ("hppa1.0"); break; +- } +- exit (0); +- } ++ switch (cpu) ++ { ++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; ++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; ++ case CPU_PA_RISC2_0: ++ #if defined(_SC_KERNEL_BITS) ++ switch (bits) ++ { ++ case 64: puts ("hppa2.0w"); break; ++ case 32: puts ("hppa2.0n"); break; ++ default: puts ("hppa2.0"); break; ++ } break; ++ #else /* !defined(_SC_KERNEL_BITS) */ ++ puts ("hppa2.0"); break; ++ #endif ++ default: puts ("hppa1.0"); break; ++ } ++ exit (0); ++ } + EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa +@@ -657,9 +668,19 @@ EOF + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then +- # avoid double evaluation of $set_cc_for_build +- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build +- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null ++ eval $set_cc_for_build ++ ++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating ++ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler ++ # generating 64-bit code. GNU and HP use different nomenclature: ++ # ++ # $ CC_FOR_BUILD=cc ./config.guess ++ # => hppa2.0w-hp-hpux11.23 ++ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess ++ # => hppa64-hp-hpux11.23 ++ ++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | ++ grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else +@@ -667,11 +688,11 @@ EOF + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} +- exit 0 ;; ++ exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} +- exit 0 ;; ++ exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +@@ -699,340 +720,345 @@ EOF + exit (0); + } + EOF +- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 ++ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && ++ { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 +- exit 0 ;; ++ exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd +- exit 0 ;; ++ exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd +- exit 0 ;; ++ exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix +- exit 0 ;; ++ exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf +- exit 0 ;; ++ exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf +- exit 0 ;; ++ exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi +- exit 0 ;; ++ exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites +- exit 0 ;; ++ exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd +- exit 0 ;; ++ exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi +- exit 0 ;; ++ exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd +- exit 0 ;; ++ exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd +- exit 0 ;; ++ exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd +- exit 0 ;; ++ exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ exit ;; + *:UNICOS/mp:*:*) +- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +- exit 0 ;; ++ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` +- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" +- exit 0 ;; ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` ++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; + 5000:UNIX_System_V:4.*:*) +- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` +- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" +- exit 0 ;; ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` ++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:FreeBSD:*:*) +- # Determine whether the default compiler uses glibc. +- eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c +- #include <features.h> +- #if __GLIBC__ >= 2 +- LIBC=gnu +- #else +- LIBC= +- #endif +-EOF +- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` +- # GNU/KFreeBSD systems have a "k" prefix to indicate we are using +- # FreeBSD's kernel, but not the complete OS. +- case ${LIBC} in gnu) kernel_only='k' ;; esac +- echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} +- exit 0 ;; ++ UNAME_PROCESSOR=`/usr/bin/uname -p` ++ case ${UNAME_PROCESSOR} in ++ amd64) ++ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ *) ++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ esac ++ exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin +- exit 0 ;; +- i*:MINGW*:*) ++ exit ;; ++ *:MINGW64*:*) ++ echo ${UNAME_MACHINE}-pc-mingw64 ++ exit ;; ++ *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 +- exit 0 ;; ++ exit ;; ++ *:MSYS*:*) ++ echo ${UNAME_MACHINE}-pc-msys ++ exit ;; ++ i*:windows32*:*) ++ # uname -m includes "-pc" on this system. ++ echo ${UNAME_MACHINE}-mingw32 ++ exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 +- exit 0 ;; +- x86:Interix*:[34]*) +- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' +- exit 0 ;; ++ exit ;; ++ *:Interix*:*) ++ case ${UNAME_MACHINE} in ++ x86) ++ echo i586-pc-interix${UNAME_RELEASE} ++ exit ;; ++ authenticamd | genuineintel | EM64T) ++ echo x86_64-unknown-interix${UNAME_RELEASE} ++ exit ;; ++ IA64) ++ echo ia64-unknown-interix${UNAME_RELEASE} ++ exit ;; ++ esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks +- exit 0 ;; ++ exit ;; ++ 8664:Windows_NT:*) ++ echo x86_64-pc-mks ++ exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix +- exit 0 ;; ++ exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin +- exit 0 ;; ++ exit ;; ++ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) ++ echo x86_64-unknown-cygwin ++ exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin +- exit 0 ;; ++ exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +- exit 0 ;; ++ exit ;; + *:GNU:*:*) + # the GNU system +- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` +- exit 0 ;; ++ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` ++ exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland +- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} ++ exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix +- exit 0 ;; ++ exit ;; ++ aarch64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ aarch64_be:Linux:*:*) ++ UNAME_MACHINE=aarch64_be ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ alpha:Linux:*:*) ++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in ++ EV5) UNAME_MACHINE=alphaev5 ;; ++ EV56) UNAME_MACHINE=alphaev56 ;; ++ PCA56) UNAME_MACHINE=alphapca56 ;; ++ PCA57) UNAME_MACHINE=alphapca56 ;; ++ EV6) UNAME_MACHINE=alphaev6 ;; ++ EV67) UNAME_MACHINE=alphaev67 ;; ++ EV68*) UNAME_MACHINE=alphaev68 ;; ++ esac ++ objdump --private-headers /bin/sh | grep -q ld.so.1 ++ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ arc:Linux:*:* | arceb:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; + arm*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ eval $set_cc_for_build ++ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_EABI__ ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ else ++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_PCS_VFP ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi ++ else ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf ++ fi ++ fi ++ exit ;; ++ avr32*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; + cris:Linux:*:*) +- echo cris-axis-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-axis-linux-${LIBC} ++ exit ;; ++ crisv32:Linux:*:*) ++ echo ${UNAME_MACHINE}-axis-linux-${LIBC} ++ exit ;; ++ frv:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ hexagon:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ i*86:Linux:*:*) ++ echo ${UNAME_MACHINE}-pc-linux-${LIBC} ++ exit ;; + ia64:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; + m32r*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; + m68*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; +- mips:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU +- #undef mips +- #undef mipsel ++ #undef ${UNAME_MACHINE} ++ #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) +- CPU=mipsel ++ CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) +- CPU=mips ++ CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif + EOF +- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` +- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` ++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; +- mips64:Linux:*:*) +- eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c +- #undef CPU +- #undef mips64 +- #undef mips64el +- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) +- CPU=mips64el +- #else +- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) +- CPU=mips64 +- #else +- CPU= +- #endif +- #endif +-EOF +- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` +- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 +- ;; +- ppc:Linux:*:*) +- echo powerpc-unknown-linux-gnu +- exit 0 ;; +- ppc64:Linux:*:*) +- echo powerpc64-unknown-linux-gnu +- exit 0 ;; +- alpha:Linux:*:*) +- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in +- EV5) UNAME_MACHINE=alphaev5 ;; +- EV56) UNAME_MACHINE=alphaev56 ;; +- PCA56) UNAME_MACHINE=alphapca56 ;; +- PCA57) UNAME_MACHINE=alphapca56 ;; +- EV6) UNAME_MACHINE=alphaev6 ;; +- EV67) UNAME_MACHINE=alphaev67 ;; +- EV68*) UNAME_MACHINE=alphaev68 ;; +- esac +- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null +- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi +- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} +- exit 0 ;; ++ openrisc*:Linux:*:*) ++ echo or1k-unknown-linux-${LIBC} ++ exit ;; ++ or32:Linux:*:* | or1k*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ padre:Linux:*:*) ++ echo sparc-unknown-linux-${LIBC} ++ exit ;; ++ parisc64:Linux:*:* | hppa64:Linux:*:*) ++ echo hppa64-unknown-linux-${LIBC} ++ exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in +- PA7*) echo hppa1.1-unknown-linux-gnu ;; +- PA8*) echo hppa2.0-unknown-linux-gnu ;; +- *) echo hppa-unknown-linux-gnu ;; ++ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; ++ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; ++ *) echo hppa-unknown-linux-${LIBC} ;; + esac +- exit 0 ;; +- parisc64:Linux:*:* | hppa64:Linux:*:*) +- echo hppa64-unknown-linux-gnu +- exit 0 ;; ++ exit ;; ++ ppc64:Linux:*:*) ++ echo powerpc64-unknown-linux-${LIBC} ++ exit ;; ++ ppc:Linux:*:*) ++ echo powerpc-unknown-linux-${LIBC} ++ exit ;; ++ ppc64le:Linux:*:*) ++ echo powerpc64le-unknown-linux-${LIBC} ++ exit ;; ++ ppcle:Linux:*:*) ++ echo powerpcle-unknown-linux-${LIBC} ++ exit ;; + s390:Linux:*:* | s390x:Linux:*:*) +- echo ${UNAME_MACHINE}-ibm-linux +- exit 0 ;; ++ echo ${UNAME_MACHINE}-ibm-linux-${LIBC} ++ exit ;; + sh64*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; + sh*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu +- exit 0 ;; ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ tile*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ vax:Linux:*:*) ++ echo ${UNAME_MACHINE}-dec-linux-${LIBC} ++ exit ;; + x86_64:Linux:*:*) +- echo x86_64-unknown-linux-gnu +- exit 0 ;; +- i*86:Linux:*:*) +- # The BFD linker knows what the default object file format is, so +- # first see if it will tell us. cd to the root directory to prevent +- # problems with other programs or directories called `ld' in the path. +- # Set LC_ALL=C to ensure ld outputs messages in English. +- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ +- | sed -ne '/supported targets:/!d +- s/[ ][ ]*/ /g +- s/.*supported targets: *// +- s/ .*// +- p'` +- case "$ld_supported_targets" in +- elf32-i386) +- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" +- ;; +- a.out-i386-linux) +- echo "${UNAME_MACHINE}-pc-linux-gnuaout" +- exit 0 ;; +- coff-i386) +- echo "${UNAME_MACHINE}-pc-linux-gnucoff" +- exit 0 ;; +- "") +- # Either a pre-BFD a.out linker (linux-gnuoldld) or +- # one that does not give us useful --help. +- echo "${UNAME_MACHINE}-pc-linux-gnuoldld" +- exit 0 ;; +- esac +- # Determine whether the default compiler is a.out or elf +- eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c +- #include <features.h> +- #ifdef __ELF__ +- # ifdef __GLIBC__ +- # if __GLIBC__ >= 2 +- LIBC=gnu +- # else +- LIBC=gnulibc1 +- # endif +- # else +- LIBC=gnulibc1 +- # endif +- #else +- #ifdef __INTEL_COMPILER +- LIBC=gnu +- #else +- LIBC=gnuaout +- #endif +- #endif +- #ifdef __dietlibc__ +- LIBC=dietlibc +- #endif +-EOF +- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` +- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 +- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 +- ;; ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ xtensa*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 +- exit 0 ;; ++ exit ;; + i*86:UNIX_SV:4.2MP:2.*) +- # Unixware is an offshoot of SVR4, but it has its own version +- # number series starting with 2... +- # I am not positive that other SVR4 systems won't match this, ++ # Unixware is an offshoot of SVR4, but it has its own version ++ # number series starting with 2... ++ # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. +- # Use sysv4.2uw... so that sysv4* matches it. ++ # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} +- exit 0 ;; ++ exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx +- exit 0 ;; ++ exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop +- exit 0 ;; ++ exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos +- exit 0 ;; +- i*86:syllable:*:*) ++ exit ;; ++ i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable +- exit 0 ;; +- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) ++ exit ;; ++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp +- exit 0 ;; ++ exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then +@@ -1040,15 +1066,16 @@ EOF + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi +- exit 0 ;; +- i*86:*:5:[78]*) ++ exit ;; ++ i*86:*:5:[678]*) ++ # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} +- exit 0 ;; ++ exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` +@@ -1066,73 +1093,86 @@ EOF + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi +- exit 0 ;; ++ exit ;; + pc:*:*:*) + # Left here for compatibility: +- # uname -m prints for DJGPP always 'pc', but it prints nothing about +- # the processor, so we play safe by assuming i386. +- echo i386-pc-msdosdjgpp +- exit 0 ;; ++ # uname -m prints for DJGPP always 'pc', but it prints nothing about ++ # the processor, so we play safe by assuming i586. ++ # Note: whatever this is, it MUST be the same as what config.sub ++ # prints for the "djgpp" host, or else GDB configury will decide that ++ # this is a cross-build. ++ echo i586-pc-msdosdjgpp ++ exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 +- exit 0 ;; ++ exit ;; + paragon:*:*:*) + echo i860-intel-osf1 +- exit 0 ;; ++ exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi +- exit 0 ;; ++ exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv +- exit 0 ;; ++ exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv +- exit 0 ;; ++ exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix +- exit 0 ;; +- M68*:*:R3V[567]*:*) +- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; +- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) ++ exit ;; ++ M68*:*:R3V[5678]*:*) ++ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; ++ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +- && echo i486-ncr-sysv4.3${OS_REL} && exit 0 ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ +- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) +- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +- && echo i486-ncr-sysv4 && exit 0 ;; ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4; exit; } ;; ++ NCR*:*:4.2:* | MPRAS*:*:4.2:*) ++ OS_REL='.3' ++ test -r /etc/.relid \ ++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 +- exit 0 ;; ++ exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; +- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) ++ exit ;; ++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 +- exit 0 ;; ++ exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 +- exit 0 ;; ++ exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` +@@ -1140,68 +1180,109 @@ EOF + else + echo ns32k-sni-sysv + fi +- exit 0 ;; +- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort +- # says <Richard.M.Bartel@ccMail.Census.GOV> +- echo i586-unisys-sysv4 +- exit 0 ;; ++ exit ;; ++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort ++ # says <Richard.M.Bartel@ccMail.Census.GOV> ++ echo i586-unisys-sysv4 ++ exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 +- exit 0 ;; ++ exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 +- exit 0 ;; ++ exit ;; ++ i*86:VOS:*:*) ++ # From Paul.Green@stratus.com. ++ echo ${UNAME_MACHINE}-stratus-vos ++ exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos +- exit 0 ;; ++ exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 +- exit 0 ;; ++ exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then +- echo mips-nec-sysv${UNAME_RELEASE} ++ echo mips-nec-sysv${UNAME_RELEASE} + else +- echo mips-unknown-sysv${UNAME_RELEASE} ++ echo mips-unknown-sysv${UNAME_RELEASE} + fi +- exit 0 ;; ++ exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos +- exit 0 ;; ++ exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos +- exit 0 ;; ++ exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos +- exit 0 ;; ++ exit ;; ++ BePC:Haiku:*:*) # Haiku running on Intel PC compatible. ++ echo i586-pc-haiku ++ exit ;; ++ x86_64:Haiku:*:*) ++ echo x86_64-unknown-haiku ++ exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; ++ SX-7:SUPER-UX:*:*) ++ echo sx7-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-8:SUPER-UX:*:*) ++ echo sx8-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-8R:SUPER-UX:*:*) ++ echo sx8r-nec-superux${UNAME_RELEASE} ++ exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:Darwin:*:*) +- case `uname -p` in +- *86) UNAME_PROCESSOR=i686 ;; +- powerpc) UNAME_PROCESSOR=powerpc ;; +- esac ++ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown ++ eval $set_cc_for_build ++ if test "$UNAME_PROCESSOR" = unknown ; then ++ UNAME_PROCESSOR=powerpc ++ fi ++ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ case $UNAME_PROCESSOR in ++ i386) UNAME_PROCESSOR=x86_64 ;; ++ powerpc) UNAME_PROCESSOR=powerpc64 ;; ++ esac ++ fi ++ fi ++ elif test "$UNAME_PROCESSOR" = i386 ; then ++ # Avoid executing cc on OS X 10.9, as it ships with a stub ++ # that puts up a graphical alert prompting to install ++ # developer tools. Any system running Mac OS X 10.7 or ++ # later (Darwin 11 and later) is required to have a 64-bit ++ # processor. This is not true of the ARM version of Darwin ++ # that Apple uses in portable devices. ++ UNAME_PROCESSOR=x86_64 ++ fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then +@@ -1209,22 +1290,28 @@ EOF + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:QNX:*:4*) + echo i386-pc-qnx +- exit 0 ;; ++ exit ;; ++ NEO-?:NONSTOP_KERNEL:*:*) ++ echo neo-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ NSE-*:NONSTOP_KERNEL:*:*) ++ echo nse-tandem-nsk${UNAME_RELEASE} ++ exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux +- exit 0 ;; ++ exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv +- exit 0 ;; ++ exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} +- exit 0 ;; ++ exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 +@@ -1235,183 +1322,55 @@ EOF + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 +- exit 0 ;; ++ exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 +- exit 0 ;; ++ exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex +- exit 0 ;; ++ exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 +- exit 0 ;; ++ exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 +- exit 0 ;; ++ exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 +- exit 0 ;; ++ exit ;; + *:ITS:*:*) + echo pdp10-unknown-its +- exit 0 ;; ++ exit ;; + SEI:*:*:SEIUX) +- echo mips-sei-seiux${UNAME_RELEASE} +- exit 0 ;; ++ echo mips-sei-seiux${UNAME_RELEASE} ++ exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` +- exit 0 ;; ++ exit ;; ++ *:*VMS:*:*) ++ UNAME_MACHINE=`(uname -p) 2>/dev/null` ++ case "${UNAME_MACHINE}" in ++ A*) echo alpha-dec-vms ; exit ;; ++ I*) echo ia64-dec-vms ; exit ;; ++ V*) echo vax-dec-vms ; exit ;; ++ esac ;; ++ *:XENIX:*:SysV) ++ echo i386-pc-xenix ++ exit ;; ++ i*86:skyos:*:*) ++ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' ++ exit ;; ++ i*86:rdos:*:*) ++ echo ${UNAME_MACHINE}-pc-rdos ++ exit ;; ++ i*86:AROS:*:*) ++ echo ${UNAME_MACHINE}-pc-aros ++ exit ;; ++ x86_64:VMkernel:*:*) ++ echo ${UNAME_MACHINE}-unknown-esx ++ exit ;; + esac + +-#echo '(No uname command or uname output not recognized.)' 1>&2 +-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 +- +-eval $set_cc_for_build +-cat >$dummy.c <<EOF +-#ifdef _SEQUENT_ +-# include <sys/types.h> +-# include <sys/utsname.h> +-#endif +-main () +-{ +-#if defined (sony) +-#if defined (MIPSEB) +- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, +- I don't know.... */ +- printf ("mips-sony-bsd\n"); exit (0); +-#else +-#include <sys/param.h> +- printf ("m68k-sony-newsos%s\n", +-#ifdef NEWSOS4 +- "4" +-#else +- "" +-#endif +- ); exit (0); +-#endif +-#endif +- +-#if defined (__arm) && defined (__acorn) && defined (__unix) +- printf ("arm-acorn-riscix"); exit (0); +-#endif +- +-#if defined (hp300) && !defined (hpux) +- printf ("m68k-hp-bsd\n"); exit (0); +-#endif +- +-#if defined (NeXT) +-#if !defined (__ARCHITECTURE__) +-#define __ARCHITECTURE__ "m68k" +-#endif +- int version; +- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; +- if (version < 4) +- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); +- else +- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); +- exit (0); +-#endif +- +-#if defined (MULTIMAX) || defined (n16) +-#if defined (UMAXV) +- printf ("ns32k-encore-sysv\n"); exit (0); +-#else +-#if defined (CMU) +- printf ("ns32k-encore-mach\n"); exit (0); +-#else +- printf ("ns32k-encore-bsd\n"); exit (0); +-#endif +-#endif +-#endif +- +-#if defined (__386BSD__) +- printf ("i386-pc-bsd\n"); exit (0); +-#endif +- +-#if defined (sequent) +-#if defined (i386) +- printf ("i386-sequent-dynix\n"); exit (0); +-#endif +-#if defined (ns32000) +- printf ("ns32k-sequent-dynix\n"); exit (0); +-#endif +-#endif +- +-#if defined (_SEQUENT_) +- struct utsname un; +- +- uname(&un); +- +- if (strncmp(un.version, "V2", 2) == 0) { +- printf ("i386-sequent-ptx2\n"); exit (0); +- } +- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ +- printf ("i386-sequent-ptx1\n"); exit (0); +- } +- printf ("i386-sequent-ptx\n"); exit (0); +- +-#endif +- +-#if defined (vax) +-# if !defined (ultrix) +-# include <sys/param.h> +-# if defined (BSD) +-# if BSD == 43 +- printf ("vax-dec-bsd4.3\n"); exit (0); +-# else +-# if BSD == 199006 +- printf ("vax-dec-bsd4.3reno\n"); exit (0); +-# else +- printf ("vax-dec-bsd\n"); exit (0); +-# endif +-# endif +-# else +- printf ("vax-dec-bsd\n"); exit (0); +-# endif +-# else +- printf ("vax-dec-ultrix\n"); exit (0); +-# endif +-#endif +- +-#if defined (alliant) && defined (i860) +- printf ("i860-alliant-bsd\n"); exit (0); +-#endif +- +- exit (1); +-} +-EOF +- +-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 +- +-# Apollos put the system type in the environment. +- +-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } +- +-# Convex versions that predate uname can use getsysinfo(1) +- +-if [ -x /usr/convex/getsysinfo ] +-then +- case `getsysinfo -f cpu_type` in +- c1*) +- echo c1-convex-bsd +- exit 0 ;; +- c2*) +- if getsysinfo -f scalar_acc +- then echo c32-convex-bsd +- else echo c2-convex-bsd +- fi +- exit 0 ;; +- c34*) +- echo c34-convex-bsd +- exit 0 ;; +- c38*) +- echo c38-convex-bsd +- exit 0 ;; +- c4*) +- echo c4-convex-bsd +- exit 0 ;; +- esac +-fi +- + cat >&2 <<EOF + $0: unable to guess system type + +@@ -1419,7 +1378,9 @@ This script, last modified $timestamp, has failed to recognize + the operating system you are using. It is advised that you + download the most up to date version of the config scripts from + +- ftp://ftp.gnu.org/pub/gnu/config/ ++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD ++and ++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + + If the version you run ($0) is already up to date, please + send the following data and any information you think might be +diff --git a/config.h.in b/config.h.in +index 2f41eed..3b575e4 100644 +--- a/config.h.in ++++ b/config.h.in +@@ -25,6 +25,7 @@ + + #define PASSWD_FILE RC_DIR "/passwd" + #define PRE_FORM_FILE RC_DIR "/pre_form" ++#define SITECONF_FILE RC_DIR "/siteconf" + #define USER_MAILCAP RC_DIR "/mailcap" + #define SYS_MAILCAP CONF_DIR "/mailcap" + #define USER_MIMETYPES "~/.mime.types" +@@ -84,7 +85,7 @@ + #undef INET6 + #undef HAVE_SOCKLEN_T + #undef HAVE_OLD_SS_FAMILY +-#define USE_EGD ++#undef USE_EGD + #define ENABLE_REMOVE_TRAILINGSPACES + #undef MENU_THIN_FRAME + #undef USE_RAW_SCROLL +@@ -209,6 +210,10 @@ typedef RETSIGTYPE MySignalHandler; + #define SUPPORT_WIN9X_CONSOLE_MBCS 1 + #endif + ++#if defined(__CYGWIN__) && defined(__x86_64__) ++#define DONT_CALL_GC_AFTER_FORK ++#endif ++ + #if defined(__DJGPP__) + #define DEFAULT_TERM "dosansi" + #else +diff --git a/config.sub b/config.sub +index ba33103..bba4efb 100755 +--- a/config.sub ++++ b/config.sub +@@ -1,42 +1,40 @@ + #! /bin/sh + # Configuration validation subroutine script. +-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ++# Copyright 1992-2014 Free Software Foundation, Inc. + +-timestamp='2004-03-12' ++timestamp='2014-09-11' + +-# This file is (in principle) common to ALL GNU software. +-# The presence of a machine in this file suggests that SOME GNU software +-# can handle that machine. It does not imply ALL GNU software can. +-# +-# This file 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 ++# This file 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 3 of the License, or + # (at your option) any later version. + # +-# This program 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. ++# This program 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, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, +-# Boston, MA 02111-1307, USA. +- ++# along with this program; if not, see <http://www.gnu.org/licenses/>. ++# + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a + # configuration script generated by Autoconf, you may include it under +-# the same distribution terms that you use for the rest of that program. ++# the same distribution terms that you use for the rest of that ++# program. This Exception is an additional permission under section 7 ++# of the GNU General Public License, version 3 ("GPLv3"). + +-# Please send patches to <config-patches@gnu.org>. Submit a context +-# diff and a properly formatted ChangeLog entry. ++ ++# Please send patches with a ChangeLog entry to config-patches@gnu.org. + # + # Configuration subroutine to validate and canonicalize a configuration type. + # Supply the specified configuration type as an argument. + # If it is invalid, we print an error message on stderr and exit with code 1. + # Otherwise, we print the canonical config type on stdout and succeed. + ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD ++ + # This file is supposed to be the same for all GNU packages + # and recognize all the CPU types, system types and aliases + # that are meaningful with *any* GNU software. +@@ -70,8 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>." + version="\ + GNU config.sub ($timestamp) + +-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +-Free Software Foundation, Inc. ++Copyright 1992-2014 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -83,11 +80,11 @@ Try \`$me --help' for more information." + while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) +- echo "$timestamp" ; exit 0 ;; ++ echo "$timestamp" ; exit ;; + --version | -v ) +- echo "$version" ; exit 0 ;; ++ echo "$version" ; exit ;; + --help | --h* | -h ) +- echo "$usage"; exit 0 ;; ++ echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. +@@ -99,7 +96,7 @@ while test $# -gt 0 ; do + *local*) + # First pass through any local machine types. + echo $1 +- exit 0;; ++ exit ;; + + * ) + break ;; +@@ -118,11 +115,18 @@ esac + # Here we must recognize all the valid KERNEL-OS combinations. + maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` + case $maybe_os in +- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ +- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) ++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ ++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ ++ knetbsd*-gnu* | netbsd*-gnu* | \ ++ kopensolaris*-gnu* | \ ++ storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; ++ android-linux) ++ os=-linux-android ++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ++ ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] +@@ -145,10 +149,13 @@ case $os in + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ +- -apple | -axis) ++ -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; ++ -bluegene*) ++ os=-cnk ++ ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 +@@ -163,13 +170,17 @@ case $os in + os=-chorusos + basic_machine=$1 + ;; +- -chorusrdb) +- os=-chorusrdb ++ -chorusrdb) ++ os=-chorusrdb + basic_machine=$1 +- ;; ++ ;; + -hiux*) + os=-hiuxwe2 + ;; ++ -sco6) ++ os=-sco5v6 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +@@ -186,6 +197,10 @@ case $os in + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; ++ -sco5v6*) ++ # Don't forget version if it is 3.2v4 or newer. ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +@@ -203,6 +218,12 @@ case $os in + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; ++ -lynx*178) ++ os=-lynxos178 ++ ;; ++ -lynx*5) ++ os=-lynxos5 ++ ;; + -lynx*) + os=-lynxos + ;; +@@ -227,57 +248,109 @@ case $basic_machine in + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ ++ | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ +- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ +- | c4x | clipper \ ++ | arc | arceb \ ++ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ ++ | avr | avr32 \ ++ | be32 | be64 \ ++ | bfin \ ++ | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ +- | fr30 | frv \ ++ | epiphany \ ++ | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ ++ | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ +- | m32r | m32rle | m68000 | m68k | m88k | mcore \ ++ | k1om \ ++ | le32 | le64 \ ++ | lm32 \ ++ | m32c | m32r | m32rle | m68000 | m68k | m88k \ ++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ +- | mips64vr | mips64vrel \ ++ | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ ++ | mips64r5900 | mips64r5900el \ ++ | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ ++ | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ ++ | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ ++ | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ ++ | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ ++ | moxie \ ++ | mt \ + | msp430 \ ++ | nds32 | nds32le | nds32be \ ++ | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ +- | openrisc | or32 \ ++ | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ +- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ ++ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ +- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ ++ | riscv32 | riscv64 \ ++ | rl78 | rx \ ++ | score \ ++ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ +- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ +- | strongarm \ +- | tahoe | thumb | tic4x | tic80 | tron \ +- | v850 | v850e \ ++ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ ++ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ ++ | spu \ ++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ ++ | ubicom32 \ ++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ +- | x86 | xscale | xstormy16 | xtensa \ +- | z8k) ++ | x86 | xc16x | xstormy16 | xtensa \ ++ | z8k | z80) + basic_machine=$basic_machine-unknown + ;; +- m6811 | m68hc11 | m6812 | m68hc12) +- # Motorola 68HC11/12. ++ c54x) ++ basic_machine=tic54x-unknown ++ ;; ++ c55x) ++ basic_machine=tic55x-unknown ++ ;; ++ c6x) ++ basic_machine=tic6x-unknown ++ ;; ++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; ++ ms1) ++ basic_machine=mt-unknown ++ ;; ++ ++ strongarm | thumb | xscale) ++ basic_machine=arm-unknown ++ ;; ++ xgate) ++ basic_machine=$basic_machine-unknown ++ os=-none ++ ;; ++ xscaleeb) ++ basic_machine=armeb-unknown ++ ;; ++ ++ xscaleel) ++ basic_machine=armel-unknown ++ ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and +@@ -293,59 +366,86 @@ case $basic_machine in + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ ++ | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ +- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ ++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ +- | avr-* \ +- | bs2000-* \ +- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ +- | clipper-* | cydra-* \ ++ | avr-* | avr32-* \ ++ | be32-* | be64-* \ ++ | bfin-* | bs2000-* \ ++ | c[123]* | c30-* | [cjt]90-* | c4x-* \ ++ | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ +- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ ++ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ ++ | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ +- | m32r-* | m32rle-* \ ++ | k1om-* \ ++ | le32-* | le64-* \ ++ | lm32-* \ ++ | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ +- | m88110-* | m88k-* | mcore-* \ ++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ ++ | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ +- | mips64vr-* | mips64vrel-* \ ++ | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ ++ | mips64r5900-* | mips64r5900el-* \ ++ | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ ++ | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ ++ | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ ++ | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ ++ | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ ++ | mmix-* \ ++ | mt-* \ + | msp430-* \ +- | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ ++ | nds32-* | nds32le-* | nds32be-* \ ++ | nios-* | nios2-* | nios2eb-* | nios2el-* \ ++ | none-* | np1-* | ns16k-* | ns32k-* \ ++ | open8-* \ ++ | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ +- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ ++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ +- | romp-* | rs6000-* \ +- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ ++ | rl78-* | romp-* | rs6000-* | rx-* \ ++ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ +- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ +- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ +- | tahoe-* | thumb-* \ ++ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ ++ | sparclite-* \ ++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ ++ | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ ++ | tile*-* \ + | tron-* \ +- | v850-* | v850e-* | vax-* \ ++ | ubicom32-* \ ++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ ++ | vax-* \ + | we32k-* \ +- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ +- | xtensa-* \ ++ | x86-* | x86_64-* | xc16x-* | xps100-* \ ++ | xstormy16-* | xtensa*-* \ + | ymp-* \ +- | z8k-*) ++ | z8k-* | z80-*) ++ ;; ++ # Recognize the basic CPU types without company name, with glob match. ++ xtensa*) ++ basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. +@@ -363,7 +463,7 @@ case $basic_machine in + basic_machine=a29k-amd + os=-udi + ;; +- abacus) ++ abacus) + basic_machine=abacus-unknown + ;; + adobe68k) +@@ -409,6 +509,10 @@ case $basic_machine in + basic_machine=m68k-apollo + os=-bsd + ;; ++ aros) ++ basic_machine=i386-pc ++ os=-aros ++ ;; + aux) + basic_machine=m68k-apple + os=-aux +@@ -417,10 +521,35 @@ case $basic_machine in + basic_machine=ns32k-sequent + os=-dynix + ;; ++ blackfin) ++ basic_machine=bfin-unknown ++ os=-linux ++ ;; ++ blackfin-*) ++ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; ++ bluegene*) ++ basic_machine=powerpc-ibm ++ os=-cnk ++ ;; ++ c54x-*) ++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c55x-*) ++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c6x-*) ++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; ++ cegcc) ++ basic_machine=arm-unknown ++ os=-cegcc ++ ;; + convex-c1) + basic_machine=c1-convex + os=-bsd +@@ -445,13 +574,20 @@ case $basic_machine in + basic_machine=j90-cray + os=-unicos + ;; +- cr16c) +- basic_machine=cr16c-unknown ++ craynv) ++ basic_machine=craynv-cray ++ os=-unicosmp ++ ;; ++ cr16 | cr16-*) ++ basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; ++ crisv32 | crisv32-* | etraxfs*) ++ basic_machine=crisv32-axis ++ ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; +@@ -481,6 +617,14 @@ case $basic_machine in + basic_machine=m88k-motorola + os=-sysv3 + ;; ++ dicos) ++ basic_machine=i686-pc ++ os=-dicos ++ ;; ++ djgpp) ++ basic_machine=i586-pc ++ os=-msdosdjgpp ++ ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx +@@ -592,7 +736,6 @@ case $basic_machine in + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +-# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 +@@ -631,6 +774,14 @@ case $basic_machine in + basic_machine=m68k-isi + os=-sysv + ;; ++ m68knommu) ++ basic_machine=m68k-unknown ++ os=-linux ++ ;; ++ m68knommu-*) ++ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; + m88k-omron*) + basic_machine=m88k-omron + ;; +@@ -642,10 +793,21 @@ case $basic_machine in + basic_machine=ns32k-utek + os=-sysv + ;; ++ microblaze*) ++ basic_machine=microblaze-xilinx ++ ;; ++ mingw64) ++ basic_machine=x86_64-pc ++ os=-mingw64 ++ ;; + mingw32) +- basic_machine=i386-pc ++ basic_machine=i686-pc + os=-mingw32 + ;; ++ mingw32ce) ++ basic_machine=arm-unknown ++ os=-mingw32ce ++ ;; + miniframe) + basic_machine=m68000-convergent + ;; +@@ -659,10 +821,6 @@ case $basic_machine in + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; +- mmix*) +- basic_machine=mmix-knuth +- os=-mmixware +- ;; + monitor) + basic_machine=m68k-rom68k + os=-coff +@@ -671,14 +829,29 @@ case $basic_machine in + basic_machine=powerpc-unknown + os=-morphos + ;; ++ moxiebox) ++ basic_machine=moxie-unknown ++ os=-moxiebox ++ ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; ++ ms1-*) ++ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ++ ;; ++ msys) ++ basic_machine=i686-pc ++ os=-msys ++ ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; ++ nacl) ++ basic_machine=le32-unknown ++ os=-nacl ++ ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 +@@ -743,9 +916,11 @@ case $basic_machine in + np1) + basic_machine=np1-gould + ;; +- nv1) +- basic_machine=nv1-cray +- os=-unicosmp ++ neo-tandem) ++ basic_machine=neo-tandem ++ ;; ++ nse-tandem) ++ basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem +@@ -754,9 +929,8 @@ case $basic_machine in + basic_machine=hppa1.1-oki + os=-proelf + ;; +- or32 | or32-*) ++ openrisc | openrisc-*) + basic_machine=or32-unknown +- os=-coff + ;; + os400) + basic_machine=powerpc-ibm +@@ -778,6 +952,14 @@ case $basic_machine in + basic_machine=i860-intel + os=-osf + ;; ++ parisc) ++ basic_machine=hppa-unknown ++ os=-linux ++ ;; ++ parisc-*) ++ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; + pbd) + basic_machine=sparc-tti + ;; +@@ -787,6 +969,12 @@ case $basic_machine in + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; ++ pc98) ++ basic_machine=i386-pc ++ ;; ++ pc98-*) ++ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; +@@ -816,9 +1004,10 @@ case $basic_machine in + ;; + power) basic_machine=power-ibm + ;; +- ppc) basic_machine=powerpc-unknown ++ ppc | ppcbe) basic_machine=powerpc-unknown + ;; +- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ppc-* | ppcbe-*) ++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown +@@ -843,6 +1032,14 @@ case $basic_machine in + basic_machine=i586-unknown + os=-pw32 + ;; ++ rdos | rdos64) ++ basic_machine=x86_64-pc ++ os=-rdos ++ ;; ++ rdos32) ++ basic_machine=i386-pc ++ os=-rdos ++ ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff +@@ -869,6 +1066,10 @@ case $basic_machine in + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; ++ sde) ++ basic_machine=mipsisa32-sde ++ os=-elf ++ ;; + sei) + basic_machine=mips-sei + os=-seiux +@@ -880,6 +1081,9 @@ case $basic_machine in + basic_machine=sh-hitachi + os=-hms + ;; ++ sh5el) ++ basic_machine=sh5le-unknown ++ ;; + sh64) + basic_machine=sh64-unknown + ;; +@@ -901,6 +1105,9 @@ case $basic_machine in + basic_machine=i860-stratus + os=-sysv4 + ;; ++ strongarm-* | thumb-*) ++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; + sun2) + basic_machine=m68000-sun + ;; +@@ -957,17 +1164,9 @@ case $basic_machine in + basic_machine=t90-cray + os=-unicos + ;; +- tic54x | c54x*) +- basic_machine=tic54x-unknown +- os=-coff +- ;; +- tic55x | c55x*) +- basic_machine=tic55x-unknown +- os=-coff +- ;; +- tic6x | c6x*) +- basic_machine=tic6x-unknown +- os=-coff ++ tile*) ++ basic_machine=$basic_machine-unknown ++ os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown +@@ -1029,9 +1228,16 @@ case $basic_machine in + basic_machine=hppa1.1-winbond + os=-proelf + ;; ++ xbox) ++ basic_machine=i686-pc ++ os=-mingw32 ++ ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; ++ xscale-* | xscalee[bl]-*) ++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ++ ;; + ymp) + basic_machine=ymp-cray + os=-unicos +@@ -1040,6 +1246,10 @@ case $basic_machine in + basic_machine=z8k-unknown + os=-sim + ;; ++ z80-*-coff) ++ basic_machine=z80-unknown ++ os=-sim ++ ;; + none) + basic_machine=none-none + os=-none +@@ -1059,6 +1269,9 @@ case $basic_machine in + romp) + basic_machine=romp-ibm + ;; ++ mmix) ++ basic_machine=mmix-knuth ++ ;; + rs6000) + basic_machine=rs6000-ibm + ;; +@@ -1075,13 +1288,10 @@ case $basic_machine in + we32k) + basic_machine=we32k-att + ;; +- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) ++ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; +- sh64) +- basic_machine=sh64-unknown +- ;; +- sparc | sparcv8 | sparcv9 | sparcv9b) ++ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) +@@ -1125,9 +1335,12 @@ esac + if [ x"$os" != x"" ] + then + case $os in +- # First match some system type aliases +- # that might get confused with valid system types. ++ # First match some system type aliases ++ # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. ++ -auroraux) ++ os=-auroraux ++ ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; +@@ -1148,26 +1361,31 @@ case $os in + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ +- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ +- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ ++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ ++ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ ++ | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ +- | -aos* \ ++ | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ +- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ ++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ ++ | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ +- | -chorusos* | -chorusrdb* \ +- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ +- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ ++ | -chorusos* | -chorusrdb* | -cegcc* \ ++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ ++ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ ++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ ++ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ +- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) ++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ ++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) +@@ -1185,7 +1403,7 @@ case $os in + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ +- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ ++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) +@@ -1206,7 +1424,7 @@ case $os in + -opened*) + os=-openedition + ;; +- -os400*) ++ -os400*) + os=-os400 + ;; + -wince*) +@@ -1255,7 +1473,7 @@ case $os in + -sinix*) + os=-sysv4 + ;; +- -tpf*) ++ -tpf*) + os=-tpf + ;; + -triton*) +@@ -1291,8 +1509,13 @@ case $os in + -aros*) + os=-aros + ;; +- -kaos*) +- os=-kaos ++ -zvmoe) ++ os=-zvmoe ++ ;; ++ -dicos*) ++ os=-dicos ++ ;; ++ -nacl*) + ;; + -none) + ;; +@@ -1316,6 +1539,12 @@ else + # system, and we'll never get to this point. + + case $basic_machine in ++ score-*) ++ os=-elf ++ ;; ++ spu-*) ++ os=-elf ++ ;; + *-acorn) + os=-riscix1.2 + ;; +@@ -1325,9 +1554,24 @@ case $basic_machine in + arm*-semi) + os=-aout + ;; +- c4x-* | tic4x-*) +- os=-coff +- ;; ++ c4x-* | tic4x-*) ++ os=-coff ++ ;; ++ c8051-*) ++ os=-elf ++ ;; ++ hexagon-*) ++ os=-elf ++ ;; ++ tic54x-*) ++ os=-coff ++ ;; ++ tic55x-*) ++ os=-coff ++ ;; ++ tic6x-*) ++ os=-coff ++ ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 +@@ -1346,13 +1590,13 @@ case $basic_machine in + ;; + m68000-sun) + os=-sunos3 +- # This also exists in the configure program, but was not the +- # default. +- # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; ++ mep-*) ++ os=-elf ++ ;; + mips*-cisco) + os=-elf + ;; +@@ -1371,9 +1615,15 @@ case $basic_machine in + *-be) + os=-beos + ;; ++ *-haiku) ++ os=-haiku ++ ;; + *-ibm) + os=-aix + ;; ++ *-knuth) ++ os=-mmixware ++ ;; + *-wec) + os=-proelf + ;; +@@ -1476,7 +1726,7 @@ case $basic_machine in + -sunos*) + vendor=sun + ;; +- -aix*) ++ -cnk*|-aix*) + vendor=ibm + ;; + -beos*) +@@ -1539,7 +1789,7 @@ case $basic_machine in + esac + + echo $basic_machine$os +-exit 0 ++exit + + # Local variables: + # eval: (add-hook 'write-file-hooks 'time-stamp) +diff --git a/configure b/configure +index 4c1bc06..c721825 100755 +--- a/configure ++++ b/configure +@@ -1490,7 +1490,7 @@ Optional Packages: + --with-ssl=PREFIX support https protocol + --with-termlib=LIBS terminal library + LIBS is space separated list of: +- terminfo mytinfo termcap ncurses curses ++ terminfo mytinfo termcap tinfo ncurses curses + --with-gc=PREFIX libgc PREFIX + + Some influential environment variables: +@@ -6755,7 +6755,7 @@ $as_echo "$enable_image" >&6; } + if test x"$enable_image" = xyes; then + enable_image=x11 + case "`uname -s`" in +- Linux|linux|LINUX) ++ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD) + if test -c /dev/fb0; then + enable_image=x11,fb + fi;; +@@ -6811,6 +6811,9 @@ $as_echo "$with_imagelib" >&6; } + fi;; + imlib2) + with_imlib2="yes" ++ if test x"$PKG_CONFIG" = x; then ++ PKG_CONFIG=pkg-config ++ fi + if test x"$IMLIB2_CONFIG" = x; then + IMLIB2_CONFIG=imlib2-config + fi;; +@@ -6823,8 +6826,6 @@ $as_echo "$with_imagelib" >&6; } + with_gtk2="yes" + if test x"$PKG_CONFIG" = x; then + PKG_CONFIG=pkg-config +- else +- PKG_CONFIG=: + fi;; + esac + done +@@ -6926,8 +6927,8 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >= + + $as_echo "#define USE_GTK2 1" >>confdefs.h + +- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" +- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" ++ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`" ++ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`" + elif test x"$have_gdkpixbuf" = xyes; then + $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h + +@@ -6955,7 +6956,7 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >= + $as_echo "#define USE_IMLIB2 1" >>confdefs.h + + IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`" +- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`" ++ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with X11 support" >&5 + $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;} +@@ -6971,8 +6972,8 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;} + + $as_echo "#define USE_GTK2 1" >>confdefs.h + +- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`" +- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`" ++ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`" ++ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`" + elif test x"$have_gdkpixbuf" = xyes; then + $as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h + +@@ -6991,7 +6992,7 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;} + + IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o" + IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`" +- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`" ++ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with FB support" >&5 + $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with FB support" >&2;} +@@ -7977,7 +7978,7 @@ fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_termlib" >&5 + $as_echo "$with_termlib" >&6; } +- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses" ++ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses" + for lib in $with_termlib; do + as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_tgetent" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$lib" >&5 +@@ -8986,7 +8987,7 @@ extern char *sys_errlist[]; + int + main () + { +-printf(sys_errlist[0]); ++printf("%s", sys_errlist[0]); + ; + return 0; + } +@@ -9084,7 +9085,8 @@ _ACEOF + + + cvsver=`$AWK '\$1 ~ /Id:/ { print \$3}' $srcdir/ChangeLog` +- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c ++ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog` ++ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c + CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c` + ac_config_files="$ac_config_files Makefile posubst po/Makefile.in scripts/Makefile scripts/dirlist.cgi scripts/w3mhelp.cgi scripts/w3mmail.cgi scripts/xface2xpm scripts/multipart/Makefile scripts/multipart/multipart.cgi scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 scripts/w3mman/w3mman2html.cgi libwc/Makefile w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mimg/win/Makefile w3mhelp-w3m_en.html w3mhelp-w3m_ja.html w3mhelp-lynx_en.html w3mhelp-lynx_ja.html" + +diff --git a/cookie.c b/cookie.c +index 8020f6d..c11649c 100644 +--- a/cookie.c ++++ b/cookie.c +@@ -247,7 +247,7 @@ find_cookie(ParsedURL *pu) + Strcat(tmp, Sprintf("; $Domain=\"%s\"", p1->domain->ptr)); + if (p1->portl) + Strcat(tmp, +- Sprintf("; $Port=\"%s\"", portlist2str(p1->portl))); ++ Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)->ptr)); + } + } + return tmp; +@@ -463,7 +463,7 @@ save_cookies(void) + continue; + fprintf(fp, "%s\t%s\t%s\t%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n", + parsedURL2Str(&p->url)->ptr, +- p->name->ptr, p->value->ptr, p->expires, ++ p->name->ptr, p->value->ptr, (long)p->expires, + p->domain->ptr, p->path->ptr, p->flag, + p->version, str2charp(p->comment), + (p->portl) ? portlist2str(p->portl)->ptr : "", +diff --git a/display.c b/display.c +index e00eb0c..d4f336a 100644 +--- a/display.c ++++ b/display.c +@@ -257,7 +257,7 @@ make_lastline_link(Buffer *buf, char *title, char *url) + parseURL2(url, &pu, baseURL(buf)); + u = parsedURL2Str(&pu); + if (DecodeURL) +- u = Strnew_charp(url_unquote_conv(u->ptr, buf->document_charset)); ++ u = Strnew_charp(url_decode2(u->ptr, buf)); + #ifdef USE_M17N + u = checkType(u, &pr, NULL); + #endif +@@ -487,7 +487,7 @@ displayBuffer(Buffer *buf, int mode) + term_title(conv_to_system(buf->buffername)); + refresh(); + #ifdef USE_IMAGE +- if (activeImage && displayImage && buf->img) { ++ if (activeImage && displayImage && buf->img && buf->image_loaded) { + drawImage(); + } + #endif +@@ -521,7 +521,15 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq, + break; + } + if (hseq >= 0 && an->hseq == hseq) { ++ int start_pos = an->start.pos; ++ int end_pos = an->end.pos; + for (i = an->start.pos; i < an->end.pos; i++) { ++ if (enable_inline_image && (l->propBuf[i] & PE_IMAGE)) { ++ if (start_pos == i) ++ start_pos = i + 1; ++ else if (end_pos == an->end.pos) ++ end_pos = i - 1; ++ } + if (l->propBuf[i] & (PE_IMAGE | PE_ANCHOR | PE_FORM)) { + if (active) + l->propBuf[i] |= PE_ACTIVE; +@@ -529,9 +537,9 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq, + l->propBuf[i] &= ~PE_ACTIVE; + } + } +- if (active) ++ if (active && start_pos < end_pos) + redrawLineRegion(buf, l, l->linenumber - tline + buf->rootY, +- an->start.pos, an->end.pos); ++ start_pos, end_pos); + } + else if (prevhseq >= 0 && an->hseq == prevhseq) { + if (active) +@@ -855,14 +863,16 @@ redrawLineImage(Buffer *buf, Line *l, int i) + y = (int)(i * pixel_per_line); + sx = (int)((rcol - COLPOS(l, a->start.pos)) * pixel_per_char); + sy = (int)((l->linenumber - image->y) * pixel_per_line); +- if (sx == 0 && x + image->xoffset >= 0) +- x += image->xoffset; +- else +- sx -= image->xoffset; +- if (sy == 0 && y + image->yoffset >= 0) +- y += image->yoffset; +- else +- sy -= image->yoffset; ++ if (! enable_inline_image) { ++ if (sx == 0 && x + image->xoffset >= 0) ++ x += image->xoffset; ++ else ++ sx -= image->xoffset; ++ if (sy == 0 && y + image->yoffset >= 0) ++ y += image->yoffset; ++ else ++ sy -= image->yoffset; ++ } + if (image->width > 0) + w = image->width - sx; + else +diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html +index 41d70f1..a8623e2 100644 +--- a/doc-jp/MANUAL.html ++++ b/doc-jp/MANUAL.html +@@ -51,15 +51,9 @@ w3m + <dt>-l Կ + <dd>ɸϤƤɽȤ¸Կꤹ + 롥ǥեȤ 10000 +-<dt>-s +-<dd>Shift_JIS ɤɽ롥 +-<dt>-e +-<dd>EUC ɤɽ롥 +-<dt>-j +-<dd>JIS(ISO-2022-JP) ɤɽ롥 +-<dt>-O e|s|j|N|m|n ++<dt>-O ʸ + <dd>ɽѤʸɤꤹ롥 +-<dt>-I e|s ++<dt>-I ʸ + <dd>ʸʸɤꤹ롥 + <dt>-T + <dd>ɽʸΥפꤹ롥λ꤬ʤ硤ե +@@ -89,7 +83,7 @@ HTML + <dd>顼ɽʤ + <dt>-F + <dd>ե졼ưɽ롥 +-<dt>-S ++<dt>-s + <dd>Ϣ³Ԥ1ԤˤޤȤɽ롥 + <dt>-X + <dd>w3mλˡβ̤ʤ +@@ -489,8 +483,7 @@ w3m + w3mȤСHTTPФʤCGIץȤư뤳ȤǤޤ + ΤȤw3mФΤդƥץȤưνϤ + ɤߤɽ櫓Ǥ +-<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">֥åޡϿ</a> +-<a href="file:///$LIB/w3mhelperpanel?mode=panel">ӥ塼Խ</a> ++֥åޡϿȳӥ塼Խ + ϡlocal CGIΥץȤȤƼ¸Ƥޤ + local CGIȤСw3mѤΥեϥեȤ + ȤȤǤޤ +diff --git a/doc-jp/README b/doc-jp/README +index 074766f..e5e59b1 100644 +--- a/doc-jp/README ++++ b/doc-jp/README +@@ -122,7 +122,6 @@ w3m + ± + satodai@w3m.jp + +-ոۤMLޤǤ +- w3m-dev@sic.med.tohoku.ac.jp (ܸ) +- w3m-dev-en@sic.med.tohoku.ac.jp (Ѹ) ++ոۤ + http://w3m.sourceforge.net/ ++ https://sourceforge.net/projects/w3m/ +diff --git a/doc-jp/README.SSL b/doc-jp/README.SSL +index 4aedfde..670ed5f 100644 +--- a/doc-jp/README.SSL ++++ b/doc-jp/README.SSL +@@ -25,9 +25,9 @@ SSL + + ssl_forbid_method + ȤʤSSLåɤΥꥹ(2: SSLv2, 3: SSLv3, t: TLSv1) +- (ǥեȤ<NULL>). ++ (ǥեȤ2, 3). + ssl_verify_server ON/OFF +- SSLΥǧڤԤ(ǥեȤOFF). ++ SSLΥǧڤԤ(ǥեȤON). + ssl_cert_file ե̾ + SSLΥ饤PEMե(ǥեȤ<NULL>). + ssl_key_file ե̾ +diff --git a/doc-jp/README.siteconf b/doc-jp/README.siteconf +new file mode 100644 +index 0000000..58b51c7 +--- /dev/null ++++ b/doc-jp/README.siteconf +@@ -0,0 +1,60 @@ ++siteconf: ̥ޥ ++ ++siteconf ϡ URL Υѥȡɳդ줿꤫ޤ ++siteconf Ȥȡʸɤꤷ "decode_url" ++νϤꡢ Google Υ쥯ǽ ++ץ饤Х夵ꤹ뤳ȤǤޤ ++ ++ǥեȤǤ siteconf ~/.w3m/siteconf ɤ߹ޤޤ ++ ++===== ʸ ===== ++ ++url <url>|/<re-url>/|m@<re-url>@i [exact] ++substitute_url "<destination-url>" ++url_charset <charset> ++no_referer_from on|off ++no_referer_to on|off ++ ++˽줿Τͥ褵ޤ ++ ++===== ===== ++ ++url "http://twitter.com/#!/" ++substitute_url "http://mobile.twitter.com/" ++ ++twitter.com Х륵Ȥžޤ ++ ++url "http://your.bookmark.net/" ++no_referer_from on ++ ++your.bookmark.net ĥäéݤˡ HTTP referer ++ʤ褦ˤޤ ++ ++url "http://www.google.com/url?" exact ++substitute_url "file:///cgi-bin/your-redirector.cgi?" ++ ++Google Υ쥯 local CGI žޤ ++ ++url /^http:\/\/[a-z]*\.wikipedia\.org\// ++url_charset utf-8 ++ ++Ʊ "decode_url" ץˤȡ Wikipedia ؤ ++ UTF-8 Ȥƥǥɤɽޤ ++ ++===== ɽˤĤ ===== ++ ++ɽϤƱ̣ɽޤ ++ ++/http:\/\/www\.example\.com\// ++m/http:\/\/www\.example\.com\// ++m@http://www\.example\.com/@ ++m!http://www\.example\.com/! ++ ++Ǹ 'i' Ҥդȡʸʸ̤˾ȹԤޤ ++㤨С m@^http://www\.example\.com/abc/@i ϰʲΤȤפޤ ++ ++http://www.example.com/abc/ ++http://www.example.com/Abc/ ++http://www.example.com/ABC/ ++ ++ۥ̾ʬϾ˾ʸѴƤӤޤ +diff --git a/doc-jp/w3m.1 b/doc-jp/w3m.1 +index 89aacb6..099a803 100644 +--- a/doc-jp/w3m.1 ++++ b/doc-jp/w3m.1 +@@ -39,19 +39,10 @@ text/plain + ɸϤƤɽȤ¸Կꤹ롥 + ǥեȤ10000 + .TP +-.B \-s +-Shift_JISɤɽ롥 +-.TP +-.B \-e +-EUCɤɽ롥 +-.TP +-.B \-j +-JIS (ISO-2022-JP)ɤɽ롥 +-.TP +-.BI \-O\ e|s|j|N|m ++.BI \-O\ ʸ + ɽ˻Ȥʸɤꤹ. + .TP +-.BI \-I\ e|s ++.BI \-I\ ʸ + ʸʸɤꤹ롥 + .TP + .BI \-T\ +@@ -90,7 +81,7 @@ Bookmark + .B \-F + ե졼ưɽ롥 + .TP +-.B \-S ++.B \-s + Ϣ³Ԥ1ԤˤޤȤɽ롥 + .TP + .B \-X +diff --git a/doc/HISTORY b/doc/HISTORY +index b8f5b94..7f7ae2b 100644 +--- a/doc/HISTORY ++++ b/doc/HISTORY +@@ -588,7 +588,7 @@ From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> + * space characters in a buffer are mapped into 0x80-0x9f. + * unprintable characters (0x80-0xa0) are displayed as \xxx. + +-From: Tsutomu Okada ($B2,ED(B $BJY(B) <okada@furuno.co.jp> ++From: Tsutomu Okada <okada@furuno.co.jp> + Subject: [w3m-dev 01354] minimize when #undef USE_GOPHER or USE_NNTP + + 2000/11/16 +@@ -1422,7 +1422,7 @@ HTML4.0 ID attribute support. + + From: Okabe Katsuya <okabe@fphy.hep.okayama-u.ac.jp> + table get weird when it contains <input type=hidden>. +-$B=$@5!%(B ++Fixed. + + 2000.2.12 + From: Rogue Metal - Jake Moorman <roguemtl@stampede.org> +@@ -1649,15 +1649,15 @@ From: patakuti + If an <input type=button> tag has no `name' attribute, + w3m adds it an inappropriate name attribute. + +-From: $B$d$^(B ++From: Yama + Now w3m can handle a frameset that has both ROWS and COLS. + + From: aito + Now bookmarking is done by a separate command w3mbookmark. + +-C-s $B$G2hLLI=<($,;_$^$C$F$$$?%P%0$N=$@5!%(B ++Bug fix that C-s hangs. + +-$BJ8;zF~NO;~$K(B C-g $B$GCf;_$G$-$k$h$&$K$7$?!%(B ++Enable C-g to quit for keyboard input. + + From: hovav@cs.stanford.edu + When downloading a file, an attempt to save it to a non-exist +@@ -1699,7 +1699,7 @@ Menu behavior is changed. + * Clicking outside the menu causes cancellation of sub-menu. + * <, >, +, - abandoned + +-From: $B$*$+$@(B <okada@furuno.co.jp> ++From: Okada <okada@furuno.co.jp> + Now C-a/C-e are bound to 'jump to the first/last item in menu.' + + From: "OMAE, jun" <jun-o@osb.att.ne.jp> +diff --git a/doc/MANUAL.html b/doc/MANUAL.html +index aff0189..8353f33 100644 +--- a/doc/MANUAL.html ++++ b/doc/MANUAL.html +@@ -55,12 +55,10 @@ If you don't specify this option, + <dt>-l number + <dd>Specify line number preserved internally when reading text/plain document + fron standard input. Default is 10000. +-<dt>-s +-<dd>Display documents with Shift_JIS code. +-<dt>-e +-<dd>Display documents with EUC_JP code. +-<dt>-j +-<dd>Display documents with ISO-2022-JP code. ++<dt>-O charset ++<dd>Specify display/output charset. ++<dt>-I charset ++<dd>Specify document charset. + <dt>-T type + <dd>Specify document type. Without this option, document type + is determined from extension of a file. If the determination +@@ -90,7 +88,7 @@ It is useful when reading E-mail or NetNews messages. + <dd>Monochrome display mode. + <dt>-F + <dd>Automatically render frame. +-<dt>-S ++<dt>-s + <dd>Squeeze blank lines. + <dt>-X + <dd>Upon exit, do not display preserved screen. +@@ -468,8 +466,7 @@ and <a href="keymap.lynx">keymap.lynx</a>) as examples. + You can run CGI scripts using w3m, without any HTTP server. + It means that w3m behaves like an HTTP server and activates CGI script, + then w3m reads the output of the script and display it. The +-<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">bookmark registration</a> +-and <a href="file:///$LIB/w3mhelperpanel?mode=panel">helper-app editor</a> ++bookmark registration and helper-app editor + are realized as local CGI scripts. + Using local CGI, w3m can be used as a general purpose form interface. + <P> +diff --git a/doc/README b/doc/README +index 324ea3e..60d6d19 100644 +--- a/doc/README ++++ b/doc/README +@@ -115,7 +115,6 @@ Current Maintainer + Tohoku University Hospital + satodai@w3m.jp + +-Feel free to send your opinion to the w3m mailing-lists. +- w3m-dev@sic.med.tohoku.ac.jp (Japanese) +- w3m-dev-en@sic.med.tohoku.ac.jp (English) ++Feel free to send your opinion to: + http://w3m.sourceforge.net/ ++ https://sourceforge.net/projects/w3m/ +diff --git a/doc/README.cookie b/doc/README.cookie +index 56cca50..da16947 100644 +--- a/doc/README.cookie ++++ b/doc/README.cookie +@@ -37,7 +37,7 @@ cookie support of w3m + (HDN: host domain name) + + +- If the number of "." in domain name is lesser than 2, it is ++ * If the number of "." in domain name is lesser than 2, it is + assumed as invalid cookie (cf. RFC 2109 4.3.2), however, you can + use cookie_avoid_wrong_number_of_dots to avoid this + restriction. You can set this in "Domains to avoid [wrong number +diff --git a/doc/README.img b/doc/README.img +index 0c10114..f11362f 100644 +--- a/doc/README.img ++++ b/doc/README.img +@@ -41,7 +41,7 @@ Key functions + Specify the following keymaps in ~/.w3m/keymap. + keymap X DISPLAY_IMAGE + keymap C-c STOP_IMAGE +- keyamp t SET_OPTION display_image=toggle ++ keymap t SET_OPTION display_image=toggle + + Commandline options + +diff --git a/doc/README.m17n b/doc/README.m17n +index c064d76..da5408b 100644 +--- a/doc/README.m17n ++++ b/doc/README.m17n +@@ -49,7 +49,7 @@ Supported encoding schemes (character set) + * Thai + TIS-620 (ISO-8859-11), CP874 + * Other +- US_ASCII, ISO-8859-1 10, 13 15, ++ US_ASCII, ISO-8859-1 - 10, 13 - 15, + KOI8-R, KOI8-U, NeXT, CP437, CP737, CP775, CP850, CP852, CP855, CP856, + CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP869, CP1006, + CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257 +diff --git a/doc/README.siteconf b/doc/README.siteconf +new file mode 100644 +index 0000000..f173087 +--- /dev/null ++++ b/doc/README.siteconf +@@ -0,0 +1,60 @@ ++The siteconf: Site-specific preferences ++ ++The siteconf consists of URL patterns and preferences associated to them. ++You can improve "decode_url" feature by giving charsets of URLs site by site, ++or bypass Google's redirector for performance and your privacy. ++ ++The siteconf is read from ~/.w3m/siteconf by default. ++ ++===== The syntax ===== ++ ++url <url>|/<re-url>/|m@<re-url>@i [exact] ++substitute_url "<destination-url>" ++url_charset <charset> ++no_referer_from on|off ++no_referer_to on|off ++ ++The last match wins. ++ ++===== Examples ===== ++ ++url "http://twitter.com/#!/" ++substitute_url "http://mobile.twitter.com/" ++ ++This forwards the twitter.com to its mobile site. ++ ++url "http://your.bookmark.net/" ++no_referer_from on ++ ++This prevents HTTP referers from being sent when you follow links ++at the your.bookmark.net. ++ ++url "http://www.google.com/url?" exact ++substitute_url "file:///cgi-bin/your-redirector.cgi?" ++ ++This forwards the Google's redirector to your local CGI. ++ ++url /^http:\/\/[a-z]*\.wikipedia\.org\// ++url_charset utf-8 ++ ++When combinated with "decode_url" option turned on, links to ++Wikipedia will be human-readable. ++ ++===== Regular expressions notes ===== ++ ++Following expressions are all equivalent: ++ ++/http:\/\/www\.example\.com\// ++m/http:\/\/www\.example\.com\// ++m@http://www\.example\.com/@ ++m!http://www\.example\.com/! ++ ++With a trailing 'i' modifier, you can specify a case-insensitive match. ++For example, m@^http://www\.example\.com/abc/@i matches to: ++ ++http://www.example.com/abc/ ++http://www.example.com/Abc/ ++http://www.example.com/ABC/ ++ ++Hostnames, however, are always converted to lowercases before compared. ++ +diff --git a/doc/README.sixel b/doc/README.sixel +new file mode 100644 +index 0000000..588afc4 +--- /dev/null ++++ b/doc/README.sixel +@@ -0,0 +1,27 @@ ++Sixel support of w3m ++ 2014/11/05 ++ K. Araki ++ ++Introduction ++ ++ This is the extension for w3m to show inline images by sixel graphics. ++ ++Requirements ++ ++ Install 'img2sixel' command provided by libsixel project. ++ (https://github.com/saitoha/libsixel) ++ ++Build ++ ++ $ ./configure --enable-image ... ++ $ make ++ $ make install ++ ++Usage ++ ++ $ w3m -sixel http://... ++ ++ You can specify options of 'img2sixel' command by "W3M_IMG2SIXEL" ++ environmental variable. ++ ++ $ W3M_IMG2SIXEL="img2sixel -d atkinson" w3m -sixel http://... +diff --git a/doc/w3m.1 b/doc/w3m.1 +index 8f071c6..0762f51 100644 +--- a/doc/w3m.1 ++++ b/doc/w3m.1 +@@ -1,13 +1,11 @@ + .nr N -1 + .nr D 5 +-.TH W3M 1 Local ++.TH W3M 1 "2014-11-29" + .UC 4 + .SH NAME +-w3m \- a text based Web browser and pager ++w3m \- a text based web browser and pager + .SH SYNOPSIS +-.B w3m +-[options] [URL or filename] +-.PP ++w3m [OPTION]... [ \fIfile\fP | \fIURL\fP ]... + .SH DESCRIPTION + .\" This defines appropriate quote strings for nroff and troff + .ds lq \&" +@@ -17,234 +15,285 @@ w3m \- a text based Web browser and pager + .\" Just in case these number registers aren't set yet... + .if \nN==0 .nr N 10 + .if \nD==0 .nr D 5 +-.I +-w3m +-is a World Wide Web (WWW) text based client. It has English and +-Japanese help files and an option menu and can be configured to +-use either language. It will display hypertext markup language +-(HTML) documents containing links to files residing on the local +-system, as well as files residing on remote systems. It can +-display HTML tables and frames. +-In addition, it can be used as a "pager" in much the same manner +-as "more" or "less". +-Current versions of +-.I +-w3m +-run on +-Unix (Solaris, SunOS, HP-UX, Linux, FreeBSD, and EWS4800) +-and on +-Microsoft Windows 9x/NT. +-.PP ++ ++\fIw3m\fP is a text based browser which can display local or remote ++web pages as well as other documents. It is able to process HTML ++tables and frames but it ignores JavaScript and Cascading Style ++Sheets. \fIw3m\fP can also serve as a pager for text files named as ++arguments or passed on standard input, and as a general purpose ++directory browser. ++ ++\fIw3m\fP organizes its content in buffers or tabs, allowing easy ++navigation between them. With the w3m-img extension installed, \fIw3m\fP can ++display inline graphics in web pages. And whenever \fIw3m\fP's HTML ++rendering capabilities do not meet your needs, the target URL can be ++handed over to a graphical browser with a single command. ++ ++For help with runtime options, press \(lqH\(rq while running \fIw3m\fP. ++ ++.SH ARGUMENTS ++ ++When given one or more command line arguments, \fIw3m\fP will handle ++targets according to content type. For web, \fIw3m\fP gets this ++information from HTTP headers; for relative or absolute file system ++paths, it relies on filenames. ++ ++With no argument, \fIw3m\fP expects data from standard input and ++assumes \(lqtext/plain\(rq unless another MIME type is given by the user. ++ ++If provided with no target and no fallback target (see for instance ++option \fB\-v\fP below), \fIw3m\fP will exit with usage information. + .SH OPTIONS +-At start up, \fIw3m\fR will load any local +-file or remote URL specified at the command +-line. For help with runtime options, press \fB"H"\fR +-while running \fIw3m\fR. +-Command line options are: +-.PP ++Command line options are introduced with a single \(lq\-\(rq character and ++may take an argument. ++.SS General options: + .TP +-.B -t tab +-set tab width ++\fB\-B\fP ++with no other target defined, use the bookmark page for startup + .TP +-.B -r +-ignore backspace effect +-.TP +-.B -l line +-# of preserved line (default 10000) +-.TP +-.B -I charset +-document charset +-.TP +-.B -O charset +-display/output charset ++\fB\-M\fP ++monochrome display + .TP +-.B -B +-load bookmark ++\fB\-no-mouse\fP ++deactivate mouse support + .TP +-.B -bookmark file +-specify bookmark file ++\fB\-num\fP ++display each line's number + .TP +-.B -T type +-specify content-type ++\fB\-N\fP ++distribute multiple command line arguments to tabs. By default, a ++stack of buffers is used ++.TP ++\fB\-ppc \fInum\fR ++width of \fInum\fR pixels per character. Range of 4.0 to 32.0, default 8.0. ++Larger values will make tables narrower. (Implementation not verified) + .TP +-.B -m +-internet message mode ++\fB\-ppl \fInum\fR ++height of \fInum\fR pixels per line. Range of 4.0 to 64.0. (Implementation not verified) + .TP +-.B -v +-visual startup mode ++\fB\-title\fP, \fB\-title=TERM\fP ++use the buffer name as terminal title string. With specified TERM, ++this sets the title configuration style accordingly + .TP +-.B -M +-monochrome display ++\fB\-v\fP ++with no other target defined, welcome users with a built-in page + .TP +-.B -N +-open URL of command line on each new tab ++\fB\-W\fP ++toggle wrapping in searches + .TP +-.B -F +-automatically render frame ++\fB\-X\fP ++do not initialize/deinitialize the terminal + .TP +-.B -dump +-dump formatted page into stdout ++\fB+\fInum\fR ++go to line \fInum\fR; only effective for \fInum\fR larger than the number of lines in the terminal ++.SS Browser options: + .TP +-.B -cols width +-specify column width (used with -dump) ++\fB\-cols \fInum\fR ++with stdout as destination; HTML is rendered to lines of \fInum\fR characters + .TP +-.B -ppc count +-specify the number of pixels per character (4.0...32.0). +-Larger values will make tables narrower. [default 8.0] ++\fB\-cookie\fP, \fB\-no-cookie\fP ++use stored cookies and accept new ones, or do neither + .TP +-.B -ppl count +-specify the number of pixels per line (4.0...64.0) ++\fB\-F\fP ++render frames + .TP +-.B -dump_source +-dump page source into stdout ++\fB\-graph\fP, \fB\-no-graph\fP ++use or do not use graphic characters for drawing HTML table and frame borders + .TP +-.B -dump_head +-dump response of HEAD request into stdout ++\fB\-header \fIstring\fR ++append \fIstring\fR to the HTTP(S) request. Expected to match the header syntax \f(CW Variable: Value\fP + .TP +-.B -dump_both +-dump HEAD and source into stdout ++\fB\-m\fP ++Render the body of Usenet messages according to the header \(lqContent-type\(rq + .TP +-.B -dump_extra +-dump HEAD, source, and extra information into stdout ++\fB\-no-proxy\fP ++do not use proxy + .TP +-.B -post file +-use POST method with file content ++\fB\-post \fIfile\fR ++use POST method to upload data defined in \fIfile\fR. The syntax to be used ++is \f(CWvar1=value1[&var2=value2]...\fP + .TP +-.B -header string +-insert string as a header ++\fB\-4\fP ++IPv4 only. Corresponds to dns_order=4 in configuration files + .TP +-.B +<num> +-goto <num> line ++\fB\-6\fP ++IPv6 only. Corresponds to dns_order=6 in configuration files ++.SS Text pager options: + .TP +-.B -num +-show line number ++\fB\-l \fInum\fR ++number of lines preserved internally when receiving plain text from ++stdin (default 10,000) + .TP +-.B -no-proxy +-don't use proxy ++\fB\-r\fP ++use caret notation to display special escape characters (such ++as ANSI escapes or nroff-style backspaces for bold and underlined ++characters) instead of processing them + .TP +-.B -4 +-IPv4 only (-o dns_order=4) ++\fB\-s\fP ++squeeze multiple blank lines into one + .TP +-.B -6 +-IPv6 only (-o dns_order=6) ++\fB\-t\fP \fInum\fP ++set tab width to \fInum\fR columns. No effect on stdout ++.SS Data type/encoding options: + .TP +-.B -no-mouse +-don't use mouse ++\fB\-I \fIcharset\fR ++user defined character encoding of input data + .TP +-.B -cookie +-use cookie. ++\fB\-O \fIcharset\fR ++user defined character encoding of output data + .TP +-.B -no-cookie +-don't use cookie ++\fB\-T \fItype\fR ++explicit characterization of input data by MIME type ++.SS Options for data output, followed by immediate exit: + .TP +-.B -graph +-use graphic character ++\fB\-dump\fP ++dump rendered page into stdout. Set implicitly when output is directed ++to a file or pipe + .TP +-.B -no-graph +-don't use graphic character ++\fB\-dump_source\fP ++dump the page's source code into stdout + .TP +-.B -S +-squeeze multiple blank lines ++\fB\-dump_head\fP ++dump response of a HEAD request for a URL into stdout + .TP +-.B -W +-toggle wrap search mode ++\fB\-dump_both\fP ++dump HEAD, and source code for a URL into stdout + .TP +-.B -X +-don't use termcap init/deinit ++\fB\-dump_extra\fP ++dump HEAD, source code, and extra information for a URL into stdout + .TP +-.B -title [=TERM] +-set buffer name to terminal title string. +-If TERM is specified, use the TERM style title configuration. ++\fB\-help\fP ++show a summary of compiled-in features and command line options + .TP +-.B -o opt=value +-assign value to config option ++\fB\-show-option\fP ++show all available config options + .TP +-.B -show-option +-show all available config option ++\fB\-version\fP ++show the version of \fIw3m\fP ++.SS Options for overriding default settings and resources: + .TP +-.B -config file +-specify config file ++\fB\-bookmark \fIfile\fR ++use \fIfile\fR instead of the default bookmark.html file + .TP +-.B -help +-show usage ++\fB\-config \fIfile\fR ++use \fIfile\fR instead of the default config file + .TP +-.B -version +-show w3m version ++\fB\-debug\fP ++DO NOT USE + .TP +-.B -reqlog +-write request logfile ++\fB\-o \fIoption=value\fR ++modify one configuration item with an explicitly given value; without \fIoption=value\fR, equivalent to -show-option + .TP +-.B -debug +-DO NOT USE ++\fB\-reqlog\fP ++log headers of HTTP communication in file \f(CW~/.w3m/request.log\fP + .SH EXAMPLES ++.SS Pager-like usage ++.TP ++Combine snippets of HTML code and preview the page ++.EX ++$ cat header.html footer.html | w3m -T text/html ++.EE ++.TP ++Compare two files using tabs ++.EX ++$ w3m -N config.old config ++.EE ++.SS Browser-like usage ++.TP ++Display web content in monochrome terminal ++.EX ++$ w3m -M http://w3m.sourceforge.net ++.EE ++.TP ++Display embedded graphics ++.EX ++$ w3m -o auto_image=TRUE http://w3m.sourceforge.net ++.EE ++.TP ++Display content from Usenet ++.EX ++$ w3m -m nntp://news.aioe.org/comp.os.linux.networking ++.EE ++.TP ++Upload data for a URL using the POST method ++.EX ++$ w3m -post - http://example.com/form.php <<<'a=0&b=1' ++.EE ++.SS Filter-like usage ++.TP ++Convert an HTML file to plain text with a defined line length ++.EX ++$ w3m -cols 40 foo.html > foo.txt ++.EE ++.TP ++Output the bookmarks page as text with an appended list of links ++.EX ++$ w3m -B -o display_link_number=1 > out.txt ++.EE ++.TP ++Conversion of file format and character encoding ++.EX ++$ w3m -T text/html -I EUC-JP -O UTF-8 < foo.html > foo.txt ++.EE ++.SS Start with no input ++.TP ++Welcome users with a built-in page ++.EX ++$ w3m -v ++.EE ++.\".SH Errors ++.SH ENVIRONMENT ++\fIw3m\fP recognises the environment variable WWW_HOME as defining a ++fallback target for use if it is invoked without one. ++.SH FILES + .TP +-To use w3m as a pager: +-.br +-$ ls | w3m +-.br +-.TP +-To use w3m to translate HTML files: +-.br +-$ cat foo.html | w3m -T text/html ++\f(CW~/.w3m/bookmark.html\fP ++default bookmark file + .TP +-or +-.br +-$ cat foo.html | w3m -dump -T text/html >foo.txt +-.SH FILES ++\f(CW~/.w3m/config\fP ++user defined configuration file; overrides \f(CW/etc/w3m/config\fP + .TP +-.I ${HOME}/.w3m/config +-configuration file ++\f(CW~/.w3m/cookie\fP ++cookie jar; written on exit, read on launch + .TP +-.I ${HOME}/.w3m/keymap +-key binding configuration file +-.\" .TP +-.\" .I ${HOME}/.w3m/menu +-.\" ??? ++\f(CW~/.w3m/history\fP ++browser history - visited files and URLs + .TP +-.I ${HOME}/.w3m/mouse +-mouse configuration file ++\f(CW~/.w3m/keymap\fP ++user defined key bindings; overrides default key bindings + .TP +-.I ${HOME}/.w3m/cookie +-cookie file ++\f(CW~/.w3m/mailcap\fP ++external viewer configuration file + .TP +-.I ${HOME}/.w3m/history +-history file ++\f(CW~/.w3m/menu\fP ++user defined menu; overrides default menu + .TP +-.I ${HOME}/.w3m/passwd +-passowrd and username file ++\f(CW~/.w3m/mime.types\fP ++MIME types file + .TP +-.I ${HOME}/.w3m/pre_form +-form parameters file ++\f(CW~/.w3m/mouse\fP ++user defined mouse settings + .TP +-.I ${HOME}/.w3m/mailcap +-external viewer configuration file ++\f(CW~/.w3m/passwd\fP ++password and username file + .TP +-.I ${HOME}/.w3m/mime.types +-MIME types file ++\f(CW~/.w3m/pre_form\fP ++contains predefined values to fill recurrent HTML forms + .\" .TP +-.\" .I ${HOME}/.w3m/urimethodmap ++.\" .I $~/.w3m/urimethodmap + .\" ??? + .SH NOTES +-This is the +-.I +-w3m +-0.5.3 Release. +-.PP +-Please see the MANUAL.html file distributed with w3m for +-more detailed documentation. +- +-Additional information about +-.I +-w3m +-may be found on its Japanese language Web site located at: +- http://w3m.sourceforge.net/index.ja.html +-.br +-or on its English version of the site at: +- http://w3m.sourceforge.net/index.en.html ++This is the \fIw3m\fP 0.5.3 Release. ++.SH SEE ALSO ++README and example files are to be found in the doc directory of your \fIw3m\fP installation. Recent information about \fIw3m\fP may be found on ++.UR http://w3m.sourceforge.net ++the project's web pages at ++.UE + .SH ACKNOWLEDGMENTS +-.I +-w3m +-has incorporated code from several sources. ++\fIw3m\fP has incorporated code from several sources. + Users have contributed patches and suggestions over time. + .SH AUTHOR +-Akinori ITO <aito@fw.ipsj.or.jp> ++.UR aito@fw.ipsj.or.jp ++Akinori ITO ++.UE ++ +diff --git a/entity.c b/entity.c +index fdd8f64..45dc95e 100644 +--- a/entity.c ++++ b/entity.c +@@ -44,6 +44,8 @@ conv_entity(unsigned int c) + return " "; + if (c == 0xa0) + return NBSP; ++ if (c == 0xad) /* SOFT HYPHEN */ ++ return ""; + if (c < 0x100) { /* Latin1 (ISO 8859-1) */ + if (UseAltEntity) + return alt_latin1[c - 0xa0]; +diff --git a/etc.c b/etc.c +index 8fe1215..dcc6edd 100644 +--- a/etc.c ++++ b/etc.c +@@ -1365,7 +1365,13 @@ setup_child(int child, int i, int f) + if (!child) + SETPGRP(); + #endif /* __MINGW32_VERSION */ ++ /* ++ * I don't know why but close_tty() sometimes interrupts loadGeneralFile() in loadImage() ++ * and corrupt image data can be cached in ~/.w3m. ++ */ ++#if 0 + close_tty(); ++#endif + close_all_fds_except(i, f); + QuietMessage = TRUE; + fmInitialized = FALSE; +diff --git a/file.c b/file.c +index 567d41e..709a0c1 100644 +--- a/file.c ++++ b/file.c +@@ -47,11 +47,11 @@ static JMP_BUF AbortLoading; + static struct table *tables[MAX_TABLE]; + static struct table_mode table_mode[MAX_TABLE]; + +-#ifdef USE_IMAGE ++#if defined(USE_M17N) || defined(USE_IMAGE) + static ParsedURL *cur_baseURL = NULL; +-#ifdef USE_M17N +-static char cur_document_charset; + #endif ++#ifdef USE_M17N ++static wc_ces cur_document_charset = 0; + #endif + + static Str cur_title; +@@ -215,7 +215,6 @@ currentLn(Buffer *buf) + + static Buffer * + loadSomething(URLFile *f, +- char *path, + Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf) + { + Buffer *buf; +@@ -223,17 +222,23 @@ loadSomething(URLFile *f, + if ((buf = loadproc(f, defaultbuf)) == NULL) + return NULL; + +- buf->filename = path; + if (buf->buffername == NULL || buf->buffername[0] == '\0') { + buf->buffername = checkHeader(buf, "Subject:"); +- if (buf->buffername == NULL) +- buf->buffername = conv_from_system(lastFileName(path)); ++ if (buf->buffername == NULL && buf->filename != NULL) ++ buf->buffername = conv_from_system(lastFileName(buf->filename)); + } + if (buf->currentURL.scheme == SCM_UNKNOWN) + buf->currentURL.scheme = f->scheme; +- buf->real_scheme = f->scheme; + if (f->scheme == SCM_LOCAL && buf->sourcefile == NULL) +- buf->sourcefile = path; ++ buf->sourcefile = buf->filename; ++ if (loadproc == loadHTMLBuffer ++#ifdef USE_IMAGE ++ || loadproc == loadImageBuffer ++#endif ++ ) ++ buf->type = "text/html"; ++ else ++ buf->type = "text/plain"; + return buf; + } + +@@ -484,28 +489,6 @@ convertLine0(URLFile *uf, Str line, int mode) + return line; + } + +-/* +- * loadFile: load file to buffer +- */ +-Buffer * +-loadFile(char *path) +-{ +- Buffer *buf; +- URLFile uf; +- init_stream(&uf, SCM_LOCAL, NULL); +- examineFile(path, &uf); +- if (uf.stream == NULL) +- return NULL; +- buf = newBuffer(INIT_BUFFER_WIDTH); +- current_content_length = 0; +-#ifdef USE_M17N +- content_charset = 0; +-#endif +- buf = loadSomething(&uf, path, loadBuffer, buf); +- UFclose(&uf); +- return buf; +-} +- + int + matchattr(char *p, char *attr, int len, Str *value) + { +@@ -694,6 +677,7 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu) + #endif + init_stream(&f, SCM_LOCAL, newStrStream(src)); + loadHTMLstream(&f, newBuf, NULL, TRUE); ++ UFclose(&f); + for (l = newBuf->lastLine; l && l->real_linenumber; + l = l->prev) + l->real_linenumber = 0; +@@ -1697,13 +1681,15 @@ getLinkNumberStr(int correction) + /* + * loadGeneralFile: load file to buffer + */ ++#define DO_EXTERNAL ((Buffer *(*)(URLFile *, Buffer *))doExternal) + Buffer * + loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, + int flag, FormList *volatile request) + { + URLFile f, *volatile of = NULL; + ParsedURL pu; +- Buffer *b = NULL, *(*volatile proc)() = loadBuffer; ++ Buffer *b = NULL; ++ Buffer *(*volatile proc)(URLFile *, Buffer *) = loadBuffer; + char *volatile tpath; + char *volatile t = "text/plain", *p, *volatile real_type = NULL; + Buffer *volatile t_buf = NULL; +@@ -1730,7 +1716,22 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, + add_auth_cookie_flag = 0; + + checkRedirection(NULL); ++ + load_doc: ++ { ++ const char *sc_redirect; ++ parseURL2(tpath, &pu, current); ++ sc_redirect = query_SCONF_SUBSTITUTE_URL(&pu); ++ if (sc_redirect && *sc_redirect && checkRedirection(&pu)) { ++ tpath = (char *)sc_redirect; ++ request = NULL; ++ add_auth_cookie_flag = 0; ++ current = New(ParsedURL); ++ *current = pu; ++ status = HTST_NORMAL; ++ goto load_doc; ++ } ++ } + TRAP_OFF; + url_option.referer = referer; + url_option.flag = flag; +@@ -1863,7 +1864,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, + /* 302: Found */ + /* 303: See Other */ + /* 307: Temporary Redirect (HTTP/1.1) */ +- tpath = url_quote_conv(p, DocumentCharset); ++ tpath = url_encode(p, NULL, 0); + request = NULL; + UFclose(&f); + current = New(ParsedURL); +@@ -2022,7 +2023,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, + if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL && + checkRedirection(&pu)) { + /* document moved */ +- tpath = url_quote_conv(remove_space(p), DocumentCharset); ++ tpath = url_encode(remove_space(p), NULL, 0); + request = NULL; + UFclose(&f); + add_auth_cookie_flag = 0; +@@ -2123,10 +2124,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, + if (real_type == NULL) + real_type = t; + proc = loadBuffer; +-#ifdef USE_IMAGE +- cur_baseURL = New(ParsedURL); +- copyParsedURL(cur_baseURL, &pu); +-#endif + + current_content_length = 0; + if ((p = checkHeader(t_buf, "Content-Length:")) != NULL) +@@ -2197,18 +2194,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, + #endif + else if (w3m_backend) ; + else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) { +- if (!do_download && doExternal(f, +- pu.real_file ? pu.real_file : pu.file, +- t, &b, t_buf)) { +- if (b && b != NO_BUFFER) { +- b->real_scheme = f.scheme; +- b->real_type = real_type; +- if (b->currentURL.host == NULL && b->currentURL.file == NULL) +- copyParsedURL(&b->currentURL, &pu); +- } +- UFclose(&f); +- TRAP_OFF; +- return b; ++ if (!do_download && searchExtViewer(t) != NULL) { ++ proc = DO_EXTERNAL; + } + else { + TRAP_OFF; +@@ -2232,36 +2219,30 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, + else if (w3m_dump & DUMP_FRAME) + return NULL; + ++ if (t_buf == NULL) ++ t_buf = newBuffer(INIT_BUFFER_WIDTH); ++ copyParsedURL(&t_buf->currentURL, &pu); ++ t_buf->filename = pu.real_file ? pu.real_file : ++ pu.file ? conv_to_system(pu.file) : NULL; + if (flag & RG_FRAME) { +- if (t_buf == NULL) +- t_buf = newBuffer(INIT_BUFFER_WIDTH); + t_buf->bufferprop |= BP_FRAME; + } + #ifdef USE_SSL +- if (t_buf) +- t_buf->ssl_certificate = f.ssl_certificate; ++ t_buf->ssl_certificate = f.ssl_certificate; + #endif + frame_source = flag & RG_FRAME_SRC; +- b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf); ++ if (proc == DO_EXTERNAL) { ++ b = doExternal(f, t, t_buf); ++ } else { ++ b = loadSomething(&f, proc, t_buf); ++ } + UFclose(&f); + frame_source = 0; +- if (b) { ++ if (b && b != NO_BUFFER) { + b->real_scheme = f.scheme; + b->real_type = real_type; +- if (b->currentURL.host == NULL && b->currentURL.file == NULL) +- copyParsedURL(&b->currentURL, &pu); +- if (is_html_type(t)) +- b->type = "text/html"; +- else if (w3m_backend) { +- Str s = Strnew_charp(t); +- b->type = s->ptr; +- } +-#ifdef USE_IMAGE +- else if (proc == loadImageBuffer) +- b->type = "text/html"; +-#endif +- else +- b->type = "text/plain"; ++ if (w3m_backend) ++ b->type = allocStr(t, -1); + if (pu.label) { + if (proc == loadHTMLBuffer) { + Anchor *a; +@@ -2287,10 +2268,11 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, + if (header_string) + header_string = NULL; + #ifdef USE_NNTP +- if (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS) ++ if (b && b != NO_BUFFER && (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS)) + reAnchorNewsheader(b); + #endif +- preFormUpdateBuffer(b); ++ if (b && b != NO_BUFFER) ++ preFormUpdateBuffer(b); + TRAP_OFF; + return b; + } +@@ -2469,6 +2451,7 @@ set_breakpoint(struct readbuffer *obuf, int tag_length) + bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor, + sizeof(obuf->anchor)); + obuf->bp.img_alt = obuf->img_alt; ++ obuf->bp.input_alt = obuf->input_alt; + obuf->bp.in_bold = obuf->in_bold; + obuf->bp.in_italic = obuf->in_italic; + obuf->bp.in_under = obuf->in_under; +@@ -2486,6 +2469,7 @@ back_to_breakpoint(struct readbuffer *obuf) + bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor, + sizeof(obuf->anchor)); + obuf->img_alt = obuf->bp.img_alt; ++ obuf->input_alt = obuf->bp.input_alt; + obuf->in_bold = obuf->bp.in_bold; + obuf->in_italic = obuf->bp.in_italic; + obuf->in_under = obuf->bp.in_under; +@@ -2729,7 +2713,7 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, + Str line = obuf->line, pass = NULL; + char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL, + *hidden_under = NULL, *hidden_italic = NULL, *hidden_strike = NULL, +- *hidden_ins = NULL, *hidden = NULL; ++ *hidden_ins = NULL, *hidden_input, *hidden = NULL; + + #ifdef DEBUG + if (w3m_debug) { +@@ -2761,6 +2745,12 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, + hidden = hidden_img; + } + } ++ if (obuf->input_alt.in) { ++ if ((hidden_input = has_hidden_link(obuf, HTML_INPUT_ALT)) != NULL) { ++ if (!hidden || hidden_input < hidden) ++ hidden = hidden_input; ++ } ++ } + if (obuf->in_bold) { + if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) { + if (!hidden || hidden_bold < hidden) +@@ -2812,6 +2802,8 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, + Strcat_charp(line, "</a>"); + if (obuf->img_alt && !hidden_img) + Strcat_charp(line, "</img_alt>"); ++ if (obuf->input_alt.in && !hidden_input) ++ Strcat_charp(line, "</input_alt>"); + if (obuf->in_bold && !hidden_bold) + Strcat_charp(line, "</b>"); + if (obuf->in_italic && !hidden_italic) +@@ -3022,6 +3014,18 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, + Strcat_charp(tmp, "\">"); + push_tag(obuf, tmp->ptr, HTML_IMG_ALT); + } ++ if (!hidden_input && obuf->input_alt.in) { ++ Str tmp; ++ if (obuf->input_alt.hseq > 0) ++ obuf->input_alt.hseq = - obuf->input_alt.hseq; ++ tmp = Sprintf("<INPUT_ALT hseq=\"%d\" fid=\"%d\" name=\"%s\" type=\"%s\" value=\"%s\">", ++ obuf->input_alt.hseq, ++ obuf->input_alt.fid, ++ obuf->input_alt.name->ptr, ++ obuf->input_alt.type->ptr, ++ obuf->input_alt.value->ptr); ++ push_tag(obuf, tmp->ptr, HTML_INPUT_ALT); ++ } + if (!hidden_bold && obuf->in_bold) + push_tag(obuf, "<B>", HTML_B); + if (!hidden_italic && obuf->in_italic) +@@ -3228,7 +3232,7 @@ process_img(struct parsed_tag *tag, int width) + + if (!parsedtag_get_value(tag, ATTR_SRC, &p)) + return tmp; +- p = remove_space(p); ++ p = url_encode(remove_space(p), cur_baseURL, cur_document_charset); + q = NULL; + parsedtag_get_value(tag, ATTR_ALT, &q); + if (!pseudoInlines && (q == NULL || (*q == '\0' && ignore_null_img_alt))) +@@ -3322,12 +3326,7 @@ process_img(struct parsed_tag *tag, int width) + Image image; + ParsedURL u; + +-#ifdef USE_M17N +- parseURL2(wc_conv(p, InnerCharset, cur_document_charset)->ptr, &u, +- cur_baseURL); +-#else + parseURL2(p, &u, cur_baseURL); +-#endif + image.url = parsedURL2Str(&u)->ptr; + if (!uncompressed_file_type(u.file, &image.ext)) + image.ext = filename_extension(u.file, TRUE); +@@ -3346,8 +3345,14 @@ process_img(struct parsed_tag *tag, int width) + if (i < 0) + i = pixel_per_line; + } +- nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1; +- ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1; ++ if (enable_inline_image) { ++ nw = (w > 1) ? ((w - 1) / pixel_per_char_i + 1) : 1 ; ++ ni = (i > 1) ? ((i - 1) / pixel_per_line_i + 1) : 1 ; ++ } ++ else { ++ nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1; ++ ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1; ++ } + Strcat(tmp, + Sprintf("<pre_int><img_alt hseq=\"%d\" src=\"", cur_iseq++)); + pre_int = TRUE; +@@ -3378,19 +3383,21 @@ process_img(struct parsed_tag *tag, int width) + if (i0 >= 0) + Strcat(tmp, Sprintf(" height=%d", i0)); + switch (align) { ++ case ALIGN_MIDDLE: ++ if (!enable_inline_image) { ++ top = ni / 2; ++ bottom = top; ++ if (top * 2 == ni) ++ yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2); ++ else ++ yoffset = (int)((ni * pixel_per_line - i) / 2); ++ break; ++ } + case ALIGN_TOP: + top = 0; + bottom = ni - 1; + yoffset = 0; + break; +- case ALIGN_MIDDLE: +- top = ni / 2; +- bottom = top; +- if (top * 2 == ni) +- yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2); +- else +- yoffset = (int)((ni * pixel_per_line - i) / 2); +- break; + case ALIGN_BOTTOM: + top = ni - 1; + bottom = 0; +@@ -3408,7 +3415,12 @@ process_img(struct parsed_tag *tag, int width) + } + break; + } +- xoffset = (int)((nw * pixel_per_char - w) / 2); ++ ++ if (enable_inline_image) ++ xoffset = 0; ++ else ++ xoffset = (int)((nw * pixel_per_char - w) / 2); ++ + if (xoffset) + Strcat(tmp, Sprintf(" xoffset=%d", xoffset)); + if (yoffset) +@@ -3732,6 +3744,63 @@ process_input(struct parsed_tag *tag) + } + + Str ++process_button(struct parsed_tag *tag) ++{ ++ Str tmp = NULL; ++ char *p, *q, *r, *qq = ""; ++ int qlen, v; ++ ++ if (cur_form_id < 0) { ++ char *s = "<form_int method=internal action=none>"; ++ tmp = process_form(parse_tag(&s, TRUE)); ++ } ++ if (tmp == NULL) ++ tmp = Strnew(); ++ ++ p = "submit"; ++ parsedtag_get_value(tag, ATTR_TYPE, &p); ++ q = NULL; ++ parsedtag_get_value(tag, ATTR_VALUE, &q); ++ r = ""; ++ parsedtag_get_value(tag, ATTR_NAME, &r); ++ ++ v = formtype(p); ++ if (v == FORM_UNKNOWN) ++ return NULL; ++ ++ if (!q) { ++ switch (v) { ++ case FORM_INPUT_SUBMIT: ++ case FORM_INPUT_BUTTON: ++ q = "SUBMIT"; ++ break; ++ case FORM_INPUT_RESET: ++ q = "RESET"; ++ break; ++ } ++ } ++ if (q) { ++ qq = html_quote(q); ++ qlen = strlen(q); ++ } ++ ++ // Strcat_charp(tmp, "<pre_int>"); ++ Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s " ++ "name=\"%s\" value=\"%s\">", ++ cur_hseq++, cur_form_id, p, html_quote(r), qq)); ++ return tmp; ++} ++ ++Str ++process_n_button(void) ++{ ++ Str tmp = Strnew(); ++ Strcat_charp(tmp, "</input_alt>"); ++ // Strcat_charp(tmp, "</pre_int>"); ++ return tmp; ++} ++ ++Str + process_select(struct parsed_tag *tag) + { + Str tmp = NULL; +@@ -4084,6 +4153,7 @@ process_form_int(struct parsed_tag *tag, int fid) + parsedtag_get_value(tag, ATTR_METHOD, &p); + q = "!CURRENT_URL!"; + parsedtag_get_value(tag, ATTR_ACTION, &q); ++ q = url_encode(remove_space(q), cur_baseURL, cur_document_charset); + r = NULL; + #ifdef USE_M17N + if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r)) +@@ -4284,15 +4354,15 @@ getMetaRefreshParam(char *q, Str *refresh_uri) + while (*q) { + if (!strncasecmp(q, "url=", 4)) { + q += 4; +- if (*q == '\"') /* " */ ++ if (*q == '\"' || *q == '\'') /* " or ' */ + q++; + r = q; + while (*r && !IS_SPACE(*r) && *r != ';') + r++; + s_tmp = Strnew_charp_n(q, r - q); + +- if (s_tmp->ptr[s_tmp->length - 1] == '\"') { /* " +- */ ++ if (s_tmp->ptr[s_tmp->length - 1] == '\"' /* " */ ++ || s_tmp->ptr[s_tmp->length - 1] == '\'') { /* ' */ + s_tmp->length--; + s_tmp->ptr[s_tmp->length] = '\0'; + } +@@ -4861,7 +4931,35 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) + if (i > obuf->bottom_margin) + obuf->bottom_margin = i; + } ++ if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) { ++ obuf->input_alt.hseq = hseq; ++ } ++ if (parsedtag_get_value(tag, ATTR_FID, &i)) { ++ obuf->input_alt.fid = i; ++ } ++ if (parsedtag_get_value(tag, ATTR_TYPE, &p)) { ++ obuf->input_alt.type = Strnew_charp(p); ++ } ++ if (parsedtag_get_value(tag, ATTR_VALUE, &p)) { ++ obuf->input_alt.value = Strnew_charp(p); ++ } ++ if (parsedtag_get_value(tag, ATTR_NAME, &p)) { ++ obuf->input_alt.name = Strnew_charp(p); ++ } ++ obuf->input_alt.in = 1; + return 0; ++ case HTML_N_INPUT_ALT: ++ if (obuf->input_alt.in) { ++ if (!close_effect0(obuf, HTML_INPUT_ALT)) ++ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT); ++ obuf->input_alt.hseq = 0; ++ obuf->input_alt.fid = -1; ++ obuf->input_alt.in = 0; ++ obuf->input_alt.type = NULL; ++ obuf->input_alt.name = NULL; ++ obuf->input_alt.value = NULL; ++ } ++ return 1; + case HTML_TABLE: + close_anchor(h_env, obuf); + obuf->table_level++; +@@ -4970,6 +5068,16 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) + case HTML_INPUT: + close_anchor(h_env, obuf); + tmp = process_input(tag); ++ if (tmp) ++ HTMLlineproc1(tmp->ptr, h_env); ++ return 1; ++ case HTML_BUTTON: ++ tmp = process_button(tag); ++ if (tmp) ++ HTMLlineproc1(tmp->ptr, h_env); ++ return 1; ++ case HTML_N_BUTTON: ++ tmp = process_n_button(); + if (tmp) + HTMLlineproc1(tmp->ptr, h_env); + return 1; +@@ -5067,11 +5175,10 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) + } + return 1; + case HTML_BASE: +-#ifdef USE_IMAGE ++#if defined(USE_M17N) || defined(USE_IMAGE) + p = NULL; + if (parsedtag_get_value(tag, ATTR_HREF, &p)) { +- if (!cur_baseURL) +- cur_baseURL = New(ParsedURL); ++ cur_baseURL = New(ParsedURL); + parseURL(p, cur_baseURL, NULL); + } + #endif +@@ -5329,6 +5436,13 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + #ifdef MENU_SELECT + Anchor **a_select = NULL; + #endif ++#if defined(USE_M17N) || defined(USE_IMAGE) ++ ParsedURL *base = baseURL(buf); ++#endif ++#ifdef USE_M17N ++ wc_ces name_charset = url_to_charset(NULL, &buf->currentURL, ++ buf->document_charset); ++#endif + + if (out_size == 0) { + out_size = LINELEN; +@@ -5523,16 +5637,17 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + hseq = 0; + id = NULL; + if (parsedtag_get_value(tag, ATTR_NAME, &id)) { +- id = url_quote_conv(id, buf->document_charset); ++ id = url_quote_conv(id, name_charset); + registerName(buf, id, currentLn(buf), pos); + } + if (parsedtag_get_value(tag, ATTR_HREF, &p)) +- p = url_quote_conv(remove_space(p), +- buf->document_charset); ++ p = url_encode(remove_space(p), base, ++ buf->document_charset); + if (parsedtag_get_value(tag, ATTR_TARGET, &q)) + q = url_quote_conv(q, buf->document_charset); + if (parsedtag_get_value(tag, ATTR_REFERER, &r)) +- r = url_quote_conv(r, buf->document_charset); ++ r = url_encode(r, base, ++ buf->document_charset); + parsedtag_get_value(tag, ATTR_TITLE, &s); + parsedtag_get_value(tag, ATTR_ACCESSKEY, &t); + parsedtag_get_value(tag, ATTR_HSEQ, &hseq); +@@ -5618,7 +5733,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + ParsedURL u; + Image *image; + +- parseURL2(a_img->url, &u, cur_baseURL); ++ parseURL2(a_img->url, &u, base); + a_img->image = image = New(Image); + image->url = parsedURL2Str(&u)->ptr; + if (!uncompressed_file_type(u.file, &image->ext)) +@@ -5639,7 +5754,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + image->map = q; + image->ismap = ismap; + image->touch = 0; +- image->cache = getImage(image, cur_baseURL, ++ image->cache = getImage(image, base, + IMG_FLAG_SKIP); + } + else if (iseq < 0) { +@@ -5689,6 +5804,21 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + putHmarker(buf->hmarklist, currentLn(buf), + hpos, hseq - 1); + } ++ else if (hseq < 0) { ++ int h = -hseq - 1; ++ int hpos = pos; ++ if (*str == '[') ++ hpos++; ++ if (buf->hmarklist && ++ h < buf->hmarklist->nmark && ++ buf->hmarklist->marks[h].invalid) { ++ buf->hmarklist->marks[h].pos = hpos; ++ buf->hmarklist->marks[h].line = currentLn(buf); ++ buf->hmarklist->marks[h].invalid = 0; ++ hseq = -hseq; ++ } ++ } ++ + if (!form->target) + form->target = buf->baseTarget; + if (a_textarea && +@@ -5761,8 +5891,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + break; + if (parsedtag_get_value(tag, ATTR_HREF, &p)) { + MapArea *a; +- p = url_quote_conv(remove_space(p), +- buf->document_charset); ++ p = url_encode(remove_space(p), base, ++ buf->document_charset); + t = NULL; + parsedtag_get_value(tag, ATTR_TARGET, &t); + q = ""; +@@ -5811,11 +5941,14 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + break; + case HTML_BASE: + if (parsedtag_get_value(tag, ATTR_HREF, &p)) { +- p = url_quote_conv(remove_space(p), +- buf->document_charset); ++ p = url_encode(remove_space(p), NULL, ++ buf->document_charset); + if (!buf->baseURL) + buf->baseURL = New(ParsedURL); + parseURL(p, buf->baseURL, NULL); ++#if defined(USE_M17N) || defined(USE_IMAGE) ++ base = buf->baseURL; ++#endif + } + if (parsedtag_get_value(tag, ATTR_TARGET, &p)) + buf->baseTarget = +@@ -5830,8 +5963,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + int refresh_interval = getMetaRefreshParam(q, &tmp); + #ifdef USE_ALARM + if (tmp) { +- p = url_quote_conv(remove_space(tmp->ptr), +- buf->document_charset); ++ p = url_encode(remove_space(tmp->ptr), base, ++ buf->document_charset); + buf->event = setAlarmEvent(buf->event, + refresh_interval, + AL_IMPLICIT_ONCE, +@@ -5844,8 +5977,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + FUNCNAME_reload, NULL); + #else + if (tmp && refresh_interval == 0) { +- p = url_quote_conv(remove_space(tmp->ptr), +- buf->document_charset); ++ p = url_encode(remove_space(tmp->ptr), base, ++ buf->document_charset); + pushEvent(FUNCNAME_gorURL, p); + } + #endif +@@ -5929,7 +6062,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) + #ifdef ID_EXT + id = NULL; + if (parsedtag_get_value(tag, ATTR_ID, &id)) { +- id = url_quote_conv(id, buf->document_charset); ++ id = url_quote_conv(id, name_charset); + registerName(buf, id, currentLn(buf), pos); + } + if (renderFrameSet && +@@ -5982,7 +6115,8 @@ addLink(Buffer *buf, struct parsed_tag *tag) + + parsedtag_get_value(tag, ATTR_HREF, &href); + if (href) +- href = url_quote_conv(remove_space(href), buf->document_charset); ++ href = url_encode(remove_space(href), baseURL(buf), ++ buf->document_charset); + parsedtag_get_value(tag, ATTR_TITLE, &title); + parsedtag_get_value(tag, ATTR_TYPE, &ctype); + parsedtag_get_value(tag, ATTR_REL, &rel); +@@ -6756,6 +6890,12 @@ init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf, + obuf->nobr_level = 0; + bzero((void *)&obuf->anchor, sizeof(obuf->anchor)); + obuf->img_alt = 0; ++ obuf->input_alt.hseq = 0; ++ obuf->input_alt.fid = -1; ++ obuf->input_alt.in = 0; ++ obuf->input_alt.type = NULL; ++ obuf->input_alt.name = NULL; ++ obuf->input_alt.value = NULL; + obuf->in_bold = 0; + obuf->in_italic = 0; + obuf->in_under = 0; +@@ -6791,6 +6931,15 @@ completeHTMLstream(struct html_feed_environ *h_env, struct readbuffer *obuf) + push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT); + obuf->img_alt = NULL; + } ++ if (obuf->input_alt.in) { ++ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT); ++ obuf->input_alt.hseq = 0; ++ obuf->input_alt.fid = -1; ++ obuf->input_alt.in = 0; ++ obuf->input_alt.type = NULL; ++ obuf->input_alt.name = NULL; ++ obuf->input_alt.value = NULL; ++ } + if (obuf->in_bold) { + push_tag(obuf, "</b>", HTML_N_B); + obuf->in_bold = 0; +@@ -6963,8 +7112,6 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) + image_flag = IMG_FLAG_AUTO; + else + image_flag = IMG_FLAG_SKIP; +- if (newBuf->currentURL.file) +- cur_baseURL = baseURL(newBuf); + #endif + + if (w3m_halfload) { +@@ -6987,6 +7134,9 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) + htmlenv1.f = stdout; + else + htmlenv1.buf = newTextLineList(); ++#if defined(USE_M17N) || defined(USE_IMAGE) ++ cur_baseURL = baseURL(newBuf); ++#endif + + if (SETJMP(AbortLoading) != 0) { + HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1); +@@ -7048,7 +7198,7 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) + } + #endif + lineBuf2 = convertLine(f, lineBuf2, HTML_MODE, &charset, doc_charset); +-#if defined(USE_M17N) && defined(USE_IMAGE) ++#ifdef USE_M17N + cur_document_charset = charset; + #endif + HTMLlineproc0(lineBuf2->ptr, &htmlenv1, internal); +@@ -7060,6 +7210,12 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) + obuf.status = R_ST_NORMAL; + completeHTMLstream(&htmlenv1, &obuf); + flushline(&htmlenv1, &obuf, 0, 2, htmlenv1.limit); ++#if defined(USE_M17N) || defined(USE_IMAGE) ++ cur_baseURL = NULL; ++#endif ++#ifdef USE_M17N ++ cur_document_charset = 0; ++#endif + if (htmlenv1.title) + newBuf->buffername = htmlenv1.title; + if (w3m_halfdump) { +@@ -7096,16 +7252,17 @@ loadHTMLString(Str page) + MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; + Buffer *newBuf; + ++ init_stream(&f, SCM_LOCAL, newStrStream(page)); ++ + newBuf = newBuffer(INIT_BUFFER_WIDTH); + if (SETJMP(AbortLoading) != 0) { + TRAP_OFF; + discardBuffer(newBuf); ++ UFclose(&f); + return NULL; + } + TRAP_ON; + +- init_stream(&f, SCM_LOCAL, newStrStream(page)); +- + #ifdef USE_M17N + newBuf->document_charset = InnerCharset; + #endif +@@ -7115,6 +7272,7 @@ loadHTMLString(Str page) + #endif + + TRAP_OFF; ++ UFclose(&f); + newBuf->topLine = newBuf->firstLine; + newBuf->lastLine = newBuf->currentLine; + newBuf->currentLine = newBuf->firstLine; +@@ -7207,7 +7365,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset) + q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr, + "/", file->ptr, NULL)->ptr; + Strcat_m_charp(tmp, "<a href=\"", +- html_quote(url_quote_conv(q, *charset)), ++ html_quote(url_encode(q, NULL, *charset)), + "\">", p, html_quote(name->ptr + 1), "</a>\n", NULL); + } + +@@ -7331,6 +7489,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) + URLFile f; + MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; + struct stat st; ++ const ParsedURL *pu = newBuf ? &newBuf->currentURL : NULL; + + loadImage(newBuf, IMG_FLAG_STOP); + image.url = uf->url; +@@ -7338,20 +7497,18 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) + image.width = -1; + image.height = -1; + image.cache = NULL; +- cache = getImage(&image, cur_baseURL, IMG_FLAG_AUTO); +- if (!cur_baseURL->is_nocache && cache->loaded & IMG_FLAG_LOADED && ++ cache = getImage(&image, (ParsedURL *)pu, IMG_FLAG_AUTO); ++ if (!(pu && pu->is_nocache) && cache->loaded & IMG_FLAG_LOADED && + !stat(cache->file, &st)) + goto image_buffer; + +- TRAP_ON; + if (IStype(uf->stream) != IST_ENCODED) + uf->stream = newEncodedStream(uf->stream, uf->encoding); ++ TRAP_ON; + if (save2tmp(*uf, cache->file) < 0) { +- UFclose(uf); + TRAP_OFF; + return NULL; + } +- UFclose(uf); + TRAP_OFF; + + cache->loaded = IMG_FLAG_LOADED; +@@ -7371,6 +7528,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) + + init_stream(&f, SCM_LOCAL, newStrStream(tmp)); + loadHTMLstream(&f, newBuf, src, TRUE); ++ UFclose(&f); + if (src) + fclose(src); + +@@ -7580,8 +7738,11 @@ openGeneralPagerBuffer(InputStream stream) + #ifdef USE_M17N + content_charset = 0; + #endif ++ t_buf = newBuffer(INIT_BUFFER_WIDTH); ++ copyParsedURL(&t_buf->currentURL, NULL); ++ t_buf->currentURL.scheme = SCM_LOCAL; ++ t_buf->currentURL.file = "-"; + if (SearchHeader) { +- t_buf = newBuffer(INIT_BUFFER_WIDTH); + readHeader(&uf, t_buf, TRUE, NULL); + t = checkContentType(t_buf); + if (t == NULL) +@@ -7609,14 +7770,13 @@ openGeneralPagerBuffer(InputStream stream) + #ifdef USE_IMAGE + else if (activeImage && displayImage && !useExtImageViewer && + !(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6)) { +- cur_baseURL = New(ParsedURL); +- parseURL("-", cur_baseURL, NULL); + buf = loadImageBuffer(&uf, t_buf); + buf->type = "text/html"; + } + #endif + else { +- if (doExternal(uf, "-", t, &buf, t_buf)) { ++ if (searchExtViewer(t)) { ++ buf = doExternal(uf, t, t_buf); + UFclose(&uf); + if (buf == NULL || buf == NO_BUFFER) + return buf; +@@ -7629,8 +7789,6 @@ openGeneralPagerBuffer(InputStream stream) + } + } + buf->real_type = t; +- buf->currentURL.scheme = SCM_LOCAL; +- buf->currentURL.file = "-"; + return buf; + } + +@@ -7766,6 +7924,8 @@ save2tmp(URLFile uf, char *tmpf) + clen_t linelen = 0, trbyte = 0; + MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; + static JMP_BUF env_bak; ++ volatile int retval = 0; ++ char *volatile buf = NULL; + + ff = fopen(tmpf, "wb"); + if (ff == NULL) { +@@ -7802,30 +7962,29 @@ save2tmp(URLFile uf, char *tmpf) + else + #endif /* USE_NNTP */ + { +- Str buf = Strnew_size(SAVE_BUF_SIZE); +- while (UFread(&uf, buf, SAVE_BUF_SIZE)) { +- if (Strfputs(buf, ff) != buf->length) { +- bcopy(env_bak, AbortLoading, sizeof(JMP_BUF)); +- TRAP_OFF; +- fclose(ff); +- current_content_length = 0; +- return -2; ++ int count; ++ ++ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE); ++ while ((count = ISread_n(uf.stream, buf, SAVE_BUF_SIZE)) > 0) { ++ if (fwrite(buf, 1, count, ff) != count) { ++ retval = -2; ++ goto _end; + } +- linelen += buf->length; ++ linelen += count; + showProgress(&linelen, &trbyte); + } + } + _end: + bcopy(env_bak, AbortLoading, sizeof(JMP_BUF)); + TRAP_OFF; ++ xfree(buf); + fclose(ff); + current_content_length = 0; +- return 0; ++ return retval; + } + +-int +-doExternal(URLFile uf, char *path, char *type, Buffer **bufp, +- Buffer *defaultbuf) ++Buffer * ++doExternal(URLFile uf, char *type, Buffer *defaultbuf) + { + Str tmpf, command; + struct mailcap *mcap; +@@ -7834,7 +7993,7 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, + char *header, *src = NULL, *ext = uf.ext; + + if (!(mcap = searchExtViewer(type))) +- return 0; ++ return NULL; + + if (mcap->nametemplate) { + tmpf = unquote_mailcap(mcap->nametemplate, NULL, "", NULL, NULL); +@@ -7867,15 +8026,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, + UFclose(&uf); + myExec(command->ptr); + } +- *bufp = NO_BUFFER; +- return 1; ++ return NO_BUFFER; + } + else + #endif + { + if (save2tmp(uf, tmpf->ptr) < 0) { +- *bufp = NULL; +- return 1; ++ return NULL; + } + } + if (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) { +@@ -7918,14 +8075,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, + buf = NO_BUFFER; + } + if (buf && buf != NO_BUFFER) { +- buf->filename = path; +- if (buf->buffername == NULL || buf->buffername[0] == '\0') +- buf->buffername = conv_from_system(lastFileName(path)); ++ if ((buf->buffername == NULL || buf->buffername[0] == '\0') && ++ buf->filename) ++ buf->buffername = conv_from_system(lastFileName(buf->filename)); + buf->edit = mcap->edit; + buf->mailcap = mcap; + } +- *bufp = buf; +- return 1; ++ return buf; + } + + static int +@@ -7935,7 +8091,8 @@ _MoveFile(char *path1, char *path2) + FILE *f2; + int is_pipe; + clen_t linelen = 0, trbyte = 0; +- Str buf; ++ char *buf = NULL; ++ int count; + + f1 = openIS(path1); + if (f1 == NULL) +@@ -7953,12 +8110,13 @@ _MoveFile(char *path1, char *path2) + return -1; + } + current_content_length = 0; +- buf = Strnew_size(SAVE_BUF_SIZE); +- while (ISread(f1, buf, SAVE_BUF_SIZE)) { +- Strfputs(buf, f2); +- linelen += buf->length; ++ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE); ++ while ((count = ISread_n(f1, buf, SAVE_BUF_SIZE)) > 0) { ++ fwrite(buf, 1, count, f2); ++ linelen += count; + showProgress(&linelen, &trbyte); + } ++ xfree(buf); + ISclose(f1); + if (is_pipe) + pclose(f2); +@@ -8317,21 +8475,23 @@ uncompress_stream(URLFile *uf, char **src) + } + if (pid2 == 0) { + /* child2 */ +- Str buf = Strnew_size(SAVE_BUF_SIZE); ++ char *buf = NewWithoutGC_N(char, SAVE_BUF_SIZE); ++ int count; + FILE *f = NULL; + + setup_child(TRUE, 2, UFfileno(uf)); + if (tmpf) + f = fopen(tmpf, "wb"); +- while (UFread(uf, buf, SAVE_BUF_SIZE)) { +- if (Strfputs(buf, stdout) < 0) ++ while ((count = ISread_n(uf->stream, buf, SAVE_BUF_SIZE)) > 0) { ++ if (fwrite(buf, 1, count, stdout) != count) ++ break; ++ if (f && fwrite(buf, 1, count, f) != count) + break; +- if (f) +- Strfputs(buf, f); + } + UFclose(uf); + if (f) + fclose(f); ++ xfree(buf); + exit(0); + } + /* child1 */ +diff --git a/fm.h b/fm.h +index 8378939..8f594dc 100644 +--- a/fm.h ++++ b/fm.h +@@ -76,6 +76,7 @@ typedef int wc_ces; /* XXX: not used */ + #include "textlist.h" + #include "funcname1.h" + #include "terms.h" ++#include "istream.h" + + #ifndef HAVE_BCOPY + void bcopy(const void *, void *, int); +@@ -264,6 +265,18 @@ extern int REV_LB[]; + #define IMG_FLAG_ERROR 2 + #define IMG_FLAG_DONT_REMOVE 4 + ++#define IS_EMPTY_PARSED_URL(pu) ((pu)->scheme == SCM_UNKNOWN && !(pu)->file) ++#define SCONF_RESERVED 0 ++#define SCONF_SUBSTITUTE_URL 1 ++#define SCONF_URL_CHARSET 2 ++#define SCONF_NO_REFERER_FROM 3 ++#define SCONF_NO_REFERER_TO 4 ++#define SCONF_N_FIELD 5 ++#define query_SCONF_SUBSTITUTE_URL(pu) ((const char *)querySiteconf(pu, SCONF_SUBSTITUTE_URL)) ++#define query_SCONF_URL_CHARSET(pu) ((const wc_ces *)querySiteconf(pu, SCONF_URL_CHARSET)) ++#define query_SCONF_NO_REFERER_FROM(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_FROM)) ++#define query_SCONF_NO_REFERER_TO(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_TO)) ++ + /* + * Macros. + */ +@@ -276,8 +289,6 @@ extern int REV_LB[]; + #define inputFilenameHist(p,d,h) inputLineHist(p,d,IN_FILENAME,h) + #define inputChar(p) inputLine(p,"",IN_CHAR) + +-#define free(x) GC_free(x) /* let GC do it. */ +- + #ifdef __EMX__ + #define HAVE_STRCASECMP + #define strcasecmp stricmp +@@ -362,6 +373,8 @@ typedef struct _imageCache { + int index; + short width; + short height; ++ short a_width; ++ short a_height; + } ImageCache; + + typedef struct _image { +@@ -562,6 +575,13 @@ typedef struct _DownloadList { + #define INIT_BUFFER_WIDTH ((_INIT_BUFFER_WIDTH > 0) ? _INIT_BUFFER_WIDTH : 0) + #define FOLD_BUFFER_WIDTH (FoldLine ? (INIT_BUFFER_WIDTH + 1) : -1) + ++struct input_alt_attr { ++ int hseq; ++ int fid; ++ int in; ++ Str type, name, value; ++}; ++ + typedef struct { + int pos; + int len; +@@ -569,6 +589,7 @@ typedef struct { + long flag; + Anchor anchor; + Str img_alt; ++ struct input_alt_attr input_alt; + char fontstat[FONTSTAT_SIZE]; + short nobr_level; + Lineprop prev_ctype; +@@ -591,6 +612,7 @@ struct readbuffer { + short nobr_level; + Anchor anchor; + Str img_alt; ++ struct input_alt_attr input_alt; + char fontstat[FONTSTAT_SIZE]; + char fontstat_stack[FONT_STACK_SIZE][FONTSTAT_SIZE]; + int fontstat_sp; +@@ -874,6 +896,9 @@ global char *index_file init(NULL); + + global char *CurrentDir; + global int CurrentPid; ++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) ++global char *MyProgramName init("w3m"); ++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ + /* + * global Buffer *Currentbuf; + * global Buffer *Firstbuf; +@@ -896,6 +921,7 @@ global char *CurrentKeyData; + global char *CurrentCmdData; + global char *w3m_reqlog; + extern char *w3m_version; ++extern int enable_inline_image; + + #define DUMP_BUFFER 0x01 + #define DUMP_HEAD 0x02 +@@ -972,6 +998,7 @@ global int BackgroundExtViewer init(TRUE); + global int disable_secret_security_check init(FALSE); + global char *passwd_file init(PASSWD_FILE); + global char *pre_form_file init(PRE_FORM_FILE); ++global char *siteconf_file init(SITECONF_FILE); + global char *ftppasswd init(NULL); + global int ftppass_hostnamegen init(TRUE); + global int do_download init(FALSE); +@@ -1065,7 +1092,7 @@ global char SimplePreserveSpace init(FALSE); + #define wc_Str_conv(x,charset0,charset1) (x) + #define wc_Str_conv_strict(x,charset0,charset1) (x) + #endif +-global char UseAltEntity init(TRUE); ++global char UseAltEntity init(FALSE); + #define GRAPHIC_CHAR_ASCII 2 + #define GRAPHIC_CHAR_DEC 1 + #define GRAPHIC_CHAR_CHARSET 0 +@@ -1135,7 +1162,7 @@ global int view_unseenobject init(TRUE); + #endif + + #if defined(USE_SSL) && defined(USE_SSL_VERIFY) +-global int ssl_verify_server init(FALSE); ++global int ssl_verify_server init(TRUE); + global char *ssl_cert_file init(NULL); + global char *ssl_key_file init(NULL); + global char *ssl_ca_path init(NULL); +@@ -1144,15 +1171,17 @@ global int ssl_path_modified init(FALSE); + #endif /* defined(USE_SSL) && + * defined(USE_SSL_VERIFY) */ + #ifdef USE_SSL +-global char *ssl_forbid_method init(NULL); ++global char *ssl_forbid_method init("2, 3"); + #endif + + global int is_redisplay init(FALSE); + global int clear_buffer init(TRUE); + global double pixel_per_char init(DEFAULT_PIXEL_PER_CHAR); ++global int pixel_per_char_i init(DEFAULT_PIXEL_PER_CHAR); + global int set_pixel_per_char init(FALSE); + #ifdef USE_IMAGE + global double pixel_per_line init(DEFAULT_PIXEL_PER_LINE); ++global int pixel_per_line_i init(DEFAULT_PIXEL_PER_LINE); + global int set_pixel_per_line init(FALSE); + global double image_scale init(100); + #endif +diff --git a/form.c b/form.c +index b7556ca..62b568e 100644 +--- a/form.c ++++ b/form.c +@@ -196,7 +196,7 @@ formtype(char *typestr) + if (!strcasecmp(typestr, _formtypetbl[i])) + return i; + } +- return FORM_UNKNOWN; ++ return FORM_INPUT_TEXT; + } + + void +@@ -787,7 +787,7 @@ struct pre_form { + static struct pre_form *PreForm = NULL; + + static struct pre_form * +-add_pre_form(struct pre_form *prev, char *url, char *name, char *action) ++add_pre_form(struct pre_form *prev, char *url, Regex *re_url, char *name, char *action) + { + ParsedURL pu; + struct pre_form *new; +@@ -796,21 +796,13 @@ add_pre_form(struct pre_form *prev, char *url, char *name, char *action) + new = prev->next = New(struct pre_form); + else + new = PreForm = New(struct pre_form); +- if (url && *url == '/') { +- int l = strlen(url); +- if (l > 1 && url[l - 1] == '/') +- new->url = allocStr(url + 1, l - 2); +- else +- new->url = url + 1; +- new->re_url = newRegex(new->url, FALSE, NULL, NULL); +- if (!new->re_url) +- new->url = NULL; +- } +- else if (url) { ++ if (url && !re_url) { + parseURL2(url, &pu, NULL); + new->url = parsedURL2Str(&pu)->ptr; +- new->re_url = NULL; + } ++ else ++ new->url = url; ++ new->re_url = re_url; + new->name = (name && *name) ? name : NULL; + new->action = (action && *action) ? action : NULL; + new->item = NULL; +@@ -834,7 +826,7 @@ add_pre_form_item(struct pre_form *pf, struct pre_form_item *prev, int type, + new->name = name; + new->value = value; + if (checked && *checked && (!strcmp(checked, "0") || +- strcasecmp(checked, "off") ++ !strcasecmp(checked, "off") + || !strcasecmp(checked, "no"))) + new->checked = 0; + else +@@ -875,6 +867,7 @@ loadPreForm(void) + return; + while (1) { + char *p, *s, *arg; ++ Regex *re_arg; + + line = Strfgets(fp); + if (line->length == 0) +@@ -890,18 +883,20 @@ loadPreForm(void) + if (*p == '#' || *p == '\0') + continue; /* comment or empty line */ + s = getWord(&p); +- arg = getWord(&p); + + if (!strcmp(s, "url")) { ++ arg = getRegexWord((const char **)&p, &re_arg); + if (!arg || !*arg) + continue; + p = getQWord(&p); +- pf = add_pre_form(pf, arg, NULL, p); ++ pf = add_pre_form(pf, arg, re_arg, NULL, p); + pi = pf->item; + continue; + } + if (!pf) + continue; ++ ++ arg = getWord(&p); + if (!strcmp(s, "form")) { + if (!arg || !*arg) + continue; +@@ -913,7 +908,7 @@ loadPreForm(void) + } + if (pf->item) { + struct pre_form *prev = pf; +- pf = add_pre_form(prev, "", s, p); ++ pf = add_pre_form(prev, "", NULL, s, p); + /* copy previous URL */ + pf->url = prev->url; + pf->re_url = prev->re_url; +diff --git a/frame.c b/frame.c +index b431437..48c2d72 100644 +--- a/frame.c ++++ b/frame.c +@@ -91,7 +91,8 @@ newFrame(struct parsed_tag *tag, Buffer *buf) + body->baseURL = baseURL(buf); + if (tag) { + if (parsedtag_get_value(tag, ATTR_SRC, &p)) +- body->url = url_quote_conv(remove_space(p), buf->document_charset); ++ body->url = url_encode(remove_space(p), body->baseURL, ++ buf->document_charset); + if (parsedtag_get_value(tag, ATTR_NAME, &p) && *p != '_') + body->name = url_quote_conv(p, buf->document_charset); + } +@@ -639,7 +640,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level, + case HTML_BASE: + /* "BASE" is prohibit tag */ + if (parsedtag_get_value(tag, ATTR_HREF, &q)) { +- q = url_quote_conv(remove_space(q), charset); ++ q = url_encode(remove_space(q), NULL, charset); + parseURL(q, &base, NULL); + } + if (parsedtag_get_value(tag, ATTR_TARGET, &q)) { +@@ -768,8 +769,8 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level, + if (!tag->value[j]) + break; + tag->value[j] = +- url_quote_conv(remove_space(tag->value[j]), +- charset); ++ url_encode(remove_space(tag->value[j]), ++ &base, charset); + tag->need_reconstruct = TRUE; + parseURL2(tag->value[j], &url, &base); + if (url.scheme == SCM_UNKNOWN || +diff --git a/func.c b/func.c +index f389e00..8b5deac 100644 +--- a/func.c ++++ b/func.c +@@ -8,6 +8,7 @@ + #include "fm.h" + #include "func.h" + #include "myctype.h" ++#include "regex.h" + + #include "funcname.c" + #include "functable.c" +@@ -434,6 +435,93 @@ getQWord(char **str) + return tmp->ptr; + } + ++/* This extracts /regex/i or m@regex@i from the given string. ++ * Then advances *str to the end of regex. ++ * If the input does not seems to be a regex, this falls back to getQWord(). ++ * ++ * Returns a word (no matter whether regex or not) in the give string. ++ * If regex_ret is non-NULL, compiles the regex and stores there. ++ * ++ * XXX: Actually this is unrelated to func.c. ++ */ ++char * ++getRegexWord(const char **str, Regex **regex_ret) ++{ ++ char *word = NULL; ++ const char *p, *headp, *bodyp, *tailp; ++ char delimiter; ++ int esc; ++ int igncase = 0; ++ ++ p = *str; ++ SKIP_BLANKS(p); ++ headp = p; ++ ++ /* Get the opening delimiter */ ++ if (p[0] == 'm' && IS_PRINT(p[1]) && !IS_ALNUM(p[1]) && p[1] != '\\') { ++ delimiter = p[1]; ++ p += 2; ++ } ++ else if (p[0] == '/') { ++ delimiter = '/'; ++ p += 1; ++ } ++ else { ++ goto not_regex; ++ } ++ bodyp = p; ++ ++ /* Scan the end of the expression */ ++ for (esc = 0; *p; ++p) { ++ if (esc) { ++ esc = 0; ++ } else { ++ if (*p == delimiter) ++ break; ++ else if (*p == '\\') ++ esc = 1; ++ } ++ } ++ if (!*p && *headp == '/') ++ goto not_regex; ++ tailp = p; ++ ++ /* Check the modifiers */ ++ if (*p == delimiter) { ++ while (*++p && !IS_SPACE(*p)) { ++ switch (*p) { ++ case 'i': ++ igncase = 1; ++ break; ++ } ++ /* ignore unknown modifiers */ ++ } ++ } ++ ++ /* Save the expression */ ++ word = allocStr(headp, p - headp); ++ ++ /* Compile */ ++ if (regex_ret) { ++ if (*tailp == delimiter) ++ word[tailp - headp] = 0; ++ *regex_ret = newRegex(word + (bodyp - headp), igncase, NULL, NULL); ++ if (*tailp == delimiter) ++ word[tailp - headp] = delimiter; ++ } ++ goto last; ++ ++not_regex: ++ p = headp; ++ word = getQWord((char **)&p); ++ if (regex_ret) ++ *regex_ret = NULL; ++ ++last: ++ *str = p; ++ return word; ++} ++ + #ifdef USE_MOUSE + static MouseAction default_mouse_action = { + NULL, +diff --git a/history.c b/history.c +index 951ef83..e9be09b 100644 +--- a/history.c ++++ b/history.c +@@ -17,7 +17,7 @@ historyBuffer(Hist *hist) + for (item = hist->list->last; item; item = item->prev) { + q = html_quote((char *)item->ptr); + if (DecodeURL) +- p = html_quote(url_unquote_conv((char *)item->ptr, 0)); ++ p = html_quote(url_decode2((char *)item->ptr, NULL)); + else + p = q; + Strcat_charp(src, "<li><a href=\""); +diff --git a/html.c b/html.c +index bca227e..d9f08e9 100644 +--- a/html.c ++++ b/html.c +@@ -56,6 +56,9 @@ unsigned char ALST_INPUT[] = + ATTR_CORE + }; + #define MAXA_INPUT MAXA_CORE + 12 ++unsigned char ALST_BUTTON[] = ++ { ATTR_TYPE, ATTR_VALUE, ATTR_NAME, ATTR_CORE }; ++#define MAXA_BUTTON MAXA_CORE + 3 + unsigned char ALST_TEXTAREA[] = + { ATTR_COLS, ATTR_ROWS, ATTR_NAME, ATTR_READONLY, ATTR_CORE }; + #define MAXA_TEXTAREA MAXA_CORE + 4 +@@ -247,24 +250,24 @@ TagInfo TagMAP[MAX_HTMLTAG] = { + {"/bdo", NULL, 0, TFLG_END}, /* 121 HTML_N_BDO */ + {"big", ALST_NOP, MAXA_NOP, 0}, /* 122 HTML_BIG */ + {"/big", NULL, 0, TFLG_END}, /* 123 HTML_N_BIG */ +- {"button", ALST_NOP, MAXA_NOP, 0}, /* 124 HTML_BUTTON */ +- {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 125 HTML_FIELDSET */ +- {"/fieldset", NULL, 0, TFLG_END}, /* 126 HTML_N_FIELDSET */ +- {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 127 HTML_IFRAME */ +- {"label", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_LABEL */ +- {"/label", NULL, 0, TFLG_END}, /* 129 HTML_N_LABEL */ +- {"legend", ALST_NOP, MAXA_NOP, 0}, /* 130 HTML_LEGEND */ +- {"/legend", NULL, 0, TFLG_END}, /* 131 HTML_N_LEGEND */ +- {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 132 HTML_NOSCRIPT */ +- {"/noscript", NULL, 0, TFLG_END}, /* 133 HTML_N_NOSCRIPT */ +- {"object", ALST_NOP, MAXA_NOP, 0}, /* 134 HTML_OBJECT */ +- {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OPTGROUP */ +- {"/optgroup", NULL, 0, TFLG_END}, /* 136 HTML_N_OPTGROUP */ +- {"param", ALST_NOP, MAXA_NOP, 0}, /* 137 HTML_PARAM */ +- {"small", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_SMALL */ +- {"/small", NULL, 0, TFLG_END}, /* 139 HTML_N_SMALL */ ++ {"button", ALST_BUTTON, MAXA_BUTTON, 0}, /* 124 HTML_BUTTON */ ++ {"/button", NULL, 0, TFLG_END}, /* 125 HTML_N_BUTTON */ ++ {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 126 HTML_FIELDSET */ ++ {"/fieldset", NULL, 0, TFLG_END}, /* 127 HTML_N_FIELDSET */ ++ {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_IFRAME */ ++ {"label", ALST_NOP, MAXA_NOP, 0}, /* 129 HTML_LABEL */ ++ {"/label", NULL, 0, TFLG_END}, /* 130 HTML_N_LABEL */ ++ {"legend", ALST_NOP, MAXA_NOP, 0}, /* 131 HTML_LEGEND */ ++ {"/legend", NULL, 0, TFLG_END}, /* 132 HTML_N_LEGEND */ ++ {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 133 HTML_NOSCRIPT */ ++ {"/noscript", NULL, 0, TFLG_END}, /* 134 HTML_N_NOSCRIPT */ ++ {"object", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OBJECT */ ++ {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 136 HTML_OPTGROUP */ ++ {"/optgroup", NULL, 0, TFLG_END}, /* 137 HTML_N_OPTGROUP */ ++ {"param", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_PARAM */ ++ {"small", ALST_NOP, MAXA_NOP, 0}, /* 139 HTML_SMALL */ ++ {"/small", NULL, 0, TFLG_END}, /* 140 HTML_N_SMALL */ + +- {NULL, NULL, 0, 0}, /* 140 Undefined */ + {NULL, NULL, 0, 0}, /* 141 Undefined */ + {NULL, NULL, 0, 0}, /* 142 Undefined */ + {NULL, NULL, 0, 0}, /* 143 Undefined */ +diff --git a/html.h b/html.h +index 7abbd3b..b4b3df9 100644 +--- a/html.h ++++ b/html.h +@@ -1,19 +1,17 @@ + /* $Id: html.h,v 1.31 2010/08/14 01:29:40 htrb Exp $ */ + #ifndef _HTML_H + #define _HTML_H ++#include "config.h" + #ifdef USE_SSL + #include <openssl/bio.h> + #include <openssl/x509.h> + #include <openssl/ssl.h> + #endif /* USE_SSL */ + +-#include "istream.h" +- + #define StrUFgets(f) StrISgets((f)->stream) + #define StrmyUFgets(f) StrmyISgets((f)->stream) + #define UFgetc(f) ISgetc((f)->stream) + #define UFundogetc(f) ISundogetc((f)->stream) +-#define UFread(f,buf,len) ISread((f)->stream,buf,len) + #define UFclose(f) (void)(ISclose((f)->stream) == 0 && ((f)->stream = NULL)) + #define UFfileno(f) ISfileno((f)->stream) + +@@ -62,11 +60,12 @@ typedef struct _ParsedURL { + int is_nocache; + } ParsedURL; + ++union input_stream; + typedef struct { + unsigned char scheme; + char is_cgi; + char encoding; +- InputStream stream; ++ union input_stream *stream; + char *ext; + int compression; + int content_encoding; +@@ -214,21 +213,22 @@ typedef struct { + #define HTML_BIG 122 + #define HTML_N_BIG 123 + #define HTML_BUTTON 124 +-#define HTML_FIELDSET 125 +-#define HTML_N_FIELDSET 126 +-#define HTML_IFRAME 127 +-#define HTML_LABEL 128 +-#define HTML_N_LABEL 129 +-#define HTML_LEGEND 130 +-#define HTML_N_LEGEND 131 +-#define HTML_NOSCRIPT 132 +-#define HTML_N_NOSCRIPT 133 +-#define HTML_OBJECT 134 +-#define HTML_OPTGROUP 135 +-#define HTML_N_OPTGROUP 136 +-#define HTML_PARAM 137 +-#define HTML_SMALL 138 +-#define HTML_N_SMALL 139 ++#define HTML_N_BUTTON 125 ++#define HTML_FIELDSET 126 ++#define HTML_N_FIELDSET 127 ++#define HTML_IFRAME 128 ++#define HTML_LABEL 129 ++#define HTML_N_LABEL 130 ++#define HTML_LEGEND 131 ++#define HTML_N_LEGEND 132 ++#define HTML_NOSCRIPT 133 ++#define HTML_N_NOSCRIPT 134 ++#define HTML_OBJECT 135 ++#define HTML_OPTGROUP 136 ++#define HTML_N_OPTGROUP 137 ++#define HTML_PARAM 138 ++#define HTML_SMALL 139 ++#define HTML_N_SMALL 140 + + /* pseudo tag */ + #define HTML_SELECT_INT 160 +diff --git a/image.c b/image.c +index 5f5991a..91034ee 100644 +--- a/image.c ++++ b/image.c +@@ -44,6 +44,8 @@ initImage() + activeImage = TRUE; + } + ++int get_pixel_per_cell(int *ppc, int *ppl); ++ + int + getCharSize() + { +@@ -52,6 +54,24 @@ getCharSize() + int w = 0, h = 0; + + set_environ("W3M_TTY", ttyname_tty()); ++ ++ if (enable_inline_image) { ++ int ppc, ppl; ++ ++ if (get_pixel_per_cell(&ppc,&ppl)) { ++ pixel_per_char_i = ppc ; ++ pixel_per_line_i = ppl ; ++ pixel_per_char = (double)ppc; ++ pixel_per_line = (double)ppl; ++ } ++ else { ++ pixel_per_char_i = (int)pixel_per_char; ++ pixel_per_line_i = (int)pixel_per_line; ++ } ++ ++ return TRUE; ++ } ++ + tmp = Strnew(); + if (!strchr(Imgdisplay, '/')) + Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL); +@@ -90,17 +110,18 @@ termImage() + static int + openImgdisplay() + { ++ char *cmd; ++ ++ if (!strchr(Imgdisplay, '/')) ++ cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr; ++ else ++ cmd = Imgdisplay; + Imgdisplay_pid = open_pipe_rw(&Imgdisplay_rf, &Imgdisplay_wf); + if (Imgdisplay_pid < 0) + goto err0; + if (Imgdisplay_pid == 0) { + /* child */ +- char *cmd; + setup_child(FALSE, 2, -1); +- if (!strchr(Imgdisplay, '/')) +- cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr; +- else +- cmd = Imgdisplay; + myExec(cmd); + /* XXX: ifdef __EMX__, use start /f ? */ + } +@@ -155,6 +176,10 @@ addImage(ImageCache * cache, int x, int y, int sx, int sy, int w, int h) + static void + syncImage(void) + { ++ if (enable_inline_image) { ++ return; ++ } ++ + fputs("3;\n", Imgdisplay_wf); /* XSync() */ + fputs("4;\n", Imgdisplay_wf); /* put '\n' */ + while (fflush(Imgdisplay_wf) != 0) { +@@ -170,12 +195,16 @@ syncImage(void) + n_terminal_image = 0; + } + ++void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image); ++void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image); ++ + void + drawImage() + { + static char buf[64]; + int j, draw = FALSE; + TerminalImage *i; ++ struct stat st ; + + if (!activeImage) + return; +@@ -183,6 +212,47 @@ drawImage() + return; + for (j = 0; j < n_terminal_image; j++) { + i = &terminal_image[j]; ++ ++ if (enable_inline_image) { ++ #if 0 ++ fprintf(stderr,"file %s x %d y %d w %d h %d sx %d sy %d sw %d sh %d (ppc %d ppl %d)\n", ++ ((enable_inline_image == 2 || getenv("WINDOWID")) && ++ i->cache->touch) ? i->cache->file : i->cache->url, ++ i->x, i->y, ++ i->cache->width > 0 ? i->cache->width : 0, ++ i->cache->height > 0 ? i->cache->height : 0, ++ i->sx, i->sy, i->width, i->height, ++ pixel_per_char_i, pixel_per_line_i); ++ #endif ++ (enable_inline_image == 2 ? put_image_sixel : put_image_osc5379)( ++ ((enable_inline_image == 2 /* sixel */ || getenv("WINDOWID")) && ++ /* XXX I don't know why but sometimes i->cache->file doesn't exist. */ ++ i->cache->touch && stat(i->cache->file,&st) == 0) ? ++ /* local */ i->cache->file : /* remote */ i->cache->url, ++ i->x / pixel_per_char_i, ++ i->y / pixel_per_line_i, ++ #if 1 ++ i->cache->a_width > 0 ? ++ (i->cache->width + i->x % pixel_per_char_i + pixel_per_char_i - 1) / ++ pixel_per_char_i : ++ #endif ++ 0, ++ ++ #if 1 ++ i->cache->a_height > 0 ? ++ (i->cache->height + i->y % pixel_per_line_i + pixel_per_line_i - 1) / ++ pixel_per_line_i : ++ #endif ++ 0, ++ i->sx / pixel_per_char_i, ++ i->sy / pixel_per_line_i, ++ (i->width + i->sx % pixel_per_char_i + pixel_per_char_i - 1) / pixel_per_char_i, ++ (i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i, ++ n_terminal_image); ++ ++ continue ; ++ } ++ + if (!(i->cache->loaded & IMG_FLAG_LOADED && + i->width > 0 && i->height > 0)) + continue; +@@ -206,9 +276,15 @@ drawImage() + fputs("\n", Imgdisplay_wf); + draw = TRUE; + } +- if (!draw) +- return; +- syncImage(); ++ ++ if (!enable_inline_image) { ++ if (!draw) ++ return; ++ syncImage(); ++ } ++ else ++ n_terminal_image = 0; ++ + touch_cursor(); + refresh(); + } +@@ -320,6 +396,8 @@ showImageProgress(Buffer *buf) + } + } + if (n) { ++ if (enable_inline_image && n == l) ++ drawImage(); + message(Sprintf("%d/%d images loaded", l, n)->ptr, + buf->cursorX + buf->rootX, buf->cursorY + buf->rootY); + refresh(); +@@ -333,6 +411,9 @@ loadImage(Buffer *buf, int flag) + struct stat st; + int i, draw = FALSE; + /* int wait_st; */ ++#ifdef DONT_CALL_GC_AFTER_FORK ++ char *loadargs[7]; ++#endif + + if (maxLoadImage > MAX_LOAD_IMAGE) + maxLoadImage = MAX_LOAD_IMAGE; +@@ -346,7 +427,7 @@ loadImage(Buffer *buf, int flag) + } + for (i = 0; i < n_load_image; i++) { + cache = image_cache[i]; +- if (!cache) ++ if (!cache || !cache->touch) + continue; + if (lstat(cache->touch, &st)) + continue; +@@ -377,7 +458,7 @@ loadImage(Buffer *buf, int flag) + + for (i = (buf != image_buffer) ? 0 : maxLoadImage; i < n_load_image; i++) { + cache = image_cache[i]; +- if (!cache) ++ if (!cache || !cache->touch) + continue; + if (cache->pid) { + kill(cache->pid, SIGKILL); +@@ -403,7 +484,8 @@ loadImage(Buffer *buf, int flag) + } + + if (draw && image_buffer) { +- drawImage(); ++ if (!enable_inline_image) ++ drawImage(); + showImageProgress(image_buffer); + } + +@@ -431,8 +513,29 @@ loadImage(Buffer *buf, int flag) + break; + } + image_cache[i] = cache; ++ if (!cache->touch) { ++ continue; ++ } + + flush_tty(); ++#ifdef DONT_CALL_GC_AFTER_FORK ++ loadargs[0] = MyProgramName; ++ loadargs[1] = "-$$getimage"; ++ loadargs[2] = conv_to_system(cache->url); ++ loadargs[3] = conv_to_system(parsedURL2Str(cache->current)->ptr); ++ loadargs[4] = cache->file; ++ loadargs[5] = cache->touch; ++ loadargs[6] = NULL; ++ if ((cache->pid = fork()) == 0) { ++ setup_child(FALSE, 0, -1); ++ execvp(MyProgramName, loadargs); ++ exit(1); ++ } ++ else if (cache->pid < 0) { ++ cache->pid = 0; ++ return; ++ } ++#else /* !DONT_CALL_GC_AFTER_FORK */ + if ((cache->pid = fork()) == 0) { + Buffer *b; + /* +@@ -458,6 +561,7 @@ loadImage(Buffer *buf, int flag) + cache->pid = 0; + return; + } ++#endif /* !DONT_CALL_GC_AFTER_FORK */ + } + } + +@@ -492,12 +596,30 @@ getImage(Image * image, ParsedURL *current, int flag) + cache->url = image->url; + cache->current = current; + cache->file = tmpfname(TMPF_DFL, image->ext)->ptr; +- cache->touch = tmpfname(TMPF_DFL, NULL)->ptr; + cache->pid = 0; + cache->index = 0; + cache->loaded = IMG_FLAG_UNLOADED; +- cache->width = image->width; +- cache->height = image->height; ++ if (enable_inline_image == 1) { ++ if (image->width > 0 && image->width % pixel_per_char_i > 0) ++ image->width += (pixel_per_char_i - image->width % pixel_per_char_i); ++ ++ if (image->height > 0 && image->height % pixel_per_line_i > 0) ++ image->height += (pixel_per_line_i - image->height % pixel_per_line_i); ++ if (image->height > 0 && image->width > 0) { ++ cache->loaded = IMG_FLAG_LOADED; ++ } ++ } ++ if (cache->loaded == IMG_FLAG_UNLOADED) { ++ cache->touch = tmpfname(TMPF_DFL, NULL)->ptr; ++ } ++ else { ++ cache->touch = NULL; ++ } ++ ++ cache->width = image->width ; ++ cache->height = image->height ; ++ cache->a_width = image->width; ++ cache->a_height = image->height; + putHash_sv(image_hash, key->ptr, (void *)cache); + } + if (flag != IMG_FLAG_SKIP) { +@@ -519,6 +641,78 @@ getImage(Image * image, ParsedURL *current, int flag) + return cache; + } + ++static int ++parseImageHeader(char *path, u_int *width, u_int *height) ++{ ++ FILE *fp; ++ u_char buf[8]; ++ ++ if (!(fp = fopen(path, "r"))) return FALSE; ++ ++ if (fread(buf, 1, 2, fp) != 2) goto error; ++ ++ if (memcmp(buf, "\xff\xd8", 2) == 0) { ++ /* JPEG */ ++ if (fseek(fp, 2, SEEK_CUR) < 0) goto error; /* 0xffe0 */ ++ while (fread(buf, 1, 2, fp) == 2) { ++ size_t len = ((buf[0] << 8) | buf[1]) - 2; ++ if (fseek(fp, len, SEEK_CUR) < 0) goto error; ++ if (fread(buf, 1, 2, fp) == 2 && ++ /* SOF0 or SOF2 */ ++ (memcmp(buf, "\xff\xc0", 2) == 0 || memcmp(buf, "\xff\xc2", 2) == 0)) { ++ fseek(fp, 3, SEEK_CUR); ++ if (fread(buf, 1, 2, fp) == 2) { ++ *height = (buf[0] << 8) | buf[1]; ++ if (fread(buf, 1, 2, fp) == 2) { ++ *width = (buf[0] << 8) | buf[1]; ++ goto success; ++ } ++ } ++ break; ++ } ++ } ++ goto error; ++ } ++ ++ if (fread(buf + 2, 1, 1, fp) != 1) goto error; ++ ++ if (memcmp(buf, "GIF", 3) == 0) { ++ /* GIF */ ++ if (fseek(fp, 3, SEEK_CUR) < 0) goto error; ++ if (fread(buf, 1, 2, fp) == 2) { ++ *width = (buf[1] << 8) | buf[0]; ++ if (fread(buf, 1, 2, fp) == 2) { ++ *height = (buf[1] << 8) | buf[0]; ++ goto success; ++ } ++ } ++ goto error; ++ } ++ ++ if (fread(buf + 3, 1, 5, fp) != 5) goto error; ++ ++ if (memcmp(buf, "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a", 8) == 0) { ++ /* PNG */ ++ if (fseek(fp, 8, SEEK_CUR) < 0) goto error; ++ if (fread(buf, 1, 4, fp) == 4) { ++ *width = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; ++ if (fread(buf, 1, 4, fp) == 4) { ++ *height = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; ++ goto success; ++ } ++ } ++ goto error; ++ } ++ ++error: ++ fclose(fp); ++ return FALSE; ++ ++success: ++ fclose(fp); ++ return TRUE; ++} ++ + int + getImageSize(ImageCache * cache) + { +@@ -531,6 +725,10 @@ getImageSize(ImageCache * cache) + if (!cache || !(cache->loaded & IMG_FLAG_LOADED) || + (cache->width > 0 && cache->height > 0)) + return FALSE; ++ ++ if (parseImageHeader(cache->file, &w, &h)) ++ goto got_image_size; ++ + tmp = Strnew(); + if (!strchr(Imgdisplay, '/')) + Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL); +@@ -546,6 +744,8 @@ getImageSize(ImageCache * cache) + + if (!(w > 0 && h > 0)) + return FALSE; ++ ++got_image_size: + w = (int)(w * image_scale / 100 + 0.5); + if (w == 0) + w = 1; +@@ -558,11 +758,11 @@ getImageSize(ImageCache * cache) + } + else if (cache->width < 0) { + int tmp = (int)((double)cache->height * w / h + 0.5); +- cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp; ++ cache->a_width = cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp; + } + else if (cache->height < 0) { + int tmp = (int)((double)cache->width * h / w + 0.5); +- cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp; ++ cache->a_height = cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp; + } + if (cache->width == 0) + cache->width = 1; +diff --git a/indep.c b/indep.c +index 65b04aa..5c5de06 100644 +--- a/indep.c ++++ b/indep.c +@@ -357,6 +357,20 @@ strcasemstr(char *str, char *srch[], char **ret_ptr) + return -1; + } + ++int ++strmatchlen(const char *s1, const char *s2, int maxlen) ++{ ++ int i; ++ ++ /* To allow the maxlen to be negatie (infinity), ++ * compare by "!=" instead of "<=". */ ++ for (i = 0; i != maxlen; ++i) { ++ if (!s1[i] || !s2[i] || s1[i] != s2[i]) ++ break; ++ } ++ return i; ++} ++ + char * + remove_space(char *str) + { +@@ -707,6 +721,111 @@ shell_quote(char *str) + return str; + } + ++void * ++xrealloc(void *ptr, size_t size) ++{ ++ void *newptr = realloc(ptr, size); ++ if (newptr == NULL) { ++ fprintf(stderr, "Out of memory\n"); ++ exit(-1); ++ } ++ return newptr; ++} ++ ++/* Define this as a separate function in case the free() has ++ * an incompatible prototype. */ ++void ++xfree(void *ptr) ++{ ++ free(ptr); ++} ++ ++void * ++w3m_GC_realloc_atomic(void *ptr, size_t size) ++{ ++ return ptr ? GC_REALLOC(ptr, size) : GC_MALLOC_ATOMIC(size); ++} ++ ++void ++w3m_GC_free(void *ptr) ++{ ++ GC_FREE(ptr); ++} ++ ++void ++growbuf_init(struct growbuf *gb) ++{ ++ gb->ptr = NULL; ++ gb->length = 0; ++ gb->area_size = 0; ++ gb->realloc_proc = &w3m_GC_realloc_atomic; ++ gb->free_proc = &w3m_GC_free; ++} ++ ++void ++growbuf_init_without_GC(struct growbuf *gb) ++{ ++ gb->ptr = NULL; ++ gb->length = 0; ++ gb->area_size = 0; ++ gb->realloc_proc = &xrealloc; ++ gb->free_proc = &xfree; ++} ++ ++void ++growbuf_clear(struct growbuf *gb) ++{ ++ (*gb->free_proc) (gb->ptr); ++ gb->ptr = NULL; ++ gb->length = 0; ++ gb->area_size = 0; ++} ++ ++Str ++growbuf_to_Str(struct growbuf *gb) ++{ ++ Str s; ++ ++ if (gb->free_proc == &w3m_GC_free) { ++ growbuf_reserve(gb, gb->length + 1); ++ gb->ptr[gb->length] = '\0'; ++ s = New(struct _Str); ++ s->ptr = gb->ptr; ++ s->length = gb->length; ++ s->area_size = gb->area_size; ++ } else { ++ s = Strnew_charp_n(gb->ptr, gb->length); ++ (*gb->free_proc) (gb->ptr); ++ } ++ gb->ptr = NULL; ++ gb->length = 0; ++ gb->area_size = 0; ++ return s; ++} ++ ++void ++growbuf_reserve(struct growbuf *gb, int leastarea) ++{ ++ int newarea; ++ ++ if (gb->area_size < leastarea) { ++ newarea = gb->area_size * 3 / 2; ++ if (newarea < leastarea) ++ newarea = leastarea; ++ newarea += 16; ++ gb->ptr = (*gb->realloc_proc) (gb->ptr, newarea); ++ gb->area_size = newarea; ++ } ++} ++ ++void ++growbuf_append(struct growbuf *gb, const char *src, int len) ++{ ++ growbuf_reserve(gb, gb->length + len); ++ memcpy(&gb->ptr[gb->length], src, len); ++ gb->length += len; ++} ++ + static char * + w3m_dir(const char *name, char *dft) + { +diff --git a/indep.h b/indep.h +index b3819a3..2809832 100644 +--- a/indep.h ++++ b/indep.h +@@ -1,7 +1,7 @@ + /* $Id: indep.h,v 1.16 2003/09/22 21:02:19 ukai Exp $ */ + #ifndef INDEP_H + #define INDEP_H +-#include <gc.h> ++#include "alloc.h" + #include "Str.h" + #include "config.h" + +@@ -12,6 +12,14 @@ + #define FALSE 0 + #endif /* FALSE */ + ++struct growbuf { ++ char *ptr; ++ int length; ++ int area_size; ++ void *(*realloc_proc) (void *, size_t); ++ void (*free_proc) (void *); ++}; ++ + #define RAW_MODE 0 + #define PAGER_MODE 1 + #define HTML_MODE 2 +@@ -52,6 +60,7 @@ extern int strncasecmp(const char *s1, const char *s2, size_t n); + extern char *strcasestr(const char *s1, const char *s2); + #endif + extern int strcasemstr(char *str, char *srch[], char **ret_ptr); ++int strmatchlen(const char *s1, const char *s2, int maxlen); + extern char *remove_space(char *str); + extern int non_null(char *s); + extern void cleanup_line(Str s, int mode); +@@ -64,6 +73,18 @@ extern Str Str_url_unquote(Str x, int is_form, int safe); + extern Str Str_form_quote(Str x); + #define Str_form_unquote(x) Str_url_unquote((x), TRUE, FALSE) + extern char *shell_quote(char *str); ++#define xmalloc(s) xrealloc(NULL, s) ++extern void *xrealloc(void *ptr, size_t size); ++extern void xfree(void *ptr); ++extern void *w3m_GC_realloc_atomic(void *ptr, size_t size); ++extern void w3m_GC_free(void *ptr); ++extern void growbuf_init(struct growbuf *gb); ++extern void growbuf_init_without_GC(struct growbuf *gb); ++extern void growbuf_clear(struct growbuf *gb); ++extern Str growbuf_to_Str(struct growbuf *gb); ++extern void growbuf_reserve(struct growbuf *gb, int leastarea); ++extern void growbuf_append(struct growbuf *gb, const char *src, int len); ++#define GROWBUF_ADD_CHAR(gb,ch) ((((gb)->length>=(gb)->area_size)?growbuf_reserve(gb,(gb)->length+1):(void)0),(void)((gb)->ptr[(gb)->length++] = (ch))) + + extern char *w3m_auxbin_dir(); + extern char *w3m_lib_dir(); +@@ -71,10 +92,8 @@ extern char *w3m_etc_dir(); + extern char *w3m_conf_dir(); + extern char *w3m_help_dir(); + +-#define New(type) ((type*)GC_MALLOC(sizeof(type))) +-#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type))) +-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) +-#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type))) +-#define New_Reuse(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type))) ++#define NewWithoutGC(type) ((type*)xmalloc(sizeof(type))) ++#define NewWithoutGC_N(type,n) ((type*)xmalloc((n)*sizeof(type))) ++#define NewWithoutGC_Reuse(type,ptr,n) ((type*)xrealloc(ptr,(n)*sizeof(type))) + + #endif /* INDEP_H */ +diff --git a/istream.c b/istream.c +index 8967280..3126142 100644 +--- a/istream.c ++++ b/istream.c +@@ -22,8 +22,8 @@ + static void basic_close(int *handle); + static int basic_read(int *handle, char *buf, int len); + +-static void file_close(struct file_handle *handle); +-static int file_read(struct file_handle *handle, char *buf, int len); ++static void file_close(struct io_file_handle *handle); ++static int file_read(struct io_file_handle *handle, char *buf, int len); + + static int str_read(Str handle, char *buf, int len); + +@@ -35,12 +35,14 @@ static int ssl_read(struct ssl_handle *handle, char *buf, int len); + static int ens_read(struct ens_handle *handle, char *buf, int len); + static void ens_close(struct ens_handle *handle); + ++static void memchop(char *p, int *len); ++ + static void + do_update(BaseStream base) + { + int len; + base->stream.cur = base->stream.next = 0; +- len = base->read(base->handle, base->stream.buf, base->stream.size); ++ len = (*base->read) (base->handle, base->stream.buf, base->stream.size); + if (len <= 0) + base->iseos = TRUE; + else +@@ -66,12 +68,12 @@ init_buffer(BaseStream base, char *buf, int bufsize) + StreamBuffer sb = &base->stream; + sb->size = bufsize; + sb->cur = 0; ++ sb->buf = NewWithoutGC_N(uchar, bufsize); + if (buf) { +- sb->buf = (uchar *) buf; ++ memcpy(sb->buf, buf, bufsize); + sb->next = bufsize; + } + else { +- sb->buf = NewAtom_N(uchar, bufsize); + sb->next = 0; + } + base->iseos = FALSE; +@@ -95,10 +97,10 @@ newInputStream(int des) + InputStream stream; + if (des < 0) + return NULL; +- stream = New(union input_stream); ++ stream = NewWithoutGC(union input_stream); + init_base_stream(&stream->base, STREAM_BUF_SIZE); + stream->base.type = IST_BASIC; +- stream->base.handle = New(int); ++ stream->base.handle = NewWithoutGC(int); + *(int *)stream->base.handle = des; + stream->base.read = (int (*)())basic_read; + stream->base.close = (void (*)())basic_close; +@@ -111,10 +113,10 @@ newFileStream(FILE * f, void (*closep) ()) + InputStream stream; + if (f == NULL) + return NULL; +- stream = New(union input_stream); ++ stream = NewWithoutGC(union input_stream); + init_base_stream(&stream->base, STREAM_BUF_SIZE); + stream->file.type = IST_FILE; +- stream->file.handle = New(struct file_handle); ++ stream->file.handle = NewWithoutGC(struct io_file_handle); + stream->file.handle->f = f; + if (closep) + stream->file.handle->close = closep; +@@ -131,10 +133,10 @@ newStrStream(Str s) + InputStream stream; + if (s == NULL) + return NULL; +- stream = New(union input_stream); ++ stream = NewWithoutGC(union input_stream); + init_str_stream(&stream->base, s); + stream->str.type = IST_STR; +- stream->str.handle = s; ++ stream->str.handle = NULL; + stream->str.read = (int (*)())str_read; + stream->str.close = NULL; + return stream; +@@ -147,10 +149,10 @@ newSSLStream(SSL * ssl, int sock) + InputStream stream; + if (sock < 0) + return NULL; +- stream = New(union input_stream); ++ stream = NewWithoutGC(union input_stream); + init_base_stream(&stream->base, SSL_BUF_SIZE); + stream->ssl.type = IST_SSL; +- stream->ssl.handle = New(struct ssl_handle); ++ stream->ssl.handle = NewWithoutGC(struct ssl_handle); + stream->ssl.handle->ssl = ssl; + stream->ssl.handle->sock = sock; + stream->ssl.read = (int (*)())ssl_read; +@@ -166,14 +168,14 @@ newEncodedStream(InputStream is, char encoding) + if (is == NULL || (encoding != ENC_QUOTE && encoding != ENC_BASE64 && + encoding != ENC_UUENCODE)) + return is; +- stream = New(union input_stream); ++ stream = NewWithoutGC(union input_stream); + init_base_stream(&stream->base, STREAM_BUF_SIZE); + stream->ens.type = IST_ENCODED; +- stream->ens.handle = New(struct ens_handle); ++ stream->ens.handle = NewWithoutGC(struct ens_handle); + stream->ens.handle->is = is; + stream->ens.handle->pos = 0; + stream->ens.handle->encoding = encoding; +- stream->ens.handle->s = NULL; ++ growbuf_init_without_GC(&stream->ens.handle->gb); + stream->ens.read = (int (*)())ens_read; + stream->ens.close = (void (*)())ens_close; + return stream; +@@ -187,8 +189,10 @@ ISclose(InputStream stream) + stream->base.type & IST_UNCLOSE) + return -1; + prevtrap = mySignal(SIGINT, SIG_IGN); +- stream->base.close(stream->base.handle); ++ stream->base.close (stream->base.handle); + mySignal(SIGINT, prevtrap); ++ xfree(stream->base.stream.buf); ++ xfree(stream); + return 0; + } + +@@ -218,122 +222,97 @@ ISundogetc(InputStream stream) + return -1; + } + +-#define MARGIN_STR_SIZE 10 + Str +-StrISgets(InputStream stream) ++StrISgets2(InputStream stream, char crnl) + { +- BaseStream base; +- StreamBuffer sb; +- Str s = NULL; +- uchar *p; +- int len; ++ struct growbuf gb; + + if (stream == NULL) +- return '\0'; +- base = &stream->base; +- sb = &base->stream; +- +- while (!base->iseos) { +- if (MUST_BE_UPDATED(base)) { +- do_update(base); +- } +- else { +- if ((p = memchr(&sb->buf[sb->cur], '\n', sb->next - sb->cur))) { +- len = p - &sb->buf[sb->cur] + 1; +- if (s == NULL) +- s = Strnew_size(len); +- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len); +- sb->cur += len; +- return s; +- } +- else { +- if (s == NULL) +- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE); +- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], +- sb->next - sb->cur); +- sb->cur = sb->next; +- } +- } +- } +- +- if (s == NULL) +- return Strnew(); +- return s; ++ return NULL; ++ growbuf_init(&gb); ++ ISgets_to_growbuf(stream, &gb, crnl); ++ return growbuf_to_Str(&gb); + } + +-Str +-StrmyISgets(InputStream stream) ++void ++ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl) + { +- BaseStream base; +- StreamBuffer sb; +- Str s = NULL; +- int i, len; ++ BaseStream base = &stream->base; ++ StreamBuffer sb = &base->stream; ++ int i; + +- if (stream == NULL) +- return '\0'; +- base = &stream->base; +- sb = &base->stream; ++ gb->length = 0; + + while (!base->iseos) { + if (MUST_BE_UPDATED(base)) { + do_update(base); ++ continue; + } +- else { +- if (s && Strlastchar(s) == '\r') { +- if (sb->buf[sb->cur] == '\n') +- Strcat_char(s, (char)sb->buf[sb->cur++]); +- return s; ++ if (crnl && gb->length > 0 && gb->ptr[gb->length - 1] == '\r') { ++ if (sb->buf[sb->cur] == '\n') { ++ GROWBUF_ADD_CHAR(gb, '\n'); ++ ++sb->cur; + } +- for (i = sb->cur; +- i < sb->next && sb->buf[i] != '\n' && sb->buf[i] != '\r'; +- i++) ; +- if (i < sb->next) { +- len = i - sb->cur + 1; +- if (s == NULL) +- s = Strnew_size(len + MARGIN_STR_SIZE); +- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len); +- sb->cur = i + 1; +- if (sb->buf[i] == '\n') +- return s; +- } +- else { +- if (s == NULL) +- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE); +- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], +- sb->next - sb->cur); +- sb->cur = sb->next; ++ break; ++ } ++ for (i = sb->cur; i < sb->next; ++i) { ++ if (sb->buf[i] == '\n' || (crnl && sb->buf[i] == '\r')) { ++ ++i; ++ break; + } + } ++ growbuf_append(gb, &sb->buf[sb->cur], i - sb->cur); ++ sb->cur = i; ++ if (gb->length > 0 && gb->ptr[gb->length - 1] == '\n') ++ break; + } + +- if (s == NULL) +- return Strnew(); +- return s; ++ growbuf_reserve(gb, gb->length + 1); ++ gb->ptr[gb->length] = '\0'; ++ return; + } + ++#ifdef unused + int + ISread(InputStream stream, Str buf, int count) + { +- int rest, len; ++ int len; ++ ++ if (count + 1 > buf->area_size) { ++ char *newptr = GC_MALLOC_ATOMIC(count + 1); ++ memcpy(newptr, buf->ptr, buf->length); ++ newptr[buf->length] = '\0'; ++ buf->ptr = newptr; ++ buf->area_size = count + 1; ++ } ++ len = ISread_n(stream, buf->ptr, count); ++ buf->length = (len > 0) ? len : 0; ++ buf->ptr[buf->length] = '\0'; ++ return (len > 0) ? 1 : 0; ++} ++#endif ++ ++int ++ISread_n(InputStream stream, char *dst, int count) ++{ ++ int len, l; + BaseStream base; + +- if (stream == NULL || (base = &stream->base)->iseos) ++ if (stream == NULL || count <= 0) ++ return -1; ++ if ((base = &stream->base)->iseos) + return 0; + +- len = buffer_read(&base->stream, buf->ptr, count); +- rest = count - len; ++ len = buffer_read(&base->stream, dst, count); + if (MUST_BE_UPDATED(base)) { +- len = base->read(base->handle, &buf->ptr[len], rest); +- if (len <= 0) { ++ l = (*base->read) (base->handle, &dst[len], count - len); ++ if (l <= 0) { + base->iseos = TRUE; +- len = 0; ++ } else { ++ len += l; + } +- rest -= len; + } +- Strtruncate(buf, count - rest); +- if (buf->length > 0) +- return 1; +- return 0; ++ return len; + } + + int +@@ -645,6 +624,7 @@ basic_close(int *handle) + #else + close(*(int *)handle); + #endif ++ xfree(handle); + } + + static int +@@ -658,13 +638,14 @@ basic_read(int *handle, char *buf, int len) + } + + static void +-file_close(struct file_handle *handle) ++file_close(struct io_file_handle *handle) + { + handle->close(handle->f); ++ xfree(handle); + } + + static int +-file_read(struct file_handle *handle, char *buf, int len) ++file_read(struct io_file_handle *handle, char *buf, int len) + { + return fread(buf, 1, len, handle->f); + } +@@ -682,6 +663,7 @@ ssl_close(struct ssl_handle *handle) + close(handle->sock); + if (handle->ssl) + SSL_free(handle->ssl); ++ xfree(handle); + } + + static int +@@ -717,38 +699,60 @@ static void + ens_close(struct ens_handle *handle) + { + ISclose(handle->is); ++ growbuf_clear(&handle->gb); ++ xfree(handle); + } + + static int + ens_read(struct ens_handle *handle, char *buf, int len) + { +- if (handle->s == NULL || handle->pos == handle->s->length) { ++ if (handle->pos == handle->gb.length) { + char *p; +- handle->s = StrmyISgets(handle->is); +- if (handle->s->length == 0) ++ struct growbuf gbtmp; ++ ++ ISgets_to_growbuf(handle->is, &handle->gb, TRUE); ++ if (handle->gb.length == 0) + return 0; +- cleanup_line(handle->s, PAGER_MODE); + if (handle->encoding == ENC_BASE64) +- Strchop(handle->s); ++ memchop(handle->gb.ptr, &handle->gb.length); + else if (handle->encoding == ENC_UUENCODE) { +- if (!strncmp(handle->s->ptr, "begin", 5)) +- handle->s = StrmyISgets(handle->is); +- Strchop(handle->s); ++ if (handle->gb.length >= 5 && ++ !strncmp(handle->gb.ptr, "begin", 5)) ++ ISgets_to_growbuf(handle->is, &handle->gb, TRUE); ++ memchop(handle->gb.ptr, &handle->gb.length); + } +- p = handle->s->ptr; ++ growbuf_init_without_GC(&gbtmp); ++ p = handle->gb.ptr; + if (handle->encoding == ENC_QUOTE) +- handle->s = decodeQP(&p); ++ decodeQP_to_growbuf(&gbtmp, &p); + else if (handle->encoding == ENC_BASE64) +- handle->s = decodeB(&p); ++ decodeB_to_growbuf(&gbtmp, &p); + else if (handle->encoding == ENC_UUENCODE) +- handle->s = decodeU(&p); ++ decodeU_to_growbuf(&gbtmp, &p); ++ growbuf_clear(&handle->gb); ++ handle->gb = gbtmp; + handle->pos = 0; + } + +- if (len > handle->s->length - handle->pos) +- len = handle->s->length - handle->pos; ++ if (len > handle->gb.length - handle->pos) ++ len = handle->gb.length - handle->pos; + +- bcopy(&handle->s->ptr[handle->pos], buf, len); ++ memcpy(buf, &handle->gb.ptr[handle->pos], len); + handle->pos += len; + return len; + } ++ ++static void ++memchop(char *p, int *len) ++{ ++ char *q; ++ ++ for (q = p + *len; q > p; --q) { ++ if (q[-1] != '\n' && q[-1] != '\r') ++ break; ++ } ++ if (q != p + *len) ++ *q = '\0'; ++ *len = q - p; ++ return; ++} +diff --git a/istream.h b/istream.h +index a220d8b..5a04be0 100644 +--- a/istream.h ++++ b/istream.h +@@ -2,13 +2,13 @@ + #ifndef IO_STREAM_H + #define IO_STREAM_H + ++#include "indep.h" + #include <stdio.h> + #ifdef USE_SSL + #include <openssl/bio.h> + #include <openssl/x509.h> + #include <openssl/ssl.h> + #endif +-#include "Str.h" + #include <sys/types.h> + #include <sys/stat.h> + #include <fcntl.h> +@@ -20,7 +20,7 @@ struct stream_buffer { + + typedef struct stream_buffer *StreamBuffer; + +-struct file_handle { ++struct io_file_handle { + FILE *f; + void (*close) (); + }; +@@ -36,7 +36,7 @@ union input_stream; + + struct ens_handle { + union input_stream *is; +- Str s; ++ struct growbuf gb; + int pos; + char encoding; + }; +@@ -53,7 +53,7 @@ struct base_stream { + + struct file_stream { + struct stream_buffer stream; +- struct file_handle *handle; ++ struct io_file_handle *handle; + char type; + char iseos; + int (*read) (); +@@ -119,9 +119,14 @@ extern InputStream newEncodedStream(InputStream is, char encoding); + extern int ISclose(InputStream stream); + extern int ISgetc(InputStream stream); + extern int ISundogetc(InputStream stream); +-extern Str StrISgets(InputStream stream); +-extern Str StrmyISgets(InputStream stream); ++extern Str StrISgets2(InputStream stream, char crnl); ++#define StrISgets(stream) StrISgets2(stream, FALSE) ++#define StrmyISgets(stream) StrISgets2(stream, TRUE) ++void ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl); ++#ifdef unused + extern int ISread(InputStream stream, Str buf, int count); ++#endif ++int ISread_n(InputStream stream, char *dst, int bufsize); + extern int ISfileno(InputStream stream); + extern int ISeos(InputStream stream); + #ifdef USE_SSL +diff --git a/keybind.c b/keybind.c +index a490962..fec0c65 100644 +--- a/keybind.c ++++ b/keybind.c +@@ -91,7 +91,7 @@ unsigned char EscBKeymap[128] = { + /* 0 1 2 3 4 5 6 7 */ + nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, + /* 8 9 : ; < = > ? */ +- nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, ++ nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd, + /* @ A B C D E F G */ + nulcmd, movU, movD, movR, movL, nulcmd, goLineL, pgFore, + /* H I J K L M N O */ +diff --git a/libwc/ambwidth_map.awk b/libwc/ambwidth_map.awk +index 8544f58..1d9d25f 100644 +--- a/libwc/ambwidth_map.awk ++++ b/libwc/ambwidth_map.awk +@@ -3,9 +3,15 @@ BEGIN { + i = 0; + } + $2 == "A" { +- code = sprintf("0x%s", $1); +- if (strtonum(code) < 0x10000) { +- map[i] = code ++ code = code2 = strtonum(sprintf("0x%s", $1)) ++ if (match($1, /[.]+[0-9A-Fa-f]+/)) { ++ s = substr($1, RSTART, RLENGTH) ++ sub(/[.]+/, "0x", s) ++ code2 = strtonum(s) ++ } ++ for (; code <= code2; code++) { ++ if (code >= 0x10000) { break } ++ map[i] = sprintf("0x%04X", code) + i++; + } + } +@@ -15,28 +21,14 @@ END { + prev = strtonum(map[0]); + for (j = 1; j < i; j++) { + cur = strtonum(map[j]); +- if (match(map[j], "[.]+")) { ++ if (cur - prev > 1) { + map2[n] = sprintf("%s, %s", start, map[j - 1]); + n++; +- gsub("[.]+", ", 0x", map[j]) +- map2[n] = map[j]; +- n++; +- start = map[j + 1]; +- cur = strtonum(start); +- } else { +- if (cur - prev > 2) { +- map2[n] = sprintf("%s, %s", start, map[j - 1]); +- start = map[j]; +- n++; +- } +- +- if (j == i - 1) { +- map2[n] = sprintf("%s, %s", start, map[j]); +- n++; +- } ++ start = map[j]; + } + prev = cur; + } ++ if (i > 0) { map2[n] = sprintf("%s, %s", start, map[i - 1]); n++ } + + printf("static wc_map ucs_ambwidth_map[] = {\n"); + for (j = 0; j < n; j++) { +diff --git a/libwc/charset.c b/libwc/charset.c +index 3f0b74d..ea79b1c 100644 +--- a/libwc/charset.c ++++ b/libwc/charset.c +@@ -1,8 +1,7 @@ + + #include <stdlib.h> + #include <ctype.h> +-#include <gc.h> +-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) ++#include "../alloc.h" + + #include "wc.h" + +diff --git a/libwc/gb18030.c b/libwc/gb18030.c +index c195d49..d5c9018 100644 +--- a/libwc/gb18030.c ++++ b/libwc/gb18030.c +@@ -151,6 +151,7 @@ wc_ucs_to_gb18030(wc_uint32 ucs) + return cc; + } + cc.ccs = WC_CCS_UNKNOWN; ++ cc.code = 0; + return cc; + } + #endif +diff --git a/libwc/map/ucs_ambwidth.map b/libwc/map/ucs_ambwidth.map +index 6f03ba8..35ceedb 100644 +--- a/libwc/map/ucs_ambwidth.map ++++ b/libwc/map/ucs_ambwidth.map +@@ -1,50 +1,82 @@ + static wc_map ucs_ambwidth_map[] = { + { 0x00A1, 0x00A1 }, + { 0x00A4, 0x00A4 }, +- { 0x00A7, 0x00AA }, +- { 0x00AD, 0x00BF }, ++ { 0x00A7, 0x00A8 }, ++ { 0x00AA, 0x00AA }, ++ { 0x00AD, 0x00AE }, ++ { 0x00B0, 0x00B4 }, ++ { 0x00B6, 0x00BA }, ++ { 0x00BC, 0x00BF }, + { 0x00C6, 0x00C6 }, + { 0x00D0, 0x00D0 }, + { 0x00D7, 0x00D8 }, + { 0x00DE, 0x00E1 }, +- { 0x00E6, 0x00ED }, +- { 0x00F0, 0x00F3 }, +- { 0x00F7, 0x00FE }, ++ { 0x00E6, 0x00E6 }, ++ { 0x00E8, 0x00EA }, ++ { 0x00EC, 0x00ED }, ++ { 0x00F0, 0x00F0 }, ++ { 0x00F2, 0x00F3 }, ++ { 0x00F7, 0x00FA }, ++ { 0x00FC, 0x00FC }, ++ { 0x00FE, 0x00FE }, + { 0x0101, 0x0101 }, +- { 0x0111, 0x0113 }, ++ { 0x0111, 0x0111 }, ++ { 0x0113, 0x0113 }, + { 0x011B, 0x011B }, + { 0x0126, 0x0127 }, + { 0x012B, 0x012B }, + { 0x0131, 0x0133 }, + { 0x0138, 0x0138 }, +- { 0x013F, 0x0144 }, +- { 0x0148, 0x014D }, ++ { 0x013F, 0x0142 }, ++ { 0x0144, 0x0144 }, ++ { 0x0148, 0x014B }, ++ { 0x014D, 0x014D }, + { 0x0152, 0x0153 }, + { 0x0166, 0x0167 }, + { 0x016B, 0x016B }, +- { 0x01CE, 0x01DC }, ++ { 0x01CE, 0x01CE }, ++ { 0x01D0, 0x01D0 }, ++ { 0x01D2, 0x01D2 }, ++ { 0x01D4, 0x01D4 }, ++ { 0x01D6, 0x01D6 }, ++ { 0x01D8, 0x01D8 }, ++ { 0x01DA, 0x01DA }, ++ { 0x01DC, 0x01DC }, + { 0x0251, 0x0251 }, + { 0x0261, 0x0261 }, + { 0x02C4, 0x02C4 }, +- { 0x02C7, 0x02CD }, ++ { 0x02C7, 0x02C7 }, ++ { 0x02C9, 0x02CB }, ++ { 0x02CD, 0x02CD }, + { 0x02D0, 0x02D0 }, +- { 0x02D8, 0x02DF }, ++ { 0x02D8, 0x02DB }, ++ { 0x02DD, 0x02DD }, ++ { 0x02DF, 0x02DF }, + { 0x0300, 0x036F }, +- { 0x0391, 0x03A9 }, +- { 0x03B1, 0x03C9 }, ++ { 0x0391, 0x03A1 }, ++ { 0x03A3, 0x03A9 }, ++ { 0x03B1, 0x03C1 }, ++ { 0x03C3, 0x03C9 }, + { 0x0401, 0x0401 }, +- { 0x0410, 0x0451 }, ++ { 0x0410, 0x044F }, ++ { 0x0451, 0x0451 }, + { 0x2010, 0x2010 }, +- { 0x2013, 0x2019 }, ++ { 0x2013, 0x2016 }, ++ { 0x2018, 0x2019 }, + { 0x201C, 0x201D }, +- { 0x2020, 0x2027 }, +- { 0x2030, 0x2035 }, ++ { 0x2020, 0x2022 }, ++ { 0x2024, 0x2027 }, ++ { 0x2030, 0x2030 }, ++ { 0x2032, 0x2033 }, ++ { 0x2035, 0x2035 }, + { 0x203B, 0x203B }, + { 0x203E, 0x203E }, + { 0x2074, 0x2074 }, +- { 0x207F, 0x2084 }, ++ { 0x207F, 0x207F }, ++ { 0x2081, 0x2084 }, + { 0x20AC, 0x20AC }, +- { 0x2103, 0x2105 }, ++ { 0x2103, 0x2103 }, ++ { 0x2105, 0x2105 }, + { 0x2109, 0x2109 }, + { 0x2113, 0x2113 }, + { 0x2116, 0x2116 }, +@@ -52,21 +84,28 @@ static wc_map ucs_ambwidth_map[] = { + { 0x2126, 0x2126 }, + { 0x212B, 0x212B }, + { 0x2153, 0x2154 }, +- { 0x215B, 0x216B }, ++ { 0x215B, 0x215E }, ++ { 0x2160, 0x216B }, + { 0x2170, 0x2179 }, + { 0x2189, 0x2189 }, + { 0x2190, 0x2199 }, + { 0x21B8, 0x21B9 }, +- { 0x21D2, 0x21D4 }, ++ { 0x21D2, 0x21D2 }, ++ { 0x21D4, 0x21D4 }, + { 0x21E7, 0x21E7 }, +- { 0x2200, 0x2203 }, ++ { 0x2200, 0x2200 }, ++ { 0x2202, 0x2203 }, + { 0x2207, 0x2208 }, + { 0x220B, 0x220B }, +- { 0x220F, 0x2211 }, ++ { 0x220F, 0x220F }, ++ { 0x2211, 0x2211 }, + { 0x2215, 0x2215 }, + { 0x221A, 0x221A }, + { 0x221D, 0x2220 }, +- { 0x2223, 0x222E }, ++ { 0x2223, 0x2223 }, ++ { 0x2225, 0x2225 }, ++ { 0x2227, 0x222C }, ++ { 0x222E, 0x222E }, + { 0x2234, 0x2237 }, + { 0x223C, 0x223D }, + { 0x2248, 0x2248 }, +@@ -83,11 +122,13 @@ static wc_map ucs_ambwidth_map[] = { + { 0x22A5, 0x22A5 }, + { 0x22BF, 0x22BF }, + { 0x2312, 0x2312 }, +- { 0x2460, 0x254B }, ++ { 0x2460, 0x24E9 }, ++ { 0x24EB, 0x254B }, + { 0x2550, 0x2573 }, + { 0x2580, 0x258F }, + { 0x2592, 0x2595 }, +- { 0x25A0, 0x25A9 }, ++ { 0x25A0, 0x25A1 }, ++ { 0x25A3, 0x25A9 }, + { 0x25B2, 0x25B3 }, + { 0x25B6, 0x25B7 }, + { 0x25BC, 0x25BD }, +@@ -101,12 +142,20 @@ static wc_map ucs_ambwidth_map[] = { + { 0x2609, 0x2609 }, + { 0x260E, 0x260F }, + { 0x2614, 0x2615 }, +- { 0x261C, 0x261E }, +- { 0x2640, 0x2642 }, +- { 0x2660, 0x266F }, ++ { 0x261C, 0x261C }, ++ { 0x261E, 0x261E }, ++ { 0x2640, 0x2640 }, ++ { 0x2642, 0x2642 }, ++ { 0x2660, 0x2661 }, ++ { 0x2663, 0x2665 }, ++ { 0x2667, 0x266A }, ++ { 0x266C, 0x266D }, ++ { 0x266F, 0x266F }, + { 0x269E, 0x269F }, + { 0x26BE, 0x26BF }, +- { 0x26C4, 0x26E3 }, ++ { 0x26C4, 0x26CD }, ++ { 0x26CF, 0x26E1 }, ++ { 0x26E3, 0x26E3 }, + { 0x26E8, 0x26FF }, + { 0x273D, 0x273D }, + { 0x2757, 0x2757 }, +diff --git a/libwc/status.c b/libwc/status.c +index d25c924..4a2ebf8 100644 +--- a/libwc/status.c ++++ b/libwc/status.c +@@ -1,7 +1,6 @@ + + #include <string.h> +-#include <gc.h> +-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) ++#include "../alloc.h" + + #include "wc.h" + #ifdef USE_UNICODE +diff --git a/libwc/ucs.c b/libwc/ucs.c +index d7b6948..5e78b4e 100644 +--- a/libwc/ucs.c ++++ b/libwc/ucs.c +@@ -100,6 +100,7 @@ wc_ucs_to_any(wc_uint32 ucs, wc_table *t) + return t->conv(t->ccs, map->code2); + } + cc.ccs = WC_CCS_UNKNOWN; ++ cc.code = 0; + return cc; + } + +diff --git a/linein.c b/linein.c +index b7e81b6..572b015 100644 +--- a/linein.c ++++ b/linein.c +@@ -1026,7 +1026,7 @@ _prev(void) + strCurrentBuf = strBuf; + } + if (DecodeURL && (cm_mode & CPL_URL) ) +- p = url_unquote_conv(p, 0); ++ p = url_decode2(p, NULL); + strBuf = Strnew_charp(p); + CLen = CPos = setStrType(strBuf, strProp); + offset = 0; +@@ -1045,7 +1045,7 @@ _next(void) + p = nextHist(hist); + if (p) { + if (DecodeURL && (cm_mode & CPL_URL) ) +- p = url_unquote_conv(p, 0); ++ p = url_decode2(p, NULL); + strBuf = Strnew_charp(p); + } + else { +diff --git a/local.c b/local.c +index f5a73a2..9428319 100644 +--- a/local.c ++++ b/local.c +@@ -109,6 +109,7 @@ loadLocalDir(char *dname) + n++; + } + } ++ closedir(d); + + if (multicolList) { + l = COLS / (maxlen + 2); +@@ -359,6 +360,10 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) + int status; + pid_t pid; + char *file = uri, *name = uri, *path_info = NULL, *tmpf = NULL; ++#ifdef HAVE_CHDIR ++ char *cgi_dir; ++#endif ++ char *cgi_basename; + + #ifdef __MINGW32_VERSION + return NULL; +@@ -373,7 +378,14 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) + if (!fw) + return NULL; + } ++ if (qstr) ++ uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr; ++#ifdef HAVE_CHDIR ++ cgi_dir = mydirname(file); ++#endif ++ cgi_basename = mybasename(file); + pid = open_pipe_rw(&fr, NULL); ++ /* Don't invoke gc after here, or the program might crash in some platforms */ + if (pid < 0) + return NULL; + else if (pid) { +@@ -383,8 +395,6 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) + } + setup_child(TRUE, 2, fw ? fileno(fw) : -1); + +- if (qstr) +- uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr; + set_cgi_environ(name, file, uri); + if (path_info) + set_environ("PATH_INFO", path_info); +@@ -415,11 +425,11 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) + } + + #ifdef HAVE_CHDIR /* ifndef __EMX__ ? */ +- chdir(mydirname(file)); ++ chdir(cgi_dir); + #endif +- execl(file, mybasename(file), NULL); ++ execl(file, cgi_basename, NULL); + fprintf(stderr, "execl(\"%s\", \"%s\", NULL): %s\n", +- file, mybasename(file), strerror(errno)); ++ file, cgi_basename, strerror(errno)); + exit(1); + return NULL; + #endif +diff --git a/main.c b/main.c +index b421943..d37b243 100644 +--- a/main.c ++++ b/main.c +@@ -11,6 +11,9 @@ + #include <sys/wait.h> + #endif + #include <time.h> ++#if defined(__CYGWIN__) && defined(USE_BINMODE_STREAM) ++#include <io.h> ++#endif + #include "terms.h" + #include "myctype.h" + #include "regex.h" +@@ -119,6 +122,8 @@ static int searchKeyNum(void); + #define help() fusage(stdout, 0) + #define usage() fusage(stderr, 1) + ++int enable_inline_image; /* 1 == mlterm OSC 5379, 2 == sixel */ ++ + static void + fversion(FILE * f) + { +@@ -200,10 +205,12 @@ fusage(FILE * f, int err) + #ifdef USE_M17N + fprintf(f, " -I charset document charset\n"); + fprintf(f, " -O charset display/output charset\n"); ++#if 0 /* use -O{s|j|e} instead */ + fprintf(f, " -e EUC-JP\n"); + fprintf(f, " -s Shift_JIS\n"); + fprintf(f, " -j JIS\n"); + #endif ++#endif + fprintf(f, " -B load bookmark\n"); + fprintf(f, " -bookmark file specify bookmark file\n"); + fprintf(f, " -T type specify content-type\n"); +@@ -248,7 +255,11 @@ fusage(FILE * f, int err) + #endif /* USE_COOKIE */ + fprintf(f, " -graph use DEC special graphics for border of table and menu\n"); + fprintf(f, " -no-graph use ACII character for border of table and menu\n"); ++#if 1 /* pager requires -s */ ++ fprintf(f, " -s squeeze multiple blank lines\n"); ++#else + fprintf(f, " -S squeeze multiple blank lines\n"); ++#endif + fprintf(f, " -W toggle wrap search mode\n"); + fprintf(f, " -X don't use termcap init/deinit\n"); + fprintf(f, +@@ -372,6 +383,13 @@ make_optional_header_string(char *s) + return hs; + } + ++static void * ++die_oom(size_t bytes) ++{ ++ fprintf(stderr, "Out of memory: %lu bytes unavailable!\n", (unsigned long)bytes); ++ exit(1); ++} ++ + int + main(int argc, char **argv, char **envp) + { +@@ -397,7 +415,11 @@ main(int argc, char **argv, char **envp) + wc_ces CodePage; + #endif + #endif ++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) ++ char **getimage_args = NULL; ++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ + GC_INIT(); ++ GC_set_oom_fn(die_oom); + #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET)) + setlocale(LC_ALL, ""); + #endif +@@ -418,6 +440,10 @@ main(int argc, char **argv, char **envp) + + CurrentDir = currentdir(); + CurrentPid = (int)getpid(); ++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) ++ if (argv[0] && *argv[0]) ++ MyProgramName = argv[0]; ++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ + BookmarkFile = NULL; + config_file = NULL; + +@@ -530,12 +556,14 @@ main(int argc, char **argv, char **envp) + PagerMax = atoi(argv[i]); + } + #ifdef USE_M17N ++#if 0 /* use -O{s|j|e} instead */ + else if (!strcmp("-s", argv[i])) + DisplayCharset = WC_CES_SHIFT_JIS; + else if (!strcmp("-j", argv[i])) + DisplayCharset = WC_CES_ISO_2022_JP; + else if (!strcmp("-e", argv[i])) + DisplayCharset = WC_CES_EUC_JP; ++#endif + else if (!strncmp("-I", argv[i], 2)) { + if (argv[i][2] != '\0') + p = argv[i] + 2; +@@ -660,6 +688,12 @@ main(int argc, char **argv, char **envp) + } + } + #endif ++ else if (!strcmp("-ri", argv[i])) { ++ enable_inline_image = 1; ++ } ++ else if (!strcmp("-sixel", argv[i])) { ++ enable_inline_image = 2; ++ } + else if (!strcmp("-num", argv[i])) + showLineNum = TRUE; + else if (!strcmp("-no-proxy", argv[i])) +@@ -703,7 +737,11 @@ main(int argc, char **argv, char **envp) + accept_cookie = TRUE; + } + #endif /* USE_COOKIE */ ++#if 1 /* pager requires -s */ ++ else if (!strcmp("-s", argv[i])) ++#else + else if (!strcmp("-S", argv[i])) ++#endif + squeezeBlankLine = TRUE; + else if (!strcmp("-X", argv[i])) + Do_not_use_ti_te = TRUE; +@@ -735,6 +773,15 @@ main(int argc, char **argv, char **envp) + else if (!strcmp("-reqlog",argv[i])) { + w3m_reqlog=rcFile("request.log"); + } ++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) ++ else if (!strcmp("-$$getimage", argv[i])) { ++ ++i; ++ getimage_args = argv + i; ++ i += 4; ++ if (i > argc) ++ usage(); ++ } ++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ + else { + usage(); + } +@@ -823,6 +870,30 @@ main(int argc, char **argv, char **envp) + + if (w3m_backend) + backend(); ++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) ++ if (getimage_args) { ++ char *image_url = conv_from_system(getimage_args[0]); ++ char *base_url = conv_from_system(getimage_args[1]); ++ ParsedURL base_pu; ++ ++ parseURL2(base_url, &base_pu, NULL); ++ image_source = getimage_args[2]; ++ newbuf = loadGeneralFile(image_url, &base_pu, NULL, 0, NULL); ++ if (!newbuf || !newbuf->real_type || ++ strncasecmp(newbuf->real_type, "image/", 6)) ++ unlink(getimage_args[2]); ++#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT) ++ symlink(getimage_args[2], getimage_args[3]); ++#else ++ { ++ FILE *f = fopen(getimage_args[3], "w"); ++ if (f) ++ fclose(f); ++ } ++#endif ++ w3m_exit(0); ++ } ++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ + + if (w3m_dump) + mySignal(SIGINT, SIG_IGN); +@@ -833,7 +904,12 @@ main(int argc, char **argv, char **envp) + mySignal(SIGPIPE, SigPipe); + #endif + ++#if GC_VERSION_MAJOR >= 7 && GC_VERSION_MINOR >= 2 ++ orig_GC_warn_proc = GC_get_warn_proc(); ++ GC_set_warn_proc(wrap_GC_warn_proc); ++#else + orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc); ++#endif + err_msg = Strnew(); + if (load_argc == 0) { + /* no URL specified */ +@@ -894,12 +970,17 @@ main(int argc, char **argv, char **envp) + if (i >= 0) { + SearchHeader = search_header; + DefaultType = default_type; ++ char *url; ++ ++ url = load_argv[i]; ++ if (getURLScheme(&url) == SCM_MISSING && !ArgvIsURL) ++ url = file_to_url(load_argv[i]); ++ else ++ url = url_encode(conv_from_system(load_argv[i]), NULL, 0); + if (w3m_dump == DUMP_HEAD) { + request = New(FormList); + request->method = FORM_METHOD_HEAD; +- newbuf = +- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0, +- request); ++ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request); + } + else { + if (post_file && i == 0) { +@@ -928,9 +1009,7 @@ main(int argc, char **argv, char **envp) + else { + request = NULL; + } +- newbuf = +- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0, +- request); ++ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request); + } + if (newbuf == NULL) { + /* FIXME: gettextize? */ +@@ -945,7 +1024,7 @@ main(int argc, char **argv, char **envp) + break; + case SCM_LOCAL: + case SCM_LOCAL_CGI: +- unshiftHist(LoadHist, conv_from_system(load_argv[i])); ++ unshiftHist(LoadHist, url); + default: + pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr); + break; +@@ -1246,6 +1325,12 @@ dump_extra(Buffer *buf) + #endif + } + ++static int ++cmp_anchor_hseq(const void *a, const void *b) ++{ ++ return (*((const Anchor **) a))->hseq - (*((const Anchor **) b))->hseq; ++} ++ + static void + do_dump(Buffer *buf) + { +@@ -1266,18 +1351,20 @@ do_dump(Buffer *buf) + int i; + saveBuffer(buf, stdout, FALSE); + if (displayLinkNumber && buf->href) { ++ int nanchor = buf->href->nanchor; + printf("\nReferences:\n\n"); +- for (i = 0; i < buf->href->nanchor; i++) { +- ParsedURL pu; +- static Str s = NULL; +- if (buf->href->anchors[i].slave) ++ Anchor **in_order = New_N(Anchor *, buf->href->nanchor); ++ for (i = 0; i < nanchor; i++) ++ in_order[i] = buf->href->anchors + i; ++ qsort(in_order, nanchor, sizeof(Anchor *), cmp_anchor_hseq); ++ for (i = 0; i < nanchor; i++) { ++ ParsedURL pu; ++ char *url; ++ if (in_order[i]->slave) + continue; +- parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf)); +- s = parsedURL2Str(&pu); +- if (DecodeURL) +- s = Strnew_charp(url_unquote_conv +- (s->ptr, Currentbuf->document_charset)); +- printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, s->ptr); ++ parseURL2(in_order[i]->url, &pu, baseURL(buf)); ++ url = url_decode2(parsedURL2Str(&pu)->ptr, Currentbuf); ++ printf("[%d] %s\n", in_order[i]->hseq + 1, url); + } + } + } +@@ -1566,6 +1653,18 @@ DEFUN(pgBack, PREV_PAGE, "Move to previous page") + * (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL); + } + ++/* Move half page forward */ ++DEFUN(hpgFore, NEXT_HALF_PAGE, "Scroll down half page") ++{ ++ nscroll(searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL); ++} ++ ++/* Move half page backward */ ++DEFUN(hpgBack, PREV_HALF_PAGE, "Scroll up half page") ++{ ++ nscroll(-searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL); ++} ++ + /* 1 line up */ + DEFUN(lup1, UP, "Scroll up one line") + { +@@ -1844,6 +1943,10 @@ srch_nxtprv(int reverse) + result = srchcore(SearchString, routine[reverse]); + if (result & SR_FOUND) + clear_mark(Currentbuf->currentLine); ++ else { ++ if (reverse == 0) ++ Currentbuf->pos -= 1; ++ } + displayBuffer(Currentbuf, B_NORMAL); + disp_srchresult(result, (reverse ? "Backward: " : "Forward: "), + SearchString); +@@ -2261,7 +2364,7 @@ DEFUN(movR1, MOVE_RIGHT1, + static wc_uint32 + getChar(char *p) + { +- return wc_any_to_ucs(wtf_parse1(&p)); ++ return wc_any_to_ucs(wtf_parse1((wc_uchar **)&p)); + } + + static int +@@ -2804,12 +2907,15 @@ loadLink(char *url, char *target, char *referer, FormList *request) + union frameset_element *f_element = NULL; + int flag = 0; + ParsedURL *base, pu; ++ const int *no_referer_ptr; + + message(Sprintf("loading %s", url)->ptr, 0, 0); + refresh(); + ++ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL); + base = baseURL(Currentbuf); +- if (base == NULL || ++ if ((no_referer_ptr && *no_referer_ptr) || ++ base == NULL || + base->scheme == SCM_LOCAL || base->scheme == SCM_LOCAL_CGI) + referer = NO_REFERER; + if (referer == NULL) +@@ -3568,6 +3674,33 @@ DEFUN(lastA, LINK_END, "Go to the last link") + displayBuffer(Currentbuf, B_NORMAL); + } + ++/* go to the nth anchor */ ++DEFUN(nthA, LINK_N, "Go to the nth link") ++{ ++ HmarkerList *hl = Currentbuf->hmarklist; ++ BufferPoint *po; ++ Anchor *an; ++ ++ int n = searchKeyNum(); ++ if (n < 0 || n > hl->nmark) return; ++ ++ if (Currentbuf->firstLine == NULL) ++ return; ++ if (!hl || hl->nmark == 0) ++ return; ++ ++ po = hl->marks + n-1; ++ an = retrieveAnchor(Currentbuf->href, po->line, po->pos); ++ if (an == NULL) ++ an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos); ++ if (an == NULL) return; ++ ++ gotoLine(Currentbuf, po->line); ++ Currentbuf->pos = po->pos; ++ arrangeCursor(Currentbuf); ++ displayBuffer(Currentbuf, B_NORMAL); ++} ++ + /* go to the next anchor */ + DEFUN(nextA, NEXT_LINK, "Move to next link") + { +@@ -4055,6 +4188,7 @@ goURL0(char *prompt, int relative) + char *url, *referer; + ParsedURL p_url, *current; + Buffer *cur_buf = Currentbuf; ++ const int *no_referer_ptr; + + url = searchKeyData(); + if (url == NULL) { +@@ -4064,11 +4198,8 @@ goURL0(char *prompt, int relative) + current = baseURL(Currentbuf); + if (current) { + char *c_url = parsedURL2Str(current)->ptr; +- if (DefaultURLString == DEFAULT_URL_CURRENT) { +- url = c_url; +- if (DecodeURL) +- url = url_unquote_conv(url, 0); +- } ++ if (DefaultURLString == DEFAULT_URL_CURRENT) ++ url = url_decode2(c_url, NULL); + else + pushHist(hist, c_url); + } +@@ -4077,11 +4208,8 @@ goURL0(char *prompt, int relative) + char *a_url; + parseURL2(a->url, &p_url, current); + a_url = parsedURL2Str(&p_url)->ptr; +- if (DefaultURLString == DEFAULT_URL_LINK) { +- url = a_url; +- if (DecodeURL) +- url = url_unquote_conv(url, Currentbuf->document_charset); +- } ++ if (DefaultURLString == DEFAULT_URL_LINK) ++ url = url_decode2(a_url, Currentbuf); + else + pushHist(hist, a_url); + } +@@ -4089,15 +4217,22 @@ goURL0(char *prompt, int relative) + if (url != NULL) + SKIP_BLANKS(url); + } +-#ifdef USE_M17N +- if (url != NULL) { +- if ((relative || *url == '#') && Currentbuf->document_charset) +- url = wc_conv_strict(url, InnerCharset, +- Currentbuf->document_charset)->ptr; ++ if (relative) { ++ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL); ++ current = baseURL(Currentbuf); ++ if ((no_referer_ptr && *no_referer_ptr) || ++ current == NULL || ++ current->scheme == SCM_LOCAL || current->scheme == SCM_LOCAL_CGI) ++ referer = NO_REFERER; + else +- url = conv_to_system(url); ++ referer = parsedURL2Str(&Currentbuf->currentURL)->ptr; ++ url = url_encode(url, current, Currentbuf->document_charset); ++ } ++ else { ++ current = NULL; ++ referer = NULL; ++ url = url_encode(url, NULL, 0); + } +-#endif + if (url == NULL || *url == '\0') { + displayBuffer(Currentbuf, B_FORCE_REDRAW); + return; +@@ -4106,14 +4241,6 @@ goURL0(char *prompt, int relative) + gotoLabel(url + 1); + return; + } +- if (relative) { +- current = baseURL(Currentbuf); +- referer = parsedURL2Str(&Currentbuf->currentURL)->ptr; +- } +- else { +- current = NULL; +- referer = NULL; +- } + parseURL2(url, &p_url, current); + pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr); + cmd_loadURL(url, current, referer, NULL); +@@ -4510,8 +4637,7 @@ _peekURL(int only_img) + s = parsedURL2Str(&pu); + } + if (DecodeURL) +- s = Strnew_charp(url_unquote_conv +- (s->ptr, Currentbuf->document_charset)); ++ s = Strnew_charp(url_decode2(s->ptr, Currentbuf)); + #ifdef USE_M17N + s = checkType(s, &pp, NULL); + p = NewAtom_N(Lineprop, s->length); +@@ -4570,7 +4696,7 @@ DEFUN(curURL, PEEK, "Peek current URL") + offset = 0; + s = currentURL(); + if (DecodeURL) +- s = Strnew_charp(url_unquote_conv(s->ptr, 0)); ++ s = Strnew_charp(url_decode2(s->ptr, NULL)); + #ifdef USE_M17N + s = checkType(s, &pp, NULL); + p = NewAtom_N(Lineprop, s->length); +@@ -5398,6 +5524,58 @@ DEFUN(mouse, MOUSE, "mouse operation") + process_mouse(btn, x, y); + } + ++DEFUN(sgrmouse, SGRMOUSE, "SGR 1006 mouse operation") ++{ ++ int btn = 0, x = 0, y = 0; ++ unsigned char c; ++ ++ do { ++ c = getch(); ++ if (IS_DIGIT(c)) ++ btn = btn * 10 + c - '0'; ++ else if (c == ';') ++ break; ++ else ++ return; ++ } while (1); ++ ++#if defined(__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005 ++ if (cygwin_mouse_btn_swapped) { ++ if (btn == MOUSE_BTN2_DOWN) ++ btn = MOUSE_BTN3_DOWN; ++ else if (btn == MOUSE_BTN3_DOWN) ++ btn = MOUSE_BTN2_DOWN; ++ }; ++#endif ++ ++ do { ++ c = getch(); ++ if (IS_DIGIT(c)) ++ x = x * 10 + c - '0'; ++ else if (c == ';') ++ break; ++ else ++ return; ++ } while (1); ++ ++ do { ++ c = getch(); ++ if (IS_DIGIT(c)) ++ y = y * 10 + c - '0'; ++ else if (c == 'M') ++ break; ++ else if (c == 'm') { ++ btn |= 3; ++ break; ++ } else ++ return; ++ } while (1); ++ ++ if (x < 0 || x >= COLS || y < 0 || y > LASTLINE) ++ return; ++ process_mouse(btn, x, y); ++} ++ + #ifdef USE_GPM + int + gpm_process_mouse(Gpm_Event * event, void *data) +@@ -5604,7 +5782,7 @@ execdict(char *word) + disp_message("Execution failed", TRUE); + return; + } +- else { ++ else if (buf != NO_BUFFER) { + buf->filename = w; + buf->buffername = Sprintf("%s %s", DICTBUFFERNAME, word)->ptr; + if (buf->type == NULL) +@@ -5671,7 +5849,7 @@ set_buffer_environ(Buffer *buf) + set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url)); + else + set_environ("W3M_CURRENT_FORM", ""); +- set_environ("W3M_CURRENT_LINE", Sprintf("%d", ++ set_environ("W3M_CURRENT_LINE", Sprintf("%ld", + l->real_linenumber)->ptr); + set_environ("W3M_CURRENT_COLUMN", Sprintf("%d", + buf->currentColumn + +@@ -5747,8 +5925,14 @@ deleteFiles() + Firstbuf = buf; + } + } +- while ((f = popText(fileToDelete)) != NULL) ++ while ((f = popText(fileToDelete)) != NULL) { + unlink(f); ++ if (enable_inline_image == 2 && strcmp(f+strlen(f)-4, ".gif") == 0) { ++ Str firstframe = Strnew_charp(f); ++ Strcat_charp(firstframe, "-1"); ++ unlink(firstframe->ptr); ++ } ++ } + } + + void +diff --git a/map.c b/map.c +index 90aa35a..bb240ea 100644 +--- a/map.c ++++ b/map.c +@@ -279,7 +279,7 @@ follow_map_panel(Buffer *buf, char *name) + p = parsedURL2Str(&pu)->ptr; + q = html_quote(p); + if (DecodeURL) +- p = html_quote(url_unquote_conv(p, buf->document_charset)); ++ p = html_quote(url_decode2(p, buf)); + else + p = q; + Strcat_m_charp(mappage, "<tr valign=top><td><a href=\"", q, "\">", +@@ -417,10 +417,7 @@ append_map_info(Buffer *buf, Str tmp, FormItemList *fi) + continue; + parseURL2(a->url, &pu, baseURL(buf)); + q = html_quote(parsedURL2Str(&pu)->ptr); +- if (DecodeURL) +- p = html_quote(url_unquote_conv(a->url, buf->document_charset)); +- else +- p = html_quote(a->url); ++ p = html_quote(url_decode2(a->url, buf)); + Strcat_m_charp(tmp, "<tr valign=top><td> <td><a href=\"", + q, "\">", + html_quote(*a->alt ? a->alt : mybasename(a->url)), +@@ -457,10 +454,8 @@ append_link_info(Buffer *buf, Str html, LinkList * link) + Strcat_charp(html, "[Rev]"); + if (!l->url) + url = "(empty)"; +- else if (DecodeURL) +- url = html_quote(url_unquote_conv(l->url, buf->document_charset)); + else +- url = html_quote(l->url); ++ url = html_quote(url_decode2(l->url, buf)); + Strcat_m_charp(html, "<td>", url, NULL); + if (l->ctype) + Strcat_m_charp(html, " (", html_quote(l->ctype), ")", NULL); +@@ -498,8 +493,7 @@ append_frame_info(Buffer *buf, Str html, struct frameset *set, int level) + Strcat_charp(html, p); + } + if (DecodeURL) +- p = html_quote(url_unquote_conv(frame.body->url, +- buf->document_charset)); ++ p = html_quote(url_decode2(frame.body->url, buf)); + else + p = q; + Strcat_m_charp(html, " ", p, "</a></pre_int><br>\n", NULL); +@@ -550,9 +544,7 @@ page_info_panel(Buffer *buf) + #ifdef USE_M17N + Strcat_charp(tmp, "<form method=internal action=charset>"); + #endif +- p = parsedURL2Str(&buf->currentURL)->ptr; +- if (DecodeURL) +- p = url_unquote_conv(p, 0); ++ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL); + Strcat_m_charp(tmp, "<table cellpadding=0>", + "<tr valign=top><td nowrap>Title<td>", + html_quote(buf->buffername), +@@ -581,7 +573,7 @@ page_info_panel(Buffer *buf) + "<tr valign=top><td nowrap>Number of lines<td>", + Sprintf("%d", all)->ptr, + "<tr valign=top><td nowrap>Transferred bytes<td>", +- Sprintf("%d", buf->trbyte)->ptr, NULL); ++ Sprintf("%lu", (unsigned long)buf->trbyte)->ptr, NULL); + + a = retrieveCurrentAnchor(buf); + if (a != NULL) { +@@ -589,7 +581,7 @@ page_info_panel(Buffer *buf) + p = parsedURL2Str(&pu)->ptr; + q = html_quote(p); + if (DecodeURL) +- p = html_quote(url_unquote_conv(p, buf->document_charset)); ++ p = html_quote(url_decode2(p, buf)); + else + p = q; + Strcat_m_charp(tmp, +@@ -602,7 +594,7 @@ page_info_panel(Buffer *buf) + p = parsedURL2Str(&pu)->ptr; + q = html_quote(p); + if (DecodeURL) +- p = html_quote(url_unquote_conv(p, buf->document_charset)); ++ p = html_quote(url_decode2(p, buf)); + else + p = q; + Strcat_m_charp(tmp, +@@ -613,10 +605,7 @@ page_info_panel(Buffer *buf) + if (a != NULL) { + FormItemList *fi = (FormItemList *)a->url; + p = form2str(fi); +- if (DecodeURL) +- p = html_quote(url_unquote_conv(p, buf->document_charset)); +- else +- p = html_quote(p); ++ p = html_quote(url_decode2(p, buf)); + Strcat_m_charp(tmp, + "<tr valign=top><td nowrap>Method/type of current form <td>", + p, NULL); +diff --git a/matrix.c b/matrix.c +index 64fd0ad..bc7a5be 100644 +--- a/matrix.c ++++ b/matrix.c +@@ -34,18 +34,12 @@ + + #include "config.h" + #include "matrix.h" +-#include <gc.h> ++#include "alloc.h" + + /* + * Macros from "fm.h". + */ + +-#define New(type) ((type*)GC_MALLOC(sizeof(type))) +-#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type))) +-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) +-#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type))) +-#define Renew_N(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type))) +- + #define SWAPD(a,b) { double tmp = a; a = b; b = tmp; } + #define SWAPI(a,b) { int tmp = a; a = b; b = tmp; } + +diff --git a/menu.c b/menu.c +index 774b1bd..0f66583 100644 +--- a/menu.c ++++ b/menu.c +@@ -1365,9 +1365,7 @@ initSelectMenu(void) + break; + default: + Strcat_char(str, ' '); +- p = parsedURL2Str(&buf->currentURL)->ptr; +- if (DecodeURL) +- p = url_unquote_conv(p, 0); ++ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL); + Strcat_charp(str, p); + break; + } +@@ -1513,9 +1511,7 @@ initSelTabMenu(void) + case SCM_MISSING: + break; + default: +- p = parsedURL2Str(&buf->currentURL)->ptr; +- if (DecodeURL) +- p = url_unquote_conv(p, 0); ++ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL); + Strcat_charp(str, p); + break; + } +@@ -1845,10 +1841,8 @@ link_menu(Buffer *buf) + Strcat_charp(str, " "); + if (!l->url) + p = ""; +- else if (DecodeURL) +- p = url_unquote_conv(l->url, buf->document_charset); + else +- p = l->url; ++ p = url_decode2(l->url, buf); + Strcat_charp(str, p); + label[i] = str->ptr; + if (len < str->length) +diff --git a/mimehead.c b/mimehead.c +index 78997e0..d16270c 100644 +--- a/mimehead.c ++++ b/mimehead.c +@@ -64,12 +64,22 @@ ha2d(char x, char y) + Str + decodeB(char **ww) + { ++ struct growbuf gb; ++ ++ growbuf_init(&gb); ++ decodeB_to_growbuf(&gb, ww); ++ return growbuf_to_Str(&gb); ++} ++ ++void ++decodeB_to_growbuf(struct growbuf *gb, char **ww) ++{ + unsigned char c[4]; + char *wp = *ww; + char d[3]; + int i, n_pad; +- Str ap = Strnew_size(strlen(wp)); + ++ growbuf_reserve(gb, strlen(wp) + 1); + n_pad = 0; + while (1) { + for (i = 0; i < 4; i++) { +@@ -93,39 +103,50 @@ decodeB(char **ww) + for (i = 0; i < 4; i++) { + c[i] = c2e(c[i]); + if (c[i] == BAD_BASE64) { +- *ww = wp; +- return ap; ++ goto last; + } + } + d[0] = ((c[0] << 2) | (c[1] >> 4)); + d[1] = ((c[1] << 4) | (c[2] >> 2)); + d[2] = ((c[2] << 6) | c[3]); + for (i = 0; i < 3 - n_pad; i++) { +- Strcat_char(ap, d[i]); ++ GROWBUF_ADD_CHAR(gb, d[i]); + } + if (n_pad || *wp == '\0' || *wp == '?') + break; + } ++last: ++ growbuf_reserve(gb, gb->length + 1); ++ gb->ptr[gb->length] = '\0'; + *ww = wp; +- return ap; ++ return; + } + + Str + decodeU(char **ww) + { ++ struct growbuf gb; ++ ++ growbuf_init(&gb); ++ decodeU_to_growbuf(&gb, ww); ++ return growbuf_to_Str(&gb); ++} ++ ++void ++decodeU_to_growbuf(struct growbuf *gb, char **ww) ++{ + unsigned char c1, c2; + char *w = *ww; + int n, i; +- Str a; + + if (*w <= 0x20 || *w >= 0x60) +- return Strnew_size(0); ++ return; + n = *w - 0x20; +- a = Strnew_size(n); ++ growbuf_reserve(gb, n + 1); + for (w++, i = 2; *w != '\0' && n; n--) { + c1 = (w[0] - 0x20) % 0x40; + c2 = (w[1] - 0x20) % 0x40; +- Strcat_char(a, (c1 << i) | (c2 >> (6 - i))); ++ gb->ptr[gb->length++] = (c1 << i) | (c2 >> (6 - i)); + if (i == 6) { + w += 2; + i = 2; +@@ -135,7 +156,8 @@ decodeU(char **ww) + i += 2; + } + } +- return a; ++ gb->ptr[gb->length] = '\0'; ++ return; + } + + /* RFC2047 (4.2. The "Q" encoding) */ +@@ -165,9 +187,19 @@ decodeQ(char **ww) + Str + decodeQP(char **ww) + { ++ struct growbuf gb; ++ ++ growbuf_init(&gb); ++ decodeQP_to_growbuf(&gb, ww); ++ return growbuf_to_Str(&gb); ++} ++ ++void ++decodeQP_to_growbuf(struct growbuf *gb, char **ww) ++{ + char *w = *ww; +- Str a = Strnew_size(strlen(w)); + ++ growbuf_reserve(gb, strlen(w) + 1); + for (; *w != '\0'; w++) { + if (*w == '=') { + w++; +@@ -180,15 +212,16 @@ decodeQP(char **ww) + else { + if (*w == '\0' || *(w + 1) == '\0') + break; +- Strcat_char(a, ha2d(*w, *(w + 1))); ++ gb->ptr[gb->length++] = ha2d(*w, *(w + 1)); + w++; + } + } + else +- Strcat_char(a, *w); ++ gb->ptr[gb->length++] = *w; + } ++ gb->ptr[gb->length] = '\0'; + *ww = w; +- return a; ++ return; + } + + #ifdef USE_M17N +diff --git a/parsetagx.c b/parsetagx.c +index 6b627d2..3435f9f 100644 +--- a/parsetagx.c ++++ b/parsetagx.c +@@ -221,6 +221,7 @@ parse_tag(char **s, int internal) + int j, hidden=FALSE; + for (j=0; j<i; j++) { + if (tag->attrid[j] == ATTR_TYPE && ++ tag->value[j] && + strcmp("hidden",tag->value[j]) == 0) { + hidden=TRUE; + break; +diff --git a/po/LINGUAS b/po/LINGUAS +index 1489115..ade7ca2 100644 +--- a/po/LINGUAS ++++ b/po/LINGUAS +@@ -1,2 +1,2 @@ + # Set of available languages. +-ja ++ja de +diff --git a/po/de.po b/po/de.po +new file mode 100644 +index 0000000..5e84022 +--- /dev/null ++++ b/po/de.po +@@ -0,0 +1,903 @@ ++# German translation of w3m ++# Copyright (C) 2014 Fumitoshi UKAI ++# This file is distributed under the same license as the w3m package. ++# Markus Hiereth <markus.hiereth@freenet.de>, 2014. ++msgid "" ++msgstr "" ++"Project-Id-Version: w3m 0.5.3\n" ++"Report-Msgid-Bugs-To: satodai@w3m.jp\n" ++"POT-Creation-Date: 2010-08-20 18:44+0900\n" ++"PO-Revision-Date: 2014-10-19 11:15+0200\n" ++"Last-Translator: Markus Hiereth <markus.hiereth@freenet.de>\n" ++"Language-Team: German <debian-l10n-german@lists.debian.org>\n" ++"Language: de\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Virtaal 0.7.1\n" ++ ++#: menu.c:267 ++msgid " Back (b) " ++msgstr " Zurück (b) " ++ ++#: menu.c:268 ++msgid " Select Buffer(s) " ++msgstr " Puffer auswählen (s) " ++ ++#: menu.c:270 ++msgid " Select Tab (t) " ++msgstr " Reiter auswählen (t) " ++ ++#: menu.c:272 ++msgid " View Source (v) " ++msgstr " Codeansicht (v) " ++ ++#: menu.c:273 ++msgid " Edit Source (e) " ++msgstr " Code bearbeiten (e) " ++ ++#: menu.c:274 ++msgid " Save Source (S) " ++msgstr " Code speichern (S) " ++ ++#: menu.c:275 ++msgid " Reload (r) " ++msgstr " Erneut laden (r) " ++ ++#: menu.c:276 menu.c:283 menu.c:287 ++msgid " ---------------- " ++msgstr " ---------------------- " ++ ++#: menu.c:277 ++msgid " Go Link (a) " ++msgstr " Ziel öffnen.. (a) " ++ ++#: menu.c:278 ++msgid " on New Tab (n) " ++msgstr " ..in neuem Reiter (n) " ++ ++#: menu.c:279 ++msgid " Save Link (A) " ++msgstr " Ziel speichern (A) " ++ ++#: menu.c:280 ++msgid " View Image (i) " ++msgstr " Bild anzeigen (i) " ++ ++#: menu.c:281 ++msgid " Save Image (I) " ++msgstr " Bild speichern (I) " ++ ++#: menu.c:282 ++msgid " View Frame (f) " ++msgstr " Frames zeigen (f) " ++ ++#: menu.c:284 ++msgid " Bookmark (B) " ++msgstr " Lesezeichen (B) " ++ ++#: menu.c:285 ++msgid " Help (h) " ++msgstr " Hilfe (h) " ++ ++#: menu.c:286 ++msgid " Option (o) " ++msgstr " Einstellungen (o) " ++ ++#: menu.c:288 ++msgid " Quit (q) " ++msgstr " Programm verlassen (q) " ++ ++#: rc.c:60 ++msgid "External Viewer Setup" ++msgstr "Konfiguration für externe Anzeigeprogramme" ++ ++#: rc.c:61 ++msgid "Tab width in characters" ++msgstr "Tabulatorbreite in Zeichen" ++ ++#: rc.c:62 ++msgid "Indent for HTML rendering" ++msgstr "Einzug bei HTML-Darstellung" ++ ++#: rc.c:63 ++msgid "Number of pixels per character (4.0...32.0)" ++msgstr "Anzahl von Pixeln pro Zeichen (4.0 bis 32.0)" ++ ++#: rc.c:64 ++msgid "Number of pixels per line (4.0...64.0)" ++msgstr "Anzahl von Pixeln pro Zeile (4.0 bis 64.0)" ++ ++#: rc.c:65 ++#entsprechend Bescheibung aus MANUAL.html, mh 14.10.2014 ++msgid "Number of remembered lines when used as a pager" ++msgstr "Anzahl gemerkter, über die Standardeingabe erhaltener Zeilen" ++ ++#: rc.c:66 ++msgid "Use URL history" ++msgstr "URL-Chronik verwenden" ++ ++#: rc.c:67 ++msgid "Number of remembered URL" ++msgstr "Anzahl von URLs in Chronik" ++ ++#: rc.c:68 ++msgid "Save URL history" ++msgstr "URL-Chronik speichern" ++ ++#: rc.c:69 ++msgid "Render frames automatically" ++msgstr "Frames selbstständig darstellen" ++ ++#: rc.c:70 ++msgid "Treat argument without scheme as URL" ++msgstr "Eingabe ohne Protokoll-Präfix als URL auffassen" ++ ++#: rc.c:71 ++msgid "Use _self as default target" ++msgstr "_self als Standard-Zielfenster verwenden" ++ ++#: rc.c:72 ++msgid "Open link on new tab if target is _blank or _new" ++msgstr "Link in neuem Reiter öffnen, falls für Zielfenster _blank oder _new definiert ist" ++ ++#: rc.c:73 ++msgid "Open download list panel on new tab" ++msgstr "Downloadliste in neuem Reiter öffnen" ++ ++#: rc.c:74 ++msgid "Display link URL automatically" ++msgstr "URL der Links selbstständig anzeigen" ++ ++#: rc.c:75 ++msgid "Display link numbers" ++msgstr "Linknummern anzeigen" ++ ++#: rc.c:76 ++msgid "Display decoded URL" ++msgstr "URL entschlüsselt anzeigen" ++ ++#: rc.c:77 ++msgid "Display current line number" ++msgstr "Aktuelle Zeilennummer anzeigen" ++ ++#: rc.c:78 ++msgid "Display inline images" ++msgstr "Eingebettete Bilder anzeigen" ++ ++#: rc.c:79 ++msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string" ++msgstr "Pseudo-ALTs zu eingebetteten Bildern ohne ALT oder TITLE anzeigen" ++ ++#: rc.c:81 ++msgid "Load inline images automatically" ++msgstr "Eingebettete Bilder selbstständig laden" ++ ++#: rc.c:82 ++msgid "Maximum processes for parallel image loading" ++msgstr "Anzahl zulässiger Prozesse zum gleichzeitigen Laden von Bildern" ++ ++#: rc.c:83 ++msgid "Use external image viewer" ++msgstr "Externen Bildbetrachter verwenden" ++ ++#: rc.c:84 ++msgid "Scale of image (%)" ++msgstr "Bilder prozentual skalieren" ++ ++#: rc.c:85 ++msgid "External command to display image" ++msgstr "Befehl für externen Bildbetrachter" ++ ++#: rc.c:86 ++msgid "Use link list of image map" ++msgstr "Bei Grafiken mit eingebetteten Links Ziele auflisten" ++ ++#: rc.c:88 ++msgid "Display file names in multi-column format" ++msgstr "Dateinamen auf Spalten verteilt anzeigen" ++ ++#: rc.c:89 ++msgid "Use ASCII equivalents to display entities" ++msgstr "ASCII-Ersatz für in HTML benannte Zeichen verwenden" ++ ++#: rc.c:90 ++msgid "Character type for border of table and menu" ++msgstr "Zeichen zum Einrahmen von Tabellen und Menüs" ++ ++#: rc.c:91 ++msgid "Fold lines in TEXTAREA" ++msgstr "In Eingabefeldern vom Typ TEXTAREA Texte umbrechen" ++ ++#: rc.c:92 ++msgid "Display INS, DEL, S and STRIKE element" ++msgstr "Umsetzung der Elemente INS, DEL, S und STRIKE" ++ ++#: rc.c:93 ++msgid "Display with color" ++msgstr "In Farbe anzeigen" ++ ++#: rc.c:94 ++msgid "Color of normal character" ++msgstr "Farbe für normalen Text" ++ ++#: rc.c:95 ++msgid "Color of anchor" ++msgstr "Farbe für Links / Element A" ++ ++#: rc.c:96 ++msgid "Color of image link" ++msgstr "Farbe für Bilder / Element IMG" ++ ++#: rc.c:97 ++msgid "Color of form" ++msgstr "Farbe für Eingaben / Element INPUT" ++ ++#: rc.c:98 ++msgid "Enable coloring of active link" ++msgstr "Aktiven Link farblich hervorheben" ++ ++#: rc.c:99 ++msgid "Color of currently active link" ++msgstr "Farbe des derzeit aktiven Links " ++ ++#: rc.c:100 ++msgid "Use visited link color" ++msgstr "Besuchte Links farblich hervorheben" ++ ++#: rc.c:101 ++msgid "Color of visited link" ++msgstr "Farbe für besuchte Links" ++ ++#: rc.c:102 ++msgid "Color of background" ++msgstr "Hintergrundfarbe" ++ ++#: rc.c:103 ++msgid "Color of mark" ++msgstr "Farbe für Textmarken" ++#msgstr "Farbe für Textmarkierungen" ++ ++#: rc.c:104 ++msgid "Use proxy" ++msgstr "Proxy verwenden" ++ ++#: rc.c:105 ++msgid "URL of HTTP proxy host" ++msgstr "URL des HTTP-Proxy-Hosts" ++ ++#: rc.c:107 ++msgid "URL of HTTPS proxy host" ++msgstr "URL des HTTPS-Proxy-Hosts" ++ ++#: rc.c:110 ++msgid "URL of GOPHER proxy host" ++msgstr "URL des GOPHER-Proxy-Hosts" ++ ++#: rc.c:112 ++msgid "URL of FTP proxy host" ++msgstr "URL des FTP-Proxy-Hosts" ++ ++#: rc.c:113 ++msgid "Domains to be accessed directly (no proxy)" ++msgstr "Ohne Proxy, direkt zu kontaktierende Domains" ++ ++#: rc.c:114 ++msgid "Check noproxy by network address" ++msgstr "Direkten Datentransfer ohne Proxy mittels Netzwerkadresse sicherstellen" ++ ++#: rc.c:115 ++msgid "Disable cache" ++msgstr "Zwischenspeicherung deaktivieren" ++ ++#: rc.c:117 ++msgid "News server" ++msgstr "News-Server" ++ ++#: rc.c:118 ++msgid "Mode of news server" ++msgstr "Modus des News-Servers" ++ ++#: rc.c:119 ++msgid "Number of news messages" ++msgstr "News-Anzahl" ++ ++#: rc.c:121 ++msgid "Order of name resolution" ++msgstr "Reihenfolge der Namens-Auflösung" ++ ++#: rc.c:122 ++msgid "Directory corresponding to / (document root)" ++msgstr "Wurzelverzeichnis für Dokumente (/)" ++ ++#: rc.c:123 ++msgid "Directory corresponding to /~user" ++msgstr "Pfad zum Benutzerverzeichnis (~)" ++ ++#: rc.c:124 ++msgid "Directory corresponding to /cgi-bin" ++msgstr "Verzeichnis für ausführbare Skripte (cgi-bin)" ++ ++#: rc.c:125 ++msgid "Confirm when quitting with q" ++msgstr "Das Programm erst nach Bestätigung verlassen" ++ ++#: rc.c:126 ++msgid "Close tab if buffer is last when back" ++msgstr "Reiter mit nur einem Puffer auf Zurück-Befehl hin schließen" ++ ++#: rc.c:128 ++msgid "Enable mark operations" ++msgstr "Arbeit mit Textmarken ermöglichen" ++#msgstr "Arbeit mit Textmarkierungen ermöglichen" ++ ++#: rc.c:130 ++msgid "Enable Emacs-style line editing" ++msgstr "Zeilen wie in Emacs bearbeiten" ++ ++#: rc.c:131 ++msgid "Enable vi-like numeric prefix" ++msgstr "Vorangestellte Zahlen wie in vi aktivieren" ++ ++#: rc.c:132 ++msgid "Move cursor to top line when going to label" ++msgstr "Labels nach Aufsuchen immer oben positionieren" ++ ++#: rc.c:133 ++msgid "Move cursor to top line when moving to next page" ++msgstr "Beim Umblättern Eingabemarke nach oben setzen" ++ ++#: rc.c:134 ++msgid "Fold lines of plain text file" ++msgstr "Zeilen in Textdateien umbrechen" ++ ++#: rc.c:135 ++msgid "Show line numbers" ++msgstr "Zeilennummern anzeigen" ++ ++#: rc.c:136 ++msgid "Show search string" ++msgstr "Suchbegriff anzeigen" ++ ++#: rc.c:137 ++msgid "List of mime.types files" ++msgstr "Liste der mime.types-Dateien" ++ ++#: rc.c:138 ++msgid "List of mailcap files" ++msgstr "Liste der mailcap-Dateien" ++ ++#: rc.c:139 ++msgid "List of urimethodmap files" ++msgstr "Liste von Dateien mit URI-Methode-Zuordnungen" ++ ++#: rc.c:140 ++msgid "Editor" ++msgstr "Editor" ++ ++#: rc.c:141 ++msgid "Mailer" ++msgstr "Mail-Programm" ++ ++#: rc.c:142 ++# korrespondiert mit Pulldown-Menü, daher verkürzt. mh 09.10.2014 ++msgid "How to call Mailer for mailto URLs with options" ++msgstr "Umgang mit mailto-URLs" ++ ++#: rc.c:143 ++msgid "External Browser" ++msgstr "Externer Browser" ++ ++#: rc.c:144 ++msgid "Second External Browser" ++msgstr "Zweiter externer Browser" ++ ++#: rc.c:145 ++msgid "Third External Browser" ++msgstr "Dritter externer Browser" ++ ++#: rc.c:146 ++# entsprechend file:///usr/share/doc/w3m/README.passwd ++# Prüfung beanstandete auch passwd_file mit Zugriffbytes 600, mh, 05.10.2014 ++msgid "Disable secret file security check" ++msgstr "Keine Prüfung der Sicherheit bei Dateien mit geheimem Inhalt" ++ ++#: rc.c:147 ++msgid "Password file" ++msgstr "Passwort-Datei" ++ ++#: rc.c:148 ++msgid "File for setting form on loading" ++msgstr "Datei mit vordefinierten Eingaben für Formulare" ++ ++#: rc.c:149 ++msgid "Password for anonymous FTP (your mail address)" ++msgstr "Passwort für anonyme FTP-Anmeldung (Ihre Mailadresse)" ++ ++#: rc.c:150 ++msgid "Generate domain part of password for FTP" ++msgstr "Domain-Teil des FTP-Passwortes erzeugen" ++ ++#: rc.c:151 ++msgid "User-Agent identification string" ++msgstr "Browserkennung übermitteln" ++ ++#: rc.c:152 ++msgid "Accept-Encoding header" ++msgstr "Accept-Encoding-Kopfzeile" ++ ++#: rc.c:153 ++msgid "Accept header" ++msgstr "Accept-Kopfzeile" ++ ++#: rc.c:154 ++msgid "Accept-Language header" ++msgstr "Accept-Language-Kopfzeile" ++ ++#: rc.c:155 ++msgid "Treat URL-like strings as links in all pages" ++msgstr "URL-artige Zeichenketten auf allen Seiten als Links auffassen" ++ ++#: rc.c:156 ++msgid "Wrap search" ++msgstr "Im Dokument umlaufend suchen" ++ ++#: rc.c:157 ++msgid "Display unseen objects (e.g. bgimage tag)" ++msgstr "Nicht gezeigte Objekte melden (z.B. Hintergrundbild)" ++ ++#: rc.c:158 ++msgid "Uncompress compressed data automatically when downloading" ++msgstr "Komprimierte Daten beim Download selbstständig dekomprimieren" ++ ++#: rc.c:160 ++# String nicht in Optionen-Menü gefunden. mh, 05.10.2014 ++msgid "Run external viewer in a separate session" ++msgstr "Externe Anzeigeprogramme in eigener Sitzung laufen lassen" ++ ++#: rc.c:162 ++msgid "Run external viewer in the background" ++msgstr "Externe Anzeigeprogramme im Hintergrund laufen lassen" ++ ++#: rc.c:164 ++msgid "Use external program for directory listing" ++msgstr "Externes Programm zum Auflisten von Verzeichnissen verwenden" ++ ++#: rc.c:165 ++msgid "URL of directory listing command" ++msgstr "URL des Befehls zum Auflisten von Verzeichnissen" ++ ++#: rc.c:167 ++msgid "Enable dictionary lookup through CGI" ++msgstr "Wörterbuchabfrage mittels CGI aktivieren" ++ ++#: rc.c:168 ++msgid "URL of dictionary lookup command" ++msgstr "URL des Befehls zur Wörterbuch-Abfrage" ++ ++#: rc.c:170 ++msgid "Display link name for images lacking ALT" ++msgstr "Bei Bildern ohne ALT-Angabe Linkziel anzeigen" ++ ++#: rc.c:171 ++msgid "Index file for directories" ++msgstr "Indexdatei für Verzeichnisse" ++ ++#: rc.c:172 ++msgid "Prepend http:// to URL automatically" ++msgstr "Ziel-Eingaben gegebenenfalls http:// voranstellen" ++ ++#: rc.c:173 ++msgid "Default value for open-URL command" ++msgstr "Vorgabewert bei der Adresseneingabe" ++ ++#: rc.c:174 ++msgid "Decode Content-Transfer-Encoding when saving" ++msgstr "Beim Speichern entsprechend Content-Transfer-Encoding entschlüsseln" ++ ++#: rc.c:175 ++msgid "Preserve timestamp when saving" ++msgstr "Zeitstempel beim Speichern erhalten" ++ ++#: rc.c:177 ++msgid "Enable mouse" ++msgstr "Maus aktivieren" ++ ++#: rc.c:178 ++msgid "Scroll in reverse direction of mouse drag" ++msgstr "Mausbewegungen entgegengesetzt scrollen" ++ ++#: rc.c:179 ++msgid "Behavior of wheel scroll speed" ++msgstr "Umsetzung der Mausradbewegung" ++ ++#: rc.c:180 ++msgid "(A only)Scroll by # (%) of screen" ++msgstr "(nur A) Um # % des Fensters scrollen" ++ ++#: rc.c:181 ++msgid "(B only)Scroll by # lines" ++msgstr "(nur B) Um # Zeilen scrollen" ++ ++#: rc.c:183 ++msgid "Free memory of undisplayed buffers" ++msgstr "Speicherplatz nicht angezeigter Puffer freigeben" ++ ++#: rc.c:184 ++msgid "Suppress `Referer:' header" ++msgstr "Referer-Kopfzeile unterdrücken" ++ ++#: rc.c:185 ++msgid "Search case-insensitively" ++msgstr "Groß- und Kleinschreibung beim Suchen ignorieren" ++ ++#: rc.c:186 ++msgid "Use LESSOPEN" ++msgstr "LESSOPEN verwenden" ++ ++#: rc.c:189 ++msgid "Perform SSL server verification" ++msgstr "SSL-Server-Verifizierung durchführen" ++ ++#: rc.c:190 ++msgid "PEM encoded certificate file of client" ++msgstr "PEM-kodierte Zertifikatsdatei des Clients" ++ ++#: rc.c:191 ++msgid "PEM encoded private key file of client" ++msgstr "PEM-kodierte private Schlüsseldatei des Clients" ++ ++#: rc.c:192 ++msgid "Path to directory for PEM encoded certificates of CAs" ++msgstr "Pfad zum Verzeichnis für PEM-kodierte Zertifikate von CAs" ++ ++#: rc.c:193 ++msgid "File consisting of PEM encoded certificates of CAs" ++msgstr "Datei mit PEM-kodierten Zertifikaten von CAs" ++ ++#: rc.c:195 ++msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)" ++msgstr "Liste unzulässiger SSL-Verfahren (2: SSLv2, 3: SSLv3, t: TLSv1)" ++ ++#: rc.c:198 ++msgid "Enable cookie processing" ++msgstr "Cookie-Verarbeitung aktivieren" ++ ++#: rc.c:199 ++msgid "Print a message when receiving a cookie" ++msgstr "Den Empfang von Cookies melden" ++ ++#: rc.c:200 ++msgid "Accept cookies" ++msgstr "Cookies akzeptieren" ++ ++#: rc.c:201 ++msgid "Action to be taken on invalid cookie" ++msgstr "Reaktion auf ungültiges Cookie" ++ ++#: rc.c:202 ++msgid "Domains to reject cookies from" ++msgstr "Domains, deren Cookies abzulehnen sind" ++ ++#: rc.c:203 ++msgid "Domains to accept cookies from" ++msgstr "Domains, deren Cookies akzeptiert werden" ++ ++#: rc.c:204 ++# Variable vom Typ String im Abschnitt Cookies-Einstellungen, mh 10.10.2014 ++#, fuzzy ++msgid "Domains to avoid [wrong number of dots]" ++msgstr "Zu meidende Domains (falsche Anzahl von Punkten)" ++ ++#: rc.c:206 ++msgid "Number of redirections to follow" ++msgstr "Anzahl zu akzeptierender Umleitungen" ++ ++# Konfigurationsvariable vom Typ string, mh, 05.10.2014 ++#: rc.c:207 ++msgid "Enable processing of meta-refresh tag" ++msgstr "Meta-Refresh-Element verarbeiten" ++ ++#: rc.c:210 ++msgid "Enable Migemo (Roma-ji search)" ++msgstr "Romaji-Suche mittels Migemo aktivieren" ++ ++#: rc.c:211 ++msgid "Migemo command" ++msgstr "Migemo-Befehl" ++ ++#: rc.c:215 ++msgid "Display charset" ++msgstr "Zeichenkodierung der Anzeige" ++ ++#: rc.c:216 ++msgid "Default document charset" ++msgstr "Zeichenkodierungs-Vorgabe für Dokumente" ++ ++#: rc.c:217 ++msgid "Automatic charset detect when loading" ++msgstr "Selbstständige Erkennung der Zeichenkodierung beim Laden" ++ ++#: rc.c:218 ++msgid "System charset" ++msgstr "Zeichenkodierung des Systems" ++ ++#: rc.c:219 ++msgid "System charset follows locale(LC_CTYPE)" ++msgstr "Zeichenkodierung des Systems entsprechend Locale (LC_CTYPE)" ++ ++#: rc.c:220 ++# war zuvor ++# msgstr "Halfdump mit der zur Anzeige benutzten Zeichenkodierung exportieren" ++msgid "Output halfdump with display charset" ++msgstr "Halfdump in der zur Anzeige benutzten Kodierung" ++ ++#: rc.c:221 ++# Konfigurationsvariable vom Typ boolean, mh, 05.10.2014 ++#, fuzzy ++msgid "Use multi column characters" ++msgstr "Spaltenübergreifende Zeichen verwenden" ++ ++#: rc.c:222 ++msgid "Use combining characters" ++msgstr "Kombinationszeichen verwenden" ++ ++#: rc.c:223 ++msgid "Use double width for some Unicode characters" ++msgstr "Einzelnen Unicode-Zeichen zwei Spalten einräumen" ++ ++#: rc.c:224 ++msgid "Use Unicode language tags" ++msgstr "Unicode-Sprach-Tags verwenden" ++ ++#: rc.c:225 ++msgid "Charset conversion using Unicode map" ++msgstr "Zeichen in Unicode kodieren" ++ ++#: rc.c:226 ++msgid "Charset conversion when loading" ++msgstr "Zeichenkodierung beim Laden anpassen" ++ ++#: rc.c:227 ++msgid "Adjust search string for document charset" ++msgstr "Zu suchende Zeichenkette der Kodierung des Dokumentes anpassen" ++ ++#: rc.c:228 ++msgid "Fix character width when conversion" ++msgstr "Bei Umwandlung an der Breite von Zeichen festhalten" ++ ++#: rc.c:229 ++msgid "Use GB 12345 Unicode map instead of GB 2312's" ++msgstr "GB-12345-Unicode statt GB 2312 verwenden" ++ ++#: rc.c:230 ++msgid "Use JIS X 0201 Roman for ISO-2022-JP" ++msgstr "JIS X 0201 Roman statt ISO-2022-JP verwenden" ++ ++#: rc.c:231 ++msgid "Use JIS C 6226:1978 for ISO-2022-JP" ++msgstr "JIS C 6226:1978 statt ISO-2022-JP verwenden" ++ ++#: rc.c:232 ++msgid "Use JIS X 0201 Katakana" ++msgstr "JIS X 0201 Katakana verwenden" ++ ++#: rc.c:233 ++msgid "Use JIS X 0212:1990 (Supplemental Kanji)" ++msgstr "JIS X 0212:1990 verwenden (ergänzendes Kanji)" ++ ++#: rc.c:234 ++msgid "Use JIS X 0213:2000 (2000JIS)" ++msgstr "JIS X 0213:2000 verwenden (2000JIS)" ++ ++#: rc.c:235 ++msgid "Strict ISO-2022-JP/KR/CN" ++msgstr "Striktes ISO-2022-JP/KR/CN" ++ ++#: rc.c:236 ++msgid "Treat 4 bytes char. of GB18030 as Unicode" ++msgstr "4-Byte-Zeichen von GB 18030 als Unicode auffassen" ++ ++#: rc.c:237 ++msgid "Simple Preserve space" ++msgstr "Einfache Platzerhaltung" ++ ++#: rc.c:240 ++msgid "keymap file" ++msgstr "Tastaturbelegungs-Datei" ++ ++#: rc.c:257 ++msgid "black" ++msgstr "schwarz" ++ ++#: rc.c:258 ++msgid "red" ++msgstr "rot" ++ ++#: rc.c:259 ++msgid "green" ++msgstr "grün" ++ ++#: rc.c:260 ++msgid "yellow" ++msgstr "gelb" ++ ++#: rc.c:261 ++msgid "blue" ++msgstr "blau" ++ ++#: rc.c:262 ++msgid "magenta" ++msgstr "magenta" ++ ++#: rc.c:263 ++msgid "cyan" ++msgstr "cyan" ++ ++#: rc.c:264 ++msgid "white" ++msgstr "weiß" ++ ++#: rc.c:265 ++msgid "terminal" ++msgstr "wie Terminal" ++ ++#: rc.c:284 ++msgid "none" ++msgstr "keiner" ++ ++#: rc.c:285 ++msgid "current URL" ++msgstr "aktuelle URL" ++ ++#: rc.c:286 ++msgid "link URL" ++msgstr "Link-URL" ++ ++#: rc.c:291 ++msgid "simple" ++msgstr "einfach" ++ ++#: rc.c:292 ++msgid "use tag" ++msgstr "durch Tags" ++ ++#: rc.c:293 ++msgid "fontify" ++msgstr "hervorgehoben" ++ ++#: rc.c:299 ++msgid "A:relative to screen height" ++msgstr "A: relativ zu Fensterhöhe" ++ ++#: rc.c:300 ++msgid "B:fixed speed" ++msgstr "B: feste Geschwindigkeit" ++ ++#: rc.c:307 ++msgid "unspecified" ++msgstr "nicht spezifiziert" ++ ++#: rc.c:308 ++msgid "inet inet6" ++msgstr "inet inet6" ++ ++#: rc.c:309 ++msgid "inet6 inet" ++msgstr "inet6 inet" ++ ++#: rc.c:310 ++msgid "inet only" ++msgstr "nur inet" ++ ++#: rc.c:311 ++msgid "inet6 only" ++msgstr "nur inet6" ++ ++#: rc.c:318 ++msgid "discard" ++msgstr "verwerfen" ++ ++#: rc.c:320 ++msgid "accept" ++msgstr "annehmen" ++ ++#: rc.c:322 ++msgid "ask" ++msgstr "nachfragen" ++ ++#: rc.c:329 ++# gehört zu rc.c:142 ++# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014 ++msgid "use internal mailer instead" ++msgstr "Mail intern erstellen" ++ ++#: rc.c:331 ++# gehört zu rc.c:142 ++# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014 ++msgid "ignore options and use only the address" ++msgstr "Optionen ignorieren" ++ ++#: rc.c:332 ++# gehört zu rc.c:142 ++# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014 ++msgid "use full mailto URL" ++msgstr "komplett verwenden" ++ ++#: rc.c:341 ++msgid "OFF" ++msgstr "AUS" ++ ++#: rc.c:342 ++msgid "Only ISO 2022" ++msgstr "Nur ISO-2022" ++ ++#: rc.c:343 ++msgid "ON" ++msgstr "AN" ++ ++#: rc.c:349 ++# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 ++msgid "ASCII" ++msgstr "ASCII" ++ ++#: rc.c:350 ++# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 ++# hier ist "Zeichensatz" akzeptabel mh, 09.10.2014 ++msgid "charset specific" ++msgstr "zeichensatzspezifisch" ++ ++#: rc.c:351 ++# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 ++msgid "DEC special graphics" ++msgstr "mit DEC-Grafiken" ++ ++#: rc.c:714 ++msgid "Display Settings" ++msgstr "Einstellungen zur Anzeige" ++ ++#: rc.c:716 ++msgid "Color Settings" ++msgstr "Farbeinstellungen" ++ ++#: rc.c:718 ++msgid "Miscellaneous Settings" ++msgstr "Weitere Einstellungen" ++ ++#: rc.c:719 ++msgid "Directory Settings" ++msgstr "Verzeichnis-Einstellungen" ++ ++#: rc.c:720 ++msgid "External Program Settings" ++msgstr "Einstellungen für externe Programme" ++ ++#: rc.c:721 ++msgid "Network Settings" ++msgstr "Netzwerk-Einstellungen" ++ ++#: rc.c:722 ++msgid "Proxy Settings" ++msgstr "Proxy-Einstellungen" ++ ++#: rc.c:724 ++msgid "SSL Settings" ++msgstr "SSL-Einstellungen" ++ ++#: rc.c:727 ++msgid "Cookie Settings" ++msgstr "Cookie-Einstellungen" ++ ++#: rc.c:730 ++msgid "Charset Settings" ++msgstr "Zeichenkodierungs-Einstellungen" ++ ++#. TRANSLATORS: ++#. * AcceptLang default: this is used in Accept-Language: HTTP request ++#. * header. For example, ja.po should translate it as ++#. * "ja;q=1.0, en;q=0.5" like that. ++#. ++#: rc.c:1209 ++msgid "en;q=1.0" ++msgstr "de;q=1.0, en;q=0.5" +diff --git a/po/ja.po b/po/ja.po +index d67c695..c16557a 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -12,7 +12,7 @@ msgstr "" + "PO-Revision-Date: 2010-08-20 18:45+0900\n" + "Last-Translator: Fumitoshi UKAI <ukai@debian.or.jp>\n" + "Language-Team: Japanese\n" +-"Language: \n" ++"Language: ja\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +@@ -407,6 +407,10 @@ msgid "File for setting form on loading" + msgstr "文書読込時のフォーム設定用ファイル" + + #: rc.c:149 ++msgid "File for preferences for each site" ++msgstr "サイト別設定のファイル" ++ ++#: rc.c:149 + msgid "Password for anonymous FTP (your mail address)" + msgstr "FTPのパスワード(普通は自分のmail addressを使う)" + +diff --git a/proto.h b/proto.h +index f8a7345..0d8beb5 100644 +--- a/proto.h ++++ b/proto.h +@@ -11,6 +11,8 @@ extern void pushEvent(int cmd, void *data); + extern MySignalHandler intTrap(SIGNAL_ARG); + extern void pgFore(void); + extern void pgBack(void); ++extern void hpgFore(void); ++extern void hpgBack(void); + extern void lup1(void); + extern void ldown1(void); + extern void ctrCsrV(void); +@@ -61,6 +63,7 @@ extern void submitForm(void); + extern void followForm(void); + extern void topA(void); + extern void lastA(void); ++extern void nthA(void); + extern void onA(void); + + extern void nextA(void); +@@ -162,6 +165,24 @@ extern Str searchURIMethods(ParsedURL *pu); + extern void chkExternalURIBuffer(Buffer *buf); + #endif + extern ParsedURL *schemeToProxy(int scheme); ++#ifdef USE_M17N ++extern wc_ces url_to_charset(const char *url, const ParsedURL *base, ++ wc_ces doc_charset); ++extern char *url_encode(const char *url, const ParsedURL *base, ++ wc_ces doc_charset); ++#if 0 ++extern char *url_decode(const char *url, const ParsedURL *base, ++ wc_ces doc_charset); ++#endif ++extern char *url_decode2(const char *url, const Buffer *buf); ++#else /* !defined(USE_M17N) */ ++#define url_encode(url, base, cs) url_quote(url) ++extern char *url_decode0(const char *url); ++#if 0 ++#define url_decode(url, base, cs) url_decode0(url) ++#endif ++#define url_decode2(url, buf) url_decode0(url) ++#endif /* !defined(USE_M17N) */ + extern void examineFile(char *path, URLFile *uf); + extern char *acceptableEncoding(); + extern int dir_exist(char *path); +@@ -180,7 +201,6 @@ extern void push_symbol(Str str, char symbol, int width, int n); + #ifdef USE_UNICODE + extern void update_utf8_symbol(void); + #endif +-extern Buffer *loadFile(char *path); + extern Buffer *loadGeneralFile(char *path, ParsedURL *current, char *referer, + int flag, FormList *request); + extern int is_boundary(unsigned char *, unsigned char *); +@@ -207,6 +227,8 @@ extern int getImageSize(ImageCache * cache); + extern Str process_img(struct parsed_tag *tag, int width); + extern Str process_anchor(struct parsed_tag *tag, char *tagbuf); + extern Str process_input(struct parsed_tag *tag); ++extern Str process_button(struct parsed_tag *tag); ++extern Str process_n_button(void); + extern Str process_select(struct parsed_tag *tag); + extern Str process_n_select(void); + extern void feed_select(char *str); +@@ -249,8 +271,7 @@ extern Buffer *openPagerBuffer(InputStream stream, Buffer *buf); + extern Buffer *openGeneralPagerBuffer(InputStream stream); + extern Line *getNextPage(Buffer *buf, int plen); + extern int save2tmp(URLFile uf, char *tmpf); +-extern int doExternal(URLFile uf, char *path, char *type, Buffer **bufp, +- Buffer *defaultbuf); ++extern Buffer *doExternal(URLFile uf, char *type, Buffer *defaultbuf); + extern int _doFileCopy(char *tmpf, char *defstr, int download); + #define doFileCopy(tmpf, defstr) _doFileCopy(tmpf, defstr, FALSE); + extern int doFileMove(char *tmpf, char *defstr); +@@ -507,7 +528,7 @@ extern ParsedURL *baseURL(Buffer *buf); + extern int openSocket(char *hostname, char *remoteport_name, + unsigned short remoteport_num); + extern void parseURL(char *url, ParsedURL *p_url, ParsedURL *current); +-extern void copyParsedURL(ParsedURL *p, ParsedURL *q); ++extern void copyParsedURL(ParsedURL *p, const ParsedURL *q); + extern void parseURL2(char *url, ParsedURL *pu, ParsedURL *current); + extern Str parsedURL2Str(ParsedURL *pu); + extern int getURLScheme(char **url); +@@ -586,9 +607,12 @@ extern char *getAnchorText(Buffer *buf, AnchorList *al, Anchor *a); + extern Buffer *link_list_panel(Buffer *buf); + + extern Str decodeB(char **ww); ++extern void decodeB_to_growbuf(struct growbuf *gb, char **ww); + extern Str decodeQ(char **ww); + extern Str decodeQP(char **ww); ++extern void decodeQP_to_growbuf(struct growbuf *gb, char **ww); + extern Str decodeU(char **ww); ++extern void decodeU_to_growbuf(struct growbuf *gb, char **ww); + #ifdef USE_M17N + extern Str decodeWord(char **ow, wc_ces * charset); + extern Str decodeMIME(Str orgstr, wc_ces * charset); +@@ -611,6 +635,7 @@ extern char *confFile(char *base); + extern char *auxbinFile(char *base); + extern char *libFile(char *base); + extern char *helpFile(char *base); ++extern const void *querySiteconf(const ParsedURL *query_pu, int field); + extern Str localCookie(void); + extern Str loadLocalDir(char *dirname); + extern void set_environ(char *var, char *value); +@@ -683,6 +708,7 @@ extern void reMark(void); + + #ifdef USE_MOUSE + extern void mouse(void); ++extern void sgrmouse(void); + extern void mouse_init(void); + extern void mouse_end(void); + extern void mouse_active(void); +@@ -723,6 +749,8 @@ extern int getKey(char *s); + extern char *getKeyData(int key); + extern char *getWord(char **str); + extern char *getQWord(char **str); ++struct regex; ++extern char *getRegexWord(const char **str, struct regex **regex_ret); + #ifdef USE_MOUSE + extern void initMouseAction(void); + #endif +@@ -786,5 +814,3 @@ extern void dispVer(void); + void srand48(long); + long lrand48(void); + #endif +- +-#include "indep.h" +diff --git a/rc.c b/rc.c +index 8441a39..3bf6cea 100644 +--- a/rc.c ++++ b/rc.c +@@ -9,7 +9,9 @@ + #include <errno.h> + #include "parsetag.h" + #include "local.h" ++#include "regex.h" + #include <stdlib.h> ++#include <stddef.h> + + struct param_ptr { + char *name; +@@ -146,6 +148,7 @@ static int OptionEncode = FALSE; + #define CMT_DISABLE_SECRET_SECURITY_CHECK N_("Disable secret file security check") + #define CMT_PASSWDFILE N_("Password file") + #define CMT_PRE_FORM_FILE N_("File for setting form on loading") ++#define CMT_SITECONF_FILE N_("File for preferences for each site") + #define CMT_FTPPASS N_("Password for anonymous FTP (your mail address)") + #define CMT_FTPPASS_HOSTNAMEGEN N_("Generate domain part of password for FTP") + #define CMT_USERAGENT N_("User-Agent identification string") +@@ -619,6 +622,8 @@ struct param_ptr params9[] = { + CMT_FTPPASS_HOSTNAMEGEN, NULL}, + {"pre_form_file", P_STRING, PI_TEXT, (void *)&pre_form_file, + CMT_PRE_FORM_FILE, NULL}, ++ {"siteconf_file", P_STRING, PI_TEXT, (void *)&siteconf_file, ++ CMT_SITECONF_FILE, NULL}, + {"user_agent", P_STRING, PI_TEXT, (void *)&UserAgent, CMT_USERAGENT, NULL}, + {"no_referer", P_INT, PI_ONOFF, (void *)&NoSendReferer, CMT_NOSENDREFERER, + NULL}, +@@ -1173,6 +1178,8 @@ do_mkdir(const char *dir, long mode) + #endif /* not __MINW32_VERSION */ + #endif /* not __EMX__ */ + ++static void loadSiteconf(void); ++ + void + sync_with_option(void) + { +@@ -1199,6 +1206,7 @@ sync_with_option(void) + #endif + loadPasswd(); + loadPreForm(); ++ loadSiteconf(); + + if (AcceptLang == NULL || *AcceptLang == '\0') { + /* TRANSLATORS: +@@ -1556,3 +1564,217 @@ helpFile(char *base) + return expandPath(Strnew_m_charp(w3m_help_dir(), "/", base, NULL)->ptr); + } + #endif ++ ++/* siteconf */ ++/* ++ * url "<url>"|/<re-url>/|m@<re-url>@i [exact] ++ * substitute_url "<destination-url>" ++ * url_charset <charset> ++ * no_referer_from on|off ++ * no_referer_to on|off ++ * ++ * The last match wins. ++ */ ++ ++struct siteconf_rec { ++ struct siteconf_rec *next; ++ char *url; ++ Regex *re_url; ++ int url_exact; ++ unsigned char mask[(SCONF_N_FIELD + 7) >> 3]; ++ ++ char *substitute_url; ++#ifdef USE_M17N ++ wc_ces url_charset; ++#endif ++ int no_referer_from; ++ int no_referer_to; ++}; ++#define SCONF_TEST(ent, f) ((ent)->mask[(f)>>3] & (1U<<((f)&7))) ++#define SCONF_SET(ent, f) ((ent)->mask[(f)>>3] |= (1U<<((f)&7))) ++#define SCONF_CLEAR(ent, f) ((ent)->mask[(f)>>3] &= ~(1U<<((f)&7))) ++ ++static struct siteconf_rec *siteconf_head = NULL; ++static struct siteconf_rec *newSiteconfRec(void); ++ ++static struct siteconf_rec * ++newSiteconfRec(void) ++{ ++ struct siteconf_rec *ent; ++ ++ ent = New(struct siteconf_rec); ++ ent->next = NULL; ++ ent->url = NULL; ++ ent->re_url = NULL; ++ ent->url_exact = FALSE; ++ memset(ent->mask, 0, sizeof(ent->mask)); ++ ++ ent->substitute_url = NULL; ++#ifdef USE_M17N ++ ent->url_charset = 0; ++#endif ++ return ent; ++} ++ ++static void ++loadSiteconf(void) ++{ ++ char *efname; ++ FILE *fp; ++ Str line; ++ struct siteconf_rec *ent = NULL; ++ ++ siteconf_head = NULL; ++ if (!siteconf_file) ++ return; ++ if ((efname = expandPath(siteconf_file)) == NULL) ++ return; ++ fp = fopen(efname, "r"); ++ if (fp == NULL) ++ return; ++ while (line = Strfgets(fp), line->length > 0) { ++ char *p, *s; ++ ++ Strchop(line); ++ p = line->ptr; ++ SKIP_BLANKS(p); ++ if (*p == '#' || *p == '\0') ++ continue; ++ s = getWord(&p); ++ ++ /* The "url" begins a new record. */ ++ if (strcmp(s, "url") == 0) { ++ char *url, *opt; ++ struct siteconf_rec *newent; ++ ++ /* First, register the current record. */ ++ if (ent) { ++ ent->next = siteconf_head; ++ siteconf_head = ent; ++ ent = NULL; ++ } ++ ++ /* Second, create a new record. */ ++ newent = newSiteconfRec(); ++ url = getRegexWord((const char **)&p, &newent->re_url); ++ opt = getWord(&p); ++ SKIP_BLANKS(p); ++ if (!newent->re_url) { ++ ParsedURL pu; ++ if (!url || !*url) ++ continue; ++ parseURL2(url, &pu, NULL); ++ newent->url = parsedURL2Str(&pu)->ptr; ++ } ++ /* If we have an extra or unknown option, ignore this record ++ * for future extensions. */ ++ if (strcmp(opt, "exact") == 0) { ++ newent->url_exact = TRUE; ++ } ++ else if (*opt != 0) ++ continue; ++ if (*p) ++ continue; ++ ent = newent; ++ continue; ++ } ++ ++ /* If the current record is broken, skip to the next "url". */ ++ if (!ent) ++ continue; ++ ++ /* Fill the new record. */ ++ if (strcmp(s, "substitute_url") == 0) { ++ ent->substitute_url = getQWord(&p); ++ SCONF_SET(ent, SCONF_SUBSTITUTE_URL); ++ } ++#ifdef USE_M17N ++ else if (strcmp(s, "url_charset") == 0) { ++ char *charset = getWord(&p); ++ ent->url_charset = (charset && *charset) ? ++ wc_charset_to_ces(charset) : 0; ++ SCONF_SET(ent, SCONF_URL_CHARSET); ++ } ++#endif /* USE_M17N */ ++ else if (strcmp(s, "no_referer_from") == 0) { ++ ent->no_referer_from = str_to_bool(getWord(&p), 0); ++ SCONF_SET(ent, SCONF_NO_REFERER_FROM); ++ } ++ else if (strcmp(s, "no_referer_to") == 0) { ++ ent->no_referer_to = str_to_bool(getWord(&p), 0); ++ SCONF_SET(ent, SCONF_NO_REFERER_TO); ++ } ++ } ++ if (ent) { ++ ent->next = siteconf_head; ++ siteconf_head = ent; ++ ent = NULL; ++ } ++ fclose(fp); ++} ++ ++const void * ++querySiteconf(const ParsedURL *query_pu, int field) ++{ ++ const struct siteconf_rec *ent; ++ Str u; ++ char *firstp, *lastp; ++ ++ if (field < 0 || field >= SCONF_N_FIELD) ++ return NULL; ++ if (!query_pu || IS_EMPTY_PARSED_URL(query_pu)) ++ return NULL; ++ u = parsedURL2Str((ParsedURL *)query_pu); ++ if (u->length == 0) ++ return NULL; ++ ++ for (ent = siteconf_head; ent; ent = ent->next) { ++ if (!SCONF_TEST(ent, field)) ++ continue; ++ if (ent->re_url) { ++ if (RegexMatch(ent->re_url, u->ptr, u->length, 1)) { ++ MatchedPosition(ent->re_url, &firstp, &lastp); ++ if (!ent->url_exact) ++ goto url_found; ++ if (firstp != u->ptr || lastp == firstp) ++ continue; ++ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' || ++ *lastp == '#' || *(lastp - 1) == '#') ++ goto url_found; ++ } ++ } else { ++ int matchlen = strmatchlen(ent->url, u->ptr, u->length); ++ if (matchlen == 0 || ent->url[matchlen] != 0) ++ continue; ++ firstp = u->ptr; ++ lastp = u->ptr + matchlen; ++ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' || ++ *lastp == '#' || *(lastp - 1) == '#') ++ goto url_found; ++ if (!ent->url_exact && (*lastp == '/' || *(lastp - 1) == '/')) ++ goto url_found; ++ } ++ } ++ return NULL; ++ ++url_found: ++ switch (field) { ++ case SCONF_SUBSTITUTE_URL: ++ if (ent->substitute_url && *ent->substitute_url) { ++ Str tmp = Strnew_charp_n(u->ptr, firstp - u->ptr); ++ Strcat_charp(tmp, ent->substitute_url); ++ Strcat_charp(tmp, lastp); ++ return tmp->ptr; ++ } ++ return NULL; ++#ifdef USE_M17N ++ case SCONF_URL_CHARSET: ++ return &ent->url_charset; ++#endif ++ case SCONF_NO_REFERER_FROM: ++ return &ent->no_referer_from; ++ case SCONF_NO_REFERER_TO: ++ return &ent->no_referer_to; ++ } ++ return NULL; ++} +diff --git a/regex.c b/regex.c +index 5bee4b2..5675d09 100644 +--- a/regex.c ++++ b/regex.c +@@ -77,7 +77,7 @@ static longchar + set_longchar(char *str) + { + unsigned char *p = (unsigned char *)str; +- longchar r; ++ longchar r = { }; + + #ifdef USE_M17N + if (*p & 0x80) { +diff --git a/scripts/w3mman/w3mman.1.in b/scripts/w3mman/w3mman.1.in +index 1c0361d..1b1d990 100644 +--- a/scripts/w3mman/w3mman.1.in ++++ b/scripts/w3mman/w3mman.1.in +@@ -1,4 +1,4 @@ +-.TH W3MMAN 1 "Nov 5, 2005" ++.TH W3MMAN 1 "Nov 23, 2014" + .\" Please adjust this date whenever revising the manpage. + .\" + .\" Some roff macros, for reference: +@@ -12,19 +12,19 @@ + .\" .sp <n> insert n+1 empty lines + .\" for manpage-specific macros, see man(7) + .SH NAME +-w3mman \- an interface to the on-line reference manuals by w3m(1) ++w3mman \- an interface to the on-line reference manuals via w3m(1) + .SH SYNOPSIS + .B w3mman +-.RI "[-M " path ] " " [ section ] " page" ++.RI "[\-M " path ] " " [ section ] " page" + .br + .B w3mman +-.RI "[-M " path "] -k " keyword ++.RI "[\-M " path "] \-k " keyword + .br + .B w3mman +-.RI -l " file ++.RI \-l " file + .SH DESCRIPTION + .B w3mman +-is the system's manual pager by ++is a pager for manual pages, using + .BR w3m (1). + .SH OPTIONS + A summary of options is included below. +@@ -42,6 +42,7 @@ Specify + Specify a + .I file. + .SH ENVIRONMENT ++Two variables are available for debugging. + .TP + .B W3MMAN_W3M + If W3MMAN_W3M is set, its value is used instead of @W3M@. +@@ -51,7 +52,7 @@ If W3MMAN_MAN is set, its value is used instead of @MAN@. + .SH FILES + .TP + .I @libexecdir@/@PACKAGE@/cgi-bin/w3mman2html.cgi +-convert manual page to html. ++manual page to HTML convertor. + .SH SEE ALSO + .BR man (1), + .BR w3m (1). +diff --git a/scripts/w3mman/w3mman2html.cgi.in b/scripts/w3mman/w3mman2html.cgi.in +index f430307..2cd00f9 100644 +--- a/scripts/w3mman/w3mman2html.cgi.in ++++ b/scripts/w3mman/w3mman2html.cgi.in +@@ -34,7 +34,6 @@ Content-Type: text/html + EOF + $keyword =~ s:([^-\w\200-\377.,])::g; + open(F, "$MAN -k $keyword 2> /dev/null |"); +- @line = (); + while(<F>) { + chop; + $_ = &html_quote($_); +@@ -126,12 +125,14 @@ while(<F>) { + s/\&/\&/g; + s/\</\</g; + s/\>/\>/g; ++ # non ASCII UTF-8 codepoint ++ my $utf8="[\300-\337][\200-\277]|[\340-\357][\200-\277]{2}|[\360-\367][\200-\277]{3}|[\370-\373][\200-\277]{4}|[\374\375][\200-\277]{5}"; + +- s@([\200-\377].)(\010{1,2}\1)+@<b>$1</b>@g; ++ s@($utf8)(\010\1)+@<b>$1</b>@g; + s@(\&\w+;|.)(\010\1)+@<b>$1</b>@g; +- s@__\010{1,2}((\<b\>)?[\200-\377].(\</b\>)?)@<u>$1</u>@g; ++ s@_\010((\<b\>)?($utf8)(\</b\>)?)@<u>$1</u>@g; + s@_\010((\<b\>)?(\&\w+\;|.)(\</b\>)?)@<u>$1</u>@g; +- s@((\<b\>)?[\200-\377].(\</b\>)?)\010{1,2}__@<u>$1</u>@g; ++ s@((\<b\>)?($utf8)(\</b\>)?)\010_@<u>$1</u>@g; + s@((\<b\>)?(\&\w+\;|.)(\</b\>)?)\010_@<u>$1</u>@g; + s@.\010(.)@$1@g; + +@@ -156,7 +157,7 @@ EOF + } + + s@(http|ftp)://[\w.\-/~]+[\w/]@<a href="$&">$&</a>@g; +- s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1<a href="mailto:$3">$2$3</a>@g; ++ s@\b(mailto:|)(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@<a href="mailto:$2">$1$2</a>@g; + s@(\W)(\~?/[\w.][\w.\-/~]*)@$1 . &file_ref($2)@ge; + s@(include(<\/?[bu]\>|\s)*\<)([\w.\-/]+)@$1 . &include_ref($3)@ge; + if ($prev && m@^\s*(\<[bu]\>)*(\w[\w.\-]*)(\</[bu]\>)*(\([\dm]\w*\))@) { +@@ -220,7 +221,7 @@ sub is_command { + local($p); + + (! -d && -x) || return 0; +- if (! defined(%PATH)) { ++ if (! %PATH) { + for $p (split(":", $ENV{'PATH'})) { + $p =~ s@/+$@@; + $PATH{$p} = 1; +diff --git a/table.c b/table.c +index e1243ff..d376284 100644 +--- a/table.c ++++ b/table.c +@@ -2878,6 +2878,14 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode, + tmp = process_input(tag); + feed_table1(tbl, tmp, mode, width); + break; ++ case HTML_BUTTON: ++ tmp = process_button(tag); ++ feed_table1(tbl, tmp, mode, width); ++ break; ++ case HTML_N_BUTTON: ++ tmp = process_n_button(); ++ feed_table1(tbl, tmp, mode, width); ++ break; + case HTML_SELECT: + tmp = process_select(tag); + if (tmp) +diff --git a/table.h b/table.h +index 83b661f..fdcdef3 100644 +--- a/table.h ++++ b/table.h +@@ -17,7 +17,7 @@ + #define MAX_TABLE_N 20 /* maximum number of table in same level */ + + #define MAXROW 50 +-#define MAXCOL 50 ++#define MAXCOL 256 + + #define MAX_WIDTH 80 + +diff --git a/tagtable.tab b/tagtable.tab +index f9b7b76..f5a2c30 100644 +--- a/tagtable.tab ++++ b/tagtable.tab +@@ -176,6 +176,7 @@ bdo HTML_BDO + big HTML_BIG + /big HTML_N_BIG + button HTML_BUTTON ++/button HTML_N_BUTTON + fieldset HTML_FIELDSET + /fieldset HTML_N_FIELDSET + iframe HTML_IFRAME +diff --git a/terms.c b/terms.c +index 7a3c987..79996f1 100644 +--- a/terms.c ++++ b/terms.c +@@ -12,6 +12,7 @@ + #include <unistd.h> + #include "config.h" + #include <string.h> ++#include <sys/wait.h> + #ifdef HAVE_SYS_SELECT_H + #include <sys/select.h> + #endif +@@ -222,6 +223,7 @@ static void + check_cygwin_console(void) + { + char *term = getenv("TERM"); ++ char *ctype; + HANDLE hWnd; + + if (term == NULL) +@@ -236,7 +238,9 @@ check_cygwin_console(void) + isLocalConsole = 1; + } + } +- if (strncmp(getenv("LANG"), "ja", 2) == 0) { ++ if (((ctype = getenv("LC_ALL")) || ++ (ctype = getenv("LC_CTYPE")) || ++ (ctype = getenv("LANG"))) && strncmp(ctype, "ja", 2) == 0) { + isWinConsole = TERM_CYGWIN_RESERVE_IME; + } + #ifdef SUPPORT_WIN9X_CONSOLE_MBCS +@@ -463,6 +467,260 @@ writestr(char *s) + + #define MOVE(line,column) writestr(tgoto(T_cm,column,line)); + ++void ++put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image) ++{ ++ Str buf; ++ char *size ; ++ ++ if (w > 0 && h > 0) ++ size = Sprintf("%dx%d",w,h)->ptr; ++ else ++ size = ""; ++ ++ MOVE(y,x); ++ buf = Sprintf("\x1b]5379;show_picture %s %s %dx%d+%d+%d\x07",url,size,sw,sh,sx,sy); ++ writestr(buf->ptr); ++ MOVE(Currentbuf->cursorY,Currentbuf->cursorX); ++} ++ ++static void ++save_gif(const char *path, u_char *header, size_t header_size, u_char *body, size_t body_size) ++{ ++ int fd; ++ ++ if ((fd = open(path, O_WRONLY|O_CREAT, 0600)) >= 0) { ++ write(fd, header, header_size) ; ++ write(fd, body, body_size) ; ++ write(fd, "\x3b" , 1) ; ++ close(fd) ; ++ } ++} ++ ++static u_char * ++skip_gif_header(u_char *p) ++{ ++ /* Header */ ++ p += 10; ++ ++ if (*(p) & 0x80) { ++ p += (3 * (2 << ((*p) & 0x7))); ++ } ++ p += 3; ++ ++ return p; ++} ++ ++static Str ++save_first_animation_frame(const char *path) ++{ ++ int fd; ++ struct stat st; ++ u_char *header; ++ size_t header_size; ++ u_char *body; ++ u_char *p; ++ ssize_t len; ++ Str new_path; ++ ++ new_path = Strnew_charp(path); ++ Strcat_charp(new_path, "-1"); ++ if (stat(new_path->ptr, &st) == 0) { ++ return new_path; ++ } ++ ++ if ((fd = open( path, O_RDONLY)) < 0) { ++ return NULL; ++ } ++ ++ if (fstat( fd, &st) != 0 || ! (header = GC_malloc( st.st_size))){ ++ close( fd); ++ return NULL; ++ } ++ ++ len = read(fd, header, st.st_size); ++ close(fd); ++ ++ /* Header */ ++ ++ if (len != st.st_size || strncmp(header, "GIF89a", 6) != 0) { ++ return NULL; ++ } ++ ++ p = skip_gif_header(header); ++ header_size = p - header; ++ ++ /* Application Extension */ ++ if (p[0] == 0x21 && p[1] == 0xff) { ++ p += 19; ++ } ++ ++ /* Other blocks */ ++ body = NULL; ++ while (p + 2 < header + st.st_size) { ++ if (*(p++) == 0x21 && *(p++) == 0xf9 && *(p++) == 0x04) { ++ if( body) { ++ /* Graphic Control Extension */ ++ save_gif(new_path->ptr, header, header_size, body, p - 3 - body); ++ return new_path; ++ } ++ else { ++ /* skip the first frame. */ ++ } ++ body = p - 3; ++ } ++ } ++ ++ return NULL; ++} ++ ++void ttymode_set(int mode, int imode); ++void ttymode_reset(int mode, int imode); ++ ++void ++put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image) ++{ ++ pid_t pid; ++ int do_anim; ++ MySignalHandler(*volatile previntr) (SIGNAL_ARG); ++ MySignalHandler(*volatile prevquit) (SIGNAL_ARG); ++ MySignalHandler(*volatile prevstop) (SIGNAL_ARG); ++ ++ MOVE(y,x); ++ flush_tty(); ++ ++ do_anim = (n_terminal_image == 1 && x == 0 && y == 0 && sx == 0 && sy == 0); ++ ++ previntr = mySignal(SIGINT, SIG_IGN); ++ prevquit = mySignal(SIGQUIT, SIG_IGN); ++ prevstop = mySignal(SIGTSTP, SIG_IGN); ++ ++ if ((pid = fork()) == 0) { ++ char *env; ++ int n = 0; ++ char *argv[20]; ++ char digit[2][11+1]; ++ char clip[44+3+1]; ++ Str str_url; ++ ++ close(STDERR_FILENO); /* Don't output error message. */ ++ if (do_anim) { ++ writestr("\x1b[?80h"); ++ } ++ else if (!strstr(url, "://") && strcmp(url+strlen(url)-4, ".gif") == 0 && ++ (str_url = save_first_animation_frame(url))) { ++ url = str_url->ptr; ++ } ++ ttymode_set(ISIG, 0); ++ ++ if ((env = getenv("W3M_IMG2SIXEL"))) { ++ char *p; ++ env = Strnew_charp(env)->ptr; ++ while (n < 8 && (p = strchr(env, ' '))) { ++ *p = '\0'; ++ if (*env != '\0') { ++ argv[n++] = env; ++ } ++ env = p+1; ++ } ++ if (*env != '\0') { ++ argv[n++] = env; ++ } ++ } ++ else { ++ argv[n++] = "img2sixel"; ++ } ++ argv[n++] = "-l"; ++ argv[n++] = do_anim ? "auto" : "disable"; ++ argv[n++] = "-w"; ++ sprintf(digit[0], "%d", w*pixel_per_char_i); ++ argv[n++] = digit[0]; ++ argv[n++] = "-h"; ++ sprintf(digit[1], "%d", h*pixel_per_line_i); ++ argv[n++] = digit[1]; ++ argv[n++] = "-c"; ++ sprintf(clip, "%dx%d+%d+%d", sw*pixel_per_char_i, sh*pixel_per_line_i, ++ sx*pixel_per_char_i, sy*pixel_per_line_i); ++ argv[n++] = clip; ++ argv[n++] = url; ++ if (getenv("TERM") && strcmp(getenv("TERM"), "screen") == 0 && ++ (!getenv("SCREEN_VARIANT") || strcmp(getenv("SCREEN_VARIANT"), "sixel") != 0)) { ++ argv[n++] = "-P"; ++ } ++ argv[n++] = NULL; ++ execvp(argv[0],argv); ++ exit(0); ++ } ++ else if (pid > 0) { ++ int status; ++ waitpid(pid, &status, 0); ++ ttymode_reset(ISIG, 0); ++ mySignal(SIGINT, previntr); ++ mySignal(SIGQUIT, prevquit); ++ mySignal(SIGTSTP, prevstop); ++ if (do_anim) { ++ writestr("\x1b[?80l"); ++ } ++ } ++ ++ MOVE(Currentbuf->cursorY,Currentbuf->cursorX); ++} ++ ++int ++get_pixel_per_cell(int *ppc, int *ppl) ++{ ++ fd_set rfd; ++ struct timeval tval; ++ char buf[100]; ++ char *p; ++ ssize_t len; ++ ssize_t left; ++ int wp,hp,wc,hc; ++ int i; ++ ++#ifdef TIOCGWINSZ ++ struct winsize ws; ++ if (ioctl(tty, TIOCGWINSZ, &ws) == 0 && ws.ws_ypixel > 0 && ws.ws_row > 0 && ++ ws.ws_xpixel > 0 && ws.ws_col > 0) { ++ *ppc = ws.ws_xpixel / ws.ws_col; ++ *ppl = ws.ws_ypixel / ws.ws_row; ++ return 1; ++ } ++#endif ++ ++ fputs("\x1b[14t\x1b[18t",ttyf); flush_tty(); ++ ++ p = buf; ++ left = sizeof(buf) - 1; ++ for (i = 0; i < 10; i++) { ++ tval.tv_usec = 200000; /* 0.2 sec * 10 */ ++ tval.tv_sec = 0; ++ FD_ZERO(&rfd); ++ FD_SET(tty,&rfd); ++ if (select(tty+1,&rfd,NULL,NULL,&tval) <= 0 || ! FD_ISSET(tty,&rfd)) ++ continue; ++ ++ if ((len = read(tty,p,left)) <= 0) ++ continue; ++ p[len] = '\0'; ++ ++ if (sscanf(buf,"\x1b[4;%d;%dt\x1b[8;%d;%dt",&hp,&wp,&hc,&wc) == 4) { ++ if (wp > 0 && wc > 0 && hp > 0 && hc > 0) { ++ *ppc = wp / wc; ++ *ppl = hp / hc; ++ return 1; ++ } ++ else { ++ return 0; ++ } ++ } ++ p += len; ++ left -= len; ++ } ++ ++ return 0; ++} ++ + #ifdef USE_MOUSE + #define W3M_TERM_INFO(name, title, mouse) name, title, mouse + #define NEED_XTERM_ON (1) +@@ -634,7 +892,8 @@ reset_tty(void) + writestr(T_se); /* reset terminal */ + flush_tty(); + TerminalSet(tty, &d_ioval); +- close_tty(); ++ if (tty != 2) ++ close_tty(); + } + + static MySignalHandler +@@ -2027,8 +2286,8 @@ sleep_till_anykey(int sec, int purge) + + #ifdef USE_MOUSE + +-#define XTERM_ON {fputs("\033[?1001s\033[?1000h",ttyf); flush_tty();} +-#define XTERM_OFF {fputs("\033[?1000l\033[?1001r",ttyf); flush_tty();} ++#define XTERM_ON {fputs("\033[?1001s\033[?1000h\033[?1006h",ttyf); flush_tty();} ++#define XTERM_OFF {fputs("\033[?1006l\033[?1000l\033[?1001r",ttyf); flush_tty();} + #define CYGWIN_ON {fputs("\033[?1000h",ttyf); flush_tty();} + #define CYGWIN_OFF {fputs("\033[?1000l",ttyf); flush_tty();} + +diff --git a/url.c b/url.c +index ed6062e..10089ca 100644 +--- a/url.c ++++ b/url.c +@@ -121,6 +121,7 @@ static struct table2 DefaultGuess[] = { + }; + + static void add_index_file(ParsedURL *pu, URLFile *uf); ++static char * schemeNumToName(int scheme); + + /* #define HTTP_DEFAULT_FILE "/index.html" */ + +@@ -326,6 +327,7 @@ openSSLHandle(int sock, char *hostname, char **p_cert) + SSL_load_error_strings(); + if (!(ssl_ctx = SSL_CTX_new(SSLv23_client_method()))) + goto eend; ++ SSL_CTX_set_cipher_list(ssl_ctx, "DEFAULT:!LOW:!EXP"); + option = SSL_OP_ALL; + if (ssl_forbid_method) { + if (strchr(ssl_forbid_method, '2')) +@@ -337,7 +339,15 @@ openSSLHandle(int sock, char *hostname, char **p_cert) + if (strchr(ssl_forbid_method, 'T')) + option |= SSL_OP_NO_TLSv1; + } ++#ifdef SSL_OP_NO_COMPRESSION ++ option |= SSL_OP_NO_COMPRESSION; ++#endif + SSL_CTX_set_options(ssl_ctx, option); ++ ++#ifdef SSL_MODE_RELEASE_BUFFERS ++ SSL_CTX_set_mode (ssl_ctx, SSL_MODE_RELEASE_BUFFERS); ++#endif ++ + #ifdef USE_SSL_VERIFY + /* derived from openssl-0.9.5/apps/s_{client,cb}.c */ + #if 1 /* use SSL_get_verify_result() to verify cert */ +@@ -444,6 +454,8 @@ baseURL(Buffer *buf) + /* <BASE> tag is defined in the document */ + return buf->baseURL; + } ++ else if (IS_EMPTY_PARSED_URL(&buf->currentURL)) ++ return NULL; + else + return &buf->currentURL; + } +@@ -638,16 +650,21 @@ openSocket(char *const hostname, + #define COPYPATH_SPC_ALLOW 0 + #define COPYPATH_SPC_IGNORE 1 + #define COPYPATH_SPC_REPLACE 2 ++#define COPYPATH_SPC_MASK 3 ++#define COPYPATH_LOWERCASE 4 + + static char * + copyPath(char *orgpath, int length, int option) + { + Str tmp = Strnew(); +- while (*orgpath && length != 0) { +- if (IS_SPACE(*orgpath)) { +- switch (option) { ++ char ch; ++ while ((ch = *orgpath) != 0 && length != 0) { ++ if (option & COPYPATH_LOWERCASE) ++ ch = TOLOWER(ch); ++ if (IS_SPACE(ch)) { ++ switch (option & COPYPATH_SPC_MASK) { + case COPYPATH_SPC_ALLOW: +- Strcat_char(tmp, *orgpath); ++ Strcat_char(tmp, ch); + break; + case COPYPATH_SPC_IGNORE: + /* do nothing */ +@@ -658,7 +675,7 @@ copyPath(char *orgpath, int length, int option) + } + } + else +- Strcat_char(tmp, *orgpath); ++ Strcat_char(tmp, ch); + orgpath++; + length--; + } +@@ -668,22 +685,14 @@ copyPath(char *orgpath, int length, int option) + void + parseURL(char *url, ParsedURL *p_url, ParsedURL *current) + { +- char *p, *q; ++ char *p, *q, *qq; + Str tmp; + + url = url_quote(url); /* quote 0x01-0x20, 0x7F-0xFF */ + + p = url; ++ copyParsedURL(p_url, NULL); + p_url->scheme = SCM_MISSING; +- p_url->port = 0; +- p_url->user = NULL; +- p_url->pass = NULL; +- p_url->host = NULL; +- p_url->is_nocache = 0; +- p_url->file = NULL; +- p_url->real_file = NULL; +- p_url->query = NULL; +- p_url->label = NULL; + + /* RFC1808: Relative Uniform Resource Locators + * 4. Resolving Relative URLs +@@ -694,7 +703,7 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) + goto do_label; + } + #if defined( __EMX__ ) || defined( __CYGWIN__ ) +- if (!strncmp(url, "file://localhost/", 17)) { ++ if (!strncasecmp(url, "file://localhost/", 17)) { + p_url->scheme = SCM_LOCAL; + p += 17 - 1; + url += 17 - 1; +@@ -802,19 +811,20 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) + /* scheme://user:pass@host or + * scheme://host:port + */ +- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE); ++ qq = q; + q = ++p; + while (*p && strchr("@/?#", *p) == NULL) + p++; + if (*p == '@') { + /* scheme://user:pass@... */ ++ p_url->user = copyPath(qq, q - 1 - qq, COPYPATH_SPC_IGNORE); + p_url->pass = copyPath(q, p - q, COPYPATH_SPC_ALLOW); + q = ++p; +- p_url->user = p_url->host; +- p_url->host = NULL; + goto analyze_url; + } + /* scheme://host:port/ */ ++ p_url->host = copyPath(qq, q - 1 - qq, ++ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE); + tmp = Strnew_charp_n(q, p - q); + p_url->port = atoi(tmp->ptr); + /* *p is one of ['\0', '/', '?', '#'] */ +@@ -829,7 +839,8 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) + case '/': + case '?': + case '#': +- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE); ++ p_url->host = copyPath(q, p - q, ++ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE); + p_url->port = DefaultPort[p_url->scheme]; + break; + } +@@ -956,12 +967,16 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) + p_url->label = NULL; + } + +-#define initParsedURL(p) bzero(p,sizeof(ParsedURL)) + #define ALLOC_STR(s) ((s)==NULL?NULL:allocStr(s,-1)) + + void +-copyParsedURL(ParsedURL *p, ParsedURL *q) ++copyParsedURL(ParsedURL *p, const ParsedURL *q) + { ++ if (q == NULL) { ++ memset(p, 0, sizeof(ParsedURL)); ++ p->scheme = SCM_UNKNOWN; ++ return; ++ } + p->scheme = q->scheme; + p->port = q->port; + p->is_nocache = q->is_nocache; +@@ -1280,9 +1295,23 @@ getURLScheme(char **url) + } + + static char * ++schemeNumToName(int scheme) ++{ ++ int i; ++ ++ for (i = 0; schemetable[i].cmdname != NULL; i++) { ++ if (schemetable[i].cmd == scheme) ++ return schemetable[i].cmdname; ++ } ++ return NULL; ++} ++ ++static char * + otherinfo(ParsedURL *target, ParsedURL *current, char *referer) + { + Str s = Strnew(); ++ const int *no_referer_ptr; ++ int no_referer; + + Strcat_charp(s, "User-Agent: "); + if (UserAgent == NULL || *UserAgent == '\0') +@@ -1306,7 +1335,12 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer) + Strcat_charp(s, "Pragma: no-cache\r\n"); + Strcat_charp(s, "Cache-control: no-cache\r\n"); + } +- if (!NoSendReferer) { ++ no_referer = NoSendReferer; ++ no_referer_ptr = query_SCONF_NO_REFERER_FROM(current); ++ no_referer = NoSendReferer || (no_referer_ptr && *no_referer_ptr); ++ no_referer_ptr = query_SCONF_NO_REFERER_TO(target); ++ no_referer = no_referer || (no_referer_ptr && *no_referer_ptr); ++ if (!no_referer) { + #ifdef USE_SSL + if (current && current->scheme == SCM_HTTPS && target->scheme != SCM_HTTPS) { + /* Don't send Referer: if https:// -> http:// */ +@@ -1314,6 +1348,7 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer) + else + #endif + if (referer == NULL && current && current->scheme != SCM_LOCAL && ++ current->scheme != SCM_LOCAL_CGI && + (current->scheme != SCM_FTP || + (current->user == NULL && current->pass == NULL))) { + char *p = current->label; +@@ -1603,7 +1638,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, + pu->host != NULL && !check_no_proxy(pu->host)) { + hr->flag |= HR_FLAG_PROXY; + sock = openSocket(FTP_proxy_parsed.host, +- schemetable[FTP_proxy_parsed.scheme].cmdname, ++ schemeNumToName(FTP_proxy_parsed.scheme), + FTP_proxy_parsed.port); + if (sock < 0) + return uf; +@@ -1645,15 +1680,15 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, + } + else if (pu->scheme == SCM_HTTPS) { + sock = openSocket(HTTPS_proxy_parsed.host, +- schemetable[HTTPS_proxy_parsed.scheme]. +- cmdname, HTTPS_proxy_parsed.port); ++ schemeNumToName(HTTPS_proxy_parsed.scheme), ++ HTTPS_proxy_parsed.port); + sslh = NULL; + } + else { + #endif /* USE_SSL */ + sock = openSocket(HTTP_proxy_parsed.host, +- schemetable[HTTP_proxy_parsed.scheme]. +- cmdname, HTTP_proxy_parsed.port); ++ schemeNumToName(HTTP_proxy_parsed.scheme), ++ HTTP_proxy_parsed.port); + #ifdef USE_SSL + sslh = NULL; + } +@@ -1685,8 +1720,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, + } + } + else { +- sock = openSocket(pu->host, +- schemetable[pu->scheme].cmdname, pu->port); ++ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port); + if (sock < 0) { + *status = HTST_MISSING; + return uf; +@@ -1750,7 +1784,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, + pu->host != NULL && !check_no_proxy(pu->host)) { + hr->flag |= HR_FLAG_PROXY; + sock = openSocket(GOPHER_proxy_parsed.host, +- schemetable[GOPHER_proxy_parsed.scheme].cmdname, ++ schemeNumToName(GOPHER_proxy_parsed.scheme), + GOPHER_proxy_parsed.port); + if (sock < 0) + return uf; +@@ -1758,8 +1792,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, + tmp = HTTPrequest(pu, current, hr, extra_header); + } + else { +- sock = openSocket(pu->host, +- schemetable[pu->scheme].cmdname, pu->port); ++ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port); + if (sock < 0) + return uf; + if (pu->file == NULL) +@@ -2234,3 +2267,66 @@ schemeToProxy(int scheme) + } + return pu; + } ++ ++#ifdef USE_M17N ++wc_ces ++url_to_charset(const char *url, const ParsedURL *base, wc_ces doc_charset) ++{ ++ const ParsedURL *pu; ++ ParsedURL pu_buf; ++ const wc_ces *csptr; ++ ++ if (url && *url && *url != '#') { ++ parseURL2((char *)url, &pu_buf, (ParsedURL *)base); ++ pu = &pu_buf; ++ } else { ++ pu = base; ++ } ++ if (pu && (pu->scheme == SCM_LOCAL || pu->scheme == SCM_LOCAL_CGI)) ++ return SystemCharset; ++ csptr = query_SCONF_URL_CHARSET(pu); ++ return (csptr && *csptr) ? *csptr : ++ doc_charset ? doc_charset : DocumentCharset; ++} ++ ++char * ++url_encode(const char *url, const ParsedURL *base, wc_ces doc_charset) ++{ ++ return url_quote_conv((char *)url, ++ url_to_charset(url, base, doc_charset)); ++} ++ ++#if 0 /* unused */ ++char * ++url_decode(const char *url, const ParsedURL *base, wc_ces doc_charset) ++{ ++ if (!DecodeURL) ++ return (char *)url; ++ return url_unquote_conv((char *)url, ++ url_to_charset(url, base, doc_charset)); ++} ++#endif ++ ++char * ++url_decode2(const char *url, const Buffer *buf) ++{ ++ wc_ces url_charset; ++ ++ if (!DecodeURL) ++ return (char *)url; ++ url_charset = buf ? ++ url_to_charset(url, baseURL((Buffer *)buf), buf->document_charset) : ++ url_to_charset(url, NULL, 0); ++ return url_unquote_conv((char *)url, url_charset); ++} ++ ++#else /* !defined(USE_M17N) */ ++ ++char * ++url_decode0(const char *url) ++{ ++ if (!DecodeURL) ++ return (char *)url; ++ return url_unquote_conv((char *)url, 0); ++} ++#endif /* !defined(USE_M17N) */ +diff --git a/version.c.in b/version.c.in +index 31d30e4..ab25163 100644 +--- a/version.c.in ++++ b/version.c.in +@@ -1,5 +1,5 @@ + /* $Id: version.c.in,v 1.49 2012/05/22 09:45:56 inu Exp $ */ +-#define CURRENT_VERSION "w3m/0.5.3+cvs" ++#define CURRENT_VERSION "w3m/0.5.3+gitYYYYMMDD" + + #ifndef FM_H + char *w3m_version = CURRENT_VERSION; +diff --git a/w3mbookmark.c b/w3mbookmark.c +index 4355536..fcbad11 100644 +--- a/w3mbookmark.c ++++ b/w3mbookmark.c +@@ -99,7 +99,7 @@ create_new_bookmark(char *bmark, char *section, char *title, char *url, + fprintf(f, "<body>\n<h1>Bookmarks</h1>\n"); + fprintf(f, "<h2>%s</h2>\n<ul>\n", section); + fprintf(f, "<li><a href=\"%s\">%s</a>\n", url, title); +- fprintf(f, end_section); ++ fprintf(f, "%s", end_section); + fprintf(f, "</ul>\n</body>\n</html>\n"); + fclose(f); + } +diff --git a/w3mimg/Makefile.in b/w3mimg/Makefile.in +index dfc550c..8e2ad73 100644 +--- a/w3mimg/Makefile.in ++++ b/w3mimg/Makefile.in +@@ -16,9 +16,9 @@ IMGCFLAGS=@IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@ + IMGOBJS=@IMGOBJS@ + + .PHONY: $(SUBDIRS) +-all: @IMGTARGETS@ w3mimg.a ++all: w3mimg.a + +-w3mimg.a: $(IMGOBJS) ++w3mimg.a: w3mimg.o @IMGTARGETS@ + $(AR) rv $@ $(IMGOBJS) + $(RANLIB) $@ + +diff --git a/w3mimg/fb/fb.c b/w3mimg/fb/fb.c +index cd11128..7b6f23b 100644 +--- a/w3mimg/fb/fb.c ++++ b/w3mimg/fb/fb.c +@@ -12,12 +12,24 @@ + #include <errno.h> + #include <sys/ioctl.h> + #include <sys/mman.h> ++#if defined(__linux__) + #include <linux/fb.h> ++#elif defined(__FreeBSD__) ++#include <sys/fbio.h> ++#endif ++#if defined(__FreeBSD__) ++#include <sys/types.h> ++#include <machine/param.h> ++#endif + + #include "fb.h" + + #define FB_ENV "FRAMEBUFFER" ++#if defined(__linux__) + #define FB_DEFDEV "/dev/fb0" ++#elif defined(__FreeBSD__) ++#define FB_DEFDEV "/dev/ttyv0" ++#endif + + #define MONO_OFFSET_8BIT 0x40 + #define COLORS_MONO_8BIT 0x40 +@@ -38,22 +50,65 @@ + + #define IMAGE_SIZE_MAX 10000 + ++#if defined(__linux__) + static struct fb_cmap *fb_cmap_create(struct fb_fix_screeninfo *, + struct fb_var_screeninfo *); ++#elif defined(__FreeBSD__) ++static video_color_palette_t *fb_cmap_create(video_info_t *video_info, ++ video_adapter_info_t *video_adapter_info); ++#endif ++#if defined(__linux__) + static void fb_cmap_destroy(struct fb_cmap *cmap); ++#elif defined(__FreeBSD__) ++static void fb_cmap_destroy(video_color_palette_t *cmap); ++#endif ++#if defined(__linux__) + static int fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo); ++#endif ++#if defined(__linux__) + static void *fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo); ++#elif defined(__FreeBSD__) ++static void *fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info); ++#endif ++#if defined(__linux__) + static int fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo); ++#elif defined(__FreeBSD__) ++static int fb_munmap(void *buf, video_adapter_info_t *video_adapter_info); ++#endif ++#if defined(__linux__) + static int fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo); ++#endif ++#if defined(__linux__) + static int fb_cmap_set(int fbfp, struct fb_cmap *cmap); ++#elif defined(__FreeBSD__) ++static int fb_cmap_set(int fbfp, video_color_palette_t *cmap); ++#endif ++#if defined(__linux__) + static int fb_cmap_get(int fbfp, struct fb_cmap *cmap); ++#elif defined(__FreeBSD__) ++static int fb_cmap_get(int fbfp, video_color_palette_t *cmap); ++#endif + static int fb_cmap_init(void); + static int fb_get_cmap_index(int r, int g, int b); + static unsigned long fb_get_packed_color(int r, int g, int b); ++#if defined(__FreeBSD__) ++static int fb_video_mode_get(int fbfp, int *video_mode); ++static int fb_video_info_get(int fbfp, video_info_t *video_info); ++static int fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info); ++#endif + ++#if defined(__linux__) + static struct fb_fix_screeninfo fscinfo; + static struct fb_var_screeninfo vscinfo; ++#elif defined(__FreeBSD__) ++static video_info_t video_info; ++static video_adapter_info_t video_adapter_info; ++#endif ++#if defined(__linux__) + static struct fb_cmap *cmap = NULL, *cmap_org = NULL; ++#elif defined(__FreeBSD__) ++static video_color_palette_t *cmap = NULL, *cmap_org = NULL; ++#endif + static int is_open = FALSE; + static int fbfp = -1; + static size_t pixel_size = 0; +@@ -63,6 +118,9 @@ int + fb_open(void) + { + char *fbdev = { FB_DEFDEV }; ++#if defined(__FreeBSD__) ++ int video_mode; ++#endif + + if (is_open == TRUE) + return 1; +@@ -76,6 +134,7 @@ fb_open(void) + goto ERR_END; + } + ++#if defined(__linux__) + if (fb_fscrn_get(fbfp, &fscinfo)) { + goto ERR_END; + } +@@ -83,22 +142,67 @@ fb_open(void) + if (fb_vscrn_get(fbfp, &vscinfo)) { + goto ERR_END; + } ++#elif defined(__FreeBSD__) ++ if (fb_video_mode_get(fbfp, &video_mode)) { ++ goto ERR_END; ++ } ++ video_info.vi_mode = video_mode; ++ ++ if (fb_video_info_get(fbfp, &video_info)) { ++ goto ERR_END; ++ } + ++ if (fb_video_adapter_info_get(fbfp, &video_adapter_info)) { ++ goto ERR_END; ++ } ++ if (!(video_info.vi_flags & V_INFO_GRAPHICS) || ++ !(video_info.vi_flags & V_INFO_LINEAR)) { ++ goto ERR_END; ++ } ++#endif ++ ++#if defined(__linux__) + if ((cmap = fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) { + goto ERR_END; + } ++#elif defined(__FreeBSD__) ++ if ((cmap = fb_cmap_create(&video_info, &video_adapter_info)) == (video_color_palette_t *)-1) { ++ goto ERR_END; ++ } ++#endif + ++#if defined(__linux__) + if (!(buf = fb_mmap(fbfp, &fscinfo))) { + fprintf(stderr, "Can't allocate memory.\n"); + goto ERR_END; + } ++#elif defined(__FreeBSD__) ++ if (!(buf = fb_mmap(fbfp, &video_adapter_info))) { ++ fprintf(stderr, "Can't allocate memory.\n"); ++ goto ERR_END; ++ } ++#endif + ++#if defined(__linux__) + if (fscinfo.type != FB_TYPE_PACKED_PIXELS) { + fprintf(stderr, "This type of framebuffer is not supported.\n"); + goto ERR_END; + } ++#elif defined(__FreeBSD__) ++ if (!(video_info.vi_mem_model == V_INFO_MM_PACKED || ++ video_info.vi_mem_model == V_INFO_MM_DIRECT)) { ++ fprintf(stderr, "This type of framebuffer is not supported.\n"); ++ goto ERR_END; ++ } ++#endif + ++#if defined(__linux__) + if (fscinfo.visual == FB_VISUAL_PSEUDOCOLOR && vscinfo.bits_per_pixel == 8) { ++#elif defined(__FreeBSD__) ++ if (video_adapter_info.va_flags & V_ADP_PALETTE && ++ video_info.vi_mem_model == V_INFO_MM_PACKED && ++ video_info.vi_depth == 8) { ++#endif + if (fb_cmap_get(fbfp, cmap)) { + fprintf(stderr, "Can't get color map.\n"); + fb_cmap_destroy(cmap); +@@ -111,12 +215,20 @@ fb_open(void) + + pixel_size = 1; + } ++#if defined(__linux__) + else if ((fscinfo.visual == FB_VISUAL_TRUECOLOR || + fscinfo.visual == FB_VISUAL_DIRECTCOLOR) && + (vscinfo.bits_per_pixel == 15 || + vscinfo.bits_per_pixel == 16 || + vscinfo.bits_per_pixel == 24 || vscinfo.bits_per_pixel == 32)) { + pixel_size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT; ++#elif defined(__FreeBSD__) ++ else if (video_info.vi_mem_model == V_INFO_MM_DIRECT && ++ (video_info.vi_depth == 15 || ++ video_info.vi_depth == 16 || ++ video_info.vi_depth == 24 || video_info.vi_depth == 32)) { ++ pixel_size = (video_info.vi_depth + 7) / CHAR_BIT; ++#endif + } + else { + fprintf(stderr, "This type of framebuffer is not supported.\n"); +@@ -147,7 +259,11 @@ fb_close(void) + cmap = NULL; + } + if (buf != NULL) { ++#if defined(__linux__) + fb_munmap(buf, &fscinfo); ++#elif defined(__FreeBSD__) ++ fb_munmap(buf, &video_adapter_info); ++#endif + buf = NULL; + } + +@@ -259,11 +375,19 @@ fb_image_draw(FB_IMAGE * image, int x, int y, int sx, int sy, int width, + if (y + height > fb_height()) + height = fb_height() - y; + ++#if defined(__linux__) + offset_fb = fscinfo.line_length * y + pixel_size * x; ++#elif defined(__FreeBSD__) ++ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x; ++#endif + offset_img = image->rowstride * sy + pixel_size * sx; + for (i = 0; i < height; i++) { + memcpy(buf + offset_fb, image->data + offset_img, pixel_size * width); ++#if defined(__linux__) + offset_fb += fscinfo.line_length; ++#elif defined(__FreeBSD__) ++ offset_fb += video_adapter_info.va_line_width; ++#endif + offset_img += image->rowstride; + } + +@@ -336,7 +460,11 @@ fb_width(void) + if (is_open != TRUE) + return 0; + ++#if defined(__linux__) + return vscinfo.xres; ++#elif defined(__FreeBSD__) ++ return video_info.vi_width; ++#endif + } + + int +@@ -345,7 +473,11 @@ fb_height(void) + if (is_open != TRUE) + return 0; + ++#if defined(__linux__) + return vscinfo.yres; ++#elif defined(__FreeBSD__) ++ return video_info.vi_height; ++#endif + } + + int +@@ -369,7 +501,11 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b) + h = fb_height() - y; + + if (tmp == NULL) { ++#if defined(__linux__) + tmp = malloc(fscinfo.line_length); ++#elif defined(__FreeBSD__) ++ tmp = malloc(video_adapter_info.va_line_width); ++#endif + if (tmp == NULL) + return 1; + } +@@ -384,10 +520,18 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b) + gg = g; + bb = b; + } ++#if defined(__linux__) + offset_fb = fscinfo.line_length * y + pixel_size * x; ++#elif defined(__FreeBSD__) ++ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x; ++#endif + for (i = 0; i < h; i++) { + memcpy(buf + offset_fb, tmp, pixel_size * w); ++#if defined(__linux__) + offset_fb += fscinfo.line_length; ++#elif defined(__FreeBSD__) ++ offset_fb += video_adapter_info.va_line_width; ++#endif + } + return 0; + } +@@ -400,11 +544,21 @@ fb_get_packed_color(int r, int g, int b) + return fb_get_cmap_index(r, g, b); + } + else { ++#if defined(__linux__) + return + ((r >> (CHAR_BIT - vscinfo.red.length)) << vscinfo.red.offset) + + ((g >> (CHAR_BIT - vscinfo.green.length)) << vscinfo.green. + offset) + + ((b >> (CHAR_BIT - vscinfo.blue.length)) << vscinfo.blue.offset); ++#elif defined(__FreeBSD__) ++ return ++ ((r >> (CHAR_BIT - video_info.vi_pixel_fsizes[0])) << ++ video_info.vi_pixel_fields[0]) + ++ ((g >> (CHAR_BIT - video_info.vi_pixel_fsizes[1])) << ++ video_info.vi_pixel_fields[1]) + ++ ((b >> (CHAR_BIT - video_info.vi_pixel_fsizes[2])) << ++ video_info.vi_pixel_fields[2]); ++#endif + } + } + +@@ -433,16 +587,31 @@ fb_cmap_init(void) + if (cmap == NULL) + return 1; + ++#if defined(__linux__) + if (cmap->len < COLOR_OFFSET_8BIT + COLORS_8BIT) { + fprintf(stderr, "Can't allocate enough color.\n"); + return 1; + } ++#elif defined(__FreeBSD__) ++ if (cmap->count < COLOR_OFFSET_8BIT + COLORS_8BIT) { ++ fprintf(stderr, "Can't allocate enough color.\n"); ++ return 1; ++ } ++#endif + + if (cmap_org == NULL) { ++#if defined(__linux__) + if ((cmap_org = + fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) { + return 1; + } ++#elif defined(__FreeBSD__) ++ if ((cmap_org = ++ fb_cmap_create(&video_info, &video_adapter_info)) == ++ (video_color_palette_t *)-1) { ++ return 1; ++ } ++#endif + + if (fb_cmap_get(fbfp, cmap_org)) { + fprintf(stderr, "Can't get color map.\n"); +@@ -452,8 +621,13 @@ fb_cmap_init(void) + } + } + ++#if defined(__linux__) + cmap->start = MONO_OFFSET_8BIT; + cmap->len = COLORS_8BIT + COLORS_MONO_8BIT; ++#elif defined(__FreeBSD__) ++ cmap->index = MONO_OFFSET_8BIT; ++ cmap->count = COLORS_8BIT + COLORS_MONO_8BIT; ++#endif + + for (lp = 0; lp < COLORS_MONO_8BIT; lp++) { + int c; +@@ -506,73 +680,213 @@ fb_cmap_init(void) + + #define LUT_MAX (256) + ++#if defined(__linux__) + static struct fb_cmap * + fb_cmap_create(struct fb_fix_screeninfo *fscinfo, + struct fb_var_screeninfo *vscinfo) ++#elif defined(__FreeBSD__) ++static video_color_palette_t * ++fb_cmap_create(video_info_t *video_info, ++ video_adapter_info_t *video_adapter_info) ++#endif + { ++#if defined(__linux__) + struct fb_cmap *cmap; ++#elif defined(__FreeBSD__) ++ video_color_palette_t *cmap; ++#endif + int cmaplen = LUT_MAX; + + /* check the existence of colormap */ ++#if defined(__linux__) + if (fscinfo->visual == FB_VISUAL_MONO01 || + fscinfo->visual == FB_VISUAL_MONO10 || + fscinfo->visual == FB_VISUAL_TRUECOLOR) + return NULL; ++#elif defined(__FreeBSD__) ++ if (!(video_adapter_info->va_flags & V_ADP_PALETTE)) ++ return NULL; ++#endif + ++#if defined(__linux__) + cmap = (struct fb_cmap *)malloc(sizeof(struct fb_cmap)); ++#elif defined(__FreeBSD__) ++ cmap = (video_color_palette_t *)malloc(sizeof(video_color_palette_t)); ++#endif + if (!cmap) { + perror("cmap malloc error\n"); ++#if defined(__linux__) + return (struct fb_cmap *)-1; ++#elif defined(__FreeBSD__) ++ return (video_color_palette_t *)-1; ++#endif + } ++#if defined(__linux__) + memset(cmap, 0, sizeof(struct fb_cmap)); ++#elif defined(__FreeBSD__) ++ memset(cmap, 0, sizeof(video_color_palette_t)); ++#endif ++ ++#if defined(__FreeBSD__) ++ if (video_info->vi_mem_model == V_INFO_MM_PACKED) { ++ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen); ++ if (!cmap->red) { ++ perror("red lut malloc error\n"); ++ return (video_color_palette_t *)-1; ++ } ++ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen); ++ if (!cmap->green) { ++ perror("green lut malloc error\n"); ++ free(cmap->red); ++ return (video_color_palette_t *)-1; ++ } ++ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen); ++ if (!cmap->blue) { ++ perror("blue lut malloc error\n"); ++ free(cmap->red); ++ free(cmap->green); ++ return (video_color_palette_t *)-1; ++ } ++ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen); ++ if (!cmap->transparent) { ++ perror("transparent lut malloc error\n"); ++ free(cmap->red); ++ free(cmap->green); ++ free(cmap->blue); ++ return (video_color_palette_t *)-1; ++ } ++ cmap->count = cmaplen; ++ return cmap; ++ } ++#endif + + /* Allocates memory for a colormap */ ++#if defined(__linux__) + if (vscinfo->red.length) { + cmap->red = (__u16 *) malloc(sizeof(__u16) * cmaplen); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[0]) { ++ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen); ++#endif + if (!cmap->red) { + perror("red lut malloc error\n"); ++#if defined(__linux__) + return (struct fb_cmap *)-1; ++#elif defined(__FreeBSD__) ++ return (video_color_palette_t *)-1; ++#endif + } + } ++#if defined(__linux__) + if (vscinfo->green.length) { + cmap->green = (__u16 *) malloc(sizeof(__u16) * cmaplen); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[1]) { ++ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen); ++#endif + if (!cmap->green) { ++#if defined(__linux__) + if (vscinfo->red.length) + free(cmap->red); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[0]) ++ free(cmap->red); ++#endif + perror("green lut malloc error\n"); ++#if defined(__linux__) + return (struct fb_cmap *)-1; ++#elif defined(__FreeBSD__) ++ return (video_color_palette_t *)-1; ++#endif + } + } ++#if defined(__linux__) + if (vscinfo->blue.length) { + cmap->blue = (__u16 *) malloc(sizeof(__u16) * cmaplen); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[2]) { ++ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen); ++#endif + if (!cmap->blue) { ++#if defined(__linux__) + if (vscinfo->red.length) + free(cmap->red); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[0]) ++ free(cmap->red); ++#endif ++#if defined(__linux__) + if (vscinfo->green.length) + free(cmap->green); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[1]) ++ free(cmap->green); ++#endif + perror("blue lut malloc error\n"); ++#if defined(__linux__) + return (struct fb_cmap *)-1; ++#elif defined(__FreeBSD__) ++ return (video_color_palette_t *)-1; ++#endif + } + } ++#if defined(__linux__) + if (vscinfo->transp.length) { + cmap->transp = (__u16 *) malloc(sizeof(__u16) * cmaplen); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[3]) { ++ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen); ++#endif ++#if defined(__linux__) + if (!cmap->transp) { ++#elif defined(__FreeBSD__) ++ if (!cmap->transparent) { ++#endif ++#if defined(__linux__) + if (vscinfo->red.length) + free(cmap->red); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[0]) ++ free(cmap->red); ++#endif ++#if defined(__linux__) + if (vscinfo->green.length) + free(cmap->green); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[1]) ++ free(cmap->green); ++#endif ++#if defined(__linux__) + if (vscinfo->blue.length) + free(cmap->blue); + perror("transp lut malloc error\n"); ++#elif defined(__FreeBSD__) ++ if (video_info->vi_pixel_fsizes[2]) ++ free(cmap->blue); ++ perror("transparent lut malloc error\n"); ++#endif ++#if defined(__linux__) + return (struct fb_cmap *)-1; ++#elif defined(__FreeBSD__) ++ return (video_color_palette_t *)-1; ++#endif + } + } ++#if defined(__linux__) + cmap->len = cmaplen; ++#elif defined(__FreeBSD__) ++ cmap->count = cmaplen; ++#endif + return cmap; + } + ++#if defined(__linux__) + static void + fb_cmap_destroy(struct fb_cmap *cmap) ++#elif defined(__FreeBSD__) ++static void ++fb_cmap_destroy(video_color_palette_t *cmap) ++#endif + { + if (cmap->red) + free(cmap->red); +@@ -580,28 +894,57 @@ fb_cmap_destroy(struct fb_cmap *cmap) + free(cmap->green); + if (cmap->blue) + free(cmap->blue); ++#if defined(__linux__) + if (cmap->transp) + free(cmap->transp); ++#elif defined(__FreeBSD__) ++ if (cmap->transparent) ++ free(cmap->transparent); ++#endif + free(cmap); + } + ++#if defined(__linux__) + static int + fb_cmap_get(int fbfp, struct fb_cmap *cmap) ++#elif defined(__FreeBSD__) ++static int ++fb_cmap_get(int fbfp, video_color_palette_t *cmap) ++#endif + { ++#if defined(__linux__) + if (ioctl(fbfp, FBIOGETCMAP, cmap)) { + perror("ioctl FBIOGETCMAP error\n"); + return -1; + } ++#elif defined(__FreeBSD__) ++ if (ioctl(fbfp, FBIO_GETPALETTE, cmap) == -1) { ++ perror("ioctl FBIO_GETPALETTE error\n"); ++ return -1; ++ } ++#endif + return 0; + } + ++#if defined(__linux__) + static int + fb_cmap_set(int fbfp, struct fb_cmap *cmap) ++#elif defined(__FreeBSD__) ++static int ++fb_cmap_set(int fbfp, video_color_palette_t *cmap) ++#endif + { ++#if defined(__linux__) + if (ioctl(fbfp, FBIOPUTCMAP, cmap)) { + perror("ioctl FBIOPUTCMAP error\n"); + return -1; + } ++#elif defined(__FreeBSD__) ++ if (ioctl(fbfp, FBIO_SETPALETTE, cmap) == -1) { ++ perror("ioctl FBIO_SETPALETTE error\n"); ++ return -1; ++ } ++#endif + return 0; + } + +@@ -612,10 +955,16 @@ fb_cmap_set(int fbfp, struct fb_cmap *cmap) + * fb_munmap() deletes the mappings + */ + ++#if defined(__linux__) + static void * + fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo) ++#elif defined(__FreeBSD__) ++static void * ++fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info) ++#endif + { + void *buf; ++#if defined(__linux__) + if ((buf = (unsigned char *) + mmap(NULL, scinfo->smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp, + (off_t) 0)) +@@ -623,13 +972,41 @@ fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo) + perror("mmap error"); + return NULL; + } ++#elif defined(__FreeBSD__) ++ size_t mmap_offset; ++ size_t mmap_length; ++ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK); ++ mmap_length = (size_t)(video_adapter_info->va_window_size + ++ mmap_offset + PAGE_MASK) & (~PAGE_MASK); ++ if ((buf = (unsigned char *) ++ mmap(NULL, mmap_length, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp, ++ (off_t) 0)) ++ == MAP_FAILED) { ++ perror("mmap error"); ++ return NULL; ++ } ++#endif + return buf; + } + ++#if defined(__linux__) + static int + fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo) ++#elif defined(__FreeBSD__) ++static int ++fb_munmap(void *buf, video_adapter_info_t *video_adapter_info) ++#endif + { ++#if defined(__linux__) + return munmap(buf, scinfo->smem_len); ++#elif defined(__FreeBSD__) ++ size_t mmap_offset; ++ size_t mmap_length; ++ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK); ++ mmap_length = (size_t)(video_adapter_info->va_window_size + ++ mmap_offset + PAGE_MASK) & (~PAGE_MASK); ++ return munmap((void *)((u_long)buf & (~PAGE_MASK)), mmap_length); ++#endif + } + + /* +@@ -637,6 +1014,7 @@ fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo) + * + * fb_fscrn_get() get information + */ ++#if defined(__linux__) + static int + fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo) + { +@@ -646,12 +1024,14 @@ fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo) + } + return 0; + } ++#endif + + /* + * (struct fb_var_screeninfo) device independent variable information + * + * fb_vscrn_get() get information + */ ++#if defined(__linux__) + static int + fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo) + { +@@ -661,3 +1041,41 @@ fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo) + } + return 0; + } ++#endif ++ ++#if defined(__FreeBSD__) ++static int ++fb_video_mode_get(int fbfp, int *video_mode) ++{ ++ if (ioctl(fbfp, FBIO_GETMODE, video_mode) == -1) { ++ perror("ioctl FBIO_GETMODE error\n"); ++ return -1; ++ } ++ return 0; ++} ++#endif ++ ++#if defined(__FreeBSD__) ++static int ++fb_video_info_get(int fbfp, video_info_t *video_info) ++{ ++ if (ioctl(fbfp, FBIO_MODEINFO, video_info) == -1) { ++ perror("ioctl FBIO_MODEINFO error\n"); ++ return -1; ++ } ++ return 0; ++} ++#endif ++ ++#if defined(__FreeBSD__) ++static int ++fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info) ++{ ++ if (ioctl(fbfp, FBIO_ADPINFO, video_adapter_info) == -1) { ++ perror("ioctl FBIO_ADPINFO error\n"); ++ return -1; ++ } ++ return 0; ++} ++#endif ++ +diff --git a/w3mimg/fb/fb.h b/w3mimg/fb/fb.h +index 1138bb0..5d86454 100644 +--- a/w3mimg/fb/fb.h ++++ b/w3mimg/fb/fb.h +@@ -1,7 +1,11 @@ + /* $Id: fb.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */ + #ifndef fb_header + #define fb_header ++#if defined(__linux__) + #include <linux/fb.h> ++#elif defined(__FreeBSD__) ++#include <sys/fbio.h> ++#endif + + typedef struct { + int num; +diff --git a/w3mimg/fb/fb_gdkpixbuf.c b/w3mimg/fb/fb_gdkpixbuf.c +index 36e3b62..f1e8d97 100644 +--- a/w3mimg/fb/fb_gdkpixbuf.c ++++ b/w3mimg/fb/fb_gdkpixbuf.c +@@ -6,7 +6,7 @@ + #include "config.h" + #if defined(USE_GTK2) + #include <glib-object.h> +-#include <gdk/gdk.h> ++#include <gdk-pixbuf/gdk-pixbuf.h> + #endif + #include <gdk-pixbuf/gdk-pixbuf.h> + #include "fb.h" +diff --git a/w3mimg/fb/fb_w3mimg.c b/w3mimg/fb/fb_w3mimg.c +index d3ae5a9..fb323f5 100644 +--- a/w3mimg/fb/fb_w3mimg.c ++++ b/w3mimg/fb/fb_w3mimg.c +@@ -153,10 +153,15 @@ check_tty_console(char *tty) + return 0; + if (strncmp(tty, "/dev/", 5) == 0) + tty += 5; ++#if defined(__linux__) + if (strncmp(tty, "tty", 3) == 0 && isdigit(*(tty + 3))) + return 1; + if (strncmp(tty, "vc/", 3) == 0 && isdigit(*(tty + 3))) + return 1; ++#elif defined(__FreeBSD__) ++ if (strncmp(tty, "ttyv", 4) == 0 && isxdigit(*(tty + 4))) ++ return 1; ++#endif + return 0; + } + #else +@@ -172,7 +177,9 @@ w3mimg_fbopen() + return NULL; + memset(wop, 0, sizeof(w3mimg_op)); + +- if (!check_tty_console(getenv("W3M_TTY")) && strcmp("jfbterm", getenv("TERM")) != 0) { ++ if (!check_tty_console(getenv("W3M_TTY")) && ++ strcmp("jfbterm", getenv("TERM")) != 0 && ++ strncmp("jfbterm-", getenv("TERM"), 8) != 0) { + fprintf(stderr, "w3mimgdisplay/fb: tty is not console\n"); + goto error; + } +diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c +index f5be4a8..bc8d0aa 100644 +--- a/w3mimg/x11/x11_w3mimg.c ++++ b/w3mimg/x11/x11_w3mimg.c +@@ -14,7 +14,7 @@ + #elif defined(USE_GDKPIXBUF) + #if defined(USE_GTK2) + #include <glib-object.h> +-#include <gdk/gdk.h> ++#include <gdk-pixbuf/gdk-pixbuf.h> + #include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h> + #else + #include <gdk-pixbuf/gdk-pixbuf-xlib.h> +@@ -121,16 +121,21 @@ x11_init(w3mimg_op * self) + if (self == NULL) + return 0; + xi = (struct x11_info *)self->priv; ++#if defined(USE_IMLIB) + if (xi == NULL) + return 0; +-#if defined(USE_IMLIB) + if (!xi->id) { + xi->id = Imlib_init(xi->display); + if (!xi->id) + return 0; + } + #elif defined(USE_GDKPIXBUF) +- if (!xi->init_flag) { ++ if (!xi) { ++#if defined(USE_GTK2) ++ g_type_init(); ++#endif ++ } ++ else if (!xi->init_flag) { + #if defined(USE_GTK2) + g_type_init(); + #endif +@@ -138,7 +143,7 @@ x11_init(w3mimg_op * self) + xi->init_flag = TRUE; + } + #endif +- if (!xi->imageGC) { ++ if (xi && !xi->imageGC) { + xi->imageGC = XCreateGC(xi->display, xi->parent, 0, NULL); + if (!xi->imageGC) + return 0; +@@ -653,9 +658,11 @@ x11_get_image_size(w3mimg_op * self, W3MImage * img, char *fname, int *w, + + if (self == NULL) + return 0; ++#if defined(USE_IMLIB) && defined(USE_IMLIB2) + xi = (struct x11_info *)self->priv; + if (xi == NULL) + return 0; ++#endif + + #if defined(USE_IMLIB) + im = Imlib_load_image(xi->id, fname); +@@ -755,6 +762,9 @@ w3mimg_x11open() + return NULL; + memset(wop, 0, sizeof(w3mimg_op)); + ++ if (getenv("W3M_USE_REMOTE_IMAGE")) ++ goto end; ++ + xi = (struct x11_info *)malloc(sizeof(struct x11_info)); + if (xi == NULL) + goto error; +@@ -807,6 +817,7 @@ w3mimg_x11open() + + wop->priv = xi; + ++ end: + wop->init = x11_init; + wop->finish = x11_finish; + wop->active = x11_active; diff --git a/debian/patches/030_pager-s-option.patch b/debian/patches/030_pager-s-option.patch deleted file mode 100644 index 572e70f..0000000 --- a/debian/patches/030_pager-s-option.patch +++ /dev/null @@ -1,181 +0,0 @@ -Description: Change the -s option to "squeeze multiple blank lines" for pager - Change the -s option from "display charset Shift_JIS" to "squeeze multiple - blank lines" to work as /usr/bin/pager. In addition, the options -j and -e - are disabled. To specify the display charset, use -O{s|j|e} instead. - . - The patch was committed to the upstream on 2000-10-27. However, it was - rejected because of Debian specific on 2010-08-03. -Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/200010.month/1275.html -Bug-Debian: http://bugs.debian.org/75527 - -diff -urN w3m.orig/main.c w3m/main.c ---- w3m.orig/main.c 2010-08-04 23:06:36.000000000 +0900 -+++ w3m/main.c 2010-08-05 19:28:46.000000000 +0900 -@@ -194,10 +194,12 @@ - #ifdef USE_M17N - fprintf(f, " -I charset document charset\n"); - fprintf(f, " -O charset display/output charset\n"); -+#if 0 /* use -O{s|j|e} instead */ - fprintf(f, " -e EUC-JP\n"); - fprintf(f, " -s Shift_JIS\n"); - fprintf(f, " -j JIS\n"); - #endif -+#endif - fprintf(f, " -B load bookmark\n"); - fprintf(f, " -bookmark file specify bookmark file\n"); - fprintf(f, " -T type specify content-type\n"); -@@ -242,7 +244,11 @@ - #endif /* USE_COOKIE */ - fprintf(f, " -graph use DEC special graphics for border of table and menu\n"); - fprintf(f, " -no-graph use ACII character for border of table and menu\n"); -+#if 1 /* pager requires -s */ -+ fprintf(f, " -s squeeze multiple blank lines\n"); -+#else - fprintf(f, " -S squeeze multiple blank lines\n"); -+#endif - fprintf(f, " -W toggle wrap search mode\n"); - fprintf(f, " -X don't use termcap init/deinit\n"); - fprintf(f, -@@ -524,12 +530,14 @@ - PagerMax = atoi(argv[i]); - } - #ifdef USE_M17N -+#if 0 /* use -O{s|j|e} instead */ - else if (!strcmp("-s", argv[i])) - DisplayCharset = WC_CES_SHIFT_JIS; - else if (!strcmp("-j", argv[i])) - DisplayCharset = WC_CES_ISO_2022_JP; - else if (!strcmp("-e", argv[i])) - DisplayCharset = WC_CES_EUC_JP; -+#endif - else if (!strncmp("-I", argv[i], 2)) { - if (argv[i][2] != '\0') - p = argv[i] + 2; -@@ -694,7 +702,11 @@ - accept_cookie = TRUE; - } - #endif /* USE_COOKIE */ -+#if 1 /* pager requires -s */ -+ else if (!strcmp("-s", argv[i])) -+#else - else if (!strcmp("-S", argv[i])) -+#endif - squeezeBlankLine = TRUE; - else if (!strcmp("-X", argv[i])) - Do_not_use_ti_te = TRUE; - -commit 7d4d6cdd31f09b964f436651217dd0e2488e5e7b -Author: Tatsuya Kinoshita <tats@debian.org> -Date: Sun Oct 13 14:06:32 2013 +0900 - - Update document for the -s option change - -diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html -index 41d70f1..f197cfb 100644 ---- a/doc-jp/MANUAL.html -+++ b/doc-jp/MANUAL.html -@@ -51,15 +51,9 @@ w3m - <dt>-l Կ - <dd>ɸϤƤɽȤ¸Կꤹ - 롥ǥեȤ 10000 --<dt>-s --<dd>Shift_JIS ɤɽ롥 --<dt>-e --<dd>EUC ɤɽ롥 --<dt>-j --<dd>JIS(ISO-2022-JP) ɤɽ롥 --<dt>-O e|s|j|N|m|n -+<dt>-O ʸ - <dd>ɽѤʸɤꤹ롥 --<dt>-I e|s -+<dt>-I ʸ - <dd>ʸʸɤꤹ롥 - <dt>-T - <dd>ɽʸΥפꤹ롥λ꤬ʤ硤ե -@@ -89,7 +83,7 @@ HTML - <dd>顼ɽʤ - <dt>-F - <dd>ե졼ưɽ롥 --<dt>-S -+<dt>-s - <dd>Ϣ³Ԥ1ԤˤޤȤɽ롥 - <dt>-X - <dd>w3mλˡβ̤ʤ -diff --git a/doc-jp/w3m.1 b/doc-jp/w3m.1 -index 89aacb6..099a803 100644 ---- a/doc-jp/w3m.1 -+++ b/doc-jp/w3m.1 -@@ -39,19 +39,10 @@ text/plain - ɸϤƤɽȤ¸Կꤹ롥 - ǥեȤ10000 - .TP --.B \-s --Shift_JISɤɽ롥 --.TP --.B \-e --EUCɤɽ롥 --.TP --.B \-j --JIS (ISO-2022-JP)ɤɽ롥 --.TP --.BI \-O\ e|s|j|N|m -+.BI \-O\ ʸ - ɽ˻Ȥʸɤꤹ. - .TP --.BI \-I\ e|s -+.BI \-I\ ʸ - ʸʸɤꤹ롥 - .TP - .BI \-T\ -@@ -90,7 +81,7 @@ Bookmark - .B \-F - ե졼ưɽ롥 - .TP --.B \-S -+.B \-s - Ϣ³Ԥ1ԤˤޤȤɽ롥 - .TP - .B \-X -diff --git a/doc/MANUAL.html b/doc/MANUAL.html -index aff0189..0a00b59 100644 ---- a/doc/MANUAL.html -+++ b/doc/MANUAL.html -@@ -55,12 +55,10 @@ If you don't specify this option, - <dt>-l number - <dd>Specify line number preserved internally when reading text/plain document - fron standard input. Default is 10000. --<dt>-s --<dd>Display documents with Shift_JIS code. --<dt>-e --<dd>Display documents with EUC_JP code. --<dt>-j --<dd>Display documents with ISO-2022-JP code. -+<dt>-O charset -+<dd>Specify display/output charset. -+<dt>-I charset -+<dd>Specify document charset. - <dt>-T type - <dd>Specify document type. Without this option, document type - is determined from extension of a file. If the determination -@@ -90,7 +88,7 @@ It is useful when reading E-mail or NetNews messages. - <dd>Monochrome display mode. - <dt>-F - <dd>Automatically render frame. --<dt>-S -+<dt>-s - <dd>Squeeze blank lines. - <dt>-X - <dd>Upon exit, do not display preserved screen. -diff --git a/doc/w3m.1 b/doc/w3m.1 -index aeb4a60..da4fdbb 100644 ---- a/doc/w3m.1 -+++ b/doc/w3m.1 -@@ -143,7 +143,7 @@ use graphic character - .B -no-graph - don't use graphic character - .TP --.B -S -+.B -s - squeeze multiple blank lines - .TP - .B -W diff --git a/debian/patches/040_link-gtk2.patch b/debian/patches/040_link-gtk2.patch deleted file mode 100644 index 4bbc486..0000000 --- a/debian/patches/040_link-gtk2.patch +++ /dev/null @@ -1,31 +0,0 @@ -Subject: Explicitly add -lX11 to IMGX11LDFLAGS only when gtk2 -From: Tatsuya Kinoshita <tats@debian.org> -Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605761 -Bug: https://sourceforge.net/p/w3m/patches/57/ - -diff --git a/acinclude.m4 b/acinclude.m4 -index e4ccc3d..3b180dd 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -706,7 +706,7 @@ AC_DEFUN([AC_W3M_IMAGE], - AC_DEFINE(USE_GDKPIXBUF) - AC_DEFINE(USE_GTK2) - IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" -- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" -+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" - elif test x"$have_gdkpixbuf" = xyes; then - AC_DEFINE(USE_W3MIMG_X11) - IMGOBJS="$IMGOBJS x11/x11_w3mimg.o" -diff --git a/configure b/configure -index 4c1bc06..30edf21 100755 ---- a/configure -+++ b/configure -@@ -6927,7 +6927,7 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >= - $as_echo "#define USE_GTK2 1" >>confdefs.h - - IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" -- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" -+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" - elif test x"$have_gdkpixbuf" = xyes; then - $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h - diff --git a/debian/patches/050_autotools-config.patch b/debian/patches/050_autotools-config.patch deleted file mode 100644 index 0fc7591..0000000 --- a/debian/patches/050_autotools-config.patch +++ /dev/null @@ -1,2813 +0,0 @@ -Subject: Update config.guess and config.sub -From: Tatsuya Kinoshita <tats@debian.org> - -Updated with autotools-dev 20140911.1 - -Note that Debian package uses autotools-dev dh addon, -dh_autotools-dev_updateconfig and dh_autotools-dev_restoreconfig, -instead of this patch. - -diff --git a/config.guess b/config.guess -index 51fab47..1f5c50c 100755 ---- a/config.guess -+++ b/config.guess -@@ -1,13 +1,12 @@ - #! /bin/sh - # Attempt to guess a canonical system name. --# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, --# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -+# Copyright 1992-2014 Free Software Foundation, Inc. - --timestamp='2004-03-12' -+timestamp='2014-03-23' - - # This file 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 -+# the Free Software Foundation; either version 3 of the License, or - # (at your option) any later version. - # - # This program is distributed in the hope that it will be useful, but -@@ -16,24 +15,22 @@ timestamp='2004-03-12' - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with this program; if not, write to the Free Software --# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+# along with this program; if not, see <http://www.gnu.org/licenses/>. - # - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a - # configuration script generated by Autoconf, you may include it under --# the same distribution terms that you use for the rest of that program. -- --# Originally written by Per Bothner <per@bothner.com>. --# Please send patches to <config-patches@gnu.org>. Submit a context --# diff and a properly formatted ChangeLog entry. -+# the same distribution terms that you use for the rest of that -+# program. This Exception is an additional permission under section 7 -+# of the GNU General Public License, version 3 ("GPLv3"). -+# -+# Originally written by Per Bothner. - # --# This script attempts to guess a canonical system name similar to --# config.sub. If it succeeds, it prints the system name on stdout, and --# exits with 0. Otherwise, it exits with 1. -+# You can get the latest version of this script from: -+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - # --# The plan is that this can be called by configure scripts if you --# don't specify an explicit build system type. -+# Please send patches with a ChangeLog entry to config-patches@gnu.org. -+ - - me=`echo "$0" | sed -e 's,.*/,,'` - -@@ -53,8 +50,7 @@ version="\ - GNU config.guess ($timestamp) - - Originally written by Per Bothner. --Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 --Free Software Foundation, Inc. -+Copyright 1992-2014 Free Software Foundation, Inc. - - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -@@ -66,11 +62,11 @@ Try \`$me --help' for more information." - while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) -- echo "$timestamp" ; exit 0 ;; -+ echo "$timestamp" ; exit ;; - --version | -v ) -- echo "$version" ; exit 0 ;; -+ echo "$version" ; exit ;; - --help | --h* | -h ) -- echo "$usage"; exit 0 ;; -+ echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. -@@ -104,7 +100,7 @@ set_cc_for_build=' - trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; - trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; - : ${TMPDIR=/tmp} ; -- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || -+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -@@ -123,7 +119,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; --esac ;' -+esac ; set_cc_for_build= ;' - - # This is needed to find uname on a Pyramid OSx when run in the BSD universe. - # (ghazi@noc.rutgers.edu 1994-08-24) -@@ -136,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown - UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown - UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -+case "${UNAME_SYSTEM}" in -+Linux|GNU|GNU/*) -+ # If the system lacks a compiler, then just pick glibc. -+ # We could probably try harder. -+ LIBC=gnu -+ -+ eval $set_cc_for_build -+ cat <<-EOF > $dummy.c -+ #include <features.h> -+ #if defined(__UCLIBC__) -+ LIBC=uclibc -+ #elif defined(__dietlibc__) -+ LIBC=dietlibc -+ #else -+ LIBC=gnu -+ #endif -+ EOF -+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` -+ ;; -+esac -+ - # Note: order is significant - the case branches are not exclusive. - - case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or -- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, -+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward -@@ -158,6 +175,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; -+ sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched -@@ -166,7 +184,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ -- | grep __ELF__ >/dev/null -+ | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? -@@ -176,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - fi - ;; - *) -- os=netbsd -+ os=netbsd - ;; - esac - # The OS release -@@ -196,71 +214,34 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" -- exit 0 ;; -- amd64:OpenBSD:*:*) -- echo x86_64-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- amiga:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- arc:OpenBSD:*:*) -- echo mipsel-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- cats:OpenBSD:*:*) -- echo arm-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- hp300:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- mac68k:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- macppc:OpenBSD:*:*) -- echo powerpc-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- mvme68k:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- mvme88k:OpenBSD:*:*) -- echo m88k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- mvmeppc:OpenBSD:*:*) -- echo powerpc-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- pegasos:OpenBSD:*:*) -- echo powerpc-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- pmax:OpenBSD:*:*) -- echo mipsel-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- sgi:OpenBSD:*:*) -- echo mipseb-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- sun3:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- wgrisc:OpenBSD:*:*) -- echo mipsel-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; -+ *:Bitrig:*:*) -+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` -+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} -+ exit ;; - *:OpenBSD:*:*) -- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` -+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} -+ exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; -+ *:SolidBSD:*:*) -+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} -+ exit ;; - macppc:MirBSD:*:*) -- echo powerppc-unknown-mirbsd${UNAME_RELEASE} -- exit 0 ;; -+ echo powerpc-unknown-mirbsd${UNAME_RELEASE} -+ exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) -- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` -+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on -@@ -306,40 +287,46 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -- exit 0 ;; -- Alpha*:OpenVMS:*:*) -- echo alpha-hp-vms -- exit 0 ;; -+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code. -+ exitcode=$? -+ trap '' 0 -+ exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix -- exit 0 ;; -+ exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 -- exit 0 ;; -+ exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 -- exit 0;; -+ exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos -- exit 0 ;; -+ exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos -- exit 0 ;; -+ exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition -- exit 0 ;; -+ exit ;; -+ *:z/VM:*:*) -+ echo s390-ibm-zvmoe -+ exit ;; - *:OS400:*:*) -- echo powerpc-ibm-os400 -- exit 0 ;; -+ echo powerpc-ibm-os400 -+ exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} -- exit 0;; -+ exit ;; -+ arm*:riscos:*:*|arm*:RISCOS:*:*) -+ echo arm-unknown-riscos -+ exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp -- exit 0;; -+ exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then -@@ -347,32 +334,51 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - else - echo pyramid-pyramid-bsd - fi -- exit 0 ;; -+ exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 -- exit 0 ;; -+ exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 -- exit 0 ;; -- DRS?6000:UNIX_SV:4.2*:7*) -+ exit ;; -+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in -- sparc) echo sparc-icl-nx7 && exit 0 ;; -+ sparc) echo sparc-icl-nx7; exit ;; - esac ;; -+ s390x:SunOS:*:*) -+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -+ exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -+ exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -- i86pc:SunOS:5.*:*) -- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -+ exit ;; -+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) -+ echo i386-pc-auroraux${UNAME_RELEASE} -+ exit ;; -+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) -+ eval $set_cc_for_build -+ SUN_ARCH="i386" -+ # If there is a compiler, see if it is configured for 64-bit objects. -+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. -+ # This test works for both compilers. -+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then -+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ -+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ -+ grep IS_64BIT_ARCH >/dev/null -+ then -+ SUN_ARCH="x86_64" -+ fi -+ fi -+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -+ exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -+ exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) -@@ -381,10 +387,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` -- exit 0 ;; -+ exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 -@@ -396,10 +402,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac -- exit 0 ;; -+ exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor -@@ -409,41 +415,41 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) -- echo m68k-atari-mint${UNAME_RELEASE} -- exit 0 ;; -+ echo m68k-atari-mint${UNAME_RELEASE} -+ exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) -- echo m68k-atari-mint${UNAME_RELEASE} -- exit 0 ;; -+ echo m68k-atari-mint${UNAME_RELEASE} -+ exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) -- echo m68k-milan-mint${UNAME_RELEASE} -- exit 0 ;; -+ echo m68k-milan-mint${UNAME_RELEASE} -+ exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) -- echo m68k-hades-mint${UNAME_RELEASE} -- exit 0 ;; -+ echo m68k-hades-mint${UNAME_RELEASE} -+ exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) -- echo m68k-unknown-mint${UNAME_RELEASE} -- exit 0 ;; -+ echo m68k-unknown-mint${UNAME_RELEASE} -+ exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 -- exit 0 ;; -+ exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -@@ -467,35 +473,36 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - exit (-1); - } - EOF -- $CC_FOR_BUILD -o $dummy $dummy.c \ -- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ -- && exit 0 -+ $CC_FOR_BUILD -o $dummy $dummy.c && -+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && -+ SYSTEM_NAME=`$dummy $dummyarg` && -+ { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax -- exit 0 ;; -+ exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax -- exit 0 ;; -+ exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax -- exit 0 ;; -+ exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix -- exit 0 ;; -+ exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 -- exit 0 ;; -+ exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 -- exit 0 ;; -+ exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 -- exit 0 ;; -+ exit ;; - AViiON:dgux:*:*) -- # DG/UX returns AViiON for all architectures -- UNAME_PROCESSOR=`/usr/bin/uname -p` -+ # DG/UX returns AViiON for all architectures -+ UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ -@@ -508,29 +515,29 @@ EOF - else - echo i586-dg-dgux${UNAME_RELEASE} - fi -- exit 0 ;; -+ exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 -- exit 0 ;; -+ exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 -- exit 0 ;; -+ exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 -- exit 0 ;; -+ exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd -- exit 0 ;; -+ exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` -- exit 0 ;; -+ exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. -- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id -- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' -+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id -+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix -- exit 0 ;; -+ exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` -@@ -538,7 +545,7 @@ EOF - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} -- exit 0 ;; -+ exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build -@@ -553,15 +560,19 @@ EOF - exit(0); - } - EOF -- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 -- echo rs6000-ibm-aix3.2.5 -+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` -+ then -+ echo "$SYSTEM_NAME" -+ else -+ echo rs6000-ibm-aix3.2.5 -+ fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi -- exit 0 ;; -- *:AIX:*:[45]) -+ exit ;; -+ *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 -@@ -574,28 +585,28 @@ EOF - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} -- exit 0 ;; -+ exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix -- exit 0 ;; -+ exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 -- exit 0 ;; -+ exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to -- exit 0 ;; # report: romp-ibm BSD 4.3 -+ exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx -- exit 0 ;; -+ exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 -- exit 0 ;; -+ exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd -- exit 0 ;; -+ exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 -- exit 0 ;; -+ exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in -@@ -604,52 +615,52 @@ EOF - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` -- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` -- case "${sc_cpu_version}" in -- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 -- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 -- 532) # CPU_PA_RISC2_0 -- case "${sc_kernel_bits}" in -- 32) HP_ARCH="hppa2.0n" ;; -- 64) HP_ARCH="hppa2.0w" ;; -+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` -+ case "${sc_cpu_version}" in -+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 -+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 -+ 532) # CPU_PA_RISC2_0 -+ case "${sc_kernel_bits}" in -+ 32) HP_ARCH="hppa2.0n" ;; -+ 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 -- esac ;; -- esac -+ esac ;; -+ esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build -- sed 's/^ //' << EOF >$dummy.c -+ sed 's/^ //' << EOF >$dummy.c - -- #define _HPUX_SOURCE -- #include <stdlib.h> -- #include <unistd.h> -+ #define _HPUX_SOURCE -+ #include <stdlib.h> -+ #include <unistd.h> - -- int main () -- { -- #if defined(_SC_KERNEL_BITS) -- long bits = sysconf(_SC_KERNEL_BITS); -- #endif -- long cpu = sysconf (_SC_CPU_VERSION); -+ int main () -+ { -+ #if defined(_SC_KERNEL_BITS) -+ long bits = sysconf(_SC_KERNEL_BITS); -+ #endif -+ long cpu = sysconf (_SC_CPU_VERSION); - -- switch (cpu) -- { -- case CPU_PA_RISC1_0: puts ("hppa1.0"); break; -- case CPU_PA_RISC1_1: puts ("hppa1.1"); break; -- case CPU_PA_RISC2_0: -- #if defined(_SC_KERNEL_BITS) -- switch (bits) -- { -- case 64: puts ("hppa2.0w"); break; -- case 32: puts ("hppa2.0n"); break; -- default: puts ("hppa2.0"); break; -- } break; -- #else /* !defined(_SC_KERNEL_BITS) */ -- puts ("hppa2.0"); break; -- #endif -- default: puts ("hppa1.0"); break; -- } -- exit (0); -- } -+ switch (cpu) -+ { -+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; -+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; -+ case CPU_PA_RISC2_0: -+ #if defined(_SC_KERNEL_BITS) -+ switch (bits) -+ { -+ case 64: puts ("hppa2.0w"); break; -+ case 32: puts ("hppa2.0n"); break; -+ default: puts ("hppa2.0"); break; -+ } break; -+ #else /* !defined(_SC_KERNEL_BITS) */ -+ puts ("hppa2.0"); break; -+ #endif -+ default: puts ("hppa1.0"); break; -+ } -+ exit (0); -+ } - EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa -@@ -657,9 +668,19 @@ EOF - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then -- # avoid double evaluation of $set_cc_for_build -- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build -- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null -+ eval $set_cc_for_build -+ -+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating -+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler -+ # generating 64-bit code. GNU and HP use different nomenclature: -+ # -+ # $ CC_FOR_BUILD=cc ./config.guess -+ # => hppa2.0w-hp-hpux11.23 -+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess -+ # => hppa64-hp-hpux11.23 -+ -+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | -+ grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else -@@ -667,11 +688,11 @@ EOF - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} -- exit 0 ;; -+ exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} -- exit 0 ;; -+ exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -@@ -699,340 +720,345 @@ EOF - exit (0); - } - EOF -- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 -+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && -+ { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 -- exit 0 ;; -+ exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd -- exit 0 ;; -+ exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd -- exit 0 ;; -+ exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix -- exit 0 ;; -+ exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf -- exit 0 ;; -+ exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf -- exit 0 ;; -+ exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi -- exit 0 ;; -+ exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites -- exit 0 ;; -+ exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd -- exit 0 ;; -+ exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi -- exit 0 ;; -+ exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd -- exit 0 ;; -+ exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd -- exit 0 ;; -+ exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd -- exit 0 ;; -+ exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - *:UNICOS/mp:*:*) -- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -+ exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` -- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -- exit 0 ;; -+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` -+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -+ exit ;; - 5000:UNIX_System_V:4.*:*) -- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` -- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -- exit 0 ;; -+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` -+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -+ exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:FreeBSD:*:*) -- # Determine whether the default compiler uses glibc. -- eval $set_cc_for_build -- sed 's/^ //' << EOF >$dummy.c -- #include <features.h> -- #if __GLIBC__ >= 2 -- LIBC=gnu -- #else -- LIBC= -- #endif --EOF -- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` -- # GNU/KFreeBSD systems have a "k" prefix to indicate we are using -- # FreeBSD's kernel, but not the complete OS. -- case ${LIBC} in gnu) kernel_only='k' ;; esac -- echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} -- exit 0 ;; -+ UNAME_PROCESSOR=`/usr/bin/uname -p` -+ case ${UNAME_PROCESSOR} in -+ amd64) -+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -+ *) -+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -+ esac -+ exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin -- exit 0 ;; -- i*:MINGW*:*) -+ exit ;; -+ *:MINGW64*:*) -+ echo ${UNAME_MACHINE}-pc-mingw64 -+ exit ;; -+ *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 -- exit 0 ;; -+ exit ;; -+ *:MSYS*:*) -+ echo ${UNAME_MACHINE}-pc-msys -+ exit ;; -+ i*:windows32*:*) -+ # uname -m includes "-pc" on this system. -+ echo ${UNAME_MACHINE}-mingw32 -+ exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 -- exit 0 ;; -- x86:Interix*:[34]*) -- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' -- exit 0 ;; -+ exit ;; -+ *:Interix*:*) -+ case ${UNAME_MACHINE} in -+ x86) -+ echo i586-pc-interix${UNAME_RELEASE} -+ exit ;; -+ authenticamd | genuineintel | EM64T) -+ echo x86_64-unknown-interix${UNAME_RELEASE} -+ exit ;; -+ IA64) -+ echo ia64-unknown-interix${UNAME_RELEASE} -+ exit ;; -+ esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks -- exit 0 ;; -+ exit ;; -+ 8664:Windows_NT:*) -+ echo x86_64-pc-mks -+ exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix -- exit 0 ;; -+ exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin -- exit 0 ;; -+ exit ;; -+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) -+ echo x86_64-unknown-cygwin -+ exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin -- exit 0 ;; -+ exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -+ exit ;; - *:GNU:*:*) - # the GNU system -- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` -- exit 0 ;; -+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` -+ exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland -- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu -- exit 0 ;; -+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} -+ exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix -- exit 0 ;; -+ exit ;; -+ aarch64:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ aarch64_be:Linux:*:*) -+ UNAME_MACHINE=aarch64_be -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ alpha:Linux:*:*) -+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in -+ EV5) UNAME_MACHINE=alphaev5 ;; -+ EV56) UNAME_MACHINE=alphaev56 ;; -+ PCA56) UNAME_MACHINE=alphapca56 ;; -+ PCA57) UNAME_MACHINE=alphapca56 ;; -+ EV6) UNAME_MACHINE=alphaev6 ;; -+ EV67) UNAME_MACHINE=alphaev67 ;; -+ EV68*) UNAME_MACHINE=alphaev68 ;; -+ esac -+ objdump --private-headers /bin/sh | grep -q ld.so.1 -+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ arc:Linux:*:* | arceb:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; - arm*:Linux:*:*) -- echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ eval $set_cc_for_build -+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ -+ | grep -q __ARM_EABI__ -+ then -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ else -+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ -+ | grep -q __ARM_PCS_VFP -+ then -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi -+ else -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf -+ fi -+ fi -+ exit ;; -+ avr32*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; - cris:Linux:*:*) -- echo cris-axis-linux-gnu -- exit 0 ;; -+ echo ${UNAME_MACHINE}-axis-linux-${LIBC} -+ exit ;; -+ crisv32:Linux:*:*) -+ echo ${UNAME_MACHINE}-axis-linux-${LIBC} -+ exit ;; -+ frv:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ hexagon:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ i*86:Linux:*:*) -+ echo ${UNAME_MACHINE}-pc-linux-${LIBC} -+ exit ;; - ia64:Linux:*:*) -- echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; - m32r*:Linux:*:*) -- echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; - m68*:Linux:*:*) -- echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -- mips:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU -- #undef mips -- #undef mipsel -+ #undef ${UNAME_MACHINE} -+ #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) -- CPU=mipsel -+ CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) -- CPU=mips -+ CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif - EOF -- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` -- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 -+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` -+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } - ;; -- mips64:Linux:*:*) -- eval $set_cc_for_build -- sed 's/^ //' << EOF >$dummy.c -- #undef CPU -- #undef mips64 -- #undef mips64el -- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) -- CPU=mips64el -- #else -- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) -- CPU=mips64 -- #else -- CPU= -- #endif -- #endif --EOF -- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` -- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 -- ;; -- ppc:Linux:*:*) -- echo powerpc-unknown-linux-gnu -- exit 0 ;; -- ppc64:Linux:*:*) -- echo powerpc64-unknown-linux-gnu -- exit 0 ;; -- alpha:Linux:*:*) -- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in -- EV5) UNAME_MACHINE=alphaev5 ;; -- EV56) UNAME_MACHINE=alphaev56 ;; -- PCA56) UNAME_MACHINE=alphapca56 ;; -- PCA57) UNAME_MACHINE=alphapca56 ;; -- EV6) UNAME_MACHINE=alphaev6 ;; -- EV67) UNAME_MACHINE=alphaev67 ;; -- EV68*) UNAME_MACHINE=alphaev68 ;; -- esac -- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null -- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi -- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} -- exit 0 ;; -+ openrisc*:Linux:*:*) -+ echo or1k-unknown-linux-${LIBC} -+ exit ;; -+ or32:Linux:*:* | or1k*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ padre:Linux:*:*) -+ echo sparc-unknown-linux-${LIBC} -+ exit ;; -+ parisc64:Linux:*:* | hppa64:Linux:*:*) -+ echo hppa64-unknown-linux-${LIBC} -+ exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in -- PA7*) echo hppa1.1-unknown-linux-gnu ;; -- PA8*) echo hppa2.0-unknown-linux-gnu ;; -- *) echo hppa-unknown-linux-gnu ;; -+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; -+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; -+ *) echo hppa-unknown-linux-${LIBC} ;; - esac -- exit 0 ;; -- parisc64:Linux:*:* | hppa64:Linux:*:*) -- echo hppa64-unknown-linux-gnu -- exit 0 ;; -+ exit ;; -+ ppc64:Linux:*:*) -+ echo powerpc64-unknown-linux-${LIBC} -+ exit ;; -+ ppc:Linux:*:*) -+ echo powerpc-unknown-linux-${LIBC} -+ exit ;; -+ ppc64le:Linux:*:*) -+ echo powerpc64le-unknown-linux-${LIBC} -+ exit ;; -+ ppcle:Linux:*:*) -+ echo powerpcle-unknown-linux-${LIBC} -+ exit ;; - s390:Linux:*:* | s390x:Linux:*:*) -- echo ${UNAME_MACHINE}-ibm-linux -- exit 0 ;; -+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC} -+ exit ;; - sh64*:Linux:*:*) -- echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; - sh*:Linux:*:*) -- echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) -- echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ tile*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ vax:Linux:*:*) -+ echo ${UNAME_MACHINE}-dec-linux-${LIBC} -+ exit ;; - x86_64:Linux:*:*) -- echo x86_64-unknown-linux-gnu -- exit 0 ;; -- i*86:Linux:*:*) -- # The BFD linker knows what the default object file format is, so -- # first see if it will tell us. cd to the root directory to prevent -- # problems with other programs or directories called `ld' in the path. -- # Set LC_ALL=C to ensure ld outputs messages in English. -- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ -- | sed -ne '/supported targets:/!d -- s/[ ][ ]*/ /g -- s/.*supported targets: *// -- s/ .*// -- p'` -- case "$ld_supported_targets" in -- elf32-i386) -- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" -- ;; -- a.out-i386-linux) -- echo "${UNAME_MACHINE}-pc-linux-gnuaout" -- exit 0 ;; -- coff-i386) -- echo "${UNAME_MACHINE}-pc-linux-gnucoff" -- exit 0 ;; -- "") -- # Either a pre-BFD a.out linker (linux-gnuoldld) or -- # one that does not give us useful --help. -- echo "${UNAME_MACHINE}-pc-linux-gnuoldld" -- exit 0 ;; -- esac -- # Determine whether the default compiler is a.out or elf -- eval $set_cc_for_build -- sed 's/^ //' << EOF >$dummy.c -- #include <features.h> -- #ifdef __ELF__ -- # ifdef __GLIBC__ -- # if __GLIBC__ >= 2 -- LIBC=gnu -- # else -- LIBC=gnulibc1 -- # endif -- # else -- LIBC=gnulibc1 -- # endif -- #else -- #ifdef __INTEL_COMPILER -- LIBC=gnu -- #else -- LIBC=gnuaout -- #endif -- #endif -- #ifdef __dietlibc__ -- LIBC=dietlibc -- #endif --EOF -- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` -- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 -- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 -- ;; -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ xtensa*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 -- exit 0 ;; -+ exit ;; - i*86:UNIX_SV:4.2MP:2.*) -- # Unixware is an offshoot of SVR4, but it has its own version -- # number series starting with 2... -- # I am not positive that other SVR4 systems won't match this, -+ # Unixware is an offshoot of SVR4, but it has its own version -+ # number series starting with 2... -+ # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. -- # Use sysv4.2uw... so that sysv4* matches it. -+ # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} -- exit 0 ;; -+ exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx -- exit 0 ;; -+ exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop -- exit 0 ;; -+ exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos -- exit 0 ;; -- i*86:syllable:*:*) -+ exit ;; -+ i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable -- exit 0 ;; -- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) -+ exit ;; -+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp -- exit 0 ;; -+ exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then -@@ -1040,15 +1066,16 @@ EOF - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi -- exit 0 ;; -- i*86:*:5:[78]*) -+ exit ;; -+ i*86:*:5:[678]*) -+ # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} -- exit 0 ;; -+ exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` -@@ -1066,73 +1093,86 @@ EOF - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi -- exit 0 ;; -+ exit ;; - pc:*:*:*) - # Left here for compatibility: -- # uname -m prints for DJGPP always 'pc', but it prints nothing about -- # the processor, so we play safe by assuming i386. -- echo i386-pc-msdosdjgpp -- exit 0 ;; -+ # uname -m prints for DJGPP always 'pc', but it prints nothing about -+ # the processor, so we play safe by assuming i586. -+ # Note: whatever this is, it MUST be the same as what config.sub -+ # prints for the "djgpp" host, or else GDB configury will decide that -+ # this is a cross-build. -+ echo i586-pc-msdosdjgpp -+ exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 -- exit 0 ;; -+ exit ;; - paragon:*:*:*) - echo i860-intel-osf1 -- exit 0 ;; -+ exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi -- exit 0 ;; -+ exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv -- exit 0 ;; -+ exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv -- exit 0 ;; -+ exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix -- exit 0 ;; -- M68*:*:R3V[567]*:*) -- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; -- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) -+ exit ;; -+ M68*:*:R3V[5678]*:*) -+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; -+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -- && echo i486-ncr-sysv4.3${OS_REL} && exit 0 -+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ -- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; -+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) -- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -- && echo i486-ncr-sysv4 && exit 0 ;; -+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -+ && { echo i486-ncr-sysv4; exit; } ;; -+ NCR*:*:4.2:* | MPRAS*:*:4.2:*) -+ OS_REL='.3' -+ test -r /etc/.relid \ -+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` -+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } -+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ -+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } -+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ -+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 -- exit 0 ;; -+ exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) -+ exit ;; -+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 -- exit 0 ;; -+ exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 -- exit 0 ;; -+ exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` -@@ -1140,68 +1180,109 @@ EOF - else - echo ns32k-sni-sysv - fi -- exit 0 ;; -- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort -- # says <Richard.M.Bartel@ccMail.Census.GOV> -- echo i586-unisys-sysv4 -- exit 0 ;; -+ exit ;; -+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort -+ # says <Richard.M.Bartel@ccMail.Census.GOV> -+ echo i586-unisys-sysv4 -+ exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes <hewes@openmarket.com>. - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 -- exit 0 ;; -+ exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 -- exit 0 ;; -+ exit ;; -+ i*86:VOS:*:*) -+ # From Paul.Green@stratus.com. -+ echo ${UNAME_MACHINE}-stratus-vos -+ exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos -- exit 0 ;; -+ exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 -- exit 0 ;; -+ exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then -- echo mips-nec-sysv${UNAME_RELEASE} -+ echo mips-nec-sysv${UNAME_RELEASE} - else -- echo mips-unknown-sysv${UNAME_RELEASE} -+ echo mips-unknown-sysv${UNAME_RELEASE} - fi -- exit 0 ;; -+ exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos -- exit 0 ;; -+ exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos -- exit 0 ;; -+ exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos -- exit 0 ;; -+ exit ;; -+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible. -+ echo i586-pc-haiku -+ exit ;; -+ x86_64:Haiku:*:*) -+ echo x86_64-unknown-haiku -+ exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; -+ SX-7:SUPER-UX:*:*) -+ echo sx7-nec-superux${UNAME_RELEASE} -+ exit ;; -+ SX-8:SUPER-UX:*:*) -+ echo sx8-nec-superux${UNAME_RELEASE} -+ exit ;; -+ SX-8R:SUPER-UX:*:*) -+ echo sx8r-nec-superux${UNAME_RELEASE} -+ exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:Darwin:*:*) -- case `uname -p` in -- *86) UNAME_PROCESSOR=i686 ;; -- powerpc) UNAME_PROCESSOR=powerpc ;; -- esac -+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown -+ eval $set_cc_for_build -+ if test "$UNAME_PROCESSOR" = unknown ; then -+ UNAME_PROCESSOR=powerpc -+ fi -+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then -+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then -+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ -+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ -+ grep IS_64BIT_ARCH >/dev/null -+ then -+ case $UNAME_PROCESSOR in -+ i386) UNAME_PROCESSOR=x86_64 ;; -+ powerpc) UNAME_PROCESSOR=powerpc64 ;; -+ esac -+ fi -+ fi -+ elif test "$UNAME_PROCESSOR" = i386 ; then -+ # Avoid executing cc on OS X 10.9, as it ships with a stub -+ # that puts up a graphical alert prompting to install -+ # developer tools. Any system running Mac OS X 10.7 or -+ # later (Darwin 11 and later) is required to have a 64-bit -+ # processor. This is not true of the ARM version of Darwin -+ # that Apple uses in portable devices. -+ UNAME_PROCESSOR=x86_64 -+ fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then -@@ -1209,22 +1290,28 @@ EOF - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:QNX:*:4*) - echo i386-pc-qnx -- exit 0 ;; -+ exit ;; -+ NEO-?:NONSTOP_KERNEL:*:*) -+ echo neo-tandem-nsk${UNAME_RELEASE} -+ exit ;; -+ NSE-*:NONSTOP_KERNEL:*:*) -+ echo nse-tandem-nsk${UNAME_RELEASE} -+ exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux -- exit 0 ;; -+ exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv -- exit 0 ;; -+ exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 -@@ -1235,183 +1322,55 @@ EOF - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 -- exit 0 ;; -+ exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 -- exit 0 ;; -+ exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex -- exit 0 ;; -+ exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 -- exit 0 ;; -+ exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 -- exit 0 ;; -+ exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 -- exit 0 ;; -+ exit ;; - *:ITS:*:*) - echo pdp10-unknown-its -- exit 0 ;; -+ exit ;; - SEI:*:*:SEIUX) -- echo mips-sei-seiux${UNAME_RELEASE} -- exit 0 ;; -+ echo mips-sei-seiux${UNAME_RELEASE} -+ exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` -- exit 0 ;; -+ exit ;; -+ *:*VMS:*:*) -+ UNAME_MACHINE=`(uname -p) 2>/dev/null` -+ case "${UNAME_MACHINE}" in -+ A*) echo alpha-dec-vms ; exit ;; -+ I*) echo ia64-dec-vms ; exit ;; -+ V*) echo vax-dec-vms ; exit ;; -+ esac ;; -+ *:XENIX:*:SysV) -+ echo i386-pc-xenix -+ exit ;; -+ i*86:skyos:*:*) -+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' -+ exit ;; -+ i*86:rdos:*:*) -+ echo ${UNAME_MACHINE}-pc-rdos -+ exit ;; -+ i*86:AROS:*:*) -+ echo ${UNAME_MACHINE}-pc-aros -+ exit ;; -+ x86_64:VMkernel:*:*) -+ echo ${UNAME_MACHINE}-unknown-esx -+ exit ;; - esac - --#echo '(No uname command or uname output not recognized.)' 1>&2 --#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 -- --eval $set_cc_for_build --cat >$dummy.c <<EOF --#ifdef _SEQUENT_ --# include <sys/types.h> --# include <sys/utsname.h> --#endif --main () --{ --#if defined (sony) --#if defined (MIPSEB) -- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, -- I don't know.... */ -- printf ("mips-sony-bsd\n"); exit (0); --#else --#include <sys/param.h> -- printf ("m68k-sony-newsos%s\n", --#ifdef NEWSOS4 -- "4" --#else -- "" --#endif -- ); exit (0); --#endif --#endif -- --#if defined (__arm) && defined (__acorn) && defined (__unix) -- printf ("arm-acorn-riscix"); exit (0); --#endif -- --#if defined (hp300) && !defined (hpux) -- printf ("m68k-hp-bsd\n"); exit (0); --#endif -- --#if defined (NeXT) --#if !defined (__ARCHITECTURE__) --#define __ARCHITECTURE__ "m68k" --#endif -- int version; -- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; -- if (version < 4) -- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); -- else -- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); -- exit (0); --#endif -- --#if defined (MULTIMAX) || defined (n16) --#if defined (UMAXV) -- printf ("ns32k-encore-sysv\n"); exit (0); --#else --#if defined (CMU) -- printf ("ns32k-encore-mach\n"); exit (0); --#else -- printf ("ns32k-encore-bsd\n"); exit (0); --#endif --#endif --#endif -- --#if defined (__386BSD__) -- printf ("i386-pc-bsd\n"); exit (0); --#endif -- --#if defined (sequent) --#if defined (i386) -- printf ("i386-sequent-dynix\n"); exit (0); --#endif --#if defined (ns32000) -- printf ("ns32k-sequent-dynix\n"); exit (0); --#endif --#endif -- --#if defined (_SEQUENT_) -- struct utsname un; -- -- uname(&un); -- -- if (strncmp(un.version, "V2", 2) == 0) { -- printf ("i386-sequent-ptx2\n"); exit (0); -- } -- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ -- printf ("i386-sequent-ptx1\n"); exit (0); -- } -- printf ("i386-sequent-ptx\n"); exit (0); -- --#endif -- --#if defined (vax) --# if !defined (ultrix) --# include <sys/param.h> --# if defined (BSD) --# if BSD == 43 -- printf ("vax-dec-bsd4.3\n"); exit (0); --# else --# if BSD == 199006 -- printf ("vax-dec-bsd4.3reno\n"); exit (0); --# else -- printf ("vax-dec-bsd\n"); exit (0); --# endif --# endif --# else -- printf ("vax-dec-bsd\n"); exit (0); --# endif --# else -- printf ("vax-dec-ultrix\n"); exit (0); --# endif --#endif -- --#if defined (alliant) && defined (i860) -- printf ("i860-alliant-bsd\n"); exit (0); --#endif -- -- exit (1); --} --EOF -- --$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 -- --# Apollos put the system type in the environment. -- --test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } -- --# Convex versions that predate uname can use getsysinfo(1) -- --if [ -x /usr/convex/getsysinfo ] --then -- case `getsysinfo -f cpu_type` in -- c1*) -- echo c1-convex-bsd -- exit 0 ;; -- c2*) -- if getsysinfo -f scalar_acc -- then echo c32-convex-bsd -- else echo c2-convex-bsd -- fi -- exit 0 ;; -- c34*) -- echo c34-convex-bsd -- exit 0 ;; -- c38*) -- echo c38-convex-bsd -- exit 0 ;; -- c4*) -- echo c4-convex-bsd -- exit 0 ;; -- esac --fi -- - cat >&2 <<EOF - $0: unable to guess system type - -@@ -1419,7 +1378,9 @@ This script, last modified $timestamp, has failed to recognize - the operating system you are using. It is advised that you - download the most up to date version of the config scripts from - -- ftp://ftp.gnu.org/pub/gnu/config/ -+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD -+and -+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - - If the version you run ($0) is already up to date, please - send the following data and any information you think might be -diff --git a/config.sub b/config.sub -index ba33103..bba4efb 100755 ---- a/config.sub -+++ b/config.sub -@@ -1,42 +1,40 @@ - #! /bin/sh - # Configuration validation subroutine script. --# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, --# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -+# Copyright 1992-2014 Free Software Foundation, Inc. - --timestamp='2004-03-12' -+timestamp='2014-09-11' - --# This file is (in principle) common to ALL GNU software. --# The presence of a machine in this file suggests that SOME GNU software --# can handle that machine. It does not imply ALL GNU software can. --# --# This file 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 -+# This file 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 3 of the License, or - # (at your option) any later version. - # --# This program 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. -+# This program 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, write to the Free Software --# Foundation, Inc., 59 Temple Place - Suite 330, --# Boston, MA 02111-1307, USA. -- -+# along with this program; if not, see <http://www.gnu.org/licenses/>. -+# - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a - # configuration script generated by Autoconf, you may include it under --# the same distribution terms that you use for the rest of that program. -+# the same distribution terms that you use for the rest of that -+# program. This Exception is an additional permission under section 7 -+# of the GNU General Public License, version 3 ("GPLv3"). - --# Please send patches to <config-patches@gnu.org>. Submit a context --# diff and a properly formatted ChangeLog entry. -+ -+# Please send patches with a ChangeLog entry to config-patches@gnu.org. - # - # Configuration subroutine to validate and canonicalize a configuration type. - # Supply the specified configuration type as an argument. - # If it is invalid, we print an error message on stderr and exit with code 1. - # Otherwise, we print the canonical config type on stdout and succeed. - -+# You can get the latest version of this script from: -+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD -+ - # This file is supposed to be the same for all GNU packages - # and recognize all the CPU types, system types and aliases - # that are meaningful with *any* GNU software. -@@ -70,8 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>." - version="\ - GNU config.sub ($timestamp) - --Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 --Free Software Foundation, Inc. -+Copyright 1992-2014 Free Software Foundation, Inc. - - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -@@ -83,11 +80,11 @@ Try \`$me --help' for more information." - while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) -- echo "$timestamp" ; exit 0 ;; -+ echo "$timestamp" ; exit ;; - --version | -v ) -- echo "$version" ; exit 0 ;; -+ echo "$version" ; exit ;; - --help | --h* | -h ) -- echo "$usage"; exit 0 ;; -+ echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. -@@ -99,7 +96,7 @@ while test $# -gt 0 ; do - *local*) - # First pass through any local machine types. - echo $1 -- exit 0;; -+ exit ;; - - * ) - break ;; -@@ -118,11 +115,18 @@ esac - # Here we must recognize all the valid KERNEL-OS combinations. - maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` - case $maybe_os in -- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ -- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) -+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ -+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ -+ knetbsd*-gnu* | netbsd*-gnu* | \ -+ kopensolaris*-gnu* | \ -+ storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; -+ android-linux) -+ os=-linux-android -+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown -+ ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] -@@ -145,10 +149,13 @@ case $os in - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -- -apple | -axis) -+ -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; -+ -bluegene*) -+ os=-cnk -+ ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 -@@ -163,13 +170,17 @@ case $os in - os=-chorusos - basic_machine=$1 - ;; -- -chorusrdb) -- os=-chorusrdb -+ -chorusrdb) -+ os=-chorusrdb - basic_machine=$1 -- ;; -+ ;; - -hiux*) - os=-hiuxwe2 - ;; -+ -sco6) -+ os=-sco5v6 -+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -+ ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -@@ -186,6 +197,10 @@ case $os in - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; -+ -sco5v6*) -+ # Don't forget version if it is 3.2v4 or newer. -+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -+ ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -@@ -203,6 +218,12 @@ case $os in - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; -+ -lynx*178) -+ os=-lynxos178 -+ ;; -+ -lynx*5) -+ os=-lynxos5 -+ ;; - -lynx*) - os=-lynxos - ;; -@@ -227,57 +248,109 @@ case $basic_machine in - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ -+ | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ -- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ -- | c4x | clipper \ -+ | arc | arceb \ -+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ -+ | avr | avr32 \ -+ | be32 | be64 \ -+ | bfin \ -+ | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ -- | fr30 | frv \ -+ | epiphany \ -+ | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ -+ | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ -- | m32r | m32rle | m68000 | m68k | m88k | mcore \ -+ | k1om \ -+ | le32 | le64 \ -+ | lm32 \ -+ | m32c | m32r | m32rle | m68000 | m68k | m88k \ -+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ -- | mips64vr | mips64vrel \ -+ | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ -+ | mips64r5900 | mips64r5900el \ -+ | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ -+ | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ -+ | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ -+ | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ -+ | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ -+ | moxie \ -+ | mt \ - | msp430 \ -+ | nds32 | nds32le | nds32be \ -+ | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ -- | openrisc | or32 \ -+ | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ -- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ -+ | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ -- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ -+ | riscv32 | riscv64 \ -+ | rl78 | rx \ -+ | score \ -+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ -- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ -- | strongarm \ -- | tahoe | thumb | tic4x | tic80 | tron \ -- | v850 | v850e \ -+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ -+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ -+ | spu \ -+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ -+ | ubicom32 \ -+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | we32k \ -- | x86 | xscale | xstormy16 | xtensa \ -- | z8k) -+ | x86 | xc16x | xstormy16 | xtensa \ -+ | z8k | z80) - basic_machine=$basic_machine-unknown - ;; -- m6811 | m68hc11 | m6812 | m68hc12) -- # Motorola 68HC11/12. -+ c54x) -+ basic_machine=tic54x-unknown -+ ;; -+ c55x) -+ basic_machine=tic55x-unknown -+ ;; -+ c6x) -+ basic_machine=tic6x-unknown -+ ;; -+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; -+ ms1) -+ basic_machine=mt-unknown -+ ;; -+ -+ strongarm | thumb | xscale) -+ basic_machine=arm-unknown -+ ;; -+ xgate) -+ basic_machine=$basic_machine-unknown -+ os=-none -+ ;; -+ xscaleeb) -+ basic_machine=armeb-unknown -+ ;; -+ -+ xscaleel) -+ basic_machine=armel-unknown -+ ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and -@@ -293,59 +366,86 @@ case $basic_machine in - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ -+ | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ -- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ -+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ -- | avr-* \ -- | bs2000-* \ -- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ -- | clipper-* | cydra-* \ -+ | avr-* | avr32-* \ -+ | be32-* | be64-* \ -+ | bfin-* | bs2000-* \ -+ | c[123]* | c30-* | [cjt]90-* | c4x-* \ -+ | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ -- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ -+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ -+ | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ -- | m32r-* | m32rle-* \ -+ | k1om-* \ -+ | le32-* | le64-* \ -+ | lm32-* \ -+ | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ -- | m88110-* | m88k-* | mcore-* \ -+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ -+ | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ -- | mips64vr-* | mips64vrel-* \ -+ | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ -+ | mips64r5900-* | mips64r5900el-* \ -+ | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ -+ | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ -+ | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ -+ | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ -+ | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ -+ | mmix-* \ -+ | mt-* \ - | msp430-* \ -- | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ -+ | nds32-* | nds32le-* | nds32be-* \ -+ | nios-* | nios2-* | nios2eb-* | nios2el-* \ -+ | none-* | np1-* | ns16k-* | ns32k-* \ -+ | open8-* \ -+ | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ -- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ -+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ -- | romp-* | rs6000-* \ -- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ -+ | rl78-* | romp-* | rs6000-* | rx-* \ -+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ -- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ -- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ -- | tahoe-* | thumb-* \ -+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ -+ | sparclite-* \ -+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ -+ | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ -+ | tile*-* \ - | tron-* \ -- | v850-* | v850e-* | vax-* \ -+ | ubicom32-* \ -+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ -+ | vax-* \ - | we32k-* \ -- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ -- | xtensa-* \ -+ | x86-* | x86_64-* | xc16x-* | xps100-* \ -+ | xstormy16-* | xtensa*-* \ - | ymp-* \ -- | z8k-*) -+ | z8k-* | z80-*) -+ ;; -+ # Recognize the basic CPU types without company name, with glob match. -+ xtensa*) -+ basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. -@@ -363,7 +463,7 @@ case $basic_machine in - basic_machine=a29k-amd - os=-udi - ;; -- abacus) -+ abacus) - basic_machine=abacus-unknown - ;; - adobe68k) -@@ -409,6 +509,10 @@ case $basic_machine in - basic_machine=m68k-apollo - os=-bsd - ;; -+ aros) -+ basic_machine=i386-pc -+ os=-aros -+ ;; - aux) - basic_machine=m68k-apple - os=-aux -@@ -417,10 +521,35 @@ case $basic_machine in - basic_machine=ns32k-sequent - os=-dynix - ;; -+ blackfin) -+ basic_machine=bfin-unknown -+ os=-linux -+ ;; -+ blackfin-*) -+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` -+ os=-linux -+ ;; -+ bluegene*) -+ basic_machine=powerpc-ibm -+ os=-cnk -+ ;; -+ c54x-*) -+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` -+ ;; -+ c55x-*) -+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` -+ ;; -+ c6x-*) -+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` -+ ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; -+ cegcc) -+ basic_machine=arm-unknown -+ os=-cegcc -+ ;; - convex-c1) - basic_machine=c1-convex - os=-bsd -@@ -445,13 +574,20 @@ case $basic_machine in - basic_machine=j90-cray - os=-unicos - ;; -- cr16c) -- basic_machine=cr16c-unknown -+ craynv) -+ basic_machine=craynv-cray -+ os=-unicosmp -+ ;; -+ cr16 | cr16-*) -+ basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; -+ crisv32 | crisv32-* | etraxfs*) -+ basic_machine=crisv32-axis -+ ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; -@@ -481,6 +617,14 @@ case $basic_machine in - basic_machine=m88k-motorola - os=-sysv3 - ;; -+ dicos) -+ basic_machine=i686-pc -+ os=-dicos -+ ;; -+ djgpp) -+ basic_machine=i586-pc -+ os=-msdosdjgpp -+ ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx -@@ -592,7 +736,6 @@ case $basic_machine in - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; --# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 -@@ -631,6 +774,14 @@ case $basic_machine in - basic_machine=m68k-isi - os=-sysv - ;; -+ m68knommu) -+ basic_machine=m68k-unknown -+ os=-linux -+ ;; -+ m68knommu-*) -+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` -+ os=-linux -+ ;; - m88k-omron*) - basic_machine=m88k-omron - ;; -@@ -642,10 +793,21 @@ case $basic_machine in - basic_machine=ns32k-utek - os=-sysv - ;; -+ microblaze*) -+ basic_machine=microblaze-xilinx -+ ;; -+ mingw64) -+ basic_machine=x86_64-pc -+ os=-mingw64 -+ ;; - mingw32) -- basic_machine=i386-pc -+ basic_machine=i686-pc - os=-mingw32 - ;; -+ mingw32ce) -+ basic_machine=arm-unknown -+ os=-mingw32ce -+ ;; - miniframe) - basic_machine=m68000-convergent - ;; -@@ -659,10 +821,6 @@ case $basic_machine in - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; -- mmix*) -- basic_machine=mmix-knuth -- os=-mmixware -- ;; - monitor) - basic_machine=m68k-rom68k - os=-coff -@@ -671,14 +829,29 @@ case $basic_machine in - basic_machine=powerpc-unknown - os=-morphos - ;; -+ moxiebox) -+ basic_machine=moxie-unknown -+ os=-moxiebox -+ ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; -+ ms1-*) -+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` -+ ;; -+ msys) -+ basic_machine=i686-pc -+ os=-msys -+ ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; -+ nacl) -+ basic_machine=le32-unknown -+ os=-nacl -+ ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 -@@ -743,9 +916,11 @@ case $basic_machine in - np1) - basic_machine=np1-gould - ;; -- nv1) -- basic_machine=nv1-cray -- os=-unicosmp -+ neo-tandem) -+ basic_machine=neo-tandem -+ ;; -+ nse-tandem) -+ basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem -@@ -754,9 +929,8 @@ case $basic_machine in - basic_machine=hppa1.1-oki - os=-proelf - ;; -- or32 | or32-*) -+ openrisc | openrisc-*) - basic_machine=or32-unknown -- os=-coff - ;; - os400) - basic_machine=powerpc-ibm -@@ -778,6 +952,14 @@ case $basic_machine in - basic_machine=i860-intel - os=-osf - ;; -+ parisc) -+ basic_machine=hppa-unknown -+ os=-linux -+ ;; -+ parisc-*) -+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` -+ os=-linux -+ ;; - pbd) - basic_machine=sparc-tti - ;; -@@ -787,6 +969,12 @@ case $basic_machine in - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; -+ pc98) -+ basic_machine=i386-pc -+ ;; -+ pc98-*) -+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` -+ ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; -@@ -816,9 +1004,10 @@ case $basic_machine in - ;; - power) basic_machine=power-ibm - ;; -- ppc) basic_machine=powerpc-unknown -+ ppc | ppcbe) basic_machine=powerpc-unknown - ;; -- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` -+ ppc-* | ppcbe-*) -+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown -@@ -843,6 +1032,14 @@ case $basic_machine in - basic_machine=i586-unknown - os=-pw32 - ;; -+ rdos | rdos64) -+ basic_machine=x86_64-pc -+ os=-rdos -+ ;; -+ rdos32) -+ basic_machine=i386-pc -+ os=-rdos -+ ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff -@@ -869,6 +1066,10 @@ case $basic_machine in - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; -+ sde) -+ basic_machine=mipsisa32-sde -+ os=-elf -+ ;; - sei) - basic_machine=mips-sei - os=-seiux -@@ -880,6 +1081,9 @@ case $basic_machine in - basic_machine=sh-hitachi - os=-hms - ;; -+ sh5el) -+ basic_machine=sh5le-unknown -+ ;; - sh64) - basic_machine=sh64-unknown - ;; -@@ -901,6 +1105,9 @@ case $basic_machine in - basic_machine=i860-stratus - os=-sysv4 - ;; -+ strongarm-* | thumb-*) -+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` -+ ;; - sun2) - basic_machine=m68000-sun - ;; -@@ -957,17 +1164,9 @@ case $basic_machine in - basic_machine=t90-cray - os=-unicos - ;; -- tic54x | c54x*) -- basic_machine=tic54x-unknown -- os=-coff -- ;; -- tic55x | c55x*) -- basic_machine=tic55x-unknown -- os=-coff -- ;; -- tic6x | c6x*) -- basic_machine=tic6x-unknown -- os=-coff -+ tile*) -+ basic_machine=$basic_machine-unknown -+ os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown -@@ -1029,9 +1228,16 @@ case $basic_machine in - basic_machine=hppa1.1-winbond - os=-proelf - ;; -+ xbox) -+ basic_machine=i686-pc -+ os=-mingw32 -+ ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; -+ xscale-* | xscalee[bl]-*) -+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` -+ ;; - ymp) - basic_machine=ymp-cray - os=-unicos -@@ -1040,6 +1246,10 @@ case $basic_machine in - basic_machine=z8k-unknown - os=-sim - ;; -+ z80-*-coff) -+ basic_machine=z80-unknown -+ os=-sim -+ ;; - none) - basic_machine=none-none - os=-none -@@ -1059,6 +1269,9 @@ case $basic_machine in - romp) - basic_machine=romp-ibm - ;; -+ mmix) -+ basic_machine=mmix-knuth -+ ;; - rs6000) - basic_machine=rs6000-ibm - ;; -@@ -1075,13 +1288,10 @@ case $basic_machine in - we32k) - basic_machine=we32k-att - ;; -- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) -+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; -- sh64) -- basic_machine=sh64-unknown -- ;; -- sparc | sparcv8 | sparcv9 | sparcv9b) -+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) -@@ -1125,9 +1335,12 @@ esac - if [ x"$os" != x"" ] - then - case $os in -- # First match some system type aliases -- # that might get confused with valid system types. -+ # First match some system type aliases -+ # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. -+ -auroraux) -+ os=-auroraux -+ ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; -@@ -1148,26 +1361,31 @@ case $os in - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ -- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ -- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ -+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ -+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ -+ | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ -- | -aos* \ -+ | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ -- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ -+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ -+ | -bitrig* | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ -- | -chorusos* | -chorusrdb* \ -- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ -+ | -chorusos* | -chorusrdb* | -cegcc* \ -+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ -+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ -+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ -- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) -+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ -+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) -@@ -1185,7 +1403,7 @@ case $os in - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ -- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ -+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) -@@ -1206,7 +1424,7 @@ case $os in - -opened*) - os=-openedition - ;; -- -os400*) -+ -os400*) - os=-os400 - ;; - -wince*) -@@ -1255,7 +1473,7 @@ case $os in - -sinix*) - os=-sysv4 - ;; -- -tpf*) -+ -tpf*) - os=-tpf - ;; - -triton*) -@@ -1291,8 +1509,13 @@ case $os in - -aros*) - os=-aros - ;; -- -kaos*) -- os=-kaos -+ -zvmoe) -+ os=-zvmoe -+ ;; -+ -dicos*) -+ os=-dicos -+ ;; -+ -nacl*) - ;; - -none) - ;; -@@ -1316,6 +1539,12 @@ else - # system, and we'll never get to this point. - - case $basic_machine in -+ score-*) -+ os=-elf -+ ;; -+ spu-*) -+ os=-elf -+ ;; - *-acorn) - os=-riscix1.2 - ;; -@@ -1325,9 +1554,24 @@ case $basic_machine in - arm*-semi) - os=-aout - ;; -- c4x-* | tic4x-*) -- os=-coff -- ;; -+ c4x-* | tic4x-*) -+ os=-coff -+ ;; -+ c8051-*) -+ os=-elf -+ ;; -+ hexagon-*) -+ os=-elf -+ ;; -+ tic54x-*) -+ os=-coff -+ ;; -+ tic55x-*) -+ os=-coff -+ ;; -+ tic6x-*) -+ os=-coff -+ ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 -@@ -1346,13 +1590,13 @@ case $basic_machine in - ;; - m68000-sun) - os=-sunos3 -- # This also exists in the configure program, but was not the -- # default. -- # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; -+ mep-*) -+ os=-elf -+ ;; - mips*-cisco) - os=-elf - ;; -@@ -1371,9 +1615,15 @@ case $basic_machine in - *-be) - os=-beos - ;; -+ *-haiku) -+ os=-haiku -+ ;; - *-ibm) - os=-aix - ;; -+ *-knuth) -+ os=-mmixware -+ ;; - *-wec) - os=-proelf - ;; -@@ -1476,7 +1726,7 @@ case $basic_machine in - -sunos*) - vendor=sun - ;; -- -aix*) -+ -cnk*|-aix*) - vendor=ibm - ;; - -beos*) -@@ -1539,7 +1789,7 @@ case $basic_machine in - esac - - echo $basic_machine$os --exit 0 -+exit - - # Local variables: - # eval: (add-hook 'write-file-hooks 'time-stamp) diff --git a/debian/patches/060_format-security.patch b/debian/patches/060_format-security.patch deleted file mode 100644 index 6ac0425..0000000 --- a/debian/patches/060_format-security.patch +++ /dev/null @@ -1,44 +0,0 @@ -Description: Appease gcc -Werror=format-security -Author: Colin Watson <cjwatson@ubuntu.com> -Forwarded: no -Last-Update: 2011-10-23 - -Index: b/acinclude.m4 -=================================================================== ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -866,7 +866,7 @@ - AC_TRY_COMPILE( - changequote(<<,>>)dnl - <<extern char *sys_errlist[];>>, --<<printf(sys_errlist[0]);>>, -+<<printf("%s", sys_errlist[0]);>>, - changequote([,])dnl - [have_sys_errlist="yes"; AC_DEFINE(HAVE_SYS_ERRLIST)], - [have_sys_errlist="no"]) -Index: b/configure -=================================================================== ---- a/configure -+++ b/configure -@@ -8986,7 +8986,7 @@ - int - main () - { --printf(sys_errlist[0]); -+printf("%s", sys_errlist[0]); - ; - return 0; - } -Index: b/w3mbookmark.c -=================================================================== ---- a/w3mbookmark.c -+++ b/w3mbookmark.c -@@ -99,7 +99,7 @@ - fprintf(f, "<body>\n<h1>Bookmarks</h1>\n"); - fprintf(f, "<h2>%s</h2>\n<ul>\n", section); - fprintf(f, "<li><a href=\"%s\">%s</a>\n", url, title); -- fprintf(f, end_section); -+ fprintf(f, "%s", end_section); - fprintf(f, "</ul>\n</body>\n</html>\n"); - fclose(f); - } diff --git a/debian/patches/070_glibc2.14.patch b/debian/patches/070_glibc2.14.patch deleted file mode 100644 index 25e480a..0000000 --- a/debian/patches/070_glibc2.14.patch +++ /dev/null @@ -1,63 +0,0 @@ -Description: Unbreak compilation with eglibc 2.14 -Author: Reinhard Tartler <siretart@tauware.de> -Origin: Ubuntu -Bug-Ubuntu: https://launchpad.net/bugs/935540 - ---- w3m-0.5.3.orig/istream.c -+++ w3m-0.5.3/istream.c -@@ -22,8 +22,8 @@ - static void basic_close(int *handle); - static int basic_read(int *handle, char *buf, int len); - --static void file_close(struct file_handle *handle); --static int file_read(struct file_handle *handle, char *buf, int len); -+static void file_close(struct io_file_handle *handle); -+static int file_read(struct io_file_handle *handle, char *buf, int len); - - static int str_read(Str handle, char *buf, int len); - -@@ -114,7 +114,7 @@ newFileStream(FILE * f, void (*closep) ( - stream = New(union input_stream); - init_base_stream(&stream->base, STREAM_BUF_SIZE); - stream->file.type = IST_FILE; -- stream->file.handle = New(struct file_handle); -+ stream->file.handle = New(struct io_file_handle); - stream->file.handle->f = f; - if (closep) - stream->file.handle->close = closep; -@@ -658,13 +658,13 @@ basic_read(int *handle, char *buf, int l - } - - static void --file_close(struct file_handle *handle) -+file_close(struct io_file_handle *handle) - { - handle->close(handle->f); - } - - static int --file_read(struct file_handle *handle, char *buf, int len) -+file_read(struct io_file_handle *handle, char *buf, int len) - { - return fread(buf, 1, len, handle->f); - } ---- w3m-0.5.3.orig/istream.h -+++ w3m-0.5.3/istream.h -@@ -20,7 +20,7 @@ struct stream_buffer { - - typedef struct stream_buffer *StreamBuffer; - --struct file_handle { -+struct io_file_handle { - FILE *f; - void (*close) (); - }; -@@ -53,7 +53,7 @@ struct base_stream { - - struct file_stream { - struct stream_buffer stream; -- struct file_handle *handle; -+ struct io_file_handle *handle; - char type; - char iseos; - int (*read) (); diff --git a/debian/patches/080_gc72.patch b/debian/patches/080_gc72.patch deleted file mode 100644 index 4642ce1..0000000 --- a/debian/patches/080_gc72.patch +++ /dev/null @@ -1,25 +0,0 @@ -Description: Support Boehm GC 7.2 -Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=080_gc72.patch;att=1;bug=758831 -From: Micah Cowan <micah@addictivecode.org> -Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758831 -Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=555467 -Bug: http://sourceforge.net/p/w3m/patches/63/ -Bug: http://sourceforge.net/p/w3m/patches/59/ - -Index: w3m-0.5.3/main.c -=================================================================== ---- w3m-0.5.3.orig/main.c 2014-08-21 12:22:32.000000000 -0700 -+++ w3m-0.5.3/main.c 2014-08-21 12:22:52.419420062 -0700 -@@ -845,7 +845,12 @@ main(int argc, char **argv, char **envp) - mySignal(SIGPIPE, SigPipe); - #endif - -+#if GC_VERSION_MAJOR >= 7 && GC_VERSION_MINOR >= 2 -+ orig_GC_warn_proc = GC_get_warn_proc(); -+ GC_set_warn_proc(wrap_GC_warn_proc); -+#else - orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc); -+#endif - err_msg = Strnew(); - if (load_argc == 0) { - /* no URL specified */ diff --git a/debian/patches/090_parallel-make.patch b/debian/patches/090_parallel-make.patch deleted file mode 100644 index 01a333a..0000000 --- a/debian/patches/090_parallel-make.patch +++ /dev/null @@ -1,39 +0,0 @@ -Subject: Fix parallel make issue -From: Tatsuya Kinoshita <tats@debian.org> -Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726188 -Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=362249 -Bug: https://sourceforge.net/p/w3m/patches/64/ - - Depend on funcname.tab to fix parallel make issue of scripts - - Avoid prerequisite $(IMGOBJS) to fix parallel make issue of w3mimg - -diff --git a/Makefile.in b/Makefile.in -index 52a0aae..b283f29 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -250,7 +250,7 @@ install-po: - (cd $$subdir && $(MAKE) install); \ - done - --all-scripts: -+all-scripts: funcname.tab - for dir in $(SCRIPTSUBDIRS); \ - do \ - (cd $$dir && $(MAKE) $(MAKE_ARGS)); \ -diff --git a/w3mimg/Makefile.in b/w3mimg/Makefile.in -index dfc550c..8e2ad73 100644 ---- a/w3mimg/Makefile.in -+++ b/w3mimg/Makefile.in -@@ -16,9 +16,9 @@ IMGCFLAGS=@IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@ - IMGOBJS=@IMGOBJS@ - - .PHONY: $(SUBDIRS) --all: @IMGTARGETS@ w3mimg.a -+all: w3mimg.a - --w3mimg.a: $(IMGOBJS) -+w3mimg.a: w3mimg.o @IMGTARGETS@ - $(AR) rv $@ $(IMGOBJS) - $(RANLIB) $@ - diff --git a/debian/patches/100_use-cppflags.patch b/debian/patches/100_use-cppflags.patch deleted file mode 100644 index 0b76fb2..0000000 --- a/debian/patches/100_use-cppflags.patch +++ /dev/null @@ -1,17 +0,0 @@ -Description: Use $(CPPFLAGS) with $(CPP) - Use CPPFLAGS from environment (dpkg-buildflags). - Necessary for hardening flags. -Author: Simon Ruderich <simon@ruderich.org> -Bug-Debian: http://bugs.debian.org/665491 - ---- w3m-0.5.3.orig/Makefile.in -+++ w3m-0.5.3/Makefile.in -@@ -150,7 +150,7 @@ parsetagx.o: html.c - - funcname.tab: $(DEFUNS) - (echo '#define DEFUN(x,y,z) x y';\ -- sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) - | \ -+ sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) $(CPPFLAGS) - | \ - awk '$$1 ~ /^[_A-Za-z]/ { \ - for (i=2;i<=NF;i++) { print $$i, $$1} \ - }' > $@.tmp diff --git a/debian/patches/110_form-input-text.patch b/debian/patches/110_form-input-text.patch deleted file mode 100644 index d5c09f3..0000000 --- a/debian/patches/110_form-input-text.patch +++ /dev/null @@ -1,15 +0,0 @@ -Description: Assume "text" if an input type is unknown -Author: Hilko Bengen <bengen@debian.org> -Bug-Debian: http://bugs.debian.org/615843 - ---- w3m-git.orig/form.c 2011-02-28 15:03:36.000000000 +0100 -+++ w3m-git/form.c 2011-02-28 15:32:33.000000000 +0100 -@@ -196,7 +196,7 @@ - if (!strcasecmp(typestr, _formtypetbl[i])) - return i; - } -- return FORM_UNKNOWN; -+ return FORM_INPUT_TEXT; - } - - void diff --git a/debian/patches/120_sgrmouse.patch b/debian/patches/120_sgrmouse.patch deleted file mode 100644 index 0cc9feb..0000000 --- a/debian/patches/120_sgrmouse.patch +++ /dev/null @@ -1,111 +0,0 @@ -Subject: Support SGR 1006 -From: Hayaki Saito <user@zuse.jp> -Date: Sun, 15 Jul 2012 20:14:16 +0900 -Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/201207.month/4466.html - -Patch to support SGR 1006 mouse reporting, from [w3m-dev 04466] -on 2012-07-15, provided by Hayaki Saito. - -diff --git a/keybind.c b/keybind.c -index a490962..fec0c65 100644 ---- a/keybind.c -+++ b/keybind.c -@@ -91,7 +91,7 @@ unsigned char EscBKeymap[128] = { - /* 0 1 2 3 4 5 6 7 */ - nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, - /* 8 9 : ; < = > ? */ -- nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, -+ nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd, - /* @ A B C D E F G */ - nulcmd, movU, movD, movR, movL, nulcmd, goLineL, pgFore, - /* H I J K L M N O */ -diff --git a/main.c b/main.c -index b421943..35f2f39 100644 ---- a/main.c -+++ b/main.c -@@ -5398,6 +5398,58 @@ DEFUN(mouse, MOUSE, "mouse operation") - process_mouse(btn, x, y); - } - -+DEFUN(sgrmouse, SGRMOUSE, "SGR 1006 mouse operation") -+{ -+ int btn = 0, x = 0, y = 0; -+ unsigned char c; -+ -+ do { -+ c = getch(); -+ if (IS_DIGIT(c)) -+ btn = btn * 10 + c - '0'; -+ else if (c == ';') -+ break; -+ else -+ return; -+ } while (1); -+ -+#if defined(__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005 -+ if (cygwin_mouse_btn_swapped) { -+ if (btn == MOUSE_BTN2_DOWN) -+ btn = MOUSE_BTN3_DOWN; -+ else if (btn == MOUSE_BTN3_DOWN) -+ btn = MOUSE_BTN2_DOWN; -+ }; -+#endif -+ -+ do { -+ c = getch(); -+ if (IS_DIGIT(c)) -+ x = x * 10 + c - '0'; -+ else if (c == ';') -+ break; -+ else -+ return; -+ } while (1); -+ -+ do { -+ c = getch(); -+ if (IS_DIGIT(c)) -+ y = y * 10 + c - '0'; -+ else if (c == 'M') -+ break; -+ else if (c == 'm') { -+ btn |= 3; -+ break; -+ } else -+ return; -+ } while (1); -+ -+ if (x < 0 || x >= COLS || y < 0 || y > LASTLINE) -+ return; -+ process_mouse(btn, x, y); -+} -+ - #ifdef USE_GPM - int - gpm_process_mouse(Gpm_Event * event, void *data) -diff --git a/proto.h b/proto.h -index f8a7345..980d522 100644 ---- a/proto.h -+++ b/proto.h -@@ -683,6 +683,7 @@ extern void reMark(void); - - #ifdef USE_MOUSE - extern void mouse(void); -+extern void sgrmouse(void); - extern void mouse_init(void); - extern void mouse_end(void); - extern void mouse_active(void); -diff --git a/terms.c b/terms.c -index 7a3c987..8d928a2 100644 ---- a/terms.c -+++ b/terms.c -@@ -2027,8 +2027,8 @@ sleep_till_anykey(int sec, int purge) - - #ifdef USE_MOUSE - --#define XTERM_ON {fputs("\033[?1001s\033[?1000h",ttyf); flush_tty();} --#define XTERM_OFF {fputs("\033[?1000l\033[?1001r",ttyf); flush_tty();} -+#define XTERM_ON {fputs("\033[?1001s\033[?1000h\033[?1006h",ttyf); flush_tty();} -+#define XTERM_OFF {fputs("\033[?1006l\033[?1000l\033[?1001r",ttyf); flush_tty();} - #define CYGWIN_ON {fputs("\033[?1000h",ttyf); flush_tty();} - #define CYGWIN_OFF {fputs("\033[?1000l",ttyf); flush_tty();} - diff --git a/debian/patches/130_siteconf.patch b/debian/patches/130_siteconf.patch deleted file mode 100644 index 9f8124f..0000000 --- a/debian/patches/130_siteconf.patch +++ /dev/null @@ -1,2065 +0,0 @@ -Subject: New feature: siteconf -Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/201206.month/4464.html - -Patch to support the siteconf feature, from [w3m-dev 04464] -on 2012-06-27, provided by AIDA Shinra. - -Updated to fix segfault of loadGeneralFile() by Tatsuya Kinoshita. - -diff --git a/anchor.c b/anchor.c -index 27bbd56..39f221d 100644 ---- a/anchor.c -+++ b/anchor.c -@@ -200,10 +200,11 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos) - if (*(p2 - 1) == '>') - p2--; - } -- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset, -- buf->document_charset); -- tmp = Sprintf("news:%s", file_quote(tmp->ptr)); -- return registerHref(buf, tmp->ptr, NULL, NO_REFERER, NULL, '\0', line, -+ tmp = Strnew_charp("news:"); -+ Strcat_charp_n(tmp, p1, p2 - p1); -+ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf), -+ buf->document_charset), -+ NULL, NO_REFERER, NULL, '\0', line, - pos); - } - #endif /* USE_NNTP */ -@@ -213,9 +214,10 @@ _put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos) - { - Str tmp; - -- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset, -- buf->document_charset); -- return registerHref(buf, url_quote(tmp->ptr), NULL, NO_REFERER, NULL, -+ tmp = Strnew_charp_n(p1, p2 - p1); -+ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf), -+ buf->document_charset), -+ NULL, NO_REFERER, NULL, - '\0', line, pos); - } - -@@ -756,7 +758,7 @@ link_list_panel(Buffer *buf) - p = parsedURL2Str(&pu)->ptr; - u = html_quote(p); - if (DecodeURL) -- p = html_quote(url_unquote_conv(p, buf->document_charset)); -+ p = html_quote(url_decode2(p, buf)); - else - p = u; - } -@@ -787,7 +789,7 @@ link_list_panel(Buffer *buf) - p = parsedURL2Str(&pu)->ptr; - u = html_quote(p); - if (DecodeURL) -- p = html_quote(url_unquote_conv(p, buf->document_charset)); -+ p = html_quote(url_decode2(p, buf)); - else - p = u; - t = getAnchorText(buf, al, a); -@@ -809,16 +811,13 @@ link_list_panel(Buffer *buf) - p = parsedURL2Str(&pu)->ptr; - u = html_quote(p); - if (DecodeURL) -- p = html_quote(url_unquote_conv(p, buf->document_charset)); -+ p = html_quote(url_decode2(p, buf)); - else - p = u; - if (a->title && *a->title) - t = html_quote(a->title); -- else if (DecodeURL) -- t = html_quote(url_unquote_conv -- (a->url, buf->document_charset)); - else -- t = html_quote(a->url); -+ t = html_quote(url_decode2(a->url, buf)); - Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p, - "\n", NULL); - a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos); -@@ -842,19 +841,13 @@ link_list_panel(Buffer *buf) - p = parsedURL2Str(&pu)->ptr; - u = html_quote(p); - if (DecodeURL) -- p = html_quote(url_unquote_conv(p, -- buf-> -- document_charset)); -+ p = html_quote(url_decode2(p, buf)); - else - p = u; - if (m->alt && *m->alt) - t = html_quote(m->alt); -- else if (DecodeURL) -- t = html_quote(url_unquote_conv(m->url, -- buf-> -- document_charset)); - else -- t = html_quote(m->url); -+ t = html_quote(url_decode2(m->url, buf)); - Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, - "</a><br>", p, "\n", NULL); - } -diff --git a/config.h.in b/config.h.in -index 2f41eed..59997b4 100644 ---- a/config.h.in -+++ b/config.h.in -@@ -25,6 +25,7 @@ - - #define PASSWD_FILE RC_DIR "/passwd" - #define PRE_FORM_FILE RC_DIR "/pre_form" -+#define SITECONF_FILE RC_DIR "/siteconf" - #define USER_MAILCAP RC_DIR "/mailcap" - #define SYS_MAILCAP CONF_DIR "/mailcap" - #define USER_MIMETYPES "~/.mime.types" -diff --git a/display.c b/display.c -index e00eb0c..2fe1183 100644 ---- a/display.c -+++ b/display.c -@@ -257,7 +257,7 @@ make_lastline_link(Buffer *buf, char *title, char *url) - parseURL2(url, &pu, baseURL(buf)); - u = parsedURL2Str(&pu); - if (DecodeURL) -- u = Strnew_charp(url_unquote_conv(u->ptr, buf->document_charset)); -+ u = Strnew_charp(url_decode2(u->ptr, buf)); - #ifdef USE_M17N - u = checkType(u, &pr, NULL); - #endif -diff --git a/doc-jp/README.siteconf b/doc-jp/README.siteconf -new file mode 100644 -index 0000000..58b51c7 ---- /dev/null -+++ b/doc-jp/README.siteconf -@@ -0,0 +1,60 @@ -+siteconf: ̥ޥ -+ -+siteconf ϡ URL Υѥȡɳդ줿꤫ޤ -+siteconf Ȥȡʸɤꤷ "decode_url" -+νϤꡢ Google Υ쥯ǽ -+ץ饤Х夵ꤹ뤳ȤǤޤ -+ -+ǥեȤǤ siteconf ~/.w3m/siteconf ɤ߹ޤޤ -+ -+===== ʸ ===== -+ -+url <url>|/<re-url>/|m@<re-url>@i [exact] -+substitute_url "<destination-url>" -+url_charset <charset> -+no_referer_from on|off -+no_referer_to on|off -+ -+˽줿Τͥ褵ޤ -+ -+===== ===== -+ -+url "http://twitter.com/#!/" -+substitute_url "http://mobile.twitter.com/" -+ -+twitter.com Х륵Ȥžޤ -+ -+url "http://your.bookmark.net/" -+no_referer_from on -+ -+your.bookmark.net ĥäéݤˡ HTTP referer -+ʤ褦ˤޤ -+ -+url "http://www.google.com/url?" exact -+substitute_url "file:///cgi-bin/your-redirector.cgi?" -+ -+Google Υ쥯 local CGI žޤ -+ -+url /^http:\/\/[a-z]*\.wikipedia\.org\// -+url_charset utf-8 -+ -+Ʊ "decode_url" ץˤȡ Wikipedia ؤ -+ UTF-8 Ȥƥǥɤɽޤ -+ -+===== ɽˤĤ ===== -+ -+ɽϤƱ̣ɽޤ -+ -+/http:\/\/www\.example\.com\// -+m/http:\/\/www\.example\.com\// -+m@http://www\.example\.com/@ -+m!http://www\.example\.com/! -+ -+Ǹ 'i' Ҥդȡʸʸ̤˾ȹԤޤ -+㤨С m@^http://www\.example\.com/abc/@i ϰʲΤȤפޤ -+ -+http://www.example.com/abc/ -+http://www.example.com/Abc/ -+http://www.example.com/ABC/ -+ -+ۥ̾ʬϾ˾ʸѴƤӤޤ -diff --git a/doc/README.siteconf b/doc/README.siteconf -new file mode 100644 -index 0000000..f173087 ---- /dev/null -+++ b/doc/README.siteconf -@@ -0,0 +1,60 @@ -+The siteconf: Site-specific preferences -+ -+The siteconf consists of URL patterns and preferences associated to them. -+You can improve "decode_url" feature by giving charsets of URLs site by site, -+or bypass Google's redirector for performance and your privacy. -+ -+The siteconf is read from ~/.w3m/siteconf by default. -+ -+===== The syntax ===== -+ -+url <url>|/<re-url>/|m@<re-url>@i [exact] -+substitute_url "<destination-url>" -+url_charset <charset> -+no_referer_from on|off -+no_referer_to on|off -+ -+The last match wins. -+ -+===== Examples ===== -+ -+url "http://twitter.com/#!/" -+substitute_url "http://mobile.twitter.com/" -+ -+This forwards the twitter.com to its mobile site. -+ -+url "http://your.bookmark.net/" -+no_referer_from on -+ -+This prevents HTTP referers from being sent when you follow links -+at the your.bookmark.net. -+ -+url "http://www.google.com/url?" exact -+substitute_url "file:///cgi-bin/your-redirector.cgi?" -+ -+This forwards the Google's redirector to your local CGI. -+ -+url /^http:\/\/[a-z]*\.wikipedia\.org\// -+url_charset utf-8 -+ -+When combinated with "decode_url" option turned on, links to -+Wikipedia will be human-readable. -+ -+===== Regular expressions notes ===== -+ -+Following expressions are all equivalent: -+ -+/http:\/\/www\.example\.com\// -+m/http:\/\/www\.example\.com\// -+m@http://www\.example\.com/@ -+m!http://www\.example\.com/! -+ -+With a trailing 'i' modifier, you can specify a case-insensitive match. -+For example, m@^http://www\.example\.com/abc/@i matches to: -+ -+http://www.example.com/abc/ -+http://www.example.com/Abc/ -+http://www.example.com/ABC/ -+ -+Hostnames, however, are always converted to lowercases before compared. -+ -diff --git a/file.c b/file.c -index 567d41e..b342de0 100644 ---- a/file.c -+++ b/file.c -@@ -47,11 +47,11 @@ static JMP_BUF AbortLoading; - static struct table *tables[MAX_TABLE]; - static struct table_mode table_mode[MAX_TABLE]; - --#ifdef USE_IMAGE -+#if defined(USE_M17N) || defined(USE_IMAGE) - static ParsedURL *cur_baseURL = NULL; --#ifdef USE_M17N --static char cur_document_charset; - #endif -+#ifdef USE_M17N -+static wc_ces cur_document_charset = 0; - #endif - - static Str cur_title; -@@ -215,7 +215,6 @@ currentLn(Buffer *buf) - - static Buffer * - loadSomething(URLFile *f, -- char *path, - Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf) - { - Buffer *buf; -@@ -223,17 +222,23 @@ loadSomething(URLFile *f, - if ((buf = loadproc(f, defaultbuf)) == NULL) - return NULL; - -- buf->filename = path; - if (buf->buffername == NULL || buf->buffername[0] == '\0') { - buf->buffername = checkHeader(buf, "Subject:"); -- if (buf->buffername == NULL) -- buf->buffername = conv_from_system(lastFileName(path)); -+ if (buf->buffername == NULL && buf->filename != NULL) -+ buf->buffername = conv_from_system(lastFileName(buf->filename)); - } - if (buf->currentURL.scheme == SCM_UNKNOWN) - buf->currentURL.scheme = f->scheme; -- buf->real_scheme = f->scheme; - if (f->scheme == SCM_LOCAL && buf->sourcefile == NULL) -- buf->sourcefile = path; -+ buf->sourcefile = buf->filename; -+ if (loadproc == loadHTMLBuffer -+#ifdef USE_IMAGE -+ || loadproc == loadImageBuffer -+#endif -+ ) -+ buf->type = "text/html"; -+ else -+ buf->type = "text/plain"; - return buf; - } - -@@ -484,28 +489,6 @@ convertLine0(URLFile *uf, Str line, int mode) - return line; - } - --/* -- * loadFile: load file to buffer -- */ --Buffer * --loadFile(char *path) --{ -- Buffer *buf; -- URLFile uf; -- init_stream(&uf, SCM_LOCAL, NULL); -- examineFile(path, &uf); -- if (uf.stream == NULL) -- return NULL; -- buf = newBuffer(INIT_BUFFER_WIDTH); -- current_content_length = 0; --#ifdef USE_M17N -- content_charset = 0; --#endif -- buf = loadSomething(&uf, path, loadBuffer, buf); -- UFclose(&uf); -- return buf; --} -- - int - matchattr(char *p, char *attr, int len, Str *value) - { -@@ -1697,13 +1680,15 @@ getLinkNumberStr(int correction) - /* - * loadGeneralFile: load file to buffer - */ -+#define DO_EXTERNAL ((Buffer *(*)(URLFile *, Buffer *))doExternal) - Buffer * - loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, - int flag, FormList *volatile request) - { - URLFile f, *volatile of = NULL; - ParsedURL pu; -- Buffer *b = NULL, *(*volatile proc)() = loadBuffer; -+ Buffer *b = NULL; -+ Buffer *(*volatile proc)(URLFile *, Buffer *) = loadBuffer; - char *volatile tpath; - char *volatile t = "text/plain", *p, *volatile real_type = NULL; - Buffer *volatile t_buf = NULL; -@@ -1730,7 +1715,22 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, - add_auth_cookie_flag = 0; - - checkRedirection(NULL); -+ - load_doc: -+ { -+ const char *sc_redirect; -+ parseURL2(tpath, &pu, current); -+ sc_redirect = query_SCONF_SUBSTITUTE_URL(&pu); -+ if (sc_redirect && *sc_redirect && checkRedirection(&pu)) { -+ tpath = (char *)sc_redirect; -+ request = NULL; -+ add_auth_cookie_flag = 0; -+ current = New(ParsedURL); -+ *current = pu; -+ status = HTST_NORMAL; -+ goto load_doc; -+ } -+ } - TRAP_OFF; - url_option.referer = referer; - url_option.flag = flag; -@@ -1863,7 +1863,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, - /* 302: Found */ - /* 303: See Other */ - /* 307: Temporary Redirect (HTTP/1.1) */ -- tpath = url_quote_conv(p, DocumentCharset); -+ tpath = url_encode(p, NULL, 0); - request = NULL; - UFclose(&f); - current = New(ParsedURL); -@@ -2022,7 +2022,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, - if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL && - checkRedirection(&pu)) { - /* document moved */ -- tpath = url_quote_conv(remove_space(p), DocumentCharset); -+ tpath = url_encode(remove_space(p), NULL, 0); - request = NULL; - UFclose(&f); - add_auth_cookie_flag = 0; -@@ -2123,10 +2123,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, - if (real_type == NULL) - real_type = t; - proc = loadBuffer; --#ifdef USE_IMAGE -- cur_baseURL = New(ParsedURL); -- copyParsedURL(cur_baseURL, &pu); --#endif - - current_content_length = 0; - if ((p = checkHeader(t_buf, "Content-Length:")) != NULL) -@@ -2197,18 +2193,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, - #endif - else if (w3m_backend) ; - else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) { -- if (!do_download && doExternal(f, -- pu.real_file ? pu.real_file : pu.file, -- t, &b, t_buf)) { -- if (b && b != NO_BUFFER) { -- b->real_scheme = f.scheme; -- b->real_type = real_type; -- if (b->currentURL.host == NULL && b->currentURL.file == NULL) -- copyParsedURL(&b->currentURL, &pu); -- } -- UFclose(&f); -- TRAP_OFF; -- return b; -+ if (!do_download && searchExtViewer(t) != NULL) { -+ proc = DO_EXTERNAL; - } - else { - TRAP_OFF; -@@ -2232,36 +2218,30 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, - else if (w3m_dump & DUMP_FRAME) - return NULL; - -+ if (t_buf == NULL) -+ t_buf = newBuffer(INIT_BUFFER_WIDTH); -+ copyParsedURL(&t_buf->currentURL, &pu); -+ t_buf->filename = pu.real_file ? pu.real_file : -+ pu.file ? conv_to_system(pu.file) : NULL; - if (flag & RG_FRAME) { -- if (t_buf == NULL) -- t_buf = newBuffer(INIT_BUFFER_WIDTH); - t_buf->bufferprop |= BP_FRAME; - } - #ifdef USE_SSL -- if (t_buf) -- t_buf->ssl_certificate = f.ssl_certificate; -+ t_buf->ssl_certificate = f.ssl_certificate; - #endif - frame_source = flag & RG_FRAME_SRC; -- b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf); -+ if (proc == DO_EXTERNAL) { -+ b = doExternal(f, t, t_buf); -+ } else { -+ b = loadSomething(&f, proc, t_buf); -+ } - UFclose(&f); - frame_source = 0; -- if (b) { -+ if (b && b != NO_BUFFER) { - b->real_scheme = f.scheme; - b->real_type = real_type; -- if (b->currentURL.host == NULL && b->currentURL.file == NULL) -- copyParsedURL(&b->currentURL, &pu); -- if (is_html_type(t)) -- b->type = "text/html"; -- else if (w3m_backend) { -- Str s = Strnew_charp(t); -- b->type = s->ptr; -- } --#ifdef USE_IMAGE -- else if (proc == loadImageBuffer) -- b->type = "text/html"; --#endif -- else -- b->type = "text/plain"; -+ if (w3m_backend) -+ b->type = allocStr(t, -1); - if (pu.label) { - if (proc == loadHTMLBuffer) { - Anchor *a; -@@ -2287,10 +2267,11 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, - if (header_string) - header_string = NULL; - #ifdef USE_NNTP -- if (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS) -+ if (b && b != NO_BUFFER && (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS)) - reAnchorNewsheader(b); - #endif -- preFormUpdateBuffer(b); -+ if (b && b != NO_BUFFER) -+ preFormUpdateBuffer(b); - TRAP_OFF; - return b; - } -@@ -3228,7 +3209,7 @@ process_img(struct parsed_tag *tag, int width) - - if (!parsedtag_get_value(tag, ATTR_SRC, &p)) - return tmp; -- p = remove_space(p); -+ p = url_encode(remove_space(p), cur_baseURL, cur_document_charset); - q = NULL; - parsedtag_get_value(tag, ATTR_ALT, &q); - if (!pseudoInlines && (q == NULL || (*q == '\0' && ignore_null_img_alt))) -@@ -3322,12 +3303,7 @@ process_img(struct parsed_tag *tag, int width) - Image image; - ParsedURL u; - --#ifdef USE_M17N -- parseURL2(wc_conv(p, InnerCharset, cur_document_charset)->ptr, &u, -- cur_baseURL); --#else - parseURL2(p, &u, cur_baseURL); --#endif - image.url = parsedURL2Str(&u)->ptr; - if (!uncompressed_file_type(u.file, &image.ext)) - image.ext = filename_extension(u.file, TRUE); -@@ -4084,6 +4060,7 @@ process_form_int(struct parsed_tag *tag, int fid) - parsedtag_get_value(tag, ATTR_METHOD, &p); - q = "!CURRENT_URL!"; - parsedtag_get_value(tag, ATTR_ACTION, &q); -+ q = url_encode(remove_space(q), cur_baseURL, cur_document_charset); - r = NULL; - #ifdef USE_M17N - if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r)) -@@ -5067,11 +5044,10 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) - } - return 1; - case HTML_BASE: --#ifdef USE_IMAGE -+#if defined(USE_M17N) || defined(USE_IMAGE) - p = NULL; - if (parsedtag_get_value(tag, ATTR_HREF, &p)) { -- if (!cur_baseURL) -- cur_baseURL = New(ParsedURL); -+ cur_baseURL = New(ParsedURL); - parseURL(p, cur_baseURL, NULL); - } - #endif -@@ -5329,6 +5305,13 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - #ifdef MENU_SELECT - Anchor **a_select = NULL; - #endif -+#if defined(USE_M17N) || defined(USE_IMAGE) -+ ParsedURL *base = baseURL(buf); -+#endif -+#ifdef USE_M17N -+ wc_ces name_charset = url_to_charset(NULL, &buf->currentURL, -+ buf->document_charset); -+#endif - - if (out_size == 0) { - out_size = LINELEN; -@@ -5523,16 +5506,17 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - hseq = 0; - id = NULL; - if (parsedtag_get_value(tag, ATTR_NAME, &id)) { -- id = url_quote_conv(id, buf->document_charset); -+ id = url_quote_conv(id, name_charset); - registerName(buf, id, currentLn(buf), pos); - } - if (parsedtag_get_value(tag, ATTR_HREF, &p)) -- p = url_quote_conv(remove_space(p), -- buf->document_charset); -+ p = url_encode(remove_space(p), base, -+ buf->document_charset); - if (parsedtag_get_value(tag, ATTR_TARGET, &q)) - q = url_quote_conv(q, buf->document_charset); - if (parsedtag_get_value(tag, ATTR_REFERER, &r)) -- r = url_quote_conv(r, buf->document_charset); -+ r = url_encode(r, base, -+ buf->document_charset); - parsedtag_get_value(tag, ATTR_TITLE, &s); - parsedtag_get_value(tag, ATTR_ACCESSKEY, &t); - parsedtag_get_value(tag, ATTR_HSEQ, &hseq); -@@ -5618,7 +5602,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - ParsedURL u; - Image *image; - -- parseURL2(a_img->url, &u, cur_baseURL); -+ parseURL2(a_img->url, &u, base); - a_img->image = image = New(Image); - image->url = parsedURL2Str(&u)->ptr; - if (!uncompressed_file_type(u.file, &image->ext)) -@@ -5639,7 +5623,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - image->map = q; - image->ismap = ismap; - image->touch = 0; -- image->cache = getImage(image, cur_baseURL, -+ image->cache = getImage(image, base, - IMG_FLAG_SKIP); - } - else if (iseq < 0) { -@@ -5761,8 +5745,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - break; - if (parsedtag_get_value(tag, ATTR_HREF, &p)) { - MapArea *a; -- p = url_quote_conv(remove_space(p), -- buf->document_charset); -+ p = url_encode(remove_space(p), base, -+ buf->document_charset); - t = NULL; - parsedtag_get_value(tag, ATTR_TARGET, &t); - q = ""; -@@ -5811,11 +5795,14 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - break; - case HTML_BASE: - if (parsedtag_get_value(tag, ATTR_HREF, &p)) { -- p = url_quote_conv(remove_space(p), -- buf->document_charset); -+ p = url_encode(remove_space(p), NULL, -+ buf->document_charset); - if (!buf->baseURL) - buf->baseURL = New(ParsedURL); - parseURL(p, buf->baseURL, NULL); -+#if defined(USE_M17N) || defined(USE_IMAGE) -+ base = buf->baseURL; -+#endif - } - if (parsedtag_get_value(tag, ATTR_TARGET, &p)) - buf->baseTarget = -@@ -5830,8 +5817,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - int refresh_interval = getMetaRefreshParam(q, &tmp); - #ifdef USE_ALARM - if (tmp) { -- p = url_quote_conv(remove_space(tmp->ptr), -- buf->document_charset); -+ p = url_encode(remove_space(tmp->ptr), base, -+ buf->document_charset); - buf->event = setAlarmEvent(buf->event, - refresh_interval, - AL_IMPLICIT_ONCE, -@@ -5844,8 +5831,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - FUNCNAME_reload, NULL); - #else - if (tmp && refresh_interval == 0) { -- p = url_quote_conv(remove_space(tmp->ptr), -- buf->document_charset); -+ p = url_encode(remove_space(tmp->ptr), base, -+ buf->document_charset); - pushEvent(FUNCNAME_gorURL, p); - } - #endif -@@ -5929,7 +5916,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) - #ifdef ID_EXT - id = NULL; - if (parsedtag_get_value(tag, ATTR_ID, &id)) { -- id = url_quote_conv(id, buf->document_charset); -+ id = url_quote_conv(id, name_charset); - registerName(buf, id, currentLn(buf), pos); - } - if (renderFrameSet && -@@ -5982,7 +5969,8 @@ addLink(Buffer *buf, struct parsed_tag *tag) - - parsedtag_get_value(tag, ATTR_HREF, &href); - if (href) -- href = url_quote_conv(remove_space(href), buf->document_charset); -+ href = url_encode(remove_space(href), baseURL(buf), -+ buf->document_charset); - parsedtag_get_value(tag, ATTR_TITLE, &title); - parsedtag_get_value(tag, ATTR_TYPE, &ctype); - parsedtag_get_value(tag, ATTR_REL, &rel); -@@ -6963,8 +6951,6 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) - image_flag = IMG_FLAG_AUTO; - else - image_flag = IMG_FLAG_SKIP; -- if (newBuf->currentURL.file) -- cur_baseURL = baseURL(newBuf); - #endif - - if (w3m_halfload) { -@@ -6987,6 +6973,9 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) - htmlenv1.f = stdout; - else - htmlenv1.buf = newTextLineList(); -+#if defined(USE_M17N) || defined(USE_IMAGE) -+ cur_baseURL = baseURL(newBuf); -+#endif - - if (SETJMP(AbortLoading) != 0) { - HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1); -@@ -7048,7 +7037,7 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) - } - #endif - lineBuf2 = convertLine(f, lineBuf2, HTML_MODE, &charset, doc_charset); --#if defined(USE_M17N) && defined(USE_IMAGE) -+#ifdef USE_M17N - cur_document_charset = charset; - #endif - HTMLlineproc0(lineBuf2->ptr, &htmlenv1, internal); -@@ -7060,6 +7049,12 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) - obuf.status = R_ST_NORMAL; - completeHTMLstream(&htmlenv1, &obuf); - flushline(&htmlenv1, &obuf, 0, 2, htmlenv1.limit); -+#if defined(USE_M17N) || defined(USE_IMAGE) -+ cur_baseURL = NULL; -+#endif -+#ifdef USE_M17N -+ cur_document_charset = 0; -+#endif - if (htmlenv1.title) - newBuf->buffername = htmlenv1.title; - if (w3m_halfdump) { -@@ -7207,7 +7202,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset) - q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr, - "/", file->ptr, NULL)->ptr; - Strcat_m_charp(tmp, "<a href=\"", -- html_quote(url_quote_conv(q, *charset)), -+ html_quote(url_encode(q, NULL, *charset)), - "\">", p, html_quote(name->ptr + 1), "</a>\n", NULL); - } - -@@ -7331,6 +7326,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) - URLFile f; - MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; - struct stat st; -+ const ParsedURL *pu = newBuf ? &newBuf->currentURL : NULL; - - loadImage(newBuf, IMG_FLAG_STOP); - image.url = uf->url; -@@ -7338,8 +7334,8 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) - image.width = -1; - image.height = -1; - image.cache = NULL; -- cache = getImage(&image, cur_baseURL, IMG_FLAG_AUTO); -- if (!cur_baseURL->is_nocache && cache->loaded & IMG_FLAG_LOADED && -+ cache = getImage(&image, (ParsedURL *)pu, IMG_FLAG_AUTO); -+ if (!(pu && pu->is_nocache) && cache->loaded & IMG_FLAG_LOADED && - !stat(cache->file, &st)) - goto image_buffer; - -@@ -7580,8 +7576,11 @@ openGeneralPagerBuffer(InputStream stream) - #ifdef USE_M17N - content_charset = 0; - #endif -+ t_buf = newBuffer(INIT_BUFFER_WIDTH); -+ copyParsedURL(&t_buf->currentURL, NULL); -+ t_buf->currentURL.scheme = SCM_LOCAL; -+ t_buf->currentURL.file = "-"; - if (SearchHeader) { -- t_buf = newBuffer(INIT_BUFFER_WIDTH); - readHeader(&uf, t_buf, TRUE, NULL); - t = checkContentType(t_buf); - if (t == NULL) -@@ -7609,14 +7608,13 @@ openGeneralPagerBuffer(InputStream stream) - #ifdef USE_IMAGE - else if (activeImage && displayImage && !useExtImageViewer && - !(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6)) { -- cur_baseURL = New(ParsedURL); -- parseURL("-", cur_baseURL, NULL); - buf = loadImageBuffer(&uf, t_buf); - buf->type = "text/html"; - } - #endif - else { -- if (doExternal(uf, "-", t, &buf, t_buf)) { -+ if (searchExtViewer(t)) { -+ buf = doExternal(uf, t, t_buf); - UFclose(&uf); - if (buf == NULL || buf == NO_BUFFER) - return buf; -@@ -7629,8 +7627,6 @@ openGeneralPagerBuffer(InputStream stream) - } - } - buf->real_type = t; -- buf->currentURL.scheme = SCM_LOCAL; -- buf->currentURL.file = "-"; - return buf; - } - -@@ -7823,9 +7819,8 @@ save2tmp(URLFile uf, char *tmpf) - return 0; - } - --int --doExternal(URLFile uf, char *path, char *type, Buffer **bufp, -- Buffer *defaultbuf) -+Buffer * -+doExternal(URLFile uf, char *type, Buffer *defaultbuf) - { - Str tmpf, command; - struct mailcap *mcap; -@@ -7834,7 +7829,7 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, - char *header, *src = NULL, *ext = uf.ext; - - if (!(mcap = searchExtViewer(type))) -- return 0; -+ return NULL; - - if (mcap->nametemplate) { - tmpf = unquote_mailcap(mcap->nametemplate, NULL, "", NULL, NULL); -@@ -7867,15 +7862,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, - UFclose(&uf); - myExec(command->ptr); - } -- *bufp = NO_BUFFER; -- return 1; -+ return NO_BUFFER; - } - else - #endif - { - if (save2tmp(uf, tmpf->ptr) < 0) { -- *bufp = NULL; -- return 1; -+ return NULL; - } - } - if (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) { -@@ -7918,14 +7911,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, - buf = NO_BUFFER; - } - if (buf && buf != NO_BUFFER) { -- buf->filename = path; -- if (buf->buffername == NULL || buf->buffername[0] == '\0') -- buf->buffername = conv_from_system(lastFileName(path)); -+ if ((buf->buffername == NULL || buf->buffername[0] == '\0') && -+ buf->filename) -+ buf->buffername = conv_from_system(lastFileName(buf->filename)); - buf->edit = mcap->edit; - buf->mailcap = mcap; - } -- *bufp = buf; -- return 1; -+ return buf; - } - - static int -diff --git a/fm.h b/fm.h -index 8378939..0f56c31 100644 ---- a/fm.h -+++ b/fm.h -@@ -264,6 +264,18 @@ extern int REV_LB[]; - #define IMG_FLAG_ERROR 2 - #define IMG_FLAG_DONT_REMOVE 4 - -+#define IS_EMPTY_PARSED_URL(pu) ((pu)->scheme == SCM_UNKNOWN && !(pu)->file) -+#define SCONF_RESERVED 0 -+#define SCONF_SUBSTITUTE_URL 1 -+#define SCONF_URL_CHARSET 2 -+#define SCONF_NO_REFERER_FROM 3 -+#define SCONF_NO_REFERER_TO 4 -+#define SCONF_N_FIELD 5 -+#define query_SCONF_SUBSTITUTE_URL(pu) ((const char *)querySiteconf(pu, SCONF_SUBSTITUTE_URL)) -+#define query_SCONF_URL_CHARSET(pu) ((const wc_ces *)querySiteconf(pu, SCONF_URL_CHARSET)) -+#define query_SCONF_NO_REFERER_FROM(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_FROM)) -+#define query_SCONF_NO_REFERER_TO(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_TO)) -+ - /* - * Macros. - */ -@@ -972,6 +984,7 @@ global int BackgroundExtViewer init(TRUE); - global int disable_secret_security_check init(FALSE); - global char *passwd_file init(PASSWD_FILE); - global char *pre_form_file init(PRE_FORM_FILE); -+global char *siteconf_file init(SITECONF_FILE); - global char *ftppasswd init(NULL); - global int ftppass_hostnamegen init(TRUE); - global int do_download init(FALSE); -diff --git a/form.c b/form.c -index b7556ca..fa17be4 100644 ---- a/form.c -+++ b/form.c -@@ -787,7 +787,7 @@ struct pre_form { - static struct pre_form *PreForm = NULL; - - static struct pre_form * --add_pre_form(struct pre_form *prev, char *url, char *name, char *action) -+add_pre_form(struct pre_form *prev, char *url, Regex *re_url, char *name, char *action) - { - ParsedURL pu; - struct pre_form *new; -@@ -796,21 +796,13 @@ add_pre_form(struct pre_form *prev, char *url, char *name, char *action) - new = prev->next = New(struct pre_form); - else - new = PreForm = New(struct pre_form); -- if (url && *url == '/') { -- int l = strlen(url); -- if (l > 1 && url[l - 1] == '/') -- new->url = allocStr(url + 1, l - 2); -- else -- new->url = url + 1; -- new->re_url = newRegex(new->url, FALSE, NULL, NULL); -- if (!new->re_url) -- new->url = NULL; -- } -- else if (url) { -+ if (url && !re_url) { - parseURL2(url, &pu, NULL); - new->url = parsedURL2Str(&pu)->ptr; -- new->re_url = NULL; - } -+ else -+ new->url = url; -+ new->re_url = re_url; - new->name = (name && *name) ? name : NULL; - new->action = (action && *action) ? action : NULL; - new->item = NULL; -@@ -834,7 +826,7 @@ add_pre_form_item(struct pre_form *pf, struct pre_form_item *prev, int type, - new->name = name; - new->value = value; - if (checked && *checked && (!strcmp(checked, "0") || -- strcasecmp(checked, "off") -+ !strcasecmp(checked, "off") - || !strcasecmp(checked, "no"))) - new->checked = 0; - else -@@ -875,6 +867,7 @@ loadPreForm(void) - return; - while (1) { - char *p, *s, *arg; -+ Regex *re_arg; - - line = Strfgets(fp); - if (line->length == 0) -@@ -890,18 +883,20 @@ loadPreForm(void) - if (*p == '#' || *p == '\0') - continue; /* comment or empty line */ - s = getWord(&p); -- arg = getWord(&p); - - if (!strcmp(s, "url")) { -+ arg = getRegexWord((const char **)&p, &re_arg); - if (!arg || !*arg) - continue; - p = getQWord(&p); -- pf = add_pre_form(pf, arg, NULL, p); -+ pf = add_pre_form(pf, arg, re_arg, NULL, p); - pi = pf->item; - continue; - } - if (!pf) - continue; -+ -+ arg = getWord(&p); - if (!strcmp(s, "form")) { - if (!arg || !*arg) - continue; -@@ -913,7 +908,7 @@ loadPreForm(void) - } - if (pf->item) { - struct pre_form *prev = pf; -- pf = add_pre_form(prev, "", s, p); -+ pf = add_pre_form(prev, "", NULL, s, p); - /* copy previous URL */ - pf->url = prev->url; - pf->re_url = prev->re_url; -diff --git a/frame.c b/frame.c -index b431437..48c2d72 100644 ---- a/frame.c -+++ b/frame.c -@@ -91,7 +91,8 @@ newFrame(struct parsed_tag *tag, Buffer *buf) - body->baseURL = baseURL(buf); - if (tag) { - if (parsedtag_get_value(tag, ATTR_SRC, &p)) -- body->url = url_quote_conv(remove_space(p), buf->document_charset); -+ body->url = url_encode(remove_space(p), body->baseURL, -+ buf->document_charset); - if (parsedtag_get_value(tag, ATTR_NAME, &p) && *p != '_') - body->name = url_quote_conv(p, buf->document_charset); - } -@@ -639,7 +640,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level, - case HTML_BASE: - /* "BASE" is prohibit tag */ - if (parsedtag_get_value(tag, ATTR_HREF, &q)) { -- q = url_quote_conv(remove_space(q), charset); -+ q = url_encode(remove_space(q), NULL, charset); - parseURL(q, &base, NULL); - } - if (parsedtag_get_value(tag, ATTR_TARGET, &q)) { -@@ -768,8 +769,8 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level, - if (!tag->value[j]) - break; - tag->value[j] = -- url_quote_conv(remove_space(tag->value[j]), -- charset); -+ url_encode(remove_space(tag->value[j]), -+ &base, charset); - tag->need_reconstruct = TRUE; - parseURL2(tag->value[j], &url, &base); - if (url.scheme == SCM_UNKNOWN || -diff --git a/func.c b/func.c -index f389e00..8b5deac 100644 ---- a/func.c -+++ b/func.c -@@ -8,6 +8,7 @@ - #include "fm.h" - #include "func.h" - #include "myctype.h" -+#include "regex.h" - - #include "funcname.c" - #include "functable.c" -@@ -434,6 +435,93 @@ getQWord(char **str) - return tmp->ptr; - } - -+/* This extracts /regex/i or m@regex@i from the given string. -+ * Then advances *str to the end of regex. -+ * If the input does not seems to be a regex, this falls back to getQWord(). -+ * -+ * Returns a word (no matter whether regex or not) in the give string. -+ * If regex_ret is non-NULL, compiles the regex and stores there. -+ * -+ * XXX: Actually this is unrelated to func.c. -+ */ -+char * -+getRegexWord(const char **str, Regex **regex_ret) -+{ -+ char *word = NULL; -+ const char *p, *headp, *bodyp, *tailp; -+ char delimiter; -+ int esc; -+ int igncase = 0; -+ -+ p = *str; -+ SKIP_BLANKS(p); -+ headp = p; -+ -+ /* Get the opening delimiter */ -+ if (p[0] == 'm' && IS_PRINT(p[1]) && !IS_ALNUM(p[1]) && p[1] != '\\') { -+ delimiter = p[1]; -+ p += 2; -+ } -+ else if (p[0] == '/') { -+ delimiter = '/'; -+ p += 1; -+ } -+ else { -+ goto not_regex; -+ } -+ bodyp = p; -+ -+ /* Scan the end of the expression */ -+ for (esc = 0; *p; ++p) { -+ if (esc) { -+ esc = 0; -+ } else { -+ if (*p == delimiter) -+ break; -+ else if (*p == '\\') -+ esc = 1; -+ } -+ } -+ if (!*p && *headp == '/') -+ goto not_regex; -+ tailp = p; -+ -+ /* Check the modifiers */ -+ if (*p == delimiter) { -+ while (*++p && !IS_SPACE(*p)) { -+ switch (*p) { -+ case 'i': -+ igncase = 1; -+ break; -+ } -+ /* ignore unknown modifiers */ -+ } -+ } -+ -+ /* Save the expression */ -+ word = allocStr(headp, p - headp); -+ -+ /* Compile */ -+ if (regex_ret) { -+ if (*tailp == delimiter) -+ word[tailp - headp] = 0; -+ *regex_ret = newRegex(word + (bodyp - headp), igncase, NULL, NULL); -+ if (*tailp == delimiter) -+ word[tailp - headp] = delimiter; -+ } -+ goto last; -+ -+not_regex: -+ p = headp; -+ word = getQWord((char **)&p); -+ if (regex_ret) -+ *regex_ret = NULL; -+ -+last: -+ *str = p; -+ return word; -+} -+ - #ifdef USE_MOUSE - static MouseAction default_mouse_action = { - NULL, -diff --git a/history.c b/history.c -index 951ef83..e9be09b 100644 ---- a/history.c -+++ b/history.c -@@ -17,7 +17,7 @@ historyBuffer(Hist *hist) - for (item = hist->list->last; item; item = item->prev) { - q = html_quote((char *)item->ptr); - if (DecodeURL) -- p = html_quote(url_unquote_conv((char *)item->ptr, 0)); -+ p = html_quote(url_decode2((char *)item->ptr, NULL)); - else - p = q; - Strcat_charp(src, "<li><a href=\""); -diff --git a/indep.c b/indep.c -index 65b04aa..89e86c1 100644 ---- a/indep.c -+++ b/indep.c -@@ -357,6 +357,20 @@ strcasemstr(char *str, char *srch[], char **ret_ptr) - return -1; - } - -+int -+strmatchlen(const char *s1, const char *s2, int maxlen) -+{ -+ int i; -+ -+ /* To allow the maxlen to be negatie (infinity), -+ * compare by "!=" instead of "<=". */ -+ for (i = 0; i != maxlen; ++i) { -+ if (!s1[i] || !s2[i] || s1[i] != s2[i]) -+ break; -+ } -+ return i; -+} -+ - char * - remove_space(char *str) - { -diff --git a/indep.h b/indep.h -index b3819a3..cf566fe 100644 ---- a/indep.h -+++ b/indep.h -@@ -52,6 +52,7 @@ extern int strncasecmp(const char *s1, const char *s2, size_t n); - extern char *strcasestr(const char *s1, const char *s2); - #endif - extern int strcasemstr(char *str, char *srch[], char **ret_ptr); -+int strmatchlen(const char *s1, const char *s2, int maxlen); - extern char *remove_space(char *str); - extern int non_null(char *s); - extern void cleanup_line(Str s, int mode); -diff --git a/linein.c b/linein.c -index b7e81b6..572b015 100644 ---- a/linein.c -+++ b/linein.c -@@ -1026,7 +1026,7 @@ _prev(void) - strCurrentBuf = strBuf; - } - if (DecodeURL && (cm_mode & CPL_URL) ) -- p = url_unquote_conv(p, 0); -+ p = url_decode2(p, NULL); - strBuf = Strnew_charp(p); - CLen = CPos = setStrType(strBuf, strProp); - offset = 0; -@@ -1045,7 +1045,7 @@ _next(void) - p = nextHist(hist); - if (p) { - if (DecodeURL && (cm_mode & CPL_URL) ) -- p = url_unquote_conv(p, 0); -+ p = url_decode2(p, NULL); - strBuf = Strnew_charp(p); - } - else { -diff --git a/main.c b/main.c -index b421943..a414391 100644 ---- a/main.c -+++ b/main.c -@@ -894,12 +894,17 @@ main(int argc, char **argv, char **envp) - if (i >= 0) { - SearchHeader = search_header; - DefaultType = default_type; -+ char *url; -+ -+ url = load_argv[i]; -+ if (getURLScheme(&url) == SCM_MISSING && !ArgvIsURL) -+ url = file_to_url(load_argv[i]); -+ else -+ url = url_encode(conv_from_system(load_argv[i]), NULL, 0); - if (w3m_dump == DUMP_HEAD) { - request = New(FormList); - request->method = FORM_METHOD_HEAD; -- newbuf = -- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0, -- request); -+ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request); - } - else { - if (post_file && i == 0) { -@@ -928,9 +933,7 @@ main(int argc, char **argv, char **envp) - else { - request = NULL; - } -- newbuf = -- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0, -- request); -+ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request); - } - if (newbuf == NULL) { - /* FIXME: gettextize? */ -@@ -945,7 +948,7 @@ main(int argc, char **argv, char **envp) - break; - case SCM_LOCAL: - case SCM_LOCAL_CGI: -- unshiftHist(LoadHist, conv_from_system(load_argv[i])); -+ unshiftHist(LoadHist, url); - default: - pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr); - break; -@@ -1269,15 +1272,12 @@ do_dump(Buffer *buf) - printf("\nReferences:\n\n"); - for (i = 0; i < buf->href->nanchor; i++) { - ParsedURL pu; -- static Str s = NULL; -+ char *url; - if (buf->href->anchors[i].slave) - continue; - parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf)); -- s = parsedURL2Str(&pu); -- if (DecodeURL) -- s = Strnew_charp(url_unquote_conv -- (s->ptr, Currentbuf->document_charset)); -- printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, s->ptr); -+ url = url_decode2(parsedURL2Str(&pu)->ptr, Currentbuf); -+ printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, url); - } - } - } -@@ -2261,7 +2261,7 @@ DEFUN(movR1, MOVE_RIGHT1, - static wc_uint32 - getChar(char *p) - { -- return wc_any_to_ucs(wtf_parse1(&p)); -+ return wc_any_to_ucs(wtf_parse1((wc_uchar **)&p)); - } - - static int -@@ -2804,12 +2804,15 @@ loadLink(char *url, char *target, char *referer, FormList *request) - union frameset_element *f_element = NULL; - int flag = 0; - ParsedURL *base, pu; -+ const int *no_referer_ptr; - - message(Sprintf("loading %s", url)->ptr, 0, 0); - refresh(); - -+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL); - base = baseURL(Currentbuf); -- if (base == NULL || -+ if ((no_referer_ptr && *no_referer_ptr) || -+ base == NULL || - base->scheme == SCM_LOCAL || base->scheme == SCM_LOCAL_CGI) - referer = NO_REFERER; - if (referer == NULL) -@@ -4055,6 +4058,7 @@ goURL0(char *prompt, int relative) - char *url, *referer; - ParsedURL p_url, *current; - Buffer *cur_buf = Currentbuf; -+ const int *no_referer_ptr; - - url = searchKeyData(); - if (url == NULL) { -@@ -4064,11 +4068,8 @@ goURL0(char *prompt, int relative) - current = baseURL(Currentbuf); - if (current) { - char *c_url = parsedURL2Str(current)->ptr; -- if (DefaultURLString == DEFAULT_URL_CURRENT) { -- url = c_url; -- if (DecodeURL) -- url = url_unquote_conv(url, 0); -- } -+ if (DefaultURLString == DEFAULT_URL_CURRENT) -+ url = url_decode2(c_url, NULL); - else - pushHist(hist, c_url); - } -@@ -4077,11 +4078,8 @@ goURL0(char *prompt, int relative) - char *a_url; - parseURL2(a->url, &p_url, current); - a_url = parsedURL2Str(&p_url)->ptr; -- if (DefaultURLString == DEFAULT_URL_LINK) { -- url = a_url; -- if (DecodeURL) -- url = url_unquote_conv(url, Currentbuf->document_charset); -- } -+ if (DefaultURLString == DEFAULT_URL_LINK) -+ url = url_decode2(a_url, Currentbuf); - else - pushHist(hist, a_url); - } -@@ -4089,15 +4087,22 @@ goURL0(char *prompt, int relative) - if (url != NULL) - SKIP_BLANKS(url); - } --#ifdef USE_M17N -- if (url != NULL) { -- if ((relative || *url == '#') && Currentbuf->document_charset) -- url = wc_conv_strict(url, InnerCharset, -- Currentbuf->document_charset)->ptr; -+ if (relative) { -+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL); -+ current = baseURL(Currentbuf); -+ if ((no_referer_ptr && *no_referer_ptr) || -+ current == NULL || -+ current->scheme == SCM_LOCAL || current->scheme == SCM_LOCAL_CGI) -+ referer = NO_REFERER; - else -- url = conv_to_system(url); -+ referer = parsedURL2Str(&Currentbuf->currentURL)->ptr; -+ url = url_encode(url, current, Currentbuf->document_charset); -+ } -+ else { -+ current = NULL; -+ referer = NULL; -+ url = url_encode(url, NULL, 0); - } --#endif - if (url == NULL || *url == '\0') { - displayBuffer(Currentbuf, B_FORCE_REDRAW); - return; -@@ -4106,14 +4111,6 @@ goURL0(char *prompt, int relative) - gotoLabel(url + 1); - return; - } -- if (relative) { -- current = baseURL(Currentbuf); -- referer = parsedURL2Str(&Currentbuf->currentURL)->ptr; -- } -- else { -- current = NULL; -- referer = NULL; -- } - parseURL2(url, &p_url, current); - pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr); - cmd_loadURL(url, current, referer, NULL); -@@ -4510,8 +4507,7 @@ _peekURL(int only_img) - s = parsedURL2Str(&pu); - } - if (DecodeURL) -- s = Strnew_charp(url_unquote_conv -- (s->ptr, Currentbuf->document_charset)); -+ s = Strnew_charp(url_decode2(s->ptr, Currentbuf)); - #ifdef USE_M17N - s = checkType(s, &pp, NULL); - p = NewAtom_N(Lineprop, s->length); -@@ -4570,7 +4566,7 @@ DEFUN(curURL, PEEK, "Peek current URL") - offset = 0; - s = currentURL(); - if (DecodeURL) -- s = Strnew_charp(url_unquote_conv(s->ptr, 0)); -+ s = Strnew_charp(url_decode2(s->ptr, NULL)); - #ifdef USE_M17N - s = checkType(s, &pp, NULL); - p = NewAtom_N(Lineprop, s->length); -diff --git a/map.c b/map.c -index 90aa35a..12701e7 100644 ---- a/map.c -+++ b/map.c -@@ -279,7 +279,7 @@ follow_map_panel(Buffer *buf, char *name) - p = parsedURL2Str(&pu)->ptr; - q = html_quote(p); - if (DecodeURL) -- p = html_quote(url_unquote_conv(p, buf->document_charset)); -+ p = html_quote(url_decode2(p, buf)); - else - p = q; - Strcat_m_charp(mappage, "<tr valign=top><td><a href=\"", q, "\">", -@@ -417,10 +417,7 @@ append_map_info(Buffer *buf, Str tmp, FormItemList *fi) - continue; - parseURL2(a->url, &pu, baseURL(buf)); - q = html_quote(parsedURL2Str(&pu)->ptr); -- if (DecodeURL) -- p = html_quote(url_unquote_conv(a->url, buf->document_charset)); -- else -- p = html_quote(a->url); -+ p = html_quote(url_decode2(a->url, buf)); - Strcat_m_charp(tmp, "<tr valign=top><td> <td><a href=\"", - q, "\">", - html_quote(*a->alt ? a->alt : mybasename(a->url)), -@@ -457,10 +454,8 @@ append_link_info(Buffer *buf, Str html, LinkList * link) - Strcat_charp(html, "[Rev]"); - if (!l->url) - url = "(empty)"; -- else if (DecodeURL) -- url = html_quote(url_unquote_conv(l->url, buf->document_charset)); - else -- url = html_quote(l->url); -+ url = html_quote(url_decode2(l->url, buf)); - Strcat_m_charp(html, "<td>", url, NULL); - if (l->ctype) - Strcat_m_charp(html, " (", html_quote(l->ctype), ")", NULL); -@@ -498,8 +493,7 @@ append_frame_info(Buffer *buf, Str html, struct frameset *set, int level) - Strcat_charp(html, p); - } - if (DecodeURL) -- p = html_quote(url_unquote_conv(frame.body->url, -- buf->document_charset)); -+ p = html_quote(url_decode2(frame.body->url, buf)); - else - p = q; - Strcat_m_charp(html, " ", p, "</a></pre_int><br>\n", NULL); -@@ -550,9 +544,7 @@ page_info_panel(Buffer *buf) - #ifdef USE_M17N - Strcat_charp(tmp, "<form method=internal action=charset>"); - #endif -- p = parsedURL2Str(&buf->currentURL)->ptr; -- if (DecodeURL) -- p = url_unquote_conv(p, 0); -+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL); - Strcat_m_charp(tmp, "<table cellpadding=0>", - "<tr valign=top><td nowrap>Title<td>", - html_quote(buf->buffername), -@@ -589,7 +581,7 @@ page_info_panel(Buffer *buf) - p = parsedURL2Str(&pu)->ptr; - q = html_quote(p); - if (DecodeURL) -- p = html_quote(url_unquote_conv(p, buf->document_charset)); -+ p = html_quote(url_decode2(p, buf)); - else - p = q; - Strcat_m_charp(tmp, -@@ -602,7 +594,7 @@ page_info_panel(Buffer *buf) - p = parsedURL2Str(&pu)->ptr; - q = html_quote(p); - if (DecodeURL) -- p = html_quote(url_unquote_conv(p, buf->document_charset)); -+ p = html_quote(url_decode2(p, buf)); - else - p = q; - Strcat_m_charp(tmp, -@@ -613,10 +605,7 @@ page_info_panel(Buffer *buf) - if (a != NULL) { - FormItemList *fi = (FormItemList *)a->url; - p = form2str(fi); -- if (DecodeURL) -- p = html_quote(url_unquote_conv(p, buf->document_charset)); -- else -- p = html_quote(p); -+ p = html_quote(url_decode2(p, buf)); - Strcat_m_charp(tmp, - "<tr valign=top><td nowrap>Method/type of current form <td>", - p, NULL); -diff --git a/menu.c b/menu.c -index 774b1bd..0f66583 100644 ---- a/menu.c -+++ b/menu.c -@@ -1365,9 +1365,7 @@ initSelectMenu(void) - break; - default: - Strcat_char(str, ' '); -- p = parsedURL2Str(&buf->currentURL)->ptr; -- if (DecodeURL) -- p = url_unquote_conv(p, 0); -+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL); - Strcat_charp(str, p); - break; - } -@@ -1513,9 +1511,7 @@ initSelTabMenu(void) - case SCM_MISSING: - break; - default: -- p = parsedURL2Str(&buf->currentURL)->ptr; -- if (DecodeURL) -- p = url_unquote_conv(p, 0); -+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL); - Strcat_charp(str, p); - break; - } -@@ -1845,10 +1841,8 @@ link_menu(Buffer *buf) - Strcat_charp(str, " "); - if (!l->url) - p = ""; -- else if (DecodeURL) -- p = url_unquote_conv(l->url, buf->document_charset); - else -- p = l->url; -+ p = url_decode2(l->url, buf); - Strcat_charp(str, p); - label[i] = str->ptr; - if (len < str->length) -diff --git a/po/ja.po b/po/ja.po -index d67c695..947191c 100644 ---- a/po/ja.po -+++ b/po/ja.po -@@ -407,6 +407,10 @@ msgid "File for setting form on loading" - msgstr "文書読込時のフォーム設定用ファイル" - - #: rc.c:149 -+msgid "File for preferences for each site" -+msgstr "サイト別設定のファイル" -+ -+#: rc.c:149 - msgid "Password for anonymous FTP (your mail address)" - msgstr "FTPのパスワード(普通は自分のmail addressを使う)" - -diff --git a/proto.h b/proto.h -index f8a7345..7b1a7a6 100644 ---- a/proto.h -+++ b/proto.h -@@ -162,6 +162,24 @@ extern Str searchURIMethods(ParsedURL *pu); - extern void chkExternalURIBuffer(Buffer *buf); - #endif - extern ParsedURL *schemeToProxy(int scheme); -+#ifdef USE_M17N -+extern wc_ces url_to_charset(const char *url, const ParsedURL *base, -+ wc_ces doc_charset); -+extern char *url_encode(const char *url, const ParsedURL *base, -+ wc_ces doc_charset); -+#if 0 -+extern char *url_decode(const char *url, const ParsedURL *base, -+ wc_ces doc_charset); -+#endif -+extern char *url_decode2(const char *url, const Buffer *buf); -+#else /* !defined(USE_M17N) */ -+#define url_encode(url, base, cs) url_quote(url) -+extern char *url_decode0(const char *url); -+#if 0 -+#define url_decode(url, base, cs) url_decode0(url) -+#endif -+#define url_decode2(url, buf) url_decode0(url) -+#endif /* !defined(USE_M17N) */ - extern void examineFile(char *path, URLFile *uf); - extern char *acceptableEncoding(); - extern int dir_exist(char *path); -@@ -180,7 +198,6 @@ extern void push_symbol(Str str, char symbol, int width, int n); - #ifdef USE_UNICODE - extern void update_utf8_symbol(void); - #endif --extern Buffer *loadFile(char *path); - extern Buffer *loadGeneralFile(char *path, ParsedURL *current, char *referer, - int flag, FormList *request); - extern int is_boundary(unsigned char *, unsigned char *); -@@ -249,8 +266,7 @@ extern Buffer *openPagerBuffer(InputStream stream, Buffer *buf); - extern Buffer *openGeneralPagerBuffer(InputStream stream); - extern Line *getNextPage(Buffer *buf, int plen); - extern int save2tmp(URLFile uf, char *tmpf); --extern int doExternal(URLFile uf, char *path, char *type, Buffer **bufp, -- Buffer *defaultbuf); -+extern Buffer *doExternal(URLFile uf, char *type, Buffer *defaultbuf); - extern int _doFileCopy(char *tmpf, char *defstr, int download); - #define doFileCopy(tmpf, defstr) _doFileCopy(tmpf, defstr, FALSE); - extern int doFileMove(char *tmpf, char *defstr); -@@ -507,7 +523,7 @@ extern ParsedURL *baseURL(Buffer *buf); - extern int openSocket(char *hostname, char *remoteport_name, - unsigned short remoteport_num); - extern void parseURL(char *url, ParsedURL *p_url, ParsedURL *current); --extern void copyParsedURL(ParsedURL *p, ParsedURL *q); -+extern void copyParsedURL(ParsedURL *p, const ParsedURL *q); - extern void parseURL2(char *url, ParsedURL *pu, ParsedURL *current); - extern Str parsedURL2Str(ParsedURL *pu); - extern int getURLScheme(char **url); -@@ -611,6 +627,7 @@ extern char *confFile(char *base); - extern char *auxbinFile(char *base); - extern char *libFile(char *base); - extern char *helpFile(char *base); -+extern const void *querySiteconf(const ParsedURL *query_pu, int field); - extern Str localCookie(void); - extern Str loadLocalDir(char *dirname); - extern void set_environ(char *var, char *value); -@@ -723,6 +740,8 @@ extern int getKey(char *s); - extern char *getKeyData(int key); - extern char *getWord(char **str); - extern char *getQWord(char **str); -+struct regex; -+extern char *getRegexWord(const char **str, struct regex **regex_ret); - #ifdef USE_MOUSE - extern void initMouseAction(void); - #endif -diff --git a/rc.c b/rc.c -index 8441a39..3bf6cea 100644 ---- a/rc.c -+++ b/rc.c -@@ -9,7 +9,9 @@ - #include <errno.h> - #include "parsetag.h" - #include "local.h" -+#include "regex.h" - #include <stdlib.h> -+#include <stddef.h> - - struct param_ptr { - char *name; -@@ -146,6 +148,7 @@ static int OptionEncode = FALSE; - #define CMT_DISABLE_SECRET_SECURITY_CHECK N_("Disable secret file security check") - #define CMT_PASSWDFILE N_("Password file") - #define CMT_PRE_FORM_FILE N_("File for setting form on loading") -+#define CMT_SITECONF_FILE N_("File for preferences for each site") - #define CMT_FTPPASS N_("Password for anonymous FTP (your mail address)") - #define CMT_FTPPASS_HOSTNAMEGEN N_("Generate domain part of password for FTP") - #define CMT_USERAGENT N_("User-Agent identification string") -@@ -619,6 +622,8 @@ struct param_ptr params9[] = { - CMT_FTPPASS_HOSTNAMEGEN, NULL}, - {"pre_form_file", P_STRING, PI_TEXT, (void *)&pre_form_file, - CMT_PRE_FORM_FILE, NULL}, -+ {"siteconf_file", P_STRING, PI_TEXT, (void *)&siteconf_file, -+ CMT_SITECONF_FILE, NULL}, - {"user_agent", P_STRING, PI_TEXT, (void *)&UserAgent, CMT_USERAGENT, NULL}, - {"no_referer", P_INT, PI_ONOFF, (void *)&NoSendReferer, CMT_NOSENDREFERER, - NULL}, -@@ -1173,6 +1178,8 @@ do_mkdir(const char *dir, long mode) - #endif /* not __MINW32_VERSION */ - #endif /* not __EMX__ */ - -+static void loadSiteconf(void); -+ - void - sync_with_option(void) - { -@@ -1199,6 +1206,7 @@ sync_with_option(void) - #endif - loadPasswd(); - loadPreForm(); -+ loadSiteconf(); - - if (AcceptLang == NULL || *AcceptLang == '\0') { - /* TRANSLATORS: -@@ -1556,3 +1564,217 @@ helpFile(char *base) - return expandPath(Strnew_m_charp(w3m_help_dir(), "/", base, NULL)->ptr); - } - #endif -+ -+/* siteconf */ -+/* -+ * url "<url>"|/<re-url>/|m@<re-url>@i [exact] -+ * substitute_url "<destination-url>" -+ * url_charset <charset> -+ * no_referer_from on|off -+ * no_referer_to on|off -+ * -+ * The last match wins. -+ */ -+ -+struct siteconf_rec { -+ struct siteconf_rec *next; -+ char *url; -+ Regex *re_url; -+ int url_exact; -+ unsigned char mask[(SCONF_N_FIELD + 7) >> 3]; -+ -+ char *substitute_url; -+#ifdef USE_M17N -+ wc_ces url_charset; -+#endif -+ int no_referer_from; -+ int no_referer_to; -+}; -+#define SCONF_TEST(ent, f) ((ent)->mask[(f)>>3] & (1U<<((f)&7))) -+#define SCONF_SET(ent, f) ((ent)->mask[(f)>>3] |= (1U<<((f)&7))) -+#define SCONF_CLEAR(ent, f) ((ent)->mask[(f)>>3] &= ~(1U<<((f)&7))) -+ -+static struct siteconf_rec *siteconf_head = NULL; -+static struct siteconf_rec *newSiteconfRec(void); -+ -+static struct siteconf_rec * -+newSiteconfRec(void) -+{ -+ struct siteconf_rec *ent; -+ -+ ent = New(struct siteconf_rec); -+ ent->next = NULL; -+ ent->url = NULL; -+ ent->re_url = NULL; -+ ent->url_exact = FALSE; -+ memset(ent->mask, 0, sizeof(ent->mask)); -+ -+ ent->substitute_url = NULL; -+#ifdef USE_M17N -+ ent->url_charset = 0; -+#endif -+ return ent; -+} -+ -+static void -+loadSiteconf(void) -+{ -+ char *efname; -+ FILE *fp; -+ Str line; -+ struct siteconf_rec *ent = NULL; -+ -+ siteconf_head = NULL; -+ if (!siteconf_file) -+ return; -+ if ((efname = expandPath(siteconf_file)) == NULL) -+ return; -+ fp = fopen(efname, "r"); -+ if (fp == NULL) -+ return; -+ while (line = Strfgets(fp), line->length > 0) { -+ char *p, *s; -+ -+ Strchop(line); -+ p = line->ptr; -+ SKIP_BLANKS(p); -+ if (*p == '#' || *p == '\0') -+ continue; -+ s = getWord(&p); -+ -+ /* The "url" begins a new record. */ -+ if (strcmp(s, "url") == 0) { -+ char *url, *opt; -+ struct siteconf_rec *newent; -+ -+ /* First, register the current record. */ -+ if (ent) { -+ ent->next = siteconf_head; -+ siteconf_head = ent; -+ ent = NULL; -+ } -+ -+ /* Second, create a new record. */ -+ newent = newSiteconfRec(); -+ url = getRegexWord((const char **)&p, &newent->re_url); -+ opt = getWord(&p); -+ SKIP_BLANKS(p); -+ if (!newent->re_url) { -+ ParsedURL pu; -+ if (!url || !*url) -+ continue; -+ parseURL2(url, &pu, NULL); -+ newent->url = parsedURL2Str(&pu)->ptr; -+ } -+ /* If we have an extra or unknown option, ignore this record -+ * for future extensions. */ -+ if (strcmp(opt, "exact") == 0) { -+ newent->url_exact = TRUE; -+ } -+ else if (*opt != 0) -+ continue; -+ if (*p) -+ continue; -+ ent = newent; -+ continue; -+ } -+ -+ /* If the current record is broken, skip to the next "url". */ -+ if (!ent) -+ continue; -+ -+ /* Fill the new record. */ -+ if (strcmp(s, "substitute_url") == 0) { -+ ent->substitute_url = getQWord(&p); -+ SCONF_SET(ent, SCONF_SUBSTITUTE_URL); -+ } -+#ifdef USE_M17N -+ else if (strcmp(s, "url_charset") == 0) { -+ char *charset = getWord(&p); -+ ent->url_charset = (charset && *charset) ? -+ wc_charset_to_ces(charset) : 0; -+ SCONF_SET(ent, SCONF_URL_CHARSET); -+ } -+#endif /* USE_M17N */ -+ else if (strcmp(s, "no_referer_from") == 0) { -+ ent->no_referer_from = str_to_bool(getWord(&p), 0); -+ SCONF_SET(ent, SCONF_NO_REFERER_FROM); -+ } -+ else if (strcmp(s, "no_referer_to") == 0) { -+ ent->no_referer_to = str_to_bool(getWord(&p), 0); -+ SCONF_SET(ent, SCONF_NO_REFERER_TO); -+ } -+ } -+ if (ent) { -+ ent->next = siteconf_head; -+ siteconf_head = ent; -+ ent = NULL; -+ } -+ fclose(fp); -+} -+ -+const void * -+querySiteconf(const ParsedURL *query_pu, int field) -+{ -+ const struct siteconf_rec *ent; -+ Str u; -+ char *firstp, *lastp; -+ -+ if (field < 0 || field >= SCONF_N_FIELD) -+ return NULL; -+ if (!query_pu || IS_EMPTY_PARSED_URL(query_pu)) -+ return NULL; -+ u = parsedURL2Str((ParsedURL *)query_pu); -+ if (u->length == 0) -+ return NULL; -+ -+ for (ent = siteconf_head; ent; ent = ent->next) { -+ if (!SCONF_TEST(ent, field)) -+ continue; -+ if (ent->re_url) { -+ if (RegexMatch(ent->re_url, u->ptr, u->length, 1)) { -+ MatchedPosition(ent->re_url, &firstp, &lastp); -+ if (!ent->url_exact) -+ goto url_found; -+ if (firstp != u->ptr || lastp == firstp) -+ continue; -+ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' || -+ *lastp == '#' || *(lastp - 1) == '#') -+ goto url_found; -+ } -+ } else { -+ int matchlen = strmatchlen(ent->url, u->ptr, u->length); -+ if (matchlen == 0 || ent->url[matchlen] != 0) -+ continue; -+ firstp = u->ptr; -+ lastp = u->ptr + matchlen; -+ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' || -+ *lastp == '#' || *(lastp - 1) == '#') -+ goto url_found; -+ if (!ent->url_exact && (*lastp == '/' || *(lastp - 1) == '/')) -+ goto url_found; -+ } -+ } -+ return NULL; -+ -+url_found: -+ switch (field) { -+ case SCONF_SUBSTITUTE_URL: -+ if (ent->substitute_url && *ent->substitute_url) { -+ Str tmp = Strnew_charp_n(u->ptr, firstp - u->ptr); -+ Strcat_charp(tmp, ent->substitute_url); -+ Strcat_charp(tmp, lastp); -+ return tmp->ptr; -+ } -+ return NULL; -+#ifdef USE_M17N -+ case SCONF_URL_CHARSET: -+ return &ent->url_charset; -+#endif -+ case SCONF_NO_REFERER_FROM: -+ return &ent->no_referer_from; -+ case SCONF_NO_REFERER_TO: -+ return &ent->no_referer_to; -+ } -+ return NULL; -+} -diff --git a/url.c b/url.c -index ed6062e..cbb4aab 100644 ---- a/url.c -+++ b/url.c -@@ -444,6 +444,8 @@ baseURL(Buffer *buf) - /* <BASE> tag is defined in the document */ - return buf->baseURL; - } -+ else if (IS_EMPTY_PARSED_URL(&buf->currentURL)) -+ return NULL; - else - return &buf->currentURL; - } -@@ -638,16 +640,21 @@ openSocket(char *const hostname, - #define COPYPATH_SPC_ALLOW 0 - #define COPYPATH_SPC_IGNORE 1 - #define COPYPATH_SPC_REPLACE 2 -+#define COPYPATH_SPC_MASK 3 -+#define COPYPATH_LOWERCASE 4 - - static char * - copyPath(char *orgpath, int length, int option) - { - Str tmp = Strnew(); -- while (*orgpath && length != 0) { -- if (IS_SPACE(*orgpath)) { -- switch (option) { -+ char ch; -+ while ((ch = *orgpath) != 0 && length != 0) { -+ if (option & COPYPATH_LOWERCASE) -+ ch = TOLOWER(ch); -+ if (IS_SPACE(ch)) { -+ switch (option & COPYPATH_SPC_MASK) { - case COPYPATH_SPC_ALLOW: -- Strcat_char(tmp, *orgpath); -+ Strcat_char(tmp, ch); - break; - case COPYPATH_SPC_IGNORE: - /* do nothing */ -@@ -658,7 +665,7 @@ copyPath(char *orgpath, int length, int option) - } - } - else -- Strcat_char(tmp, *orgpath); -+ Strcat_char(tmp, ch); - orgpath++; - length--; - } -@@ -668,22 +675,14 @@ copyPath(char *orgpath, int length, int option) - void - parseURL(char *url, ParsedURL *p_url, ParsedURL *current) - { -- char *p, *q; -+ char *p, *q, *qq; - Str tmp; - - url = url_quote(url); /* quote 0x01-0x20, 0x7F-0xFF */ - - p = url; -+ copyParsedURL(p_url, NULL); - p_url->scheme = SCM_MISSING; -- p_url->port = 0; -- p_url->user = NULL; -- p_url->pass = NULL; -- p_url->host = NULL; -- p_url->is_nocache = 0; -- p_url->file = NULL; -- p_url->real_file = NULL; -- p_url->query = NULL; -- p_url->label = NULL; - - /* RFC1808: Relative Uniform Resource Locators - * 4. Resolving Relative URLs -@@ -694,7 +693,7 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) - goto do_label; - } - #if defined( __EMX__ ) || defined( __CYGWIN__ ) -- if (!strncmp(url, "file://localhost/", 17)) { -+ if (!strncasecmp(url, "file://localhost/", 17)) { - p_url->scheme = SCM_LOCAL; - p += 17 - 1; - url += 17 - 1; -@@ -802,19 +801,20 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) - /* scheme://user:pass@host or - * scheme://host:port - */ -- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE); -+ qq = q; - q = ++p; - while (*p && strchr("@/?#", *p) == NULL) - p++; - if (*p == '@') { - /* scheme://user:pass@... */ -+ p_url->user = copyPath(qq, q - 1 - qq, COPYPATH_SPC_IGNORE); - p_url->pass = copyPath(q, p - q, COPYPATH_SPC_ALLOW); - q = ++p; -- p_url->user = p_url->host; -- p_url->host = NULL; - goto analyze_url; - } - /* scheme://host:port/ */ -+ p_url->host = copyPath(qq, q - 1 - qq, -+ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE); - tmp = Strnew_charp_n(q, p - q); - p_url->port = atoi(tmp->ptr); - /* *p is one of ['\0', '/', '?', '#'] */ -@@ -829,7 +829,8 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) - case '/': - case '?': - case '#': -- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE); -+ p_url->host = copyPath(q, p - q, -+ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE); - p_url->port = DefaultPort[p_url->scheme]; - break; - } -@@ -956,12 +957,16 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) - p_url->label = NULL; - } - --#define initParsedURL(p) bzero(p,sizeof(ParsedURL)) - #define ALLOC_STR(s) ((s)==NULL?NULL:allocStr(s,-1)) - - void --copyParsedURL(ParsedURL *p, ParsedURL *q) -+copyParsedURL(ParsedURL *p, const ParsedURL *q) - { -+ if (q == NULL) { -+ memset(p, 0, sizeof(ParsedURL)); -+ p->scheme = SCM_UNKNOWN; -+ return; -+ } - p->scheme = q->scheme; - p->port = q->port; - p->is_nocache = q->is_nocache; -@@ -1283,6 +1288,8 @@ static char * - otherinfo(ParsedURL *target, ParsedURL *current, char *referer) - { - Str s = Strnew(); -+ const int *no_referer_ptr; -+ int no_referer; - - Strcat_charp(s, "User-Agent: "); - if (UserAgent == NULL || *UserAgent == '\0') -@@ -1306,7 +1313,12 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer) - Strcat_charp(s, "Pragma: no-cache\r\n"); - Strcat_charp(s, "Cache-control: no-cache\r\n"); - } -- if (!NoSendReferer) { -+ no_referer = NoSendReferer; -+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(current); -+ no_referer = NoSendReferer || (no_referer_ptr && *no_referer_ptr); -+ no_referer_ptr = query_SCONF_NO_REFERER_TO(target); -+ no_referer = no_referer || (no_referer_ptr && *no_referer_ptr); -+ if (!no_referer) { - #ifdef USE_SSL - if (current && current->scheme == SCM_HTTPS && target->scheme != SCM_HTTPS) { - /* Don't send Referer: if https:// -> http:// */ -@@ -1314,6 +1326,7 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer) - else - #endif - if (referer == NULL && current && current->scheme != SCM_LOCAL && -+ current->scheme != SCM_LOCAL_CGI && - (current->scheme != SCM_FTP || - (current->user == NULL && current->pass == NULL))) { - char *p = current->label; -@@ -2234,3 +2247,66 @@ schemeToProxy(int scheme) - } - return pu; - } -+ -+#ifdef USE_M17N -+wc_ces -+url_to_charset(const char *url, const ParsedURL *base, wc_ces doc_charset) -+{ -+ const ParsedURL *pu; -+ ParsedURL pu_buf; -+ const wc_ces *csptr; -+ -+ if (url && *url && *url != '#') { -+ parseURL2((char *)url, &pu_buf, (ParsedURL *)base); -+ pu = &pu_buf; -+ } else { -+ pu = base; -+ } -+ if (pu && (pu->scheme == SCM_LOCAL || pu->scheme == SCM_LOCAL_CGI)) -+ return SystemCharset; -+ csptr = query_SCONF_URL_CHARSET(pu); -+ return (csptr && *csptr) ? *csptr : -+ doc_charset ? doc_charset : DocumentCharset; -+} -+ -+char * -+url_encode(const char *url, const ParsedURL *base, wc_ces doc_charset) -+{ -+ return url_quote_conv((char *)url, -+ url_to_charset(url, base, doc_charset)); -+} -+ -+#if 0 /* unused */ -+char * -+url_decode(const char *url, const ParsedURL *base, wc_ces doc_charset) -+{ -+ if (!DecodeURL) -+ return (char *)url; -+ return url_unquote_conv((char *)url, -+ url_to_charset(url, base, doc_charset)); -+} -+#endif -+ -+char * -+url_decode2(const char *url, const Buffer *buf) -+{ -+ wc_ces url_charset; -+ -+ if (!DecodeURL) -+ return (char *)url; -+ url_charset = buf ? -+ url_to_charset(url, baseURL((Buffer *)buf), buf->document_charset) : -+ url_to_charset(url, NULL, 0); -+ return url_unquote_conv((char *)url, url_charset); -+} -+ -+#else /* !defined(USE_M17N) */ -+ -+char * -+url_decode0(const char *url) -+{ -+ if (!DecodeURL) -+ return (char *)url; -+ return url_unquote_conv((char *)url, 0); -+} -+#endif /* !defined(USE_M17N) */ diff --git a/debian/patches/140_sort-dump-links.patch b/debian/patches/140_sort-dump-links.patch deleted file mode 100644 index f290613..0000000 --- a/debian/patches/140_sort-dump-links.patch +++ /dev/null @@ -1,47 +0,0 @@ -Subject: Sort anchors by sequence number in -dump -Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657666 -From: "Conrad J.C. Hughes (for Debian package stuff)" <debbugs@xrad.org> - -Resolved merge conflicts by Tatsuya Kinoshita. - ---- a/main.c -+++ b/main.c -@@ -1269,6 +1269,12 @@ dump_extra(Buffer *buf) - #endif - } - -+static int -+cmp_anchor_hseq(const void *a, const void *b) -+{ -+ return (*((const Anchor **) a))->hseq - (*((const Anchor **) b))->hseq; -+} -+ - static void - do_dump(Buffer *buf) - { -@@ -1289,15 +1295,20 @@ do_dump(Buffer *buf) - int i; - saveBuffer(buf, stdout, FALSE); - if (displayLinkNumber && buf->href) { -+ int nanchor = buf->href->nanchor; - printf("\nReferences:\n\n"); -- for (i = 0; i < buf->href->nanchor; i++) { -- ParsedURL pu; -+ Anchor **in_order = New_N(Anchor *, buf->href->nanchor); -+ for (i = 0; i < nanchor; i++) -+ in_order[i] = buf->href->anchors + i; -+ qsort(in_order, nanchor, sizeof(Anchor *), cmp_anchor_hseq); -+ for (i = 0; i < nanchor; i++) { -+ ParsedURL pu; - char *url; -- if (buf->href->anchors[i].slave) -+ if (in_order[i]->slave) - continue; -- parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf)); -+ parseURL2(in_order[i]->url, &pu, baseURL(buf)); - url = url_decode2(parsedURL2Str(&pu)->ptr, Currentbuf); -- printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, url); -+ printf("[%d] %s\n", in_order[i]->hseq + 1, url); - } - } - } diff --git a/debian/patches/150_contact-list.patch b/debian/patches/150_contact-list.patch deleted file mode 100644 index 09c09c5..0000000 --- a/debian/patches/150_contact-list.patch +++ /dev/null @@ -1,32 +0,0 @@ -Subject: Update contact list in README -From: Tatsuya Kinoshita <tats@debian.org> -Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696209 - -diff --git a/doc-jp/README b/doc-jp/README -index 074766f..e5e59b1 100644 ---- a/doc-jp/README -+++ b/doc-jp/README -@@ -122,7 +122,6 @@ w3m - ± - satodai@w3m.jp - --ոۤMLޤǤ -- w3m-dev@sic.med.tohoku.ac.jp (ܸ) -- w3m-dev-en@sic.med.tohoku.ac.jp (Ѹ) -+ոۤ - http://w3m.sourceforge.net/ -+ https://sourceforge.net/projects/w3m/ -diff --git a/doc/README b/doc/README -index 324ea3e..60d6d19 100644 ---- a/doc/README -+++ b/doc/README -@@ -115,7 +115,6 @@ Current Maintainer - Tohoku University Hospital - satodai@w3m.jp - --Feel free to send your opinion to the w3m mailing-lists. -- w3m-dev@sic.med.tohoku.ac.jp (Japanese) -- w3m-dev-en@sic.med.tohoku.ac.jp (English) -+Feel free to send your opinion to: - http://w3m.sourceforge.net/ -+ https://sourceforge.net/projects/w3m/ diff --git a/debian/patches/160_ignore-shy.patch b/debian/patches/160_ignore-shy.patch deleted file mode 100644 index 2955881..0000000 --- a/debian/patches/160_ignore-shy.patch +++ /dev/null @@ -1,17 +0,0 @@ -Subject: Ignore ­ to prevent drawing hyphens everywhere -Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441934 -From: Hilko Bengen <bengen@debian.org> - -diff --git a/entity.c b/entity.c -index fdd8f64..a7c9e99 100644 ---- a/entity.c -+++ b/entity.c -@@ -44,6 +44,8 @@ conv_entity(unsigned int c) - return " "; - if (c == 0xa0) - return NBSP; -+ if (c == 0xad) /* SOFT HYPHEN */ -+ return ""; - if (c < 0x100) { /* Latin1 (ISO 8859-1) */ - if (UseAltEntity) - return alt_latin1[c - 0xa0]; diff --git a/debian/patches/170_w3mman2html-utf8.patch b/debian/patches/170_w3mman2html-utf8.patch deleted file mode 100644 index 94c5f09..0000000 --- a/debian/patches/170_w3mman2html-utf8.patch +++ /dev/null @@ -1,53 +0,0 @@ -Subject: More UTF-8 support and fixes for w3mman2html.cgi -Author: Piotr P. Karwasz, Justin B Rye <justin.byam.rye@gmail.com> -Origin: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/680202 -Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771004 - -diff --git a/scripts/w3mman/w3mman2html.cgi.in b/scripts/w3mman/w3mman2html.cgi.in -index f430307..2cd00f9 100644 ---- a/scripts/w3mman/w3mman2html.cgi.in -+++ b/scripts/w3mman/w3mman2html.cgi.in -@@ -34,7 +34,6 @@ Content-Type: text/html - EOF - $keyword =~ s:([^-\w\200-\377.,])::g; - open(F, "$MAN -k $keyword 2> /dev/null |"); -- @line = (); - while(<F>) { - chop; - $_ = &html_quote($_); -@@ -126,12 +125,14 @@ while(<F>) { - s/\&/\&/g; - s/\</\</g; - s/\>/\>/g; -+ # non ASCII UTF-8 codepoint -+ my $utf8="[\300-\337][\200-\277]|[\340-\357][\200-\277]{2}|[\360-\367][\200-\277]{3}|[\370-\373][\200-\277]{4}|[\374\375][\200-\277]{5}"; - -- s@([\200-\377].)(\010{1,2}\1)+@<b>$1</b>@g; -+ s@($utf8)(\010\1)+@<b>$1</b>@g; - s@(\&\w+;|.)(\010\1)+@<b>$1</b>@g; -- s@__\010{1,2}((\<b\>)?[\200-\377].(\</b\>)?)@<u>$1</u>@g; -+ s@_\010((\<b\>)?($utf8)(\</b\>)?)@<u>$1</u>@g; - s@_\010((\<b\>)?(\&\w+\;|.)(\</b\>)?)@<u>$1</u>@g; -- s@((\<b\>)?[\200-\377].(\</b\>)?)\010{1,2}__@<u>$1</u>@g; -+ s@((\<b\>)?($utf8)(\</b\>)?)\010_@<u>$1</u>@g; - s@((\<b\>)?(\&\w+\;|.)(\</b\>)?)\010_@<u>$1</u>@g; - s@.\010(.)@$1@g; - -@@ -156,7 +157,7 @@ EOF - } - - s@(http|ftp)://[\w.\-/~]+[\w/]@<a href="$&">$&</a>@g; -- s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1<a href="mailto:$3">$2$3</a>@g; -+ s@\b(mailto:|)(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@<a href="mailto:$2">$1$2</a>@g; - s@(\W)(\~?/[\w.][\w.\-/~]*)@$1 . &file_ref($2)@ge; - s@(include(<\/?[bu]\>|\s)*\<)([\w.\-/]+)@$1 . &include_ref($3)@ge; - if ($prev && m@^\s*(\<[bu]\>)*(\w[\w.\-]*)(\</[bu]\>)*(\([\dm]\w*\))@) { -@@ -220,7 +221,7 @@ sub is_command { - local($p); - - (! -d && -x) || return 0; -- if (! defined(%PATH)) { -+ if (! %PATH) { - for $p (split(":", $ENV{'PATH'})) { - $p =~ s@/+$@@; - $PATH{$p} = 1; diff --git a/debian/patches/180_execdict.patch b/debian/patches/180_execdict.patch deleted file mode 100644 index 1d3b8d6..0000000 --- a/debian/patches/180_execdict.patch +++ /dev/null @@ -1,14 +0,0 @@ -Subject: Fix potentially segfault of execdict() -From: Tatsuya Kinoshita <tats@debian.org> - ---- a/main.c -+++ b/main.c -@@ -5604,7 +5604,7 @@ execdict(char *word) - disp_message("Execution failed", TRUE); - return; - } -- else { -+ else if (buf != NO_BUFFER) { - buf->filename = w; - buf->buffername = Sprintf("%s %s", DICTBUFFERNAME, word)->ptr; - if (buf->type == NULL) diff --git a/debian/patches/190_Strchop.patch b/debian/patches/190_Strchop.patch deleted file mode 100644 index e27861f..0000000 --- a/debian/patches/190_Strchop.patch +++ /dev/null @@ -1,16 +0,0 @@ -Subject: Check length for Strchop() -From: Tatsuya Kinoshita <tats@debian.org> - ---- a/Str.c -+++ b/Str.c -@@ -278,8 +278,8 @@ void - Strchop(Str s) - { - STR_LENGTH_CHECK(s); -- while ((s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r') && -- s->length > 0) { -+ while (s->length > 0 && -+ (s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r')) { - s->length--; - } - s->ptr[s->length] = '\0'; diff --git a/debian/patches/200_readme-img-typo.patch b/debian/patches/200_readme-img-typo.patch deleted file mode 100644 index e322d5b..0000000 --- a/debian/patches/200_readme-img-typo.patch +++ /dev/null @@ -1,26 +0,0 @@ -Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=725892 -Bug: https://sourceforge.net/p/w3m/patches/67/ -From: Rafael Laboissiere <rafael@laboissiere.net> -Date: Wed, 9 Oct 2013 13:43:31 -0300 -Subject: README.img: Fix typo - ---- - doc/README.img | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/doc/README.img b/doc/README.img -index 0c10114..f11362f 100644 ---- a/doc/README.img -+++ b/doc/README.img -@@ -41,7 +41,7 @@ Key functions - Specify the following keymaps in ~/.w3m/keymap. - keymap X DISPLAY_IMAGE - keymap C-c STOP_IMAGE -- keyamp t SET_OPTION display_image=toggle -+ keymap t SET_OPTION display_image=toggle - - Commandline options - --- -1.8.4.rc3 - diff --git a/debian/patches/210_vim-like.patch b/debian/patches/210_vim-like.patch deleted file mode 100644 index dcb598b..0000000 --- a/debian/patches/210_vim-like.patch +++ /dev/null @@ -1,87 +0,0 @@ -Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028 -Bug: https://sourceforge.net/p/w3m/patches/68/ -Subject: vim/-perator like handling -From: Laurence Richert <laurencerichert@yahoo.de> - - - half page scrolling - - jumping to elements numbered by getLinkNumberStr() from Karsten - Schoelzel - -diff --git a/main.c b/main.c -index b421943..4b40e8e 100644 ---- a/main.c -+++ b/main.c -@@ -1566,6 +1566,18 @@ DEFUN(pgBack, PREV_PAGE, "Move to previous page") - * (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL); - } - -+/* Move half page forward */ -+DEFUN(hpgFore, NEXT_HALF_PAGE, "Scroll down half page") -+{ -+ nscroll(searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL); -+} -+ -+/* Move half page backward */ -+DEFUN(hpgBack, PREV_HALF_PAGE, "Scroll up half page") -+{ -+ nscroll(-searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL); -+} -+ - /* 1 line up */ - DEFUN(lup1, UP, "Scroll up one line") - { -@@ -3568,6 +3580,33 @@ DEFUN(lastA, LINK_END, "Go to the last link") - displayBuffer(Currentbuf, B_NORMAL); - } - -+/* go to the nth anchor */ -+DEFUN(nthA, LINK_N, "Go to the nth link") -+{ -+ HmarkerList *hl = Currentbuf->hmarklist; -+ BufferPoint *po; -+ Anchor *an; -+ -+ int n = searchKeyNum(); -+ if (n < 0 || n > hl->nmark) return; -+ -+ if (Currentbuf->firstLine == NULL) -+ return; -+ if (!hl || hl->nmark == 0) -+ return; -+ -+ po = hl->marks + n-1; -+ an = retrieveAnchor(Currentbuf->href, po->line, po->pos); -+ if (an == NULL) -+ an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos); -+ if (an == NULL) return; -+ -+ gotoLine(Currentbuf, po->line); -+ Currentbuf->pos = po->pos; -+ arrangeCursor(Currentbuf); -+ displayBuffer(Currentbuf, B_NORMAL); -+} -+ - /* go to the next anchor */ - DEFUN(nextA, NEXT_LINK, "Move to next link") - { -diff --git a/proto.h b/proto.h -index f8a7345..9d14a58 100644 ---- a/proto.h -+++ b/proto.h -@@ -11,6 +11,8 @@ extern void pushEvent(int cmd, void *data); - extern MySignalHandler intTrap(SIGNAL_ARG); - extern void pgFore(void); - extern void pgBack(void); -+extern void hpgFore(void); -+extern void hpgBack(void); - extern void lup1(void); - extern void ldown1(void); - extern void ctrCsrV(void); -@@ -61,6 +63,7 @@ extern void submitForm(void); - extern void followForm(void); - extern void topA(void); - extern void lastA(void); -+extern void nthA(void); - extern void onA(void); - - extern void nextA(void); diff --git a/debian/patches/220_maxcol.patch b/debian/patches/220_maxcol.patch deleted file mode 100644 index 432e09c..0000000 --- a/debian/patches/220_maxcol.patch +++ /dev/null @@ -1,17 +0,0 @@ -Subject: Bump MAXCOL to 256 -From: Tatsuya Kinoshita <tats@debian.org> -Bug: https://sourceforge.net/p/w3m/feature-requests/24/ - -diff --git a/table.h b/table.h -index 83b661f..fdcdef3 100644 ---- a/table.h -+++ b/table.h -@@ -17,7 +17,7 @@ - #define MAX_TABLE_N 20 /* maximum number of table in same level */ - - #define MAXROW 50 --#define MAXCOL 50 -+#define MAXCOL 256 - - #define MAX_WIDTH 80 - diff --git a/debian/patches/230_cygwin-lang.patch b/debian/patches/230_cygwin-lang.patch deleted file mode 100644 index 5a6671e..0000000 --- a/debian/patches/230_cygwin-lang.patch +++ /dev/null @@ -1,30 +0,0 @@ -Subject: Do not fail when LANG is not set on Cygwin -From: Tatsuya Kinoshita <tats@debian.org>, Jarek Czekalski <jarekczek@poczta.onet.pl> -Bug: https://sourceforge.net/p/w3m/patches/66/ - - Check whether the value of LC_ALL, LC_CTYPE or LANG is not NULL in - check_cygwin_console(). - -diff --git a/terms.c b/terms.c -index 7a3c987..399d117 100644 ---- a/terms.c -+++ b/terms.c -@@ -222,6 +222,7 @@ static void - check_cygwin_console(void) - { - char *term = getenv("TERM"); -+ char *ctype; - HANDLE hWnd; - - if (term == NULL) -@@ -236,7 +237,9 @@ check_cygwin_console(void) - isLocalConsole = 1; - } - } -- if (strncmp(getenv("LANG"), "ja", 2) == 0) { -+ if (((ctype = getenv("LC_ALL")) || -+ (ctype = getenv("LC_CTYPE")) || -+ (ctype = getenv("LANG"))) && strncmp(ctype, "ja", 2) == 0) { - isWinConsole = TERM_CYGWIN_RESERVE_IME; - } - #ifdef SUPPORT_WIN9X_CONSOLE_MBCS diff --git a/debian/patches/240_win64gc.patch b/debian/patches/240_win64gc.patch deleted file mode 100644 index 5005155..0000000 --- a/debian/patches/240_win64gc.patch +++ /dev/null @@ -1,1235 +0,0 @@ -Subject: Workaround of GC crash on Cygwin64 -From: AIDA Shinra <shinra@j10n.org> -Origin: http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch - - Patch from [w3m-dev:04469] on 2013-10-14. - -diff --git a/config.h.in b/config.h.in -index 59997b4..a4110ea 100644 ---- a/config.h.in -+++ b/config.h.in -@@ -210,6 +210,10 @@ typedef RETSIGTYPE MySignalHandler; - #define SUPPORT_WIN9X_CONSOLE_MBCS 1 - #endif - -+#if defined(__CYGWIN__) && defined(__x86_64__) -+#define DONT_CALL_GC_AFTER_FORK -+#endif -+ - #if defined(__DJGPP__) - #define DEFAULT_TERM "dosansi" - #else -diff --git a/file.c b/file.c -index 89c9152..6f4d5b8 100644 ---- a/file.c -+++ b/file.c -@@ -677,6 +677,7 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu) - #endif - init_stream(&f, SCM_LOCAL, newStrStream(src)); - loadHTMLstream(&f, newBuf, NULL, TRUE); -+ UFclose(&f); - for (l = newBuf->lastLine; l && l->real_linenumber; - l = l->prev) - l->real_linenumber = 0; -@@ -7238,16 +7239,17 @@ loadHTMLString(Str page) - MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; - Buffer *newBuf; - -+ init_stream(&f, SCM_LOCAL, newStrStream(page)); -+ - newBuf = newBuffer(INIT_BUFFER_WIDTH); - if (SETJMP(AbortLoading) != 0) { - TRAP_OFF; - discardBuffer(newBuf); -+ UFclose(&f); - return NULL; - } - TRAP_ON; - -- init_stream(&f, SCM_LOCAL, newStrStream(page)); -- - #ifdef USE_M17N - newBuf->document_charset = InnerCharset; - #endif -@@ -7257,6 +7259,7 @@ loadHTMLString(Str page) - #endif - - TRAP_OFF; -+ UFclose(&f); - newBuf->topLine = newBuf->firstLine; - newBuf->lastLine = newBuf->currentLine; - newBuf->currentLine = newBuf->firstLine; -@@ -7486,15 +7489,13 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) - !stat(cache->file, &st)) - goto image_buffer; - -- TRAP_ON; - if (IStype(uf->stream) != IST_ENCODED) - uf->stream = newEncodedStream(uf->stream, uf->encoding); -+ TRAP_ON; - if (save2tmp(*uf, cache->file) < 0) { -- UFclose(uf); - TRAP_OFF; - return NULL; - } -- UFclose(uf); - TRAP_OFF; - - cache->loaded = IMG_FLAG_LOADED; -@@ -7514,6 +7515,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) - - init_stream(&f, SCM_LOCAL, newStrStream(tmp)); - loadHTMLstream(&f, newBuf, src, TRUE); -+ UFclose(&f); - if (src) - fclose(src); - -@@ -7909,6 +7911,8 @@ save2tmp(URLFile uf, char *tmpf) - clen_t linelen = 0, trbyte = 0; - MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; - static JMP_BUF env_bak; -+ volatile int retval = 0; -+ char *volatile buf = NULL; - - ff = fopen(tmpf, "wb"); - if (ff == NULL) { -@@ -7945,25 +7949,25 @@ save2tmp(URLFile uf, char *tmpf) - else - #endif /* USE_NNTP */ - { -- Str buf = Strnew_size(SAVE_BUF_SIZE); -- while (UFread(&uf, buf, SAVE_BUF_SIZE)) { -- if (Strfputs(buf, ff) != buf->length) { -- bcopy(env_bak, AbortLoading, sizeof(JMP_BUF)); -- TRAP_OFF; -- fclose(ff); -- current_content_length = 0; -- return -2; -+ int count; -+ -+ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE); -+ while ((count = ISread_n(uf.stream, buf, SAVE_BUF_SIZE)) > 0) { -+ if (fwrite(buf, 1, count, ff) != count) { -+ retval = -2; -+ goto _end; - } -- linelen += buf->length; -+ linelen += count; - showProgress(&linelen, &trbyte); - } - } - _end: - bcopy(env_bak, AbortLoading, sizeof(JMP_BUF)); - TRAP_OFF; -+ xfree(buf); - fclose(ff); - current_content_length = 0; -- return 0; -+ return retval; - } - - Buffer * -@@ -8074,7 +8078,8 @@ _MoveFile(char *path1, char *path2) - FILE *f2; - int is_pipe; - clen_t linelen = 0, trbyte = 0; -- Str buf; -+ char *buf = NULL; -+ int count; - - f1 = openIS(path1); - if (f1 == NULL) -@@ -8092,12 +8097,13 @@ _MoveFile(char *path1, char *path2) - return -1; - } - current_content_length = 0; -- buf = Strnew_size(SAVE_BUF_SIZE); -- while (ISread(f1, buf, SAVE_BUF_SIZE)) { -- Strfputs(buf, f2); -- linelen += buf->length; -+ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE); -+ while ((count = ISread_n(f1, buf, SAVE_BUF_SIZE)) > 0) { -+ fwrite(buf, 1, count, f2); -+ linelen += count; - showProgress(&linelen, &trbyte); - } -+ xfree(buf); - ISclose(f1); - if (is_pipe) - pclose(f2); -@@ -8456,21 +8462,23 @@ uncompress_stream(URLFile *uf, char **src) - } - if (pid2 == 0) { - /* child2 */ -- Str buf = Strnew_size(SAVE_BUF_SIZE); -+ char *buf = NewWithoutGC_N(char, SAVE_BUF_SIZE); -+ int count; - FILE *f = NULL; - - setup_child(TRUE, 2, UFfileno(uf)); - if (tmpf) - f = fopen(tmpf, "wb"); -- while (UFread(uf, buf, SAVE_BUF_SIZE)) { -- if (Strfputs(buf, stdout) < 0) -+ while ((count = ISread_n(uf->stream, buf, SAVE_BUF_SIZE)) > 0) { -+ if (fwrite(buf, 1, count, stdout) != count) -+ break; -+ if (f && fwrite(buf, 1, count, f) != count) - break; -- if (f) -- Strfputs(buf, f); - } - UFclose(uf); - if (f) - fclose(f); -+ xfree(buf); - exit(0); - } - /* child1 */ -diff --git a/fm.h b/fm.h -index acdab46..2216b06 100644 ---- a/fm.h -+++ b/fm.h -@@ -76,6 +76,7 @@ typedef int wc_ces; /* XXX: not used */ - #include "textlist.h" - #include "funcname1.h" - #include "terms.h" -+#include "istream.h" - - #ifndef HAVE_BCOPY - void bcopy(const void *, void *, int); -@@ -288,8 +289,6 @@ extern int REV_LB[]; - #define inputFilenameHist(p,d,h) inputLineHist(p,d,IN_FILENAME,h) - #define inputChar(p) inputLine(p,"",IN_CHAR) - --#define free(x) GC_free(x) /* let GC do it. */ -- - #ifdef __EMX__ - #define HAVE_STRCASECMP - #define strcasecmp stricmp -@@ -895,6 +894,9 @@ global char *index_file init(NULL); - - global char *CurrentDir; - global int CurrentPid; -+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) -+global char *MyProgramName init("w3m"); -+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ - /* - * global Buffer *Currentbuf; - * global Buffer *Firstbuf; -diff --git a/html.h b/html.h -index 4a2827b..b4b3df9 100644 ---- a/html.h -+++ b/html.h -@@ -1,19 +1,17 @@ - /* $Id: html.h,v 1.31 2010/08/14 01:29:40 htrb Exp $ */ - #ifndef _HTML_H - #define _HTML_H -+#include "config.h" - #ifdef USE_SSL - #include <openssl/bio.h> - #include <openssl/x509.h> - #include <openssl/ssl.h> - #endif /* USE_SSL */ - --#include "istream.h" -- - #define StrUFgets(f) StrISgets((f)->stream) - #define StrmyUFgets(f) StrmyISgets((f)->stream) - #define UFgetc(f) ISgetc((f)->stream) - #define UFundogetc(f) ISundogetc((f)->stream) --#define UFread(f,buf,len) ISread((f)->stream,buf,len) - #define UFclose(f) (void)(ISclose((f)->stream) == 0 && ((f)->stream = NULL)) - #define UFfileno(f) ISfileno((f)->stream) - -@@ -62,11 +60,12 @@ typedef struct _ParsedURL { - int is_nocache; - } ParsedURL; - -+union input_stream; - typedef struct { - unsigned char scheme; - char is_cgi; - char encoding; -- InputStream stream; -+ union input_stream *stream; - char *ext; - int compression; - int content_encoding; -diff --git a/image.c b/image.c -index 5f5991a..9d0e9b5 100644 ---- a/image.c -+++ b/image.c -@@ -90,17 +90,18 @@ termImage() - static int - openImgdisplay() - { -+ char *cmd; -+ -+ if (!strchr(Imgdisplay, '/')) -+ cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr; -+ else -+ cmd = Imgdisplay; - Imgdisplay_pid = open_pipe_rw(&Imgdisplay_rf, &Imgdisplay_wf); - if (Imgdisplay_pid < 0) - goto err0; - if (Imgdisplay_pid == 0) { - /* child */ -- char *cmd; - setup_child(FALSE, 2, -1); -- if (!strchr(Imgdisplay, '/')) -- cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr; -- else -- cmd = Imgdisplay; - myExec(cmd); - /* XXX: ifdef __EMX__, use start /f ? */ - } -@@ -333,6 +334,9 @@ loadImage(Buffer *buf, int flag) - struct stat st; - int i, draw = FALSE; - /* int wait_st; */ -+#ifdef DONT_CALL_GC_AFTER_FORK -+ char *loadargs[7]; -+#endif - - if (maxLoadImage > MAX_LOAD_IMAGE) - maxLoadImage = MAX_LOAD_IMAGE; -@@ -433,6 +437,24 @@ loadImage(Buffer *buf, int flag) - image_cache[i] = cache; - - flush_tty(); -+#ifdef DONT_CALL_GC_AFTER_FORK -+ loadargs[0] = MyProgramName; -+ loadargs[1] = "-$$getimage"; -+ loadargs[2] = conv_to_system(cache->url); -+ loadargs[3] = conv_to_system(parsedURL2Str(cache->current)->ptr); -+ loadargs[4] = cache->file; -+ loadargs[5] = cache->touch; -+ loadargs[6] = NULL; -+ if ((cache->pid = fork()) == 0) { -+ setup_child(FALSE, 0, -1); -+ execvp(MyProgramName, loadargs); -+ exit(1); -+ } -+ else if (cache->pid < 0) { -+ cache->pid = 0; -+ return; -+ } -+#else /* !DONT_CALL_GC_AFTER_FORK */ - if ((cache->pid = fork()) == 0) { - Buffer *b; - /* -@@ -458,6 +480,7 @@ loadImage(Buffer *buf, int flag) - cache->pid = 0; - return; - } -+#endif /* !DONT_CALL_GC_AFTER_FORK */ - } - } - -diff --git a/indep.c b/indep.c -index 89e86c1..5c5de06 100644 ---- a/indep.c -+++ b/indep.c -@@ -721,6 +721,111 @@ shell_quote(char *str) - return str; - } - -+void * -+xrealloc(void *ptr, size_t size) -+{ -+ void *newptr = realloc(ptr, size); -+ if (newptr == NULL) { -+ fprintf(stderr, "Out of memory\n"); -+ exit(-1); -+ } -+ return newptr; -+} -+ -+/* Define this as a separate function in case the free() has -+ * an incompatible prototype. */ -+void -+xfree(void *ptr) -+{ -+ free(ptr); -+} -+ -+void * -+w3m_GC_realloc_atomic(void *ptr, size_t size) -+{ -+ return ptr ? GC_REALLOC(ptr, size) : GC_MALLOC_ATOMIC(size); -+} -+ -+void -+w3m_GC_free(void *ptr) -+{ -+ GC_FREE(ptr); -+} -+ -+void -+growbuf_init(struct growbuf *gb) -+{ -+ gb->ptr = NULL; -+ gb->length = 0; -+ gb->area_size = 0; -+ gb->realloc_proc = &w3m_GC_realloc_atomic; -+ gb->free_proc = &w3m_GC_free; -+} -+ -+void -+growbuf_init_without_GC(struct growbuf *gb) -+{ -+ gb->ptr = NULL; -+ gb->length = 0; -+ gb->area_size = 0; -+ gb->realloc_proc = &xrealloc; -+ gb->free_proc = &xfree; -+} -+ -+void -+growbuf_clear(struct growbuf *gb) -+{ -+ (*gb->free_proc) (gb->ptr); -+ gb->ptr = NULL; -+ gb->length = 0; -+ gb->area_size = 0; -+} -+ -+Str -+growbuf_to_Str(struct growbuf *gb) -+{ -+ Str s; -+ -+ if (gb->free_proc == &w3m_GC_free) { -+ growbuf_reserve(gb, gb->length + 1); -+ gb->ptr[gb->length] = '\0'; -+ s = New(struct _Str); -+ s->ptr = gb->ptr; -+ s->length = gb->length; -+ s->area_size = gb->area_size; -+ } else { -+ s = Strnew_charp_n(gb->ptr, gb->length); -+ (*gb->free_proc) (gb->ptr); -+ } -+ gb->ptr = NULL; -+ gb->length = 0; -+ gb->area_size = 0; -+ return s; -+} -+ -+void -+growbuf_reserve(struct growbuf *gb, int leastarea) -+{ -+ int newarea; -+ -+ if (gb->area_size < leastarea) { -+ newarea = gb->area_size * 3 / 2; -+ if (newarea < leastarea) -+ newarea = leastarea; -+ newarea += 16; -+ gb->ptr = (*gb->realloc_proc) (gb->ptr, newarea); -+ gb->area_size = newarea; -+ } -+} -+ -+void -+growbuf_append(struct growbuf *gb, const char *src, int len) -+{ -+ growbuf_reserve(gb, gb->length + len); -+ memcpy(&gb->ptr[gb->length], src, len); -+ gb->length += len; -+} -+ - static char * - w3m_dir(const char *name, char *dft) - { -diff --git a/indep.h b/indep.h -index cf566fe..84416ed 100644 ---- a/indep.h -+++ b/indep.h -@@ -12,6 +12,14 @@ - #define FALSE 0 - #endif /* FALSE */ - -+struct growbuf { -+ char *ptr; -+ int length; -+ int area_size; -+ void *(*realloc_proc) (void *, size_t); -+ void (*free_proc) (void *); -+}; -+ - #define RAW_MODE 0 - #define PAGER_MODE 1 - #define HTML_MODE 2 -@@ -65,6 +73,18 @@ extern Str Str_url_unquote(Str x, int is_form, int safe); - extern Str Str_form_quote(Str x); - #define Str_form_unquote(x) Str_url_unquote((x), TRUE, FALSE) - extern char *shell_quote(char *str); -+#define xmalloc(s) xrealloc(NULL, s) -+extern void *xrealloc(void *ptr, size_t size); -+extern void xfree(void *ptr); -+extern void *w3m_GC_realloc_atomic(void *ptr, size_t size); -+extern void w3m_GC_free(void *ptr); -+extern void growbuf_init(struct growbuf *gb); -+extern void growbuf_init_without_GC(struct growbuf *gb); -+extern void growbuf_clear(struct growbuf *gb); -+extern Str growbuf_to_Str(struct growbuf *gb); -+extern void growbuf_reserve(struct growbuf *gb, int leastarea); -+extern void growbuf_append(struct growbuf *gb, const char *src, int len); -+#define GROWBUF_ADD_CHAR(gb,ch) ((((gb)->length>=(gb)->area_size)?growbuf_reserve(gb,(gb)->length+1):(void)0),(void)((gb)->ptr[(gb)->length++] = (ch))) - - extern char *w3m_auxbin_dir(); - extern char *w3m_lib_dir(); -@@ -77,5 +97,8 @@ extern char *w3m_help_dir(); - #define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) - #define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type))) - #define New_Reuse(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type))) -+#define NewWithoutGC(type) ((type*)xmalloc(sizeof(type))) -+#define NewWithoutGC_N(type,n) ((type*)xmalloc((n)*sizeof(type))) -+#define NewWithoutGC_Reuse(type,ptr,n) ((type*)xrealloc(ptr,(n)*sizeof(type))) - - #endif /* INDEP_H */ -diff --git a/istream.c b/istream.c -index d8c8e45..3126142 100644 ---- a/istream.c -+++ b/istream.c -@@ -35,12 +35,14 @@ static int ssl_read(struct ssl_handle *handle, char *buf, int len); - static int ens_read(struct ens_handle *handle, char *buf, int len); - static void ens_close(struct ens_handle *handle); - -+static void memchop(char *p, int *len); -+ - static void - do_update(BaseStream base) - { - int len; - base->stream.cur = base->stream.next = 0; -- len = base->read(base->handle, base->stream.buf, base->stream.size); -+ len = (*base->read) (base->handle, base->stream.buf, base->stream.size); - if (len <= 0) - base->iseos = TRUE; - else -@@ -66,12 +68,12 @@ init_buffer(BaseStream base, char *buf, int bufsize) - StreamBuffer sb = &base->stream; - sb->size = bufsize; - sb->cur = 0; -+ sb->buf = NewWithoutGC_N(uchar, bufsize); - if (buf) { -- sb->buf = (uchar *) buf; -+ memcpy(sb->buf, buf, bufsize); - sb->next = bufsize; - } - else { -- sb->buf = NewAtom_N(uchar, bufsize); - sb->next = 0; - } - base->iseos = FALSE; -@@ -95,10 +97,10 @@ newInputStream(int des) - InputStream stream; - if (des < 0) - return NULL; -- stream = New(union input_stream); -+ stream = NewWithoutGC(union input_stream); - init_base_stream(&stream->base, STREAM_BUF_SIZE); - stream->base.type = IST_BASIC; -- stream->base.handle = New(int); -+ stream->base.handle = NewWithoutGC(int); - *(int *)stream->base.handle = des; - stream->base.read = (int (*)())basic_read; - stream->base.close = (void (*)())basic_close; -@@ -111,10 +113,10 @@ newFileStream(FILE * f, void (*closep) ()) - InputStream stream; - if (f == NULL) - return NULL; -- stream = New(union input_stream); -+ stream = NewWithoutGC(union input_stream); - init_base_stream(&stream->base, STREAM_BUF_SIZE); - stream->file.type = IST_FILE; -- stream->file.handle = New(struct io_file_handle); -+ stream->file.handle = NewWithoutGC(struct io_file_handle); - stream->file.handle->f = f; - if (closep) - stream->file.handle->close = closep; -@@ -131,10 +133,10 @@ newStrStream(Str s) - InputStream stream; - if (s == NULL) - return NULL; -- stream = New(union input_stream); -+ stream = NewWithoutGC(union input_stream); - init_str_stream(&stream->base, s); - stream->str.type = IST_STR; -- stream->str.handle = s; -+ stream->str.handle = NULL; - stream->str.read = (int (*)())str_read; - stream->str.close = NULL; - return stream; -@@ -147,10 +149,10 @@ newSSLStream(SSL * ssl, int sock) - InputStream stream; - if (sock < 0) - return NULL; -- stream = New(union input_stream); -+ stream = NewWithoutGC(union input_stream); - init_base_stream(&stream->base, SSL_BUF_SIZE); - stream->ssl.type = IST_SSL; -- stream->ssl.handle = New(struct ssl_handle); -+ stream->ssl.handle = NewWithoutGC(struct ssl_handle); - stream->ssl.handle->ssl = ssl; - stream->ssl.handle->sock = sock; - stream->ssl.read = (int (*)())ssl_read; -@@ -166,14 +168,14 @@ newEncodedStream(InputStream is, char encoding) - if (is == NULL || (encoding != ENC_QUOTE && encoding != ENC_BASE64 && - encoding != ENC_UUENCODE)) - return is; -- stream = New(union input_stream); -+ stream = NewWithoutGC(union input_stream); - init_base_stream(&stream->base, STREAM_BUF_SIZE); - stream->ens.type = IST_ENCODED; -- stream->ens.handle = New(struct ens_handle); -+ stream->ens.handle = NewWithoutGC(struct ens_handle); - stream->ens.handle->is = is; - stream->ens.handle->pos = 0; - stream->ens.handle->encoding = encoding; -- stream->ens.handle->s = NULL; -+ growbuf_init_without_GC(&stream->ens.handle->gb); - stream->ens.read = (int (*)())ens_read; - stream->ens.close = (void (*)())ens_close; - return stream; -@@ -187,8 +189,10 @@ ISclose(InputStream stream) - stream->base.type & IST_UNCLOSE) - return -1; - prevtrap = mySignal(SIGINT, SIG_IGN); -- stream->base.close(stream->base.handle); -+ stream->base.close (stream->base.handle); - mySignal(SIGINT, prevtrap); -+ xfree(stream->base.stream.buf); -+ xfree(stream); - return 0; - } - -@@ -218,122 +222,97 @@ ISundogetc(InputStream stream) - return -1; - } - --#define MARGIN_STR_SIZE 10 - Str --StrISgets(InputStream stream) -+StrISgets2(InputStream stream, char crnl) - { -- BaseStream base; -- StreamBuffer sb; -- Str s = NULL; -- uchar *p; -- int len; -+ struct growbuf gb; - - if (stream == NULL) -- return '\0'; -- base = &stream->base; -- sb = &base->stream; -- -- while (!base->iseos) { -- if (MUST_BE_UPDATED(base)) { -- do_update(base); -- } -- else { -- if ((p = memchr(&sb->buf[sb->cur], '\n', sb->next - sb->cur))) { -- len = p - &sb->buf[sb->cur] + 1; -- if (s == NULL) -- s = Strnew_size(len); -- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len); -- sb->cur += len; -- return s; -- } -- else { -- if (s == NULL) -- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE); -- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], -- sb->next - sb->cur); -- sb->cur = sb->next; -- } -- } -- } -- -- if (s == NULL) -- return Strnew(); -- return s; -+ return NULL; -+ growbuf_init(&gb); -+ ISgets_to_growbuf(stream, &gb, crnl); -+ return growbuf_to_Str(&gb); - } - --Str --StrmyISgets(InputStream stream) -+void -+ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl) - { -- BaseStream base; -- StreamBuffer sb; -- Str s = NULL; -- int i, len; -+ BaseStream base = &stream->base; -+ StreamBuffer sb = &base->stream; -+ int i; - -- if (stream == NULL) -- return '\0'; -- base = &stream->base; -- sb = &base->stream; -+ gb->length = 0; - - while (!base->iseos) { - if (MUST_BE_UPDATED(base)) { - do_update(base); -+ continue; - } -- else { -- if (s && Strlastchar(s) == '\r') { -- if (sb->buf[sb->cur] == '\n') -- Strcat_char(s, (char)sb->buf[sb->cur++]); -- return s; -+ if (crnl && gb->length > 0 && gb->ptr[gb->length - 1] == '\r') { -+ if (sb->buf[sb->cur] == '\n') { -+ GROWBUF_ADD_CHAR(gb, '\n'); -+ ++sb->cur; - } -- for (i = sb->cur; -- i < sb->next && sb->buf[i] != '\n' && sb->buf[i] != '\r'; -- i++) ; -- if (i < sb->next) { -- len = i - sb->cur + 1; -- if (s == NULL) -- s = Strnew_size(len + MARGIN_STR_SIZE); -- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len); -- sb->cur = i + 1; -- if (sb->buf[i] == '\n') -- return s; -- } -- else { -- if (s == NULL) -- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE); -- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], -- sb->next - sb->cur); -- sb->cur = sb->next; -+ break; -+ } -+ for (i = sb->cur; i < sb->next; ++i) { -+ if (sb->buf[i] == '\n' || (crnl && sb->buf[i] == '\r')) { -+ ++i; -+ break; - } - } -+ growbuf_append(gb, &sb->buf[sb->cur], i - sb->cur); -+ sb->cur = i; -+ if (gb->length > 0 && gb->ptr[gb->length - 1] == '\n') -+ break; - } - -- if (s == NULL) -- return Strnew(); -- return s; -+ growbuf_reserve(gb, gb->length + 1); -+ gb->ptr[gb->length] = '\0'; -+ return; - } - -+#ifdef unused - int - ISread(InputStream stream, Str buf, int count) - { -- int rest, len; -+ int len; -+ -+ if (count + 1 > buf->area_size) { -+ char *newptr = GC_MALLOC_ATOMIC(count + 1); -+ memcpy(newptr, buf->ptr, buf->length); -+ newptr[buf->length] = '\0'; -+ buf->ptr = newptr; -+ buf->area_size = count + 1; -+ } -+ len = ISread_n(stream, buf->ptr, count); -+ buf->length = (len > 0) ? len : 0; -+ buf->ptr[buf->length] = '\0'; -+ return (len > 0) ? 1 : 0; -+} -+#endif -+ -+int -+ISread_n(InputStream stream, char *dst, int count) -+{ -+ int len, l; - BaseStream base; - -- if (stream == NULL || (base = &stream->base)->iseos) -+ if (stream == NULL || count <= 0) -+ return -1; -+ if ((base = &stream->base)->iseos) - return 0; - -- len = buffer_read(&base->stream, buf->ptr, count); -- rest = count - len; -+ len = buffer_read(&base->stream, dst, count); - if (MUST_BE_UPDATED(base)) { -- len = base->read(base->handle, &buf->ptr[len], rest); -- if (len <= 0) { -+ l = (*base->read) (base->handle, &dst[len], count - len); -+ if (l <= 0) { - base->iseos = TRUE; -- len = 0; -+ } else { -+ len += l; - } -- rest -= len; - } -- Strtruncate(buf, count - rest); -- if (buf->length > 0) -- return 1; -- return 0; -+ return len; - } - - int -@@ -645,6 +624,7 @@ basic_close(int *handle) - #else - close(*(int *)handle); - #endif -+ xfree(handle); - } - - static int -@@ -661,6 +641,7 @@ static void - file_close(struct io_file_handle *handle) - { - handle->close(handle->f); -+ xfree(handle); - } - - static int -@@ -682,6 +663,7 @@ ssl_close(struct ssl_handle *handle) - close(handle->sock); - if (handle->ssl) - SSL_free(handle->ssl); -+ xfree(handle); - } - - static int -@@ -717,38 +699,60 @@ static void - ens_close(struct ens_handle *handle) - { - ISclose(handle->is); -+ growbuf_clear(&handle->gb); -+ xfree(handle); - } - - static int - ens_read(struct ens_handle *handle, char *buf, int len) - { -- if (handle->s == NULL || handle->pos == handle->s->length) { -+ if (handle->pos == handle->gb.length) { - char *p; -- handle->s = StrmyISgets(handle->is); -- if (handle->s->length == 0) -+ struct growbuf gbtmp; -+ -+ ISgets_to_growbuf(handle->is, &handle->gb, TRUE); -+ if (handle->gb.length == 0) - return 0; -- cleanup_line(handle->s, PAGER_MODE); - if (handle->encoding == ENC_BASE64) -- Strchop(handle->s); -+ memchop(handle->gb.ptr, &handle->gb.length); - else if (handle->encoding == ENC_UUENCODE) { -- if (!strncmp(handle->s->ptr, "begin", 5)) -- handle->s = StrmyISgets(handle->is); -- Strchop(handle->s); -+ if (handle->gb.length >= 5 && -+ !strncmp(handle->gb.ptr, "begin", 5)) -+ ISgets_to_growbuf(handle->is, &handle->gb, TRUE); -+ memchop(handle->gb.ptr, &handle->gb.length); - } -- p = handle->s->ptr; -+ growbuf_init_without_GC(&gbtmp); -+ p = handle->gb.ptr; - if (handle->encoding == ENC_QUOTE) -- handle->s = decodeQP(&p); -+ decodeQP_to_growbuf(&gbtmp, &p); - else if (handle->encoding == ENC_BASE64) -- handle->s = decodeB(&p); -+ decodeB_to_growbuf(&gbtmp, &p); - else if (handle->encoding == ENC_UUENCODE) -- handle->s = decodeU(&p); -+ decodeU_to_growbuf(&gbtmp, &p); -+ growbuf_clear(&handle->gb); -+ handle->gb = gbtmp; - handle->pos = 0; - } - -- if (len > handle->s->length - handle->pos) -- len = handle->s->length - handle->pos; -+ if (len > handle->gb.length - handle->pos) -+ len = handle->gb.length - handle->pos; - -- bcopy(&handle->s->ptr[handle->pos], buf, len); -+ memcpy(buf, &handle->gb.ptr[handle->pos], len); - handle->pos += len; - return len; - } -+ -+static void -+memchop(char *p, int *len) -+{ -+ char *q; -+ -+ for (q = p + *len; q > p; --q) { -+ if (q[-1] != '\n' && q[-1] != '\r') -+ break; -+ } -+ if (q != p + *len) -+ *q = '\0'; -+ *len = q - p; -+ return; -+} -diff --git a/istream.h b/istream.h -index e710e78..5a04be0 100644 ---- a/istream.h -+++ b/istream.h -@@ -2,13 +2,13 @@ - #ifndef IO_STREAM_H - #define IO_STREAM_H - -+#include "indep.h" - #include <stdio.h> - #ifdef USE_SSL - #include <openssl/bio.h> - #include <openssl/x509.h> - #include <openssl/ssl.h> - #endif --#include "Str.h" - #include <sys/types.h> - #include <sys/stat.h> - #include <fcntl.h> -@@ -36,7 +36,7 @@ union input_stream; - - struct ens_handle { - union input_stream *is; -- Str s; -+ struct growbuf gb; - int pos; - char encoding; - }; -@@ -119,9 +119,14 @@ extern InputStream newEncodedStream(InputStream is, char encoding); - extern int ISclose(InputStream stream); - extern int ISgetc(InputStream stream); - extern int ISundogetc(InputStream stream); --extern Str StrISgets(InputStream stream); --extern Str StrmyISgets(InputStream stream); -+extern Str StrISgets2(InputStream stream, char crnl); -+#define StrISgets(stream) StrISgets2(stream, FALSE) -+#define StrmyISgets(stream) StrISgets2(stream, TRUE) -+void ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl); -+#ifdef unused - extern int ISread(InputStream stream, Str buf, int count); -+#endif -+int ISread_n(InputStream stream, char *dst, int bufsize); - extern int ISfileno(InputStream stream); - extern int ISeos(InputStream stream); - #ifdef USE_SSL -diff --git a/local.c b/local.c -index f5a73a2..959bd66 100644 ---- a/local.c -+++ b/local.c -@@ -359,6 +359,10 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) - int status; - pid_t pid; - char *file = uri, *name = uri, *path_info = NULL, *tmpf = NULL; -+#ifdef HAVE_CHDIR -+ char *cgi_dir; -+#endif -+ char *cgi_basename; - - #ifdef __MINGW32_VERSION - return NULL; -@@ -373,7 +377,14 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) - if (!fw) - return NULL; - } -+ if (qstr) -+ uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr; -+#ifdef HAVE_CHDIR -+ cgi_dir = mydirname(file); -+#endif -+ cgi_basename = mybasename(file); - pid = open_pipe_rw(&fr, NULL); -+ /* Don't invoke gc after here, or the program might crash in some platforms */ - if (pid < 0) - return NULL; - else if (pid) { -@@ -383,8 +394,6 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) - } - setup_child(TRUE, 2, fw ? fileno(fw) : -1); - -- if (qstr) -- uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr; - set_cgi_environ(name, file, uri); - if (path_info) - set_environ("PATH_INFO", path_info); -@@ -415,11 +424,11 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) - } - - #ifdef HAVE_CHDIR /* ifndef __EMX__ ? */ -- chdir(mydirname(file)); -+ chdir(cgi_dir); - #endif -- execl(file, mybasename(file), NULL); -+ execl(file, cgi_basename, NULL); - fprintf(stderr, "execl(\"%s\", \"%s\", NULL): %s\n", -- file, mybasename(file), strerror(errno)); -+ file, cgi_basename, strerror(errno)); - exit(1); - return NULL; - #endif -diff --git a/main.c b/main.c -index c49985d..ec77085 100644 ---- a/main.c -+++ b/main.c -@@ -11,6 +11,9 @@ - #include <sys/wait.h> - #endif - #include <time.h> -+#if defined(__CYGWIN__) && defined(USE_BINMODE_STREAM) -+#include <io.h> -+#endif - #include "terms.h" - #include "myctype.h" - #include "regex.h" -@@ -407,6 +410,10 @@ main(int argc, char **argv, char **envp) - wc_ces CodePage; - #endif - #endif -+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) -+ char **getimage_args = NULL; -+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ -+ - GC_INIT(); - #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET)) - setlocale(LC_ALL, ""); -@@ -428,6 +435,10 @@ main(int argc, char **argv, char **envp) - - CurrentDir = currentdir(); - CurrentPid = (int)getpid(); -+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) -+ if (argv[0] && *argv[0]) -+ MyProgramName = argv[0]; -+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ - BookmarkFile = NULL; - config_file = NULL; - -@@ -751,6 +762,15 @@ main(int argc, char **argv, char **envp) - else if (!strcmp("-reqlog",argv[i])) { - w3m_reqlog=rcFile("request.log"); - } -+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) -+ else if (!strcmp("-$$getimage", argv[i])) { -+ ++i; -+ getimage_args = argv + i; -+ i += 4; -+ if (i > argc) -+ usage(); -+ } -+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ - else { - usage(); - } -@@ -839,6 +859,30 @@ main(int argc, char **argv, char **envp) - - if (w3m_backend) - backend(); -+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) -+ if (getimage_args) { -+ char *image_url = conv_from_system(getimage_args[0]); -+ char *base_url = conv_from_system(getimage_args[1]); -+ ParsedURL base_pu; -+ -+ parseURL2(base_url, &base_pu, NULL); -+ image_source = getimage_args[2]; -+ newbuf = loadGeneralFile(image_url, &base_pu, NULL, 0, NULL); -+ if (!newbuf || !newbuf->real_type || -+ strncasecmp(newbuf->real_type, "image/", 6)) -+ unlink(getimage_args[2]); -+#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT) -+ symlink(getimage_args[2], getimage_args[3]); -+#else -+ { -+ FILE *f = fopen(getimage_args[3], "w"); -+ if (f) -+ fclose(f); -+ } -+#endif -+ w3m_exit(0); -+ } -+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ - - if (w3m_dump) - mySignal(SIGINT, SIG_IGN); -diff --git a/mimehead.c b/mimehead.c -index 78997e0..d16270c 100644 ---- a/mimehead.c -+++ b/mimehead.c -@@ -64,12 +64,22 @@ ha2d(char x, char y) - Str - decodeB(char **ww) - { -+ struct growbuf gb; -+ -+ growbuf_init(&gb); -+ decodeB_to_growbuf(&gb, ww); -+ return growbuf_to_Str(&gb); -+} -+ -+void -+decodeB_to_growbuf(struct growbuf *gb, char **ww) -+{ - unsigned char c[4]; - char *wp = *ww; - char d[3]; - int i, n_pad; -- Str ap = Strnew_size(strlen(wp)); - -+ growbuf_reserve(gb, strlen(wp) + 1); - n_pad = 0; - while (1) { - for (i = 0; i < 4; i++) { -@@ -93,39 +103,50 @@ decodeB(char **ww) - for (i = 0; i < 4; i++) { - c[i] = c2e(c[i]); - if (c[i] == BAD_BASE64) { -- *ww = wp; -- return ap; -+ goto last; - } - } - d[0] = ((c[0] << 2) | (c[1] >> 4)); - d[1] = ((c[1] << 4) | (c[2] >> 2)); - d[2] = ((c[2] << 6) | c[3]); - for (i = 0; i < 3 - n_pad; i++) { -- Strcat_char(ap, d[i]); -+ GROWBUF_ADD_CHAR(gb, d[i]); - } - if (n_pad || *wp == '\0' || *wp == '?') - break; - } -+last: -+ growbuf_reserve(gb, gb->length + 1); -+ gb->ptr[gb->length] = '\0'; - *ww = wp; -- return ap; -+ return; - } - - Str - decodeU(char **ww) - { -+ struct growbuf gb; -+ -+ growbuf_init(&gb); -+ decodeU_to_growbuf(&gb, ww); -+ return growbuf_to_Str(&gb); -+} -+ -+void -+decodeU_to_growbuf(struct growbuf *gb, char **ww) -+{ - unsigned char c1, c2; - char *w = *ww; - int n, i; -- Str a; - - if (*w <= 0x20 || *w >= 0x60) -- return Strnew_size(0); -+ return; - n = *w - 0x20; -- a = Strnew_size(n); -+ growbuf_reserve(gb, n + 1); - for (w++, i = 2; *w != '\0' && n; n--) { - c1 = (w[0] - 0x20) % 0x40; - c2 = (w[1] - 0x20) % 0x40; -- Strcat_char(a, (c1 << i) | (c2 >> (6 - i))); -+ gb->ptr[gb->length++] = (c1 << i) | (c2 >> (6 - i)); - if (i == 6) { - w += 2; - i = 2; -@@ -135,7 +156,8 @@ decodeU(char **ww) - i += 2; - } - } -- return a; -+ gb->ptr[gb->length] = '\0'; -+ return; - } - - /* RFC2047 (4.2. The "Q" encoding) */ -@@ -165,9 +187,19 @@ decodeQ(char **ww) - Str - decodeQP(char **ww) - { -+ struct growbuf gb; -+ -+ growbuf_init(&gb); -+ decodeQP_to_growbuf(&gb, ww); -+ return growbuf_to_Str(&gb); -+} -+ -+void -+decodeQP_to_growbuf(struct growbuf *gb, char **ww) -+{ - char *w = *ww; -- Str a = Strnew_size(strlen(w)); - -+ growbuf_reserve(gb, strlen(w) + 1); - for (; *w != '\0'; w++) { - if (*w == '=') { - w++; -@@ -180,15 +212,16 @@ decodeQP(char **ww) - else { - if (*w == '\0' || *(w + 1) == '\0') - break; -- Strcat_char(a, ha2d(*w, *(w + 1))); -+ gb->ptr[gb->length++] = ha2d(*w, *(w + 1)); - w++; - } - } - else -- Strcat_char(a, *w); -+ gb->ptr[gb->length++] = *w; - } -+ gb->ptr[gb->length] = '\0'; - *ww = w; -- return a; -+ return; - } - - #ifdef USE_M17N -diff --git a/proto.h b/proto.h -index 7248ee5..0d8beb5 100644 ---- a/proto.h -+++ b/proto.h -@@ -607,9 +607,12 @@ extern char *getAnchorText(Buffer *buf, AnchorList *al, Anchor *a); - extern Buffer *link_list_panel(Buffer *buf); - - extern Str decodeB(char **ww); -+extern void decodeB_to_growbuf(struct growbuf *gb, char **ww); - extern Str decodeQ(char **ww); - extern Str decodeQP(char **ww); -+extern void decodeQP_to_growbuf(struct growbuf *gb, char **ww); - extern Str decodeU(char **ww); -+extern void decodeU_to_growbuf(struct growbuf *gb, char **ww); - #ifdef USE_M17N - extern Str decodeWord(char **ow, wc_ces * charset); - extern Str decodeMIME(Str orgstr, wc_ces * charset); -@@ -811,5 +814,3 @@ extern void dispVer(void); - void srand48(long); - long lrand48(void); - #endif -- --#include "indep.h" diff --git a/debian/patches/250_schemebug.patch b/debian/patches/250_schemebug.patch deleted file mode 100644 index fc740ca..0000000 --- a/debian/patches/250_schemebug.patch +++ /dev/null @@ -1,97 +0,0 @@ -Subject: Define schemeNumToName() to fix scheme bug -From: AIDA Shinra <shinra@j10n.org> -Origin: http://www.j10n.org/files/w3m-cvs-1.1055-schemebug.patch -Bug: http://sourceforge.net/p/w3m/patches/60/ -Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=650747 - - Patch from [w3m-dev:04470] on 2013-10-14. - -diff --git a/url.c b/url.c -index cbb4aab..d7b1d6e 100644 ---- a/url.c -+++ b/url.c -@@ -121,6 +121,7 @@ static struct table2 DefaultGuess[] = { - }; - - static void add_index_file(ParsedURL *pu, URLFile *uf); -+static char * schemeNumToName(int scheme); - - /* #define HTTP_DEFAULT_FILE "/index.html" */ - -@@ -1285,6 +1286,18 @@ getURLScheme(char **url) - } - - static char * -+schemeNumToName(int scheme) -+{ -+ int i; -+ -+ for (i = 0; schemetable[i].cmdname != NULL; i++) { -+ if (schemetable[i].cmd == scheme) -+ return schemetable[i].cmdname; -+ } -+ return NULL; -+} -+ -+static char * - otherinfo(ParsedURL *target, ParsedURL *current, char *referer) - { - Str s = Strnew(); -@@ -1616,7 +1629,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, - pu->host != NULL && !check_no_proxy(pu->host)) { - hr->flag |= HR_FLAG_PROXY; - sock = openSocket(FTP_proxy_parsed.host, -- schemetable[FTP_proxy_parsed.scheme].cmdname, -+ schemeNumToName(FTP_proxy_parsed.scheme), - FTP_proxy_parsed.port); - if (sock < 0) - return uf; -@@ -1658,15 +1671,15 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, - } - else if (pu->scheme == SCM_HTTPS) { - sock = openSocket(HTTPS_proxy_parsed.host, -- schemetable[HTTPS_proxy_parsed.scheme]. -- cmdname, HTTPS_proxy_parsed.port); -+ schemeNumToName(HTTPS_proxy_parsed.scheme), -+ HTTPS_proxy_parsed.port); - sslh = NULL; - } - else { - #endif /* USE_SSL */ - sock = openSocket(HTTP_proxy_parsed.host, -- schemetable[HTTP_proxy_parsed.scheme]. -- cmdname, HTTP_proxy_parsed.port); -+ schemeNumToName(HTTP_proxy_parsed.scheme), -+ HTTP_proxy_parsed.port); - #ifdef USE_SSL - sslh = NULL; - } -@@ -1698,8 +1711,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, - } - } - else { -- sock = openSocket(pu->host, -- schemetable[pu->scheme].cmdname, pu->port); -+ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port); - if (sock < 0) { - *status = HTST_MISSING; - return uf; -@@ -1763,7 +1775,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, - pu->host != NULL && !check_no_proxy(pu->host)) { - hr->flag |= HR_FLAG_PROXY; - sock = openSocket(GOPHER_proxy_parsed.host, -- schemetable[GOPHER_proxy_parsed.scheme].cmdname, -+ schemeNumToName(GOPHER_proxy_parsed.scheme), - GOPHER_proxy_parsed.port); - if (sock < 0) - return uf; -@@ -1771,8 +1783,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, - tmp = HTTPrequest(pu, current, hr, extra_header); - } - else { -- sock = openSocket(pu->host, -- schemetable[pu->scheme].cmdname, pu->port); -+ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port); - if (sock < 0) - return uf; - if (pu->file == NULL) diff --git a/debian/patches/260_openssl.patch b/debian/patches/260_openssl.patch deleted file mode 100644 index 85c32c8..0000000 --- a/debian/patches/260_openssl.patch +++ /dev/null @@ -1,29 +0,0 @@ -Subject: OpenSSL issues -Author: Cristian Rodriguez <crrodriguez@opensuse.org> -Origin: https://build.opensuse.org/request/show/141054 -Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2012-4929 - - Mon Nov 12 18:26:45 UTC 2012 - crrodriguez@opensuse.org - - Due to the "CRIME attack" (CVE-2012-4929) HTTPS clients - that negotiate TLS-level compression can be abused for - MITM attacks. (w3m-openssl.patch) - - Use SSL_MODE_RELEASE_BUFFERS if available . - ---- w3m.orig/url.c -+++ w3m/url.c -@@ -337,7 +337,15 @@ openSSLHandle(int sock, char *hostname, - if (strchr(ssl_forbid_method, 'T')) - option |= SSL_OP_NO_TLSv1; - } -+#ifdef SSL_OP_NO_COMPRESSION -+ option |= SSL_OP_NO_COMPRESSION; -+#endif - SSL_CTX_set_options(ssl_ctx, option); -+ -+#ifdef SSL_MODE_RELEASE_BUFFERS -+ SSL_CTX_set_mode (ssl_ctx, SSL_MODE_RELEASE_BUFFERS); -+#endif -+ - #ifdef USE_SSL_VERIFY - /* derived from openssl-0.9.5/apps/s_{client,cb}.c */ - #if 1 /* use SSL_get_verify_result() to verify cert */ diff --git a/debian/patches/270_refresh-url.patch b/debian/patches/270_refresh-url.patch deleted file mode 100644 index 5d2d5a5..0000000 --- a/debian/patches/270_refresh-url.patch +++ /dev/null @@ -1,25 +0,0 @@ -Subject: Add support for single quoted meta refresh URL -From: Paul Boekholt <p.boekholt@gmail.com> -Bug: https://sourceforge.net/p/w3m/patches/53/ - ---- w3m.orig/file.c 2007-05-23 17:06:05.000000000 +0200 -+++ w3m/file.c 2008-09-06 08:46:00.000000000 +0200 -@@ -4240,15 +4240,15 @@ getMetaRefreshParam(char *q, Str *refres - while (*q) { - if (!strncasecmp(q, "url=", 4)) { - q += 4; -- if (*q == '\"') /* " */ -+ if (*q == '\"' || *q == '\'') /* " or ' */ - q++; - r = q; - while (*r && !IS_SPACE(*r) && *r != ';') - r++; - s_tmp = Strnew_charp_n(q, r - q); - -- if (s_tmp->ptr[s_tmp->length - 1] == '\"') { /* " -- */ -+ if (s_tmp->ptr[s_tmp->length - 1] == '\"' /* " */ -+ || s_tmp->ptr[s_tmp->length - 1] == '\'') { /* ' */ - s_tmp->length--; - s_tmp->ptr[s_tmp->length] = '\0'; - } diff --git a/debian/patches/280_search-next.patch b/debian/patches/280_search-next.patch deleted file mode 100644 index c66254b..0000000 --- a/debian/patches/280_search-next.patch +++ /dev/null @@ -1,19 +0,0 @@ -Subject: Fix crash after SEARCH_NEXT -From: AIDA Shinra <shinra@j10n.org> -Origin: http://www.j10n.org/files/w3m-cvs-1.1055-search-next.patch - - Patch from [w3m-dev:04473] on 2013-12-07. - ---- w3m.orig/main.c Mon Oct 14 02:20:37 2013 -+++ w3m/main.c Sat Dec 7 00:33:36 2013 -@@ -1928,6 +1928,10 @@ - result = srchcore(SearchString, routine[reverse]); - if (result & SR_FOUND) - clear_mark(Currentbuf->currentLine); -+ else { -+ if (reverse == 0) -+ Currentbuf->pos -= 1; -+ } - displayBuffer(Currentbuf, B_NORMAL); - disp_srchresult(result, (reverse ? "Backward: " : "Forward: "), - SearchString); diff --git a/debian/patches/290_closedir.patch b/debian/patches/290_closedir.patch deleted file mode 100644 index 04fafdf..0000000 --- a/debian/patches/290_closedir.patch +++ /dev/null @@ -1,19 +0,0 @@ -Subject: Fix a directory descriptor leak in loadLocalDir -Author: Reinhard Max <max@suse.de> -Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-closedir.patch -Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=531675 - - Mon Sep 7 16:49:56 CEST 2009 - max@suse.de - - Added w3m-closedir.patch to fix a directory descriptor leak in - loadLocalDir (bnc#531675). - ---- w3m.orig/local.c -+++ w3m/local.c -@@ -109,6 +109,7 @@ loadLocalDir(char *dname) - n++; - } - } -+ closedir(d); - - if (multicolList) { - l = COLS / (maxlen + 2); diff --git a/debian/patches/300_manual-links.patch b/debian/patches/300_manual-links.patch deleted file mode 100644 index 5c46065..0000000 --- a/debian/patches/300_manual-links.patch +++ /dev/null @@ -1,32 +0,0 @@ -Subject: Cleanup unusable links in MANUAL.html -From: Tatsuya Kinoshita <tats@debian.org> -Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517315 - -diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html -index 41d70f1..c9d0d5b 100644 ---- a/doc-jp/MANUAL.html -+++ b/doc-jp/MANUAL.html -@@ -489,8 +489,7 @@ w3m - w3mȤСHTTPФʤCGIץȤư뤳ȤǤޤ - ΤȤw3mФΤդƥץȤưνϤ - ɤߤɽ櫓Ǥ --<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">֥åޡϿ</a> --<a href="file:///$LIB/w3mhelperpanel?mode=panel">ӥ塼Խ</a> -+֥åޡϿȳӥ塼Խ - ϡlocal CGIΥץȤȤƼ¸Ƥޤ - local CGIȤСw3mѤΥեϥեȤ - ȤȤǤޤ -diff --git a/doc/MANUAL.html b/doc/MANUAL.html -index aff0189..04800d8 100644 ---- a/doc/MANUAL.html -+++ b/doc/MANUAL.html -@@ -468,8 +468,7 @@ and <a href="keymap.lynx">keymap.lynx</a>) as examples. - You can run CGI scripts using w3m, without any HTTP server. - It means that w3m behaves like an HTTP server and activates CGI script, - then w3m reads the output of the script and display it. The --<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">bookmark registration</a> --and <a href="file:///$LIB/w3mhelperpanel?mode=panel">helper-app editor</a> -+bookmark registration and helper-app editor - are realized as local CGI scripts. - Using local CGI, w3m can be used as a general purpose form interface. - <P> diff --git a/debian/patches/310_doc-ascii.patch b/debian/patches/310_doc-ascii.patch deleted file mode 100644 index 88ad60b..0000000 --- a/debian/patches/310_doc-ascii.patch +++ /dev/null @@ -1,79 +0,0 @@ -Subject: Prefer US-ASCII rathar than Japanese encodings in English documents -From: Tatsuya Kinoshita <tats@debian.org> - -diff --git a/doc/HISTORY b/doc/HISTORY -index b8f5b94..7f7ae2b 100644 ---- a/doc/HISTORY -+++ b/doc/HISTORY -@@ -588,7 +588,7 @@ From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - * space characters in a buffer are mapped into 0x80-0x9f. - * unprintable characters (0x80-0xa0) are displayed as \xxx. - --From: Tsutomu Okada ($B2,ED(B $BJY(B) <okada@furuno.co.jp> -+From: Tsutomu Okada <okada@furuno.co.jp> - Subject: [w3m-dev 01354] minimize when #undef USE_GOPHER or USE_NNTP - - 2000/11/16 -@@ -1422,7 +1422,7 @@ HTML4.0 ID attribute support. - - From: Okabe Katsuya <okabe@fphy.hep.okayama-u.ac.jp> - table get weird when it contains <input type=hidden>. --$B=$@5!%(B -+Fixed. - - 2000.2.12 - From: Rogue Metal - Jake Moorman <roguemtl@stampede.org> -@@ -1649,15 +1649,15 @@ From: patakuti - If an <input type=button> tag has no `name' attribute, - w3m adds it an inappropriate name attribute. - --From: $B$d$^(B -+From: Yama - Now w3m can handle a frameset that has both ROWS and COLS. - - From: aito - Now bookmarking is done by a separate command w3mbookmark. - --C-s $B$G2hLLI=<($,;_$^$C$F$$$?%P%0$N=$@5!%(B -+Bug fix that C-s hangs. - --$BJ8;zF~NO;~$K(B C-g $B$GCf;_$G$-$k$h$&$K$7$?!%(B -+Enable C-g to quit for keyboard input. - - From: hovav@cs.stanford.edu - When downloading a file, an attempt to save it to a non-exist -@@ -1699,7 +1699,7 @@ Menu behavior is changed. - * Clicking outside the menu causes cancellation of sub-menu. - * <, >, +, - abandoned - --From: $B$*$+$@(B <okada@furuno.co.jp> -+From: Okada <okada@furuno.co.jp> - Now C-a/C-e are bound to 'jump to the first/last item in menu.' - - From: "OMAE, jun" <jun-o@osb.att.ne.jp> -diff --git a/doc/README.cookie b/doc/README.cookie -index 56cca50..da16947 100644 ---- a/doc/README.cookie -+++ b/doc/README.cookie -@@ -37,7 +37,7 @@ cookie support of w3m - (HDN: host domain name) - - -- If the number of "." in domain name is lesser than 2, it is -+ * If the number of "." in domain name is lesser than 2, it is - assumed as invalid cookie (cf. RFC 2109 4.3.2), however, you can - use cookie_avoid_wrong_number_of_dots to avoid this - restriction. You can set this in "Domains to avoid [wrong number -diff --git a/doc/README.m17n b/doc/README.m17n -index c064d76..da5408b 100644 ---- a/doc/README.m17n -+++ b/doc/README.m17n -@@ -49,7 +49,7 @@ Supported encoding schemes (character set) - * Thai - TIS-620 (ISO-8859-11), CP874 - * Other -- US_ASCII, ISO-8859-1 10, 13 15, -+ US_ASCII, ISO-8859-1 - 10, 13 - 15, - KOI8-R, KOI8-U, NeXT, CP437, CP737, CP775, CP850, CP852, CP855, CP856, - CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP869, CP1006, - CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257 diff --git a/debian/patches/320_imlib2-config.patch b/debian/patches/320_imlib2-config.patch deleted file mode 100644 index 1c27468..0000000 --- a/debian/patches/320_imlib2-config.patch +++ /dev/null @@ -1,67 +0,0 @@ -Subject: Use pkg-config to build with imlib2 1.4.6 -From: Tatsuya Kinoshita <tats@debian.org> - -diff --git a/acinclude.m4 b/acinclude.m4 -index e4ccc3d..56d6338 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -649,6 +649,9 @@ AC_DEFUN([AC_W3M_IMAGE], - fi;; - imlib2) - with_imlib2="yes" -+ if test x"$PKG_CONFIG" = x; then -+ PKG_CONFIG=pkg-config -+ fi - if test x"$IMLIB2_CONFIG" = x; then - IMLIB2_CONFIG=imlib2-config - fi;; -@@ -728,7 +731,7 @@ AC_DEFUN([AC_W3M_IMAGE], - IMGTARGETS="x11" - AC_DEFINE(USE_IMLIB2) - IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`" -- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`" -+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`" - else - AC_MSG_WARN([unable to build w3mimgdisplay with X11 support]) - fi -@@ -756,7 +759,7 @@ AC_DEFUN([AC_W3M_IMAGE], - AC_DEFINE(USE_IMLIB2) - IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o" - IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`" -- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`" -+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`" - else - AC_MSG_WARN([unable to build w3mimgdisplay with FB support]) - fi -diff --git a/configure b/configure -index 4c1bc06..01153c1 100755 ---- a/configure -+++ b/configure -@@ -6811,6 +6811,9 @@ $as_echo "$with_imagelib" >&6; } - fi;; - imlib2) - with_imlib2="yes" -+ if test x"$PKG_CONFIG" = x; then -+ PKG_CONFIG=pkg-config -+ fi - if test x"$IMLIB2_CONFIG" = x; then - IMLIB2_CONFIG=imlib2-config - fi;; -@@ -6955,7 +6958,7 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >= - $as_echo "#define USE_IMLIB2 1" >>confdefs.h - - IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`" -- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`" -+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with X11 support" >&5 - $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;} -@@ -6991,7 +6994,7 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;} - - IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o" - IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`" -- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`" -+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with FB support" >&5 - $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with FB support" >&2;} diff --git a/debian/patches/330_Disable-weak-ciphers.patch b/debian/patches/330_Disable-weak-ciphers.patch deleted file mode 100644 index a243c61..0000000 --- a/debian/patches/330_Disable-weak-ciphers.patch +++ /dev/null @@ -1,16 +0,0 @@ -Subject: Disable ciphers that use keys smaller than 128 bits -From: Tatsuya Kinoshita <tats@debian.org> -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1325674 - -diff --git a/url.c b/url.c -index ed6062e..e6b51c8 100644 ---- a/url.c -+++ b/url.c -@@ -326,6 +326,7 @@ openSSLHandle(int sock, char *hostname, char **p_cert) - SSL_load_error_strings(); - if (!(ssl_ctx = SSL_CTX_new(SSLv23_client_method()))) - goto eend; -+ SSL_CTX_set_cipher_list(ssl_ctx, "DEFAULT:!LOW:!EXP"); - option = SSL_OP_ALL; - if (ssl_forbid_method) { - if (strchr(ssl_forbid_method, '2')) diff --git a/debian/patches/340_ssl-init.patch b/debian/patches/340_ssl-init.patch deleted file mode 100644 index b47bbb6..0000000 --- a/debian/patches/340_ssl-init.patch +++ /dev/null @@ -1,50 +0,0 @@ -Subject: Force ssl_verify_server on, and disable SSLv2 and SSLv3 -Author: Ludwig Nussel <ludwig.nussel@suse.de>, Tatsuya Kinoshita <tats@debian.org> -Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4 - - Update README.SSL to follow default values - - Disable SSLv3 by default [CVE-2014-3566] - cf. https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/ - - Force ssl_verify_server on and disable SSLv2 support - Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4 - -diff --git a/doc-jp/README.SSL b/doc-jp/README.SSL -index 4aedfde..670ed5f 100644 ---- a/doc-jp/README.SSL -+++ b/doc-jp/README.SSL -@@ -25,9 +25,9 @@ SSL - - ssl_forbid_method - ȤʤSSLåɤΥꥹ(2: SSLv2, 3: SSLv3, t: TLSv1) -- (ǥեȤ<NULL>). -+ (ǥեȤ2, 3). - ssl_verify_server ON/OFF -- SSLΥǧڤԤ(ǥեȤOFF). -+ SSLΥǧڤԤ(ǥեȤON). - ssl_cert_file ե̾ - SSLΥ饤PEMե(ǥեȤ<NULL>). - ssl_key_file ե̾ -diff --git a/fm.h b/fm.h -index 8378939..ddcd4fc 100644 ---- a/fm.h -+++ b/fm.h -@@ -1135,7 +1135,7 @@ global int view_unseenobject init(TRUE); - #endif - - #if defined(USE_SSL) && defined(USE_SSL_VERIFY) --global int ssl_verify_server init(FALSE); -+global int ssl_verify_server init(TRUE); - global char *ssl_cert_file init(NULL); - global char *ssl_key_file init(NULL); - global char *ssl_ca_path init(NULL); -@@ -1144,7 +1144,7 @@ global int ssl_path_modified init(FALSE); - #endif /* defined(USE_SSL) && - * defined(USE_SSL_VERIFY) */ - #ifdef USE_SSL --global char *ssl_forbid_method init(NULL); -+global char *ssl_forbid_method init("2, 3"); - #endif - - global int is_redisplay init(FALSE); diff --git a/debian/patches/350_ambwidth.patch b/debian/patches/350_ambwidth.patch deleted file mode 100644 index 4c2f926..0000000 --- a/debian/patches/350_ambwidth.patch +++ /dev/null @@ -1,239 +0,0 @@ -Subject: Fix incorrect generation of ucs_ambwidth_map -Author: Tatsuya Kinoshita <tats@debian.org> - -diff --git a/libwc/ambwidth_map.awk b/libwc/ambwidth_map.awk -index 8544f58..1d9d25f 100644 ---- a/libwc/ambwidth_map.awk -+++ b/libwc/ambwidth_map.awk -@@ -3,9 +3,15 @@ BEGIN { - i = 0; - } - $2 == "A" { -- code = sprintf("0x%s", $1); -- if (strtonum(code) < 0x10000) { -- map[i] = code -+ code = code2 = strtonum(sprintf("0x%s", $1)) -+ if (match($1, /[.]+[0-9A-Fa-f]+/)) { -+ s = substr($1, RSTART, RLENGTH) -+ sub(/[.]+/, "0x", s) -+ code2 = strtonum(s) -+ } -+ for (; code <= code2; code++) { -+ if (code >= 0x10000) { break } -+ map[i] = sprintf("0x%04X", code) - i++; - } - } -@@ -15,28 +21,14 @@ END { - prev = strtonum(map[0]); - for (j = 1; j < i; j++) { - cur = strtonum(map[j]); -- if (match(map[j], "[.]+")) { -+ if (cur - prev > 1) { - map2[n] = sprintf("%s, %s", start, map[j - 1]); - n++; -- gsub("[.]+", ", 0x", map[j]) -- map2[n] = map[j]; -- n++; -- start = map[j + 1]; -- cur = strtonum(start); -- } else { -- if (cur - prev > 2) { -- map2[n] = sprintf("%s, %s", start, map[j - 1]); -- start = map[j]; -- n++; -- } -- -- if (j == i - 1) { -- map2[n] = sprintf("%s, %s", start, map[j]); -- n++; -- } -+ start = map[j]; - } - prev = cur; - } -+ if (i > 0) { map2[n] = sprintf("%s, %s", start, map[i - 1]); n++ } - - printf("static wc_map ucs_ambwidth_map[] = {\n"); - for (j = 0; j < n; j++) { -diff --git a/libwc/map/ucs_ambwidth.map b/libwc/map/ucs_ambwidth.map -index 6f03ba8..35ceedb 100644 ---- a/libwc/map/ucs_ambwidth.map -+++ b/libwc/map/ucs_ambwidth.map -@@ -1,50 +1,82 @@ - static wc_map ucs_ambwidth_map[] = { - { 0x00A1, 0x00A1 }, - { 0x00A4, 0x00A4 }, -- { 0x00A7, 0x00AA }, -- { 0x00AD, 0x00BF }, -+ { 0x00A7, 0x00A8 }, -+ { 0x00AA, 0x00AA }, -+ { 0x00AD, 0x00AE }, -+ { 0x00B0, 0x00B4 }, -+ { 0x00B6, 0x00BA }, -+ { 0x00BC, 0x00BF }, - { 0x00C6, 0x00C6 }, - { 0x00D0, 0x00D0 }, - { 0x00D7, 0x00D8 }, - { 0x00DE, 0x00E1 }, -- { 0x00E6, 0x00ED }, -- { 0x00F0, 0x00F3 }, -- { 0x00F7, 0x00FE }, -+ { 0x00E6, 0x00E6 }, -+ { 0x00E8, 0x00EA }, -+ { 0x00EC, 0x00ED }, -+ { 0x00F0, 0x00F0 }, -+ { 0x00F2, 0x00F3 }, -+ { 0x00F7, 0x00FA }, -+ { 0x00FC, 0x00FC }, -+ { 0x00FE, 0x00FE }, - { 0x0101, 0x0101 }, -- { 0x0111, 0x0113 }, -+ { 0x0111, 0x0111 }, -+ { 0x0113, 0x0113 }, - { 0x011B, 0x011B }, - { 0x0126, 0x0127 }, - { 0x012B, 0x012B }, - { 0x0131, 0x0133 }, - { 0x0138, 0x0138 }, -- { 0x013F, 0x0144 }, -- { 0x0148, 0x014D }, -+ { 0x013F, 0x0142 }, -+ { 0x0144, 0x0144 }, -+ { 0x0148, 0x014B }, -+ { 0x014D, 0x014D }, - { 0x0152, 0x0153 }, - { 0x0166, 0x0167 }, - { 0x016B, 0x016B }, -- { 0x01CE, 0x01DC }, -+ { 0x01CE, 0x01CE }, -+ { 0x01D0, 0x01D0 }, -+ { 0x01D2, 0x01D2 }, -+ { 0x01D4, 0x01D4 }, -+ { 0x01D6, 0x01D6 }, -+ { 0x01D8, 0x01D8 }, -+ { 0x01DA, 0x01DA }, -+ { 0x01DC, 0x01DC }, - { 0x0251, 0x0251 }, - { 0x0261, 0x0261 }, - { 0x02C4, 0x02C4 }, -- { 0x02C7, 0x02CD }, -+ { 0x02C7, 0x02C7 }, -+ { 0x02C9, 0x02CB }, -+ { 0x02CD, 0x02CD }, - { 0x02D0, 0x02D0 }, -- { 0x02D8, 0x02DF }, -+ { 0x02D8, 0x02DB }, -+ { 0x02DD, 0x02DD }, -+ { 0x02DF, 0x02DF }, - { 0x0300, 0x036F }, -- { 0x0391, 0x03A9 }, -- { 0x03B1, 0x03C9 }, -+ { 0x0391, 0x03A1 }, -+ { 0x03A3, 0x03A9 }, -+ { 0x03B1, 0x03C1 }, -+ { 0x03C3, 0x03C9 }, - { 0x0401, 0x0401 }, -- { 0x0410, 0x0451 }, -+ { 0x0410, 0x044F }, -+ { 0x0451, 0x0451 }, - { 0x2010, 0x2010 }, -- { 0x2013, 0x2019 }, -+ { 0x2013, 0x2016 }, -+ { 0x2018, 0x2019 }, - { 0x201C, 0x201D }, -- { 0x2020, 0x2027 }, -- { 0x2030, 0x2035 }, -+ { 0x2020, 0x2022 }, -+ { 0x2024, 0x2027 }, -+ { 0x2030, 0x2030 }, -+ { 0x2032, 0x2033 }, -+ { 0x2035, 0x2035 }, - { 0x203B, 0x203B }, - { 0x203E, 0x203E }, - { 0x2074, 0x2074 }, -- { 0x207F, 0x2084 }, -+ { 0x207F, 0x207F }, -+ { 0x2081, 0x2084 }, - { 0x20AC, 0x20AC }, -- { 0x2103, 0x2105 }, -+ { 0x2103, 0x2103 }, -+ { 0x2105, 0x2105 }, - { 0x2109, 0x2109 }, - { 0x2113, 0x2113 }, - { 0x2116, 0x2116 }, -@@ -52,21 +84,28 @@ static wc_map ucs_ambwidth_map[] = { - { 0x2126, 0x2126 }, - { 0x212B, 0x212B }, - { 0x2153, 0x2154 }, -- { 0x215B, 0x216B }, -+ { 0x215B, 0x215E }, -+ { 0x2160, 0x216B }, - { 0x2170, 0x2179 }, - { 0x2189, 0x2189 }, - { 0x2190, 0x2199 }, - { 0x21B8, 0x21B9 }, -- { 0x21D2, 0x21D4 }, -+ { 0x21D2, 0x21D2 }, -+ { 0x21D4, 0x21D4 }, - { 0x21E7, 0x21E7 }, -- { 0x2200, 0x2203 }, -+ { 0x2200, 0x2200 }, -+ { 0x2202, 0x2203 }, - { 0x2207, 0x2208 }, - { 0x220B, 0x220B }, -- { 0x220F, 0x2211 }, -+ { 0x220F, 0x220F }, -+ { 0x2211, 0x2211 }, - { 0x2215, 0x2215 }, - { 0x221A, 0x221A }, - { 0x221D, 0x2220 }, -- { 0x2223, 0x222E }, -+ { 0x2223, 0x2223 }, -+ { 0x2225, 0x2225 }, -+ { 0x2227, 0x222C }, -+ { 0x222E, 0x222E }, - { 0x2234, 0x2237 }, - { 0x223C, 0x223D }, - { 0x2248, 0x2248 }, -@@ -83,11 +122,13 @@ static wc_map ucs_ambwidth_map[] = { - { 0x22A5, 0x22A5 }, - { 0x22BF, 0x22BF }, - { 0x2312, 0x2312 }, -- { 0x2460, 0x254B }, -+ { 0x2460, 0x24E9 }, -+ { 0x24EB, 0x254B }, - { 0x2550, 0x2573 }, - { 0x2580, 0x258F }, - { 0x2592, 0x2595 }, -- { 0x25A0, 0x25A9 }, -+ { 0x25A0, 0x25A1 }, -+ { 0x25A3, 0x25A9 }, - { 0x25B2, 0x25B3 }, - { 0x25B6, 0x25B7 }, - { 0x25BC, 0x25BD }, -@@ -101,12 +142,20 @@ static wc_map ucs_ambwidth_map[] = { - { 0x2609, 0x2609 }, - { 0x260E, 0x260F }, - { 0x2614, 0x2615 }, -- { 0x261C, 0x261E }, -- { 0x2640, 0x2642 }, -- { 0x2660, 0x266F }, -+ { 0x261C, 0x261C }, -+ { 0x261E, 0x261E }, -+ { 0x2640, 0x2640 }, -+ { 0x2642, 0x2642 }, -+ { 0x2660, 0x2661 }, -+ { 0x2663, 0x2665 }, -+ { 0x2667, 0x266A }, -+ { 0x266C, 0x266D }, -+ { 0x266F, 0x266F }, - { 0x269E, 0x269F }, - { 0x26BE, 0x26BF }, -- { 0x26C4, 0x26E3 }, -+ { 0x26C4, 0x26CD }, -+ { 0x26CF, 0x26E1 }, -+ { 0x26E3, 0x26E3 }, - { 0x26E8, 0x26FF }, - { 0x273D, 0x273D }, - { 0x2757, 0x2757 }, diff --git a/debian/patches/360_libressl.patch b/debian/patches/360_libressl.patch deleted file mode 100644 index 15d36f5..0000000 --- a/debian/patches/360_libressl.patch +++ /dev/null @@ -1,19 +0,0 @@ -Subject: Disable USE_EGD for LibreSSL -Author: Vsevolod Stakhov <vsevolod@FreeBSD.org> -Origin: https://bz-attachments.freebsd.org/attachment.cgi?id=144635 -Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191852 -Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191956 - -diff --git a/config.h.in b/config.h.in -index a4110ea..3b575e4 100644 ---- a/config.h.in -+++ b/config.h.in -@@ -85,7 +85,7 @@ - #undef INET6 - #undef HAVE_SOCKLEN_T - #undef HAVE_OLD_SS_FAMILY --#define USE_EGD -+#undef USE_EGD - #define ENABLE_REMOVE_TRAILINGSPACES - #undef MENU_THIN_FRAME - #undef USE_RAW_SCROLL diff --git a/debian/patches/370_gtk2-pkg-config.patch b/debian/patches/370_gtk2-pkg-config.patch deleted file mode 100644 index 5714fc5..0000000 --- a/debian/patches/370_gtk2-pkg-config.patch +++ /dev/null @@ -1,31 +0,0 @@ -Subject: Assume defined PKG_CONFIG points right location when gtk2 -Author: OBATA Akio <obache@netbsd.org> -Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-aa?rev=1.13&content-type=text/x-cvsweb-markup -Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-ak?rev=1.1&content-type=text/x-cvsweb-markup - -diff --git a/acinclude.m4 b/acinclude.m4 -index c1d112b..d768476 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -664,8 +664,6 @@ AC_DEFUN([AC_W3M_IMAGE], - with_gtk2="yes" - if test x"$PKG_CONFIG" = x; then - PKG_CONFIG=pkg-config -- else -- PKG_CONFIG=: - fi;; - esac - done -diff --git a/configure b/configure -index ec7f11e..b5adbb5 100755 ---- a/configure -+++ b/configure -@@ -6826,8 +6826,6 @@ $as_echo "$with_imagelib" >&6; } - with_gtk2="yes" - if test x"$PKG_CONFIG" = x; then - PKG_CONFIG=pkg-config -- else -- PKG_CONFIG=: - fi;; - esac - done diff --git a/debian/patches/380_tinfo.patch b/debian/patches/380_tinfo.patch deleted file mode 100644 index 7eb1a24..0000000 --- a/debian/patches/380_tinfo.patch +++ /dev/null @@ -1,44 +0,0 @@ -Subject: Add tinfo to with_termlib -Author: Jeroen Roovers <jer@gentoo.org> -Origin: https://504588.bugs.gentoo.org/attachment.cgi?id=372650 -Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=504588 - -diff --git a/acinclude.m4 b/acinclude.m4 -index d768476..94fcbb5 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -400,10 +400,10 @@ AC_DEFUN([AC_W3M_TERMLIB], - AC_ARG_WITH(termlib, - [ --with-termlib[=LIBS] terminal library - LIBS is space separated list of: -- terminfo mytinfo termcap ncurses curses],, -+ terminfo mytinfo termcap tinfo ncurses curses],, - [with_termlib="yes"]) - AC_MSG_RESULT($with_termlib) -- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses" -+ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses" - for lib in $with_termlib; do - AC_CHECK_LIB($lib, tgetent, [W3M_LIBS="$W3M_LIBS -l$lib"; break]) - done -diff --git a/configure b/configure -index b5adbb5..fd916fc 100755 ---- a/configure -+++ b/configure -@@ -1490,7 +1490,7 @@ Optional Packages: - --with-ssl=PREFIX support https protocol - --with-termlib=LIBS terminal library - LIBS is space separated list of: -- terminfo mytinfo termcap ncurses curses -+ terminfo mytinfo termcap tinfo ncurses curses - --with-gc=PREFIX libgc PREFIX - - Some influential environment variables: -@@ -7978,7 +7978,7 @@ fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_termlib" >&5 - $as_echo "$with_termlib" >&6; } -- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses" -+ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses" - for lib in $with_termlib; do - as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_tgetent" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$lib" >&5 diff --git a/debian/patches/390_gdk-pixbuf.patch b/debian/patches/390_gdk-pixbuf.patch deleted file mode 100644 index eb6149f..0000000 --- a/debian/patches/390_gdk-pixbuf.patch +++ /dev/null @@ -1,82 +0,0 @@ -Subject: Depend on gdk-pixbuf instead of gtk when gtk2 -Author: Naohiro Aota <naota@gentoo.org> -Origin: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-gdk-pixbuf.patch?revision=1.1 - -diff --git a/acinclude.m4 b/acinclude.m4 -index 94fcbb5..ec91797 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -706,8 +706,8 @@ AC_DEFUN([AC_W3M_IMAGE], - IMGTARGETS="x11" - AC_DEFINE(USE_GDKPIXBUF) - AC_DEFINE(USE_GTK2) -- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" -- IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" -+ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`" -+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`" - elif test x"$have_gdkpixbuf" = xyes; then - AC_DEFINE(USE_W3MIMG_X11) - IMGOBJS="$IMGOBJS x11/x11_w3mimg.o" -@@ -741,8 +741,8 @@ AC_DEFUN([AC_W3M_IMAGE], - IMGTARGETS="${IMGTARGETS} fb" - AC_DEFINE(USE_GDKPIXBUF) - AC_DEFINE(USE_GTK2) -- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`" -- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`" -+ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`" -+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`" - elif test x"$have_gdkpixbuf" = xyes; then - AC_DEFINE(USE_W3MIMG_FB) - IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o" -diff --git a/configure b/configure -index fd916fc..4fdcd8e 100755 ---- a/configure -+++ b/configure -@@ -6927,8 +6927,8 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >= - - $as_echo "#define USE_GTK2 1" >>confdefs.h - -- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" -- IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`" -+ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`" -+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`" - elif test x"$have_gdkpixbuf" = xyes; then - $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h - -@@ -6972,8 +6972,8 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;} - - $as_echo "#define USE_GTK2 1" >>confdefs.h - -- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`" -- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`" -+ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`" -+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`" - elif test x"$have_gdkpixbuf" = xyes; then - $as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h - -diff --git a/w3mimg/fb/fb_gdkpixbuf.c b/w3mimg/fb/fb_gdkpixbuf.c -index 36e3b62..f1e8d97 100644 ---- a/w3mimg/fb/fb_gdkpixbuf.c -+++ b/w3mimg/fb/fb_gdkpixbuf.c -@@ -6,7 +6,7 @@ - #include "config.h" - #if defined(USE_GTK2) - #include <glib-object.h> --#include <gdk/gdk.h> -+#include <gdk-pixbuf/gdk-pixbuf.h> - #endif - #include <gdk-pixbuf/gdk-pixbuf.h> - #include "fb.h" -diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c -index f5be4a8..cef72e2 100644 ---- a/w3mimg/x11/x11_w3mimg.c -+++ b/w3mimg/x11/x11_w3mimg.c -@@ -14,7 +14,7 @@ - #elif defined(USE_GDKPIXBUF) - #if defined(USE_GTK2) - #include <glib-object.h> --#include <gdk/gdk.h> -+#include <gdk-pixbuf/gdk-pixbuf.h> - #include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h> - #else - #include <gdk-pixbuf/gdk-pixbuf-xlib.h> diff --git a/debian/patches/400_w3m-img-freebsd.patch b/debian/patches/400_w3m-img-freebsd.patch deleted file mode 100644 index b6f0677..0000000 --- a/debian/patches/400_w3m-img-freebsd.patch +++ /dev/null @@ -1,831 +0,0 @@ -Subject: Support FreeBSD framebuffer -Author: Yusuke Baba <babayaga1@y8.dion.ne.jp> -Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html -Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673 - -diff --git a/acinclude.m4 b/acinclude.m4 -index ec91797..675cabe 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -600,7 +600,7 @@ AC_DEFUN([AC_W3M_IMAGE], - if test x"$enable_image" = xyes; then - enable_image=x11 - case "`uname -s`" in -- Linux|linux|LINUX) -+ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD) - if test -c /dev/fb0; then - enable_image=x11,fb - fi;; -diff --git a/configure b/configure -index 4fdcd8e..2ba82d5 100755 ---- a/configure -+++ b/configure -@@ -6755,7 +6755,7 @@ $as_echo "$enable_image" >&6; } - if test x"$enable_image" = xyes; then - enable_image=x11 - case "`uname -s`" in -- Linux|linux|LINUX) -+ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD) - if test -c /dev/fb0; then - enable_image=x11,fb - fi;; -diff --git a/w3mimg/fb/fb.c b/w3mimg/fb/fb.c -index cd11128..7b6f23b 100644 ---- a/w3mimg/fb/fb.c -+++ b/w3mimg/fb/fb.c -@@ -12,12 +12,24 @@ - #include <errno.h> - #include <sys/ioctl.h> - #include <sys/mman.h> -+#if defined(__linux__) - #include <linux/fb.h> -+#elif defined(__FreeBSD__) -+#include <sys/fbio.h> -+#endif -+#if defined(__FreeBSD__) -+#include <sys/types.h> -+#include <machine/param.h> -+#endif - - #include "fb.h" - - #define FB_ENV "FRAMEBUFFER" -+#if defined(__linux__) - #define FB_DEFDEV "/dev/fb0" -+#elif defined(__FreeBSD__) -+#define FB_DEFDEV "/dev/ttyv0" -+#endif - - #define MONO_OFFSET_8BIT 0x40 - #define COLORS_MONO_8BIT 0x40 -@@ -38,22 +50,65 @@ - - #define IMAGE_SIZE_MAX 10000 - -+#if defined(__linux__) - static struct fb_cmap *fb_cmap_create(struct fb_fix_screeninfo *, - struct fb_var_screeninfo *); -+#elif defined(__FreeBSD__) -+static video_color_palette_t *fb_cmap_create(video_info_t *video_info, -+ video_adapter_info_t *video_adapter_info); -+#endif -+#if defined(__linux__) - static void fb_cmap_destroy(struct fb_cmap *cmap); -+#elif defined(__FreeBSD__) -+static void fb_cmap_destroy(video_color_palette_t *cmap); -+#endif -+#if defined(__linux__) - static int fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo); -+#endif -+#if defined(__linux__) - static void *fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo); -+#elif defined(__FreeBSD__) -+static void *fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info); -+#endif -+#if defined(__linux__) - static int fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo); -+#elif defined(__FreeBSD__) -+static int fb_munmap(void *buf, video_adapter_info_t *video_adapter_info); -+#endif -+#if defined(__linux__) - static int fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo); -+#endif -+#if defined(__linux__) - static int fb_cmap_set(int fbfp, struct fb_cmap *cmap); -+#elif defined(__FreeBSD__) -+static int fb_cmap_set(int fbfp, video_color_palette_t *cmap); -+#endif -+#if defined(__linux__) - static int fb_cmap_get(int fbfp, struct fb_cmap *cmap); -+#elif defined(__FreeBSD__) -+static int fb_cmap_get(int fbfp, video_color_palette_t *cmap); -+#endif - static int fb_cmap_init(void); - static int fb_get_cmap_index(int r, int g, int b); - static unsigned long fb_get_packed_color(int r, int g, int b); -+#if defined(__FreeBSD__) -+static int fb_video_mode_get(int fbfp, int *video_mode); -+static int fb_video_info_get(int fbfp, video_info_t *video_info); -+static int fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info); -+#endif - -+#if defined(__linux__) - static struct fb_fix_screeninfo fscinfo; - static struct fb_var_screeninfo vscinfo; -+#elif defined(__FreeBSD__) -+static video_info_t video_info; -+static video_adapter_info_t video_adapter_info; -+#endif -+#if defined(__linux__) - static struct fb_cmap *cmap = NULL, *cmap_org = NULL; -+#elif defined(__FreeBSD__) -+static video_color_palette_t *cmap = NULL, *cmap_org = NULL; -+#endif - static int is_open = FALSE; - static int fbfp = -1; - static size_t pixel_size = 0; -@@ -63,6 +118,9 @@ int - fb_open(void) - { - char *fbdev = { FB_DEFDEV }; -+#if defined(__FreeBSD__) -+ int video_mode; -+#endif - - if (is_open == TRUE) - return 1; -@@ -76,6 +134,7 @@ fb_open(void) - goto ERR_END; - } - -+#if defined(__linux__) - if (fb_fscrn_get(fbfp, &fscinfo)) { - goto ERR_END; - } -@@ -83,22 +142,67 @@ fb_open(void) - if (fb_vscrn_get(fbfp, &vscinfo)) { - goto ERR_END; - } -+#elif defined(__FreeBSD__) -+ if (fb_video_mode_get(fbfp, &video_mode)) { -+ goto ERR_END; -+ } -+ video_info.vi_mode = video_mode; -+ -+ if (fb_video_info_get(fbfp, &video_info)) { -+ goto ERR_END; -+ } - -+ if (fb_video_adapter_info_get(fbfp, &video_adapter_info)) { -+ goto ERR_END; -+ } -+ if (!(video_info.vi_flags & V_INFO_GRAPHICS) || -+ !(video_info.vi_flags & V_INFO_LINEAR)) { -+ goto ERR_END; -+ } -+#endif -+ -+#if defined(__linux__) - if ((cmap = fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) { - goto ERR_END; - } -+#elif defined(__FreeBSD__) -+ if ((cmap = fb_cmap_create(&video_info, &video_adapter_info)) == (video_color_palette_t *)-1) { -+ goto ERR_END; -+ } -+#endif - -+#if defined(__linux__) - if (!(buf = fb_mmap(fbfp, &fscinfo))) { - fprintf(stderr, "Can't allocate memory.\n"); - goto ERR_END; - } -+#elif defined(__FreeBSD__) -+ if (!(buf = fb_mmap(fbfp, &video_adapter_info))) { -+ fprintf(stderr, "Can't allocate memory.\n"); -+ goto ERR_END; -+ } -+#endif - -+#if defined(__linux__) - if (fscinfo.type != FB_TYPE_PACKED_PIXELS) { - fprintf(stderr, "This type of framebuffer is not supported.\n"); - goto ERR_END; - } -+#elif defined(__FreeBSD__) -+ if (!(video_info.vi_mem_model == V_INFO_MM_PACKED || -+ video_info.vi_mem_model == V_INFO_MM_DIRECT)) { -+ fprintf(stderr, "This type of framebuffer is not supported.\n"); -+ goto ERR_END; -+ } -+#endif - -+#if defined(__linux__) - if (fscinfo.visual == FB_VISUAL_PSEUDOCOLOR && vscinfo.bits_per_pixel == 8) { -+#elif defined(__FreeBSD__) -+ if (video_adapter_info.va_flags & V_ADP_PALETTE && -+ video_info.vi_mem_model == V_INFO_MM_PACKED && -+ video_info.vi_depth == 8) { -+#endif - if (fb_cmap_get(fbfp, cmap)) { - fprintf(stderr, "Can't get color map.\n"); - fb_cmap_destroy(cmap); -@@ -111,12 +215,20 @@ fb_open(void) - - pixel_size = 1; - } -+#if defined(__linux__) - else if ((fscinfo.visual == FB_VISUAL_TRUECOLOR || - fscinfo.visual == FB_VISUAL_DIRECTCOLOR) && - (vscinfo.bits_per_pixel == 15 || - vscinfo.bits_per_pixel == 16 || - vscinfo.bits_per_pixel == 24 || vscinfo.bits_per_pixel == 32)) { - pixel_size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT; -+#elif defined(__FreeBSD__) -+ else if (video_info.vi_mem_model == V_INFO_MM_DIRECT && -+ (video_info.vi_depth == 15 || -+ video_info.vi_depth == 16 || -+ video_info.vi_depth == 24 || video_info.vi_depth == 32)) { -+ pixel_size = (video_info.vi_depth + 7) / CHAR_BIT; -+#endif - } - else { - fprintf(stderr, "This type of framebuffer is not supported.\n"); -@@ -147,7 +259,11 @@ fb_close(void) - cmap = NULL; - } - if (buf != NULL) { -+#if defined(__linux__) - fb_munmap(buf, &fscinfo); -+#elif defined(__FreeBSD__) -+ fb_munmap(buf, &video_adapter_info); -+#endif - buf = NULL; - } - -@@ -259,11 +375,19 @@ fb_image_draw(FB_IMAGE * image, int x, int y, int sx, int sy, int width, - if (y + height > fb_height()) - height = fb_height() - y; - -+#if defined(__linux__) - offset_fb = fscinfo.line_length * y + pixel_size * x; -+#elif defined(__FreeBSD__) -+ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x; -+#endif - offset_img = image->rowstride * sy + pixel_size * sx; - for (i = 0; i < height; i++) { - memcpy(buf + offset_fb, image->data + offset_img, pixel_size * width); -+#if defined(__linux__) - offset_fb += fscinfo.line_length; -+#elif defined(__FreeBSD__) -+ offset_fb += video_adapter_info.va_line_width; -+#endif - offset_img += image->rowstride; - } - -@@ -336,7 +460,11 @@ fb_width(void) - if (is_open != TRUE) - return 0; - -+#if defined(__linux__) - return vscinfo.xres; -+#elif defined(__FreeBSD__) -+ return video_info.vi_width; -+#endif - } - - int -@@ -345,7 +473,11 @@ fb_height(void) - if (is_open != TRUE) - return 0; - -+#if defined(__linux__) - return vscinfo.yres; -+#elif defined(__FreeBSD__) -+ return video_info.vi_height; -+#endif - } - - int -@@ -369,7 +501,11 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b) - h = fb_height() - y; - - if (tmp == NULL) { -+#if defined(__linux__) - tmp = malloc(fscinfo.line_length); -+#elif defined(__FreeBSD__) -+ tmp = malloc(video_adapter_info.va_line_width); -+#endif - if (tmp == NULL) - return 1; - } -@@ -384,10 +520,18 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b) - gg = g; - bb = b; - } -+#if defined(__linux__) - offset_fb = fscinfo.line_length * y + pixel_size * x; -+#elif defined(__FreeBSD__) -+ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x; -+#endif - for (i = 0; i < h; i++) { - memcpy(buf + offset_fb, tmp, pixel_size * w); -+#if defined(__linux__) - offset_fb += fscinfo.line_length; -+#elif defined(__FreeBSD__) -+ offset_fb += video_adapter_info.va_line_width; -+#endif - } - return 0; - } -@@ -400,11 +544,21 @@ fb_get_packed_color(int r, int g, int b) - return fb_get_cmap_index(r, g, b); - } - else { -+#if defined(__linux__) - return - ((r >> (CHAR_BIT - vscinfo.red.length)) << vscinfo.red.offset) + - ((g >> (CHAR_BIT - vscinfo.green.length)) << vscinfo.green. - offset) + - ((b >> (CHAR_BIT - vscinfo.blue.length)) << vscinfo.blue.offset); -+#elif defined(__FreeBSD__) -+ return -+ ((r >> (CHAR_BIT - video_info.vi_pixel_fsizes[0])) << -+ video_info.vi_pixel_fields[0]) + -+ ((g >> (CHAR_BIT - video_info.vi_pixel_fsizes[1])) << -+ video_info.vi_pixel_fields[1]) + -+ ((b >> (CHAR_BIT - video_info.vi_pixel_fsizes[2])) << -+ video_info.vi_pixel_fields[2]); -+#endif - } - } - -@@ -433,16 +587,31 @@ fb_cmap_init(void) - if (cmap == NULL) - return 1; - -+#if defined(__linux__) - if (cmap->len < COLOR_OFFSET_8BIT + COLORS_8BIT) { - fprintf(stderr, "Can't allocate enough color.\n"); - return 1; - } -+#elif defined(__FreeBSD__) -+ if (cmap->count < COLOR_OFFSET_8BIT + COLORS_8BIT) { -+ fprintf(stderr, "Can't allocate enough color.\n"); -+ return 1; -+ } -+#endif - - if (cmap_org == NULL) { -+#if defined(__linux__) - if ((cmap_org = - fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) { - return 1; - } -+#elif defined(__FreeBSD__) -+ if ((cmap_org = -+ fb_cmap_create(&video_info, &video_adapter_info)) == -+ (video_color_palette_t *)-1) { -+ return 1; -+ } -+#endif - - if (fb_cmap_get(fbfp, cmap_org)) { - fprintf(stderr, "Can't get color map.\n"); -@@ -452,8 +621,13 @@ fb_cmap_init(void) - } - } - -+#if defined(__linux__) - cmap->start = MONO_OFFSET_8BIT; - cmap->len = COLORS_8BIT + COLORS_MONO_8BIT; -+#elif defined(__FreeBSD__) -+ cmap->index = MONO_OFFSET_8BIT; -+ cmap->count = COLORS_8BIT + COLORS_MONO_8BIT; -+#endif - - for (lp = 0; lp < COLORS_MONO_8BIT; lp++) { - int c; -@@ -506,73 +680,213 @@ fb_cmap_init(void) - - #define LUT_MAX (256) - -+#if defined(__linux__) - static struct fb_cmap * - fb_cmap_create(struct fb_fix_screeninfo *fscinfo, - struct fb_var_screeninfo *vscinfo) -+#elif defined(__FreeBSD__) -+static video_color_palette_t * -+fb_cmap_create(video_info_t *video_info, -+ video_adapter_info_t *video_adapter_info) -+#endif - { -+#if defined(__linux__) - struct fb_cmap *cmap; -+#elif defined(__FreeBSD__) -+ video_color_palette_t *cmap; -+#endif - int cmaplen = LUT_MAX; - - /* check the existence of colormap */ -+#if defined(__linux__) - if (fscinfo->visual == FB_VISUAL_MONO01 || - fscinfo->visual == FB_VISUAL_MONO10 || - fscinfo->visual == FB_VISUAL_TRUECOLOR) - return NULL; -+#elif defined(__FreeBSD__) -+ if (!(video_adapter_info->va_flags & V_ADP_PALETTE)) -+ return NULL; -+#endif - -+#if defined(__linux__) - cmap = (struct fb_cmap *)malloc(sizeof(struct fb_cmap)); -+#elif defined(__FreeBSD__) -+ cmap = (video_color_palette_t *)malloc(sizeof(video_color_palette_t)); -+#endif - if (!cmap) { - perror("cmap malloc error\n"); -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } -+#if defined(__linux__) - memset(cmap, 0, sizeof(struct fb_cmap)); -+#elif defined(__FreeBSD__) -+ memset(cmap, 0, sizeof(video_color_palette_t)); -+#endif -+ -+#if defined(__FreeBSD__) -+ if (video_info->vi_mem_model == V_INFO_MM_PACKED) { -+ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen); -+ if (!cmap->red) { -+ perror("red lut malloc error\n"); -+ return (video_color_palette_t *)-1; -+ } -+ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen); -+ if (!cmap->green) { -+ perror("green lut malloc error\n"); -+ free(cmap->red); -+ return (video_color_palette_t *)-1; -+ } -+ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen); -+ if (!cmap->blue) { -+ perror("blue lut malloc error\n"); -+ free(cmap->red); -+ free(cmap->green); -+ return (video_color_palette_t *)-1; -+ } -+ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen); -+ if (!cmap->transparent) { -+ perror("transparent lut malloc error\n"); -+ free(cmap->red); -+ free(cmap->green); -+ free(cmap->blue); -+ return (video_color_palette_t *)-1; -+ } -+ cmap->count = cmaplen; -+ return cmap; -+ } -+#endif - - /* Allocates memory for a colormap */ -+#if defined(__linux__) - if (vscinfo->red.length) { - cmap->red = (__u16 *) malloc(sizeof(__u16) * cmaplen); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[0]) { -+ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen); -+#endif - if (!cmap->red) { - perror("red lut malloc error\n"); -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } - } -+#if defined(__linux__) - if (vscinfo->green.length) { - cmap->green = (__u16 *) malloc(sizeof(__u16) * cmaplen); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[1]) { -+ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen); -+#endif - if (!cmap->green) { -+#if defined(__linux__) - if (vscinfo->red.length) - free(cmap->red); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[0]) -+ free(cmap->red); -+#endif - perror("green lut malloc error\n"); -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } - } -+#if defined(__linux__) - if (vscinfo->blue.length) { - cmap->blue = (__u16 *) malloc(sizeof(__u16) * cmaplen); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[2]) { -+ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen); -+#endif - if (!cmap->blue) { -+#if defined(__linux__) - if (vscinfo->red.length) - free(cmap->red); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[0]) -+ free(cmap->red); -+#endif -+#if defined(__linux__) - if (vscinfo->green.length) - free(cmap->green); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[1]) -+ free(cmap->green); -+#endif - perror("blue lut malloc error\n"); -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } - } -+#if defined(__linux__) - if (vscinfo->transp.length) { - cmap->transp = (__u16 *) malloc(sizeof(__u16) * cmaplen); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[3]) { -+ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen); -+#endif -+#if defined(__linux__) - if (!cmap->transp) { -+#elif defined(__FreeBSD__) -+ if (!cmap->transparent) { -+#endif -+#if defined(__linux__) - if (vscinfo->red.length) - free(cmap->red); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[0]) -+ free(cmap->red); -+#endif -+#if defined(__linux__) - if (vscinfo->green.length) - free(cmap->green); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[1]) -+ free(cmap->green); -+#endif -+#if defined(__linux__) - if (vscinfo->blue.length) - free(cmap->blue); - perror("transp lut malloc error\n"); -+#elif defined(__FreeBSD__) -+ if (video_info->vi_pixel_fsizes[2]) -+ free(cmap->blue); -+ perror("transparent lut malloc error\n"); -+#endif -+#if defined(__linux__) - return (struct fb_cmap *)-1; -+#elif defined(__FreeBSD__) -+ return (video_color_palette_t *)-1; -+#endif - } - } -+#if defined(__linux__) - cmap->len = cmaplen; -+#elif defined(__FreeBSD__) -+ cmap->count = cmaplen; -+#endif - return cmap; - } - -+#if defined(__linux__) - static void - fb_cmap_destroy(struct fb_cmap *cmap) -+#elif defined(__FreeBSD__) -+static void -+fb_cmap_destroy(video_color_palette_t *cmap) -+#endif - { - if (cmap->red) - free(cmap->red); -@@ -580,28 +894,57 @@ fb_cmap_destroy(struct fb_cmap *cmap) - free(cmap->green); - if (cmap->blue) - free(cmap->blue); -+#if defined(__linux__) - if (cmap->transp) - free(cmap->transp); -+#elif defined(__FreeBSD__) -+ if (cmap->transparent) -+ free(cmap->transparent); -+#endif - free(cmap); - } - -+#if defined(__linux__) - static int - fb_cmap_get(int fbfp, struct fb_cmap *cmap) -+#elif defined(__FreeBSD__) -+static int -+fb_cmap_get(int fbfp, video_color_palette_t *cmap) -+#endif - { -+#if defined(__linux__) - if (ioctl(fbfp, FBIOGETCMAP, cmap)) { - perror("ioctl FBIOGETCMAP error\n"); - return -1; - } -+#elif defined(__FreeBSD__) -+ if (ioctl(fbfp, FBIO_GETPALETTE, cmap) == -1) { -+ perror("ioctl FBIO_GETPALETTE error\n"); -+ return -1; -+ } -+#endif - return 0; - } - -+#if defined(__linux__) - static int - fb_cmap_set(int fbfp, struct fb_cmap *cmap) -+#elif defined(__FreeBSD__) -+static int -+fb_cmap_set(int fbfp, video_color_palette_t *cmap) -+#endif - { -+#if defined(__linux__) - if (ioctl(fbfp, FBIOPUTCMAP, cmap)) { - perror("ioctl FBIOPUTCMAP error\n"); - return -1; - } -+#elif defined(__FreeBSD__) -+ if (ioctl(fbfp, FBIO_SETPALETTE, cmap) == -1) { -+ perror("ioctl FBIO_SETPALETTE error\n"); -+ return -1; -+ } -+#endif - return 0; - } - -@@ -612,10 +955,16 @@ fb_cmap_set(int fbfp, struct fb_cmap *cmap) - * fb_munmap() deletes the mappings - */ - -+#if defined(__linux__) - static void * - fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo) -+#elif defined(__FreeBSD__) -+static void * -+fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info) -+#endif - { - void *buf; -+#if defined(__linux__) - if ((buf = (unsigned char *) - mmap(NULL, scinfo->smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp, - (off_t) 0)) -@@ -623,13 +972,41 @@ fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo) - perror("mmap error"); - return NULL; - } -+#elif defined(__FreeBSD__) -+ size_t mmap_offset; -+ size_t mmap_length; -+ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK); -+ mmap_length = (size_t)(video_adapter_info->va_window_size + -+ mmap_offset + PAGE_MASK) & (~PAGE_MASK); -+ if ((buf = (unsigned char *) -+ mmap(NULL, mmap_length, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp, -+ (off_t) 0)) -+ == MAP_FAILED) { -+ perror("mmap error"); -+ return NULL; -+ } -+#endif - return buf; - } - -+#if defined(__linux__) - static int - fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo) -+#elif defined(__FreeBSD__) -+static int -+fb_munmap(void *buf, video_adapter_info_t *video_adapter_info) -+#endif - { -+#if defined(__linux__) - return munmap(buf, scinfo->smem_len); -+#elif defined(__FreeBSD__) -+ size_t mmap_offset; -+ size_t mmap_length; -+ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK); -+ mmap_length = (size_t)(video_adapter_info->va_window_size + -+ mmap_offset + PAGE_MASK) & (~PAGE_MASK); -+ return munmap((void *)((u_long)buf & (~PAGE_MASK)), mmap_length); -+#endif - } - - /* -@@ -637,6 +1014,7 @@ fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo) - * - * fb_fscrn_get() get information - */ -+#if defined(__linux__) - static int - fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo) - { -@@ -646,12 +1024,14 @@ fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo) - } - return 0; - } -+#endif - - /* - * (struct fb_var_screeninfo) device independent variable information - * - * fb_vscrn_get() get information - */ -+#if defined(__linux__) - static int - fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo) - { -@@ -661,3 +1041,41 @@ fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo) - } - return 0; - } -+#endif -+ -+#if defined(__FreeBSD__) -+static int -+fb_video_mode_get(int fbfp, int *video_mode) -+{ -+ if (ioctl(fbfp, FBIO_GETMODE, video_mode) == -1) { -+ perror("ioctl FBIO_GETMODE error\n"); -+ return -1; -+ } -+ return 0; -+} -+#endif -+ -+#if defined(__FreeBSD__) -+static int -+fb_video_info_get(int fbfp, video_info_t *video_info) -+{ -+ if (ioctl(fbfp, FBIO_MODEINFO, video_info) == -1) { -+ perror("ioctl FBIO_MODEINFO error\n"); -+ return -1; -+ } -+ return 0; -+} -+#endif -+ -+#if defined(__FreeBSD__) -+static int -+fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info) -+{ -+ if (ioctl(fbfp, FBIO_ADPINFO, video_adapter_info) == -1) { -+ perror("ioctl FBIO_ADPINFO error\n"); -+ return -1; -+ } -+ return 0; -+} -+#endif -+ -diff --git a/w3mimg/fb/fb.h b/w3mimg/fb/fb.h -index 1138bb0..5d86454 100644 ---- a/w3mimg/fb/fb.h -+++ b/w3mimg/fb/fb.h -@@ -1,7 +1,11 @@ - /* $Id: fb.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */ - #ifndef fb_header - #define fb_header -+#if defined(__linux__) - #include <linux/fb.h> -+#elif defined(__FreeBSD__) -+#include <sys/fbio.h> -+#endif - - typedef struct { - int num; -diff --git a/w3mimg/fb/fb_w3mimg.c b/w3mimg/fb/fb_w3mimg.c -index d3ae5a9..fb323f5 100644 ---- a/w3mimg/fb/fb_w3mimg.c -+++ b/w3mimg/fb/fb_w3mimg.c -@@ -153,10 +153,15 @@ check_tty_console(char *tty) - return 0; - if (strncmp(tty, "/dev/", 5) == 0) - tty += 5; -+#if defined(__linux__) - if (strncmp(tty, "tty", 3) == 0 && isdigit(*(tty + 3))) - return 1; - if (strncmp(tty, "vc/", 3) == 0 && isdigit(*(tty + 3))) - return 1; -+#elif defined(__FreeBSD__) -+ if (strncmp(tty, "ttyv", 4) == 0 && isxdigit(*(tty + 4))) -+ return 1; -+#endif - return 0; - } - #else -@@ -172,7 +177,9 @@ w3mimg_fbopen() - return NULL; - memset(wop, 0, sizeof(w3mimg_op)); - -- if (!check_tty_console(getenv("W3M_TTY")) && strcmp("jfbterm", getenv("TERM")) != 0) { -+ if (!check_tty_console(getenv("W3M_TTY")) && -+ strcmp("jfbterm", getenv("TERM")) != 0 && -+ strncmp("jfbterm-", getenv("TERM"), 8) != 0) { - fprintf(stderr, "w3mimgdisplay/fb: tty is not console\n"); - goto error; - } diff --git a/debian/patches/410_textarea-segfault.patch b/debian/patches/410_textarea-segfault.patch deleted file mode 100644 index 5322c75..0000000 --- a/debian/patches/410_textarea-segfault.patch +++ /dev/null @@ -1,22 +0,0 @@ -Subject: Prevent segfault when editing a textarea field with vi -Author: Peter Poeml <poeml@suse.de> -Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.4.1-textarea-segfault.dif?expand=1 - - add fix for segfault that can occur when editing a textarea field - with vi, and returning to w3m (it seems to happen if the terminal - is not writable, as when using w3m after 'su - some_user') - -diff --git a/terms.c b/terms.c -index ca81d28..672262c 100644 ---- a/terms.c -+++ b/terms.c -@@ -637,7 +637,8 @@ reset_tty(void) - writestr(T_se); /* reset terminal */ - flush_tty(); - TerminalSet(tty, &d_ioval); -- close_tty(); -+ if (tty != 2) -+ close_tty(); - } - - static MySignalHandler diff --git a/debian/patches/420_uninitialized.patch b/debian/patches/420_uninitialized.patch deleted file mode 100644 index d1ee41d..0000000 --- a/debian/patches/420_uninitialized.patch +++ /dev/null @@ -1,54 +0,0 @@ -Subject: Fix a few harmless uninitialized variables -Author: Olaf Hering <olh@suse.de> -Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-uninitialized.patch?expand=1 - -diff --git a/anchor.c b/anchor.c -index 39f221d..a353bb9 100644 ---- a/anchor.c -+++ b/anchor.c -@@ -11,7 +11,7 @@ putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return, - { - int n, i, j; - Anchor *a; -- BufferPoint bp; -+ BufferPoint bp = { 0 }; - if (al == NULL) { - al = New(AnchorList); - al->anchors = NULL; -diff --git a/libwc/gb18030.c b/libwc/gb18030.c -index c195d49..d5c9018 100644 ---- a/libwc/gb18030.c -+++ b/libwc/gb18030.c -@@ -151,6 +151,7 @@ wc_ucs_to_gb18030(wc_uint32 ucs) - return cc; - } - cc.ccs = WC_CCS_UNKNOWN; -+ cc.code = 0; - return cc; - } - #endif -diff --git a/libwc/ucs.c b/libwc/ucs.c -index d7b6948..5e78b4e 100644 ---- a/libwc/ucs.c -+++ b/libwc/ucs.c -@@ -100,6 +100,7 @@ wc_ucs_to_any(wc_uint32 ucs, wc_table *t) - return t->conv(t->ccs, map->code2); - } - cc.ccs = WC_CCS_UNKNOWN; -+ cc.code = 0; - return cc; - } - -diff --git a/regex.c b/regex.c -index 5bee4b2..5675d09 100644 ---- a/regex.c -+++ b/regex.c -@@ -77,7 +77,7 @@ static longchar - set_longchar(char *str) - { - unsigned char *p = (unsigned char *)str; -- longchar r; -+ longchar r = { }; - - #ifdef USE_M17N - if (*p & 0x80) { diff --git a/debian/patches/430_no-ascii-default.patch b/debian/patches/430_no-ascii-default.patch deleted file mode 100644 index 83d196f..0000000 --- a/debian/patches/430_no-ascii-default.patch +++ /dev/null @@ -1,21 +0,0 @@ -Subject: Change the default to alt_entity=0 -Author: Olaf Dabrunz <od@suse.de> -Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.5.1-no-ASCII-equivalents-by-default.patch?expand=1 -Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=247397 - - change the default for the option "Use ASCII equivalents to - display entities" from YES to NO. - -diff --git a/fm.h b/fm.h -index 149a02f..49af0e4 100644 ---- a/fm.h -+++ b/fm.h -@@ -1089,7 +1089,7 @@ global char SimplePreserveSpace init(FALSE); - #define wc_Str_conv(x,charset0,charset1) (x) - #define wc_Str_conv_strict(x,charset0,charset1) (x) - #endif --global char UseAltEntity init(TRUE); -+global char UseAltEntity init(FALSE); - #define GRAPHIC_CHAR_ASCII 2 - #define GRAPHIC_CHAR_DEC 1 - #define GRAPHIC_CHAR_CHARSET 0 diff --git a/debian/patches/440_parsetagx-crash.patch b/debian/patches/440_parsetagx-crash.patch deleted file mode 100644 index 08c570e..0000000 --- a/debian/patches/440_parsetagx-crash.patch +++ /dev/null @@ -1,16 +0,0 @@ -Subject: Fix crash in parse_tag() during every start -Author: Olaf Hering <olh@suse.de> -Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-parsetagx-crash.patch?expand=1 - -diff --git a/parsetagx.c b/parsetagx.c -index 6b627d2..3435f9f 100644 ---- a/parsetagx.c -+++ b/parsetagx.c -@@ -221,6 +221,7 @@ parse_tag(char **s, int internal) - int j, hidden=FALSE; - for (j=0; j<i; j++) { - if (tag->attrid[j] == ATTR_TYPE && -+ tag->value[j] && - strcmp("hidden",tag->value[j]) == 0) { - hidden=TRUE; - break; diff --git a/debian/patches/450_remoteimg.patch b/debian/patches/450_remoteimg.patch deleted file mode 100644 index 0298e46..0000000 --- a/debian/patches/450_remoteimg.patch +++ /dev/null @@ -1,936 +0,0 @@ -Subject: Support OSC 5379 remote imaging and sixel graphics -Author: Araki Ken <arakiken@users.sf.net> -Origin: https://bitbucket.org/arakiken/w3m/branch/remoteimg - -diff --git a/display.c b/display.c -index 2fe1183..d4f336a 100644 ---- a/display.c -+++ b/display.c -@@ -487,7 +487,7 @@ displayBuffer(Buffer *buf, int mode) - term_title(conv_to_system(buf->buffername)); - refresh(); - #ifdef USE_IMAGE -- if (activeImage && displayImage && buf->img) { -+ if (activeImage && displayImage && buf->img && buf->image_loaded) { - drawImage(); - } - #endif -@@ -521,7 +521,15 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq, - break; - } - if (hseq >= 0 && an->hseq == hseq) { -+ int start_pos = an->start.pos; -+ int end_pos = an->end.pos; - for (i = an->start.pos; i < an->end.pos; i++) { -+ if (enable_inline_image && (l->propBuf[i] & PE_IMAGE)) { -+ if (start_pos == i) -+ start_pos = i + 1; -+ else if (end_pos == an->end.pos) -+ end_pos = i - 1; -+ } - if (l->propBuf[i] & (PE_IMAGE | PE_ANCHOR | PE_FORM)) { - if (active) - l->propBuf[i] |= PE_ACTIVE; -@@ -529,9 +537,9 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq, - l->propBuf[i] &= ~PE_ACTIVE; - } - } -- if (active) -+ if (active && start_pos < end_pos) - redrawLineRegion(buf, l, l->linenumber - tline + buf->rootY, -- an->start.pos, an->end.pos); -+ start_pos, end_pos); - } - else if (prevhseq >= 0 && an->hseq == prevhseq) { - if (active) -@@ -855,14 +863,16 @@ redrawLineImage(Buffer *buf, Line *l, int i) - y = (int)(i * pixel_per_line); - sx = (int)((rcol - COLPOS(l, a->start.pos)) * pixel_per_char); - sy = (int)((l->linenumber - image->y) * pixel_per_line); -- if (sx == 0 && x + image->xoffset >= 0) -- x += image->xoffset; -- else -- sx -= image->xoffset; -- if (sy == 0 && y + image->yoffset >= 0) -- y += image->yoffset; -- else -- sy -= image->yoffset; -+ if (! enable_inline_image) { -+ if (sx == 0 && x + image->xoffset >= 0) -+ x += image->xoffset; -+ else -+ sx -= image->xoffset; -+ if (sy == 0 && y + image->yoffset >= 0) -+ y += image->yoffset; -+ else -+ sy -= image->yoffset; -+ } - if (image->width > 0) - w = image->width - sx; - else -diff --git a/doc/README.sixel b/doc/README.sixel -new file mode 100644 -index 0000000..588afc4 ---- /dev/null -+++ b/doc/README.sixel -@@ -0,0 +1,27 @@ -+Sixel support of w3m -+ 2014/11/05 -+ K. Araki -+ -+Introduction -+ -+ This is the extension for w3m to show inline images by sixel graphics. -+ -+Requirements -+ -+ Install 'img2sixel' command provided by libsixel project. -+ (https://github.com/saitoha/libsixel) -+ -+Build -+ -+ $ ./configure --enable-image ... -+ $ make -+ $ make install -+ -+Usage -+ -+ $ w3m -sixel http://... -+ -+ You can specify options of 'img2sixel' command by "W3M_IMG2SIXEL" -+ environmental variable. -+ -+ $ W3M_IMG2SIXEL="img2sixel -d atkinson" w3m -sixel http://... -diff --git a/etc.c b/etc.c -index 8fe1215..dcc6edd 100644 ---- a/etc.c -+++ b/etc.c -@@ -1365,7 +1365,13 @@ setup_child(int child, int i, int f) - if (!child) - SETPGRP(); - #endif /* __MINGW32_VERSION */ -+ /* -+ * I don't know why but close_tty() sometimes interrupts loadGeneralFile() in loadImage() -+ * and corrupt image data can be cached in ~/.w3m. -+ */ -+#if 0 - close_tty(); -+#endif - close_all_fds_except(i, f); - QuietMessage = TRUE; - fmInitialized = FALSE; -diff --git a/file.c b/file.c -index 1e363d0..709a0c1 100644 ---- a/file.c -+++ b/file.c -@@ -3345,8 +3345,14 @@ process_img(struct parsed_tag *tag, int width) - if (i < 0) - i = pixel_per_line; - } -- nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1; -- ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1; -+ if (enable_inline_image) { -+ nw = (w > 1) ? ((w - 1) / pixel_per_char_i + 1) : 1 ; -+ ni = (i > 1) ? ((i - 1) / pixel_per_line_i + 1) : 1 ; -+ } -+ else { -+ nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1; -+ ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1; -+ } - Strcat(tmp, - Sprintf("<pre_int><img_alt hseq=\"%d\" src=\"", cur_iseq++)); - pre_int = TRUE; -@@ -3377,19 +3383,21 @@ process_img(struct parsed_tag *tag, int width) - if (i0 >= 0) - Strcat(tmp, Sprintf(" height=%d", i0)); - switch (align) { -+ case ALIGN_MIDDLE: -+ if (!enable_inline_image) { -+ top = ni / 2; -+ bottom = top; -+ if (top * 2 == ni) -+ yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2); -+ else -+ yoffset = (int)((ni * pixel_per_line - i) / 2); -+ break; -+ } - case ALIGN_TOP: - top = 0; - bottom = ni - 1; - yoffset = 0; - break; -- case ALIGN_MIDDLE: -- top = ni / 2; -- bottom = top; -- if (top * 2 == ni) -- yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2); -- else -- yoffset = (int)((ni * pixel_per_line - i) / 2); -- break; - case ALIGN_BOTTOM: - top = ni - 1; - bottom = 0; -@@ -3407,7 +3415,12 @@ process_img(struct parsed_tag *tag, int width) - } - break; - } -- xoffset = (int)((nw * pixel_per_char - w) / 2); -+ -+ if (enable_inline_image) -+ xoffset = 0; -+ else -+ xoffset = (int)((nw * pixel_per_char - w) / 2); -+ - if (xoffset) - Strcat(tmp, Sprintf(" xoffset=%d", xoffset)); - if (yoffset) -diff --git a/fm.h b/fm.h -index 49af0e4..8f594dc 100644 ---- a/fm.h -+++ b/fm.h -@@ -373,6 +373,8 @@ typedef struct _imageCache { - int index; - short width; - short height; -+ short a_width; -+ short a_height; - } ImageCache; - - typedef struct _image { -@@ -919,6 +921,7 @@ global char *CurrentKeyData; - global char *CurrentCmdData; - global char *w3m_reqlog; - extern char *w3m_version; -+extern int enable_inline_image; - - #define DUMP_BUFFER 0x01 - #define DUMP_HEAD 0x02 -@@ -1174,9 +1177,11 @@ global char *ssl_forbid_method init("2, 3"); - global int is_redisplay init(FALSE); - global int clear_buffer init(TRUE); - global double pixel_per_char init(DEFAULT_PIXEL_PER_CHAR); -+global int pixel_per_char_i init(DEFAULT_PIXEL_PER_CHAR); - global int set_pixel_per_char init(FALSE); - #ifdef USE_IMAGE - global double pixel_per_line init(DEFAULT_PIXEL_PER_LINE); -+global int pixel_per_line_i init(DEFAULT_PIXEL_PER_LINE); - global int set_pixel_per_line init(FALSE); - global double image_scale init(100); - #endif -diff --git a/image.c b/image.c -index 9d0e9b5..91034ee 100644 ---- a/image.c -+++ b/image.c -@@ -44,6 +44,8 @@ initImage() - activeImage = TRUE; - } - -+int get_pixel_per_cell(int *ppc, int *ppl); -+ - int - getCharSize() - { -@@ -52,6 +54,24 @@ getCharSize() - int w = 0, h = 0; - - set_environ("W3M_TTY", ttyname_tty()); -+ -+ if (enable_inline_image) { -+ int ppc, ppl; -+ -+ if (get_pixel_per_cell(&ppc,&ppl)) { -+ pixel_per_char_i = ppc ; -+ pixel_per_line_i = ppl ; -+ pixel_per_char = (double)ppc; -+ pixel_per_line = (double)ppl; -+ } -+ else { -+ pixel_per_char_i = (int)pixel_per_char; -+ pixel_per_line_i = (int)pixel_per_line; -+ } -+ -+ return TRUE; -+ } -+ - tmp = Strnew(); - if (!strchr(Imgdisplay, '/')) - Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL); -@@ -156,6 +176,10 @@ addImage(ImageCache * cache, int x, int y, int sx, int sy, int w, int h) - static void - syncImage(void) - { -+ if (enable_inline_image) { -+ return; -+ } -+ - fputs("3;\n", Imgdisplay_wf); /* XSync() */ - fputs("4;\n", Imgdisplay_wf); /* put '\n' */ - while (fflush(Imgdisplay_wf) != 0) { -@@ -171,12 +195,16 @@ syncImage(void) - n_terminal_image = 0; - } - -+void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image); -+void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image); -+ - void - drawImage() - { - static char buf[64]; - int j, draw = FALSE; - TerminalImage *i; -+ struct stat st ; - - if (!activeImage) - return; -@@ -184,6 +212,47 @@ drawImage() - return; - for (j = 0; j < n_terminal_image; j++) { - i = &terminal_image[j]; -+ -+ if (enable_inline_image) { -+ #if 0 -+ fprintf(stderr,"file %s x %d y %d w %d h %d sx %d sy %d sw %d sh %d (ppc %d ppl %d)\n", -+ ((enable_inline_image == 2 || getenv("WINDOWID")) && -+ i->cache->touch) ? i->cache->file : i->cache->url, -+ i->x, i->y, -+ i->cache->width > 0 ? i->cache->width : 0, -+ i->cache->height > 0 ? i->cache->height : 0, -+ i->sx, i->sy, i->width, i->height, -+ pixel_per_char_i, pixel_per_line_i); -+ #endif -+ (enable_inline_image == 2 ? put_image_sixel : put_image_osc5379)( -+ ((enable_inline_image == 2 /* sixel */ || getenv("WINDOWID")) && -+ /* XXX I don't know why but sometimes i->cache->file doesn't exist. */ -+ i->cache->touch && stat(i->cache->file,&st) == 0) ? -+ /* local */ i->cache->file : /* remote */ i->cache->url, -+ i->x / pixel_per_char_i, -+ i->y / pixel_per_line_i, -+ #if 1 -+ i->cache->a_width > 0 ? -+ (i->cache->width + i->x % pixel_per_char_i + pixel_per_char_i - 1) / -+ pixel_per_char_i : -+ #endif -+ 0, -+ -+ #if 1 -+ i->cache->a_height > 0 ? -+ (i->cache->height + i->y % pixel_per_line_i + pixel_per_line_i - 1) / -+ pixel_per_line_i : -+ #endif -+ 0, -+ i->sx / pixel_per_char_i, -+ i->sy / pixel_per_line_i, -+ (i->width + i->sx % pixel_per_char_i + pixel_per_char_i - 1) / pixel_per_char_i, -+ (i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i, -+ n_terminal_image); -+ -+ continue ; -+ } -+ - if (!(i->cache->loaded & IMG_FLAG_LOADED && - i->width > 0 && i->height > 0)) - continue; -@@ -207,9 +276,15 @@ drawImage() - fputs("\n", Imgdisplay_wf); - draw = TRUE; - } -- if (!draw) -- return; -- syncImage(); -+ -+ if (!enable_inline_image) { -+ if (!draw) -+ return; -+ syncImage(); -+ } -+ else -+ n_terminal_image = 0; -+ - touch_cursor(); - refresh(); - } -@@ -321,6 +396,8 @@ showImageProgress(Buffer *buf) - } - } - if (n) { -+ if (enable_inline_image && n == l) -+ drawImage(); - message(Sprintf("%d/%d images loaded", l, n)->ptr, - buf->cursorX + buf->rootX, buf->cursorY + buf->rootY); - refresh(); -@@ -350,7 +427,7 @@ loadImage(Buffer *buf, int flag) - } - for (i = 0; i < n_load_image; i++) { - cache = image_cache[i]; -- if (!cache) -+ if (!cache || !cache->touch) - continue; - if (lstat(cache->touch, &st)) - continue; -@@ -381,7 +458,7 @@ loadImage(Buffer *buf, int flag) - - for (i = (buf != image_buffer) ? 0 : maxLoadImage; i < n_load_image; i++) { - cache = image_cache[i]; -- if (!cache) -+ if (!cache || !cache->touch) - continue; - if (cache->pid) { - kill(cache->pid, SIGKILL); -@@ -407,7 +484,8 @@ loadImage(Buffer *buf, int flag) - } - - if (draw && image_buffer) { -- drawImage(); -+ if (!enable_inline_image) -+ drawImage(); - showImageProgress(image_buffer); - } - -@@ -435,6 +513,9 @@ loadImage(Buffer *buf, int flag) - break; - } - image_cache[i] = cache; -+ if (!cache->touch) { -+ continue; -+ } - - flush_tty(); - #ifdef DONT_CALL_GC_AFTER_FORK -@@ -515,12 +596,30 @@ getImage(Image * image, ParsedURL *current, int flag) - cache->url = image->url; - cache->current = current; - cache->file = tmpfname(TMPF_DFL, image->ext)->ptr; -- cache->touch = tmpfname(TMPF_DFL, NULL)->ptr; - cache->pid = 0; - cache->index = 0; - cache->loaded = IMG_FLAG_UNLOADED; -- cache->width = image->width; -- cache->height = image->height; -+ if (enable_inline_image == 1) { -+ if (image->width > 0 && image->width % pixel_per_char_i > 0) -+ image->width += (pixel_per_char_i - image->width % pixel_per_char_i); -+ -+ if (image->height > 0 && image->height % pixel_per_line_i > 0) -+ image->height += (pixel_per_line_i - image->height % pixel_per_line_i); -+ if (image->height > 0 && image->width > 0) { -+ cache->loaded = IMG_FLAG_LOADED; -+ } -+ } -+ if (cache->loaded == IMG_FLAG_UNLOADED) { -+ cache->touch = tmpfname(TMPF_DFL, NULL)->ptr; -+ } -+ else { -+ cache->touch = NULL; -+ } -+ -+ cache->width = image->width ; -+ cache->height = image->height ; -+ cache->a_width = image->width; -+ cache->a_height = image->height; - putHash_sv(image_hash, key->ptr, (void *)cache); - } - if (flag != IMG_FLAG_SKIP) { -@@ -542,6 +641,78 @@ getImage(Image * image, ParsedURL *current, int flag) - return cache; - } - -+static int -+parseImageHeader(char *path, u_int *width, u_int *height) -+{ -+ FILE *fp; -+ u_char buf[8]; -+ -+ if (!(fp = fopen(path, "r"))) return FALSE; -+ -+ if (fread(buf, 1, 2, fp) != 2) goto error; -+ -+ if (memcmp(buf, "\xff\xd8", 2) == 0) { -+ /* JPEG */ -+ if (fseek(fp, 2, SEEK_CUR) < 0) goto error; /* 0xffe0 */ -+ while (fread(buf, 1, 2, fp) == 2) { -+ size_t len = ((buf[0] << 8) | buf[1]) - 2; -+ if (fseek(fp, len, SEEK_CUR) < 0) goto error; -+ if (fread(buf, 1, 2, fp) == 2 && -+ /* SOF0 or SOF2 */ -+ (memcmp(buf, "\xff\xc0", 2) == 0 || memcmp(buf, "\xff\xc2", 2) == 0)) { -+ fseek(fp, 3, SEEK_CUR); -+ if (fread(buf, 1, 2, fp) == 2) { -+ *height = (buf[0] << 8) | buf[1]; -+ if (fread(buf, 1, 2, fp) == 2) { -+ *width = (buf[0] << 8) | buf[1]; -+ goto success; -+ } -+ } -+ break; -+ } -+ } -+ goto error; -+ } -+ -+ if (fread(buf + 2, 1, 1, fp) != 1) goto error; -+ -+ if (memcmp(buf, "GIF", 3) == 0) { -+ /* GIF */ -+ if (fseek(fp, 3, SEEK_CUR) < 0) goto error; -+ if (fread(buf, 1, 2, fp) == 2) { -+ *width = (buf[1] << 8) | buf[0]; -+ if (fread(buf, 1, 2, fp) == 2) { -+ *height = (buf[1] << 8) | buf[0]; -+ goto success; -+ } -+ } -+ goto error; -+ } -+ -+ if (fread(buf + 3, 1, 5, fp) != 5) goto error; -+ -+ if (memcmp(buf, "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a", 8) == 0) { -+ /* PNG */ -+ if (fseek(fp, 8, SEEK_CUR) < 0) goto error; -+ if (fread(buf, 1, 4, fp) == 4) { -+ *width = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; -+ if (fread(buf, 1, 4, fp) == 4) { -+ *height = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; -+ goto success; -+ } -+ } -+ goto error; -+ } -+ -+error: -+ fclose(fp); -+ return FALSE; -+ -+success: -+ fclose(fp); -+ return TRUE; -+} -+ - int - getImageSize(ImageCache * cache) - { -@@ -554,6 +725,10 @@ getImageSize(ImageCache * cache) - if (!cache || !(cache->loaded & IMG_FLAG_LOADED) || - (cache->width > 0 && cache->height > 0)) - return FALSE; -+ -+ if (parseImageHeader(cache->file, &w, &h)) -+ goto got_image_size; -+ - tmp = Strnew(); - if (!strchr(Imgdisplay, '/')) - Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL); -@@ -569,6 +744,8 @@ getImageSize(ImageCache * cache) - - if (!(w > 0 && h > 0)) - return FALSE; -+ -+got_image_size: - w = (int)(w * image_scale / 100 + 0.5); - if (w == 0) - w = 1; -@@ -581,11 +758,11 @@ getImageSize(ImageCache * cache) - } - else if (cache->width < 0) { - int tmp = (int)((double)cache->height * w / h + 0.5); -- cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp; -+ cache->a_width = cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp; - } - else if (cache->height < 0) { - int tmp = (int)((double)cache->width * h / w + 0.5); -- cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp; -+ cache->a_height = cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp; - } - if (cache->width == 0) - cache->width = 1; -diff --git a/main.c b/main.c -index c8f1e82..32f4da2 100644 ---- a/main.c -+++ b/main.c -@@ -122,6 +122,8 @@ static int searchKeyNum(void); - #define help() fusage(stdout, 0) - #define usage() fusage(stderr, 1) - -+int enable_inline_image; /* 1 == mlterm OSC 5379, 2 == sixel */ -+ - static void - fversion(FILE * f) - { -@@ -409,7 +411,6 @@ main(int argc, char **argv, char **envp) - #if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) - char **getimage_args = NULL; - #endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ -- - GC_INIT(); - #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET)) - setlocale(LC_ALL, ""); -@@ -679,6 +680,12 @@ main(int argc, char **argv, char **envp) - } - } - #endif -+ else if (!strcmp("-ri", argv[i])) { -+ enable_inline_image = 1; -+ } -+ else if (!strcmp("-sixel", argv[i])) { -+ enable_inline_image = 2; -+ } - else if (!strcmp("-num", argv[i])) - showLineNum = TRUE; - else if (!strcmp("-no-proxy", argv[i])) -@@ -5910,8 +5917,14 @@ deleteFiles() - Firstbuf = buf; - } - } -- while ((f = popText(fileToDelete)) != NULL) -+ while ((f = popText(fileToDelete)) != NULL) { - unlink(f); -+ if (enable_inline_image == 2 && strcmp(f+strlen(f)-4, ".gif") == 0) { -+ Str firstframe = Strnew_charp(f); -+ Strcat_charp(firstframe, "-1"); -+ unlink(firstframe->ptr); -+ } -+ } - } - - void -diff --git a/terms.c b/terms.c -index 672262c..79996f1 100644 ---- a/terms.c -+++ b/terms.c -@@ -12,6 +12,7 @@ - #include <unistd.h> - #include "config.h" - #include <string.h> -+#include <sys/wait.h> - #ifdef HAVE_SYS_SELECT_H - #include <sys/select.h> - #endif -@@ -466,6 +467,260 @@ writestr(char *s) - - #define MOVE(line,column) writestr(tgoto(T_cm,column,line)); - -+void -+put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image) -+{ -+ Str buf; -+ char *size ; -+ -+ if (w > 0 && h > 0) -+ size = Sprintf("%dx%d",w,h)->ptr; -+ else -+ size = ""; -+ -+ MOVE(y,x); -+ buf = Sprintf("\x1b]5379;show_picture %s %s %dx%d+%d+%d\x07",url,size,sw,sh,sx,sy); -+ writestr(buf->ptr); -+ MOVE(Currentbuf->cursorY,Currentbuf->cursorX); -+} -+ -+static void -+save_gif(const char *path, u_char *header, size_t header_size, u_char *body, size_t body_size) -+{ -+ int fd; -+ -+ if ((fd = open(path, O_WRONLY|O_CREAT, 0600)) >= 0) { -+ write(fd, header, header_size) ; -+ write(fd, body, body_size) ; -+ write(fd, "\x3b" , 1) ; -+ close(fd) ; -+ } -+} -+ -+static u_char * -+skip_gif_header(u_char *p) -+{ -+ /* Header */ -+ p += 10; -+ -+ if (*(p) & 0x80) { -+ p += (3 * (2 << ((*p) & 0x7))); -+ } -+ p += 3; -+ -+ return p; -+} -+ -+static Str -+save_first_animation_frame(const char *path) -+{ -+ int fd; -+ struct stat st; -+ u_char *header; -+ size_t header_size; -+ u_char *body; -+ u_char *p; -+ ssize_t len; -+ Str new_path; -+ -+ new_path = Strnew_charp(path); -+ Strcat_charp(new_path, "-1"); -+ if (stat(new_path->ptr, &st) == 0) { -+ return new_path; -+ } -+ -+ if ((fd = open( path, O_RDONLY)) < 0) { -+ return NULL; -+ } -+ -+ if (fstat( fd, &st) != 0 || ! (header = GC_malloc( st.st_size))){ -+ close( fd); -+ return NULL; -+ } -+ -+ len = read(fd, header, st.st_size); -+ close(fd); -+ -+ /* Header */ -+ -+ if (len != st.st_size || strncmp(header, "GIF89a", 6) != 0) { -+ return NULL; -+ } -+ -+ p = skip_gif_header(header); -+ header_size = p - header; -+ -+ /* Application Extension */ -+ if (p[0] == 0x21 && p[1] == 0xff) { -+ p += 19; -+ } -+ -+ /* Other blocks */ -+ body = NULL; -+ while (p + 2 < header + st.st_size) { -+ if (*(p++) == 0x21 && *(p++) == 0xf9 && *(p++) == 0x04) { -+ if( body) { -+ /* Graphic Control Extension */ -+ save_gif(new_path->ptr, header, header_size, body, p - 3 - body); -+ return new_path; -+ } -+ else { -+ /* skip the first frame. */ -+ } -+ body = p - 3; -+ } -+ } -+ -+ return NULL; -+} -+ -+void ttymode_set(int mode, int imode); -+void ttymode_reset(int mode, int imode); -+ -+void -+put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image) -+{ -+ pid_t pid; -+ int do_anim; -+ MySignalHandler(*volatile previntr) (SIGNAL_ARG); -+ MySignalHandler(*volatile prevquit) (SIGNAL_ARG); -+ MySignalHandler(*volatile prevstop) (SIGNAL_ARG); -+ -+ MOVE(y,x); -+ flush_tty(); -+ -+ do_anim = (n_terminal_image == 1 && x == 0 && y == 0 && sx == 0 && sy == 0); -+ -+ previntr = mySignal(SIGINT, SIG_IGN); -+ prevquit = mySignal(SIGQUIT, SIG_IGN); -+ prevstop = mySignal(SIGTSTP, SIG_IGN); -+ -+ if ((pid = fork()) == 0) { -+ char *env; -+ int n = 0; -+ char *argv[20]; -+ char digit[2][11+1]; -+ char clip[44+3+1]; -+ Str str_url; -+ -+ close(STDERR_FILENO); /* Don't output error message. */ -+ if (do_anim) { -+ writestr("\x1b[?80h"); -+ } -+ else if (!strstr(url, "://") && strcmp(url+strlen(url)-4, ".gif") == 0 && -+ (str_url = save_first_animation_frame(url))) { -+ url = str_url->ptr; -+ } -+ ttymode_set(ISIG, 0); -+ -+ if ((env = getenv("W3M_IMG2SIXEL"))) { -+ char *p; -+ env = Strnew_charp(env)->ptr; -+ while (n < 8 && (p = strchr(env, ' '))) { -+ *p = '\0'; -+ if (*env != '\0') { -+ argv[n++] = env; -+ } -+ env = p+1; -+ } -+ if (*env != '\0') { -+ argv[n++] = env; -+ } -+ } -+ else { -+ argv[n++] = "img2sixel"; -+ } -+ argv[n++] = "-l"; -+ argv[n++] = do_anim ? "auto" : "disable"; -+ argv[n++] = "-w"; -+ sprintf(digit[0], "%d", w*pixel_per_char_i); -+ argv[n++] = digit[0]; -+ argv[n++] = "-h"; -+ sprintf(digit[1], "%d", h*pixel_per_line_i); -+ argv[n++] = digit[1]; -+ argv[n++] = "-c"; -+ sprintf(clip, "%dx%d+%d+%d", sw*pixel_per_char_i, sh*pixel_per_line_i, -+ sx*pixel_per_char_i, sy*pixel_per_line_i); -+ argv[n++] = clip; -+ argv[n++] = url; -+ if (getenv("TERM") && strcmp(getenv("TERM"), "screen") == 0 && -+ (!getenv("SCREEN_VARIANT") || strcmp(getenv("SCREEN_VARIANT"), "sixel") != 0)) { -+ argv[n++] = "-P"; -+ } -+ argv[n++] = NULL; -+ execvp(argv[0],argv); -+ exit(0); -+ } -+ else if (pid > 0) { -+ int status; -+ waitpid(pid, &status, 0); -+ ttymode_reset(ISIG, 0); -+ mySignal(SIGINT, previntr); -+ mySignal(SIGQUIT, prevquit); -+ mySignal(SIGTSTP, prevstop); -+ if (do_anim) { -+ writestr("\x1b[?80l"); -+ } -+ } -+ -+ MOVE(Currentbuf->cursorY,Currentbuf->cursorX); -+} -+ -+int -+get_pixel_per_cell(int *ppc, int *ppl) -+{ -+ fd_set rfd; -+ struct timeval tval; -+ char buf[100]; -+ char *p; -+ ssize_t len; -+ ssize_t left; -+ int wp,hp,wc,hc; -+ int i; -+ -+#ifdef TIOCGWINSZ -+ struct winsize ws; -+ if (ioctl(tty, TIOCGWINSZ, &ws) == 0 && ws.ws_ypixel > 0 && ws.ws_row > 0 && -+ ws.ws_xpixel > 0 && ws.ws_col > 0) { -+ *ppc = ws.ws_xpixel / ws.ws_col; -+ *ppl = ws.ws_ypixel / ws.ws_row; -+ return 1; -+ } -+#endif -+ -+ fputs("\x1b[14t\x1b[18t",ttyf); flush_tty(); -+ -+ p = buf; -+ left = sizeof(buf) - 1; -+ for (i = 0; i < 10; i++) { -+ tval.tv_usec = 200000; /* 0.2 sec * 10 */ -+ tval.tv_sec = 0; -+ FD_ZERO(&rfd); -+ FD_SET(tty,&rfd); -+ if (select(tty+1,&rfd,NULL,NULL,&tval) <= 0 || ! FD_ISSET(tty,&rfd)) -+ continue; -+ -+ if ((len = read(tty,p,left)) <= 0) -+ continue; -+ p[len] = '\0'; -+ -+ if (sscanf(buf,"\x1b[4;%d;%dt\x1b[8;%d;%dt",&hp,&wp,&hc,&wc) == 4) { -+ if (wp > 0 && wc > 0 && hp > 0 && hc > 0) { -+ *ppc = wp / wc; -+ *ppl = hp / hc; -+ return 1; -+ } -+ else { -+ return 0; -+ } -+ } -+ p += len; -+ left -= len; -+ } -+ -+ return 0; -+} -+ - #ifdef USE_MOUSE - #define W3M_TERM_INFO(name, title, mouse) name, title, mouse - #define NEED_XTERM_ON (1) -diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c -index cef72e2..bc8d0aa 100644 ---- a/w3mimg/x11/x11_w3mimg.c -+++ b/w3mimg/x11/x11_w3mimg.c -@@ -121,16 +121,21 @@ x11_init(w3mimg_op * self) - if (self == NULL) - return 0; - xi = (struct x11_info *)self->priv; -+#if defined(USE_IMLIB) - if (xi == NULL) - return 0; --#if defined(USE_IMLIB) - if (!xi->id) { - xi->id = Imlib_init(xi->display); - if (!xi->id) - return 0; - } - #elif defined(USE_GDKPIXBUF) -- if (!xi->init_flag) { -+ if (!xi) { -+#if defined(USE_GTK2) -+ g_type_init(); -+#endif -+ } -+ else if (!xi->init_flag) { - #if defined(USE_GTK2) - g_type_init(); - #endif -@@ -138,7 +143,7 @@ x11_init(w3mimg_op * self) - xi->init_flag = TRUE; - } - #endif -- if (!xi->imageGC) { -+ if (xi && !xi->imageGC) { - xi->imageGC = XCreateGC(xi->display, xi->parent, 0, NULL); - if (!xi->imageGC) - return 0; -@@ -653,9 +658,11 @@ x11_get_image_size(w3mimg_op * self, W3MImage * img, char *fname, int *w, - - if (self == NULL) - return 0; -+#if defined(USE_IMLIB) && defined(USE_IMLIB2) - xi = (struct x11_info *)self->priv; - if (xi == NULL) - return 0; -+#endif - - #if defined(USE_IMLIB) - im = Imlib_load_image(xi->id, fname); -@@ -755,6 +762,9 @@ w3mimg_x11open() - return NULL; - memset(wop, 0, sizeof(w3mimg_op)); - -+ if (getenv("W3M_USE_REMOTE_IMAGE")) -+ goto end; -+ - xi = (struct x11_info *)malloc(sizeof(struct x11_info)); - if (xi == NULL) - goto error; -@@ -807,6 +817,7 @@ w3mimg_x11open() - - wop->priv = xi; - -+ end: - wop->init = x11_init; - wop->finish = x11_finish; - wop->active = x11_active; diff --git a/debian/patches/460_printf.patch b/debian/patches/460_printf.patch deleted file mode 100644 index 96a2dc7..0000000 --- a/debian/patches/460_printf.patch +++ /dev/null @@ -1,52 +0,0 @@ -Subject: Correct printf arguments (still support <C99) -From: Scarlett <scarlett@xavin.net>, Tatsuya Kinoshita <tats@debian.org> -Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2 - -diff --git a/cookie.c b/cookie.c -index 8020f6d..c11649c 100644 ---- a/cookie.c -+++ b/cookie.c -@@ -247,7 +247,7 @@ find_cookie(ParsedURL *pu) - Strcat(tmp, Sprintf("; $Domain=\"%s\"", p1->domain->ptr)); - if (p1->portl) - Strcat(tmp, -- Sprintf("; $Port=\"%s\"", portlist2str(p1->portl))); -+ Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)->ptr)); - } - } - return tmp; -@@ -463,7 +463,7 @@ save_cookies(void) - continue; - fprintf(fp, "%s\t%s\t%s\t%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n", - parsedURL2Str(&p->url)->ptr, -- p->name->ptr, p->value->ptr, p->expires, -+ p->name->ptr, p->value->ptr, (long)p->expires, - p->domain->ptr, p->path->ptr, p->flag, - p->version, str2charp(p->comment), - (p->portl) ? portlist2str(p->portl)->ptr : "", -diff --git a/main.c b/main.c -index 32f4da2..76256d6 100644 ---- a/main.c -+++ b/main.c -@@ -5841,7 +5841,7 @@ set_buffer_environ(Buffer *buf) - set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url)); - else - set_environ("W3M_CURRENT_FORM", ""); -- set_environ("W3M_CURRENT_LINE", Sprintf("%d", -+ set_environ("W3M_CURRENT_LINE", Sprintf("%ld", - l->real_linenumber)->ptr); - set_environ("W3M_CURRENT_COLUMN", Sprintf("%d", - buf->currentColumn + -diff --git a/map.c b/map.c -index 12701e7..bb240ea 100644 ---- a/map.c -+++ b/map.c -@@ -573,7 +573,7 @@ page_info_panel(Buffer *buf) - "<tr valign=top><td nowrap>Number of lines<td>", - Sprintf("%d", all)->ptr, - "<tr valign=top><td nowrap>Transferred bytes<td>", -- Sprintf("%d", buf->trbyte)->ptr, NULL); -+ Sprintf("%lu", (unsigned long)buf->trbyte)->ptr, NULL); - - a = retrieveCurrentAnchor(buf); - if (a != NULL) { diff --git a/debian/patches/470_alloc.patch b/debian/patches/470_alloc.patch deleted file mode 100644 index b7cae1a..0000000 --- a/debian/patches/470_alloc.patch +++ /dev/null @@ -1,151 +0,0 @@ -Subject: Add overflow detection (still support <C99) -From: Scarlett <scarlett@xavin.net>, Tatsuya Kinoshita <tats@debian.org> -Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2 - -diff --git a/alloc.h b/alloc.h -new file mode 100644 -index 0000000..fa0d391 ---- /dev/null -+++ b/alloc.h -@@ -0,0 +1,39 @@ -+/* -+ * by Scarlett. public domain. -+ * replacements for w3m's allocation macros which add overflow -+ * detection and concentrate the macros in one file -+ */ -+#ifndef W3_ALLOC_H -+#define W3_ALLOC_H -+#include <gc.h> -+#include <stdlib.h> -+#include <stdio.h> -+#include <limits.h> -+ -+static inline size_t -+z_mult_no_oflow_(size_t n, size_t size) -+{ -+ if (size != 0 && n > ULONG_MAX / size) { -+ fprintf(stderr, -+ "w3m: overflow in malloc, %lu*%lu\n", (unsigned long)n, (unsigned long)size); -+ exit(1); -+ } -+ return n * size; -+} -+ -+#define New(type) \ -+ (GC_MALLOC(sizeof(type))) -+ -+#define NewAtom(type) \ -+ (GC_MALLOC_ATOMIC(sizeof(type))) -+ -+#define New_N(type, n) \ -+ (GC_MALLOC(z_mult_no_oflow_((n), sizeof(type)))) -+ -+#define NewAtom_N(type, n) \ -+ (GC_MALLOC_ATOMIC(z_mult_no_oflow_((n), sizeof(type)))) -+ -+#define New_Reuse(type, ptr, n) \ -+ (GC_REALLOC((ptr), z_mult_no_oflow_((n), sizeof(type)))) -+ -+#endif /* W3_ALLOC_H */ -diff --git a/indep.h b/indep.h -index 84416ed..2809832 100644 ---- a/indep.h -+++ b/indep.h -@@ -1,7 +1,7 @@ - /* $Id: indep.h,v 1.16 2003/09/22 21:02:19 ukai Exp $ */ - #ifndef INDEP_H - #define INDEP_H --#include <gc.h> -+#include "alloc.h" - #include "Str.h" - #include "config.h" - -@@ -92,11 +92,6 @@ extern char *w3m_etc_dir(); - extern char *w3m_conf_dir(); - extern char *w3m_help_dir(); - --#define New(type) ((type*)GC_MALLOC(sizeof(type))) --#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type))) --#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) --#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type))) --#define New_Reuse(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type))) - #define NewWithoutGC(type) ((type*)xmalloc(sizeof(type))) - #define NewWithoutGC_N(type,n) ((type*)xmalloc((n)*sizeof(type))) - #define NewWithoutGC_Reuse(type,ptr,n) ((type*)xrealloc(ptr,(n)*sizeof(type))) -diff --git a/libwc/charset.c b/libwc/charset.c -index 3f0b74d..ea79b1c 100644 ---- a/libwc/charset.c -+++ b/libwc/charset.c -@@ -1,8 +1,7 @@ - - #include <stdlib.h> - #include <ctype.h> --#include <gc.h> --#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) -+#include "../alloc.h" - - #include "wc.h" - -diff --git a/libwc/status.c b/libwc/status.c -index d25c924..4a2ebf8 100644 ---- a/libwc/status.c -+++ b/libwc/status.c -@@ -1,7 +1,6 @@ - - #include <string.h> --#include <gc.h> --#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) -+#include "../alloc.h" - - #include "wc.h" - #ifdef USE_UNICODE -diff --git a/main.c b/main.c -index 76256d6..d37b243 100644 ---- a/main.c -+++ b/main.c -@@ -383,6 +383,13 @@ make_optional_header_string(char *s) - return hs; - } - -+static void * -+die_oom(size_t bytes) -+{ -+ fprintf(stderr, "Out of memory: %lu bytes unavailable!\n", (unsigned long)bytes); -+ exit(1); -+} -+ - int - main(int argc, char **argv, char **envp) - { -@@ -412,6 +419,7 @@ main(int argc, char **argv, char **envp) - char **getimage_args = NULL; - #endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */ - GC_INIT(); -+ GC_set_oom_fn(die_oom); - #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET)) - setlocale(LC_ALL, ""); - #endif -diff --git a/matrix.c b/matrix.c -index 64fd0ad..bc7a5be 100644 ---- a/matrix.c -+++ b/matrix.c -@@ -34,18 +34,12 @@ - - #include "config.h" - #include "matrix.h" --#include <gc.h> -+#include "alloc.h" - - /* - * Macros from "fm.h". - */ - --#define New(type) ((type*)GC_MALLOC(sizeof(type))) --#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type))) --#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type))) --#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type))) --#define Renew_N(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type))) -- - #define SWAPD(a,b) { double tmp = a; a = b; b = tmp; } - #define SWAPI(a,b) { int tmp = a; a = b; b = tmp; } - diff --git a/debian/patches/800_lang-en.patch b/debian/patches/800_lang-en.patch deleted file mode 100644 index d008cca..0000000 --- a/debian/patches/800_lang-en.patch +++ /dev/null @@ -1,535 +0,0 @@ -Subject: Improve English documents -Author: Markus Hiereth <post@hiereth.de>, Justin B Rye <justin.byam.rye@gmail.com> -Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550 -Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771003 - -diff --git a/doc/w3m.1 b/doc/w3m.1 -index 58a8965..0762f51 100644 ---- a/doc/w3m.1 -+++ b/doc/w3m.1 -@@ -1,13 +1,11 @@ - .nr N -1 - .nr D 5 --.TH W3M 1 Local -+.TH W3M 1 "2014-11-29" - .UC 4 - .SH NAME --w3m \- a text based Web browser and pager -+w3m \- a text based web browser and pager - .SH SYNOPSIS --.B w3m --[options] [URL or filename] --.PP -+w3m [OPTION]... [ \fIfile\fP | \fIURL\fP ]... - .SH DESCRIPTION - .\" This defines appropriate quote strings for nroff and troff - .ds lq \&" -@@ -17,234 +15,285 @@ w3m \- a text based Web browser and pager - .\" Just in case these number registers aren't set yet... - .if \nN==0 .nr N 10 - .if \nD==0 .nr D 5 --.I --w3m --is a World Wide Web (WWW) text based client. It has English and --Japanese help files and an option menu and can be configured to --use either language. It will display hypertext markup language --(HTML) documents containing links to files residing on the local --system, as well as files residing on remote systems. It can --display HTML tables and frames. --In addition, it can be used as a "pager" in much the same manner --as "more" or "less". --Current versions of --.I --w3m --run on --Unix (Solaris, SunOS, HP-UX, Linux, FreeBSD, and EWS4800) --and on --Microsoft Windows 9x/NT. --.PP -+ -+\fIw3m\fP is a text based browser which can display local or remote -+web pages as well as other documents. It is able to process HTML -+tables and frames but it ignores JavaScript and Cascading Style -+Sheets. \fIw3m\fP can also serve as a pager for text files named as -+arguments or passed on standard input, and as a general purpose -+directory browser. -+ -+\fIw3m\fP organizes its content in buffers or tabs, allowing easy -+navigation between them. With the w3m-img extension installed, \fIw3m\fP can -+display inline graphics in web pages. And whenever \fIw3m\fP's HTML -+rendering capabilities do not meet your needs, the target URL can be -+handed over to a graphical browser with a single command. -+ -+For help with runtime options, press \(lqH\(rq while running \fIw3m\fP. -+ -+.SH ARGUMENTS -+ -+When given one or more command line arguments, \fIw3m\fP will handle -+targets according to content type. For web, \fIw3m\fP gets this -+information from HTTP headers; for relative or absolute file system -+paths, it relies on filenames. -+ -+With no argument, \fIw3m\fP expects data from standard input and -+assumes \(lqtext/plain\(rq unless another MIME type is given by the user. -+ -+If provided with no target and no fallback target (see for instance -+option \fB\-v\fP below), \fIw3m\fP will exit with usage information. - .SH OPTIONS --At start up, \fIw3m\fR will load any local --file or remote URL specified at the command --line. For help with runtime options, press \fB"H"\fR --while running \fIw3m\fR. --Command line options are: --.PP -+Command line options are introduced with a single \(lq\-\(rq character and -+may take an argument. -+.SS General options: - .TP --.B -t tab --set tab width -+\fB\-B\fP -+with no other target defined, use the bookmark page for startup - .TP --.B -r --ignore backspace effect --.TP --.B -l line --# of preserved line (default 10000) --.TP --.B -I charset --document charset --.TP --.B -O charset --display/output charset -+\fB\-M\fP -+monochrome display - .TP --.B -B --load bookmark -+\fB\-no-mouse\fP -+deactivate mouse support - .TP --.B -bookmark file --specify bookmark file -+\fB\-num\fP -+display each line's number - .TP --.B -T type --specify content-type -+\fB\-N\fP -+distribute multiple command line arguments to tabs. By default, a -+stack of buffers is used -+.TP -+\fB\-ppc \fInum\fR -+width of \fInum\fR pixels per character. Range of 4.0 to 32.0, default 8.0. -+Larger values will make tables narrower. (Implementation not verified) - .TP --.B -m --internet message mode -+\fB\-ppl \fInum\fR -+height of \fInum\fR pixels per line. Range of 4.0 to 64.0. (Implementation not verified) - .TP --.B -v --visual startup mode -+\fB\-title\fP, \fB\-title=TERM\fP -+use the buffer name as terminal title string. With specified TERM, -+this sets the title configuration style accordingly - .TP --.B -M --monochrome display -+\fB\-v\fP -+with no other target defined, welcome users with a built-in page - .TP --.B -N --open URL of command line on each new tab -+\fB\-W\fP -+toggle wrapping in searches - .TP --.B -F --automatically render frame -+\fB\-X\fP -+do not initialize/deinitialize the terminal - .TP --.B -dump --dump formatted page into stdout -+\fB+\fInum\fR -+go to line \fInum\fR; only effective for \fInum\fR larger than the number of lines in the terminal -+.SS Browser options: - .TP --.B -cols width --specify column width (used with -dump) -+\fB\-cols \fInum\fR -+with stdout as destination; HTML is rendered to lines of \fInum\fR characters - .TP --.B -ppc count --specify the number of pixels per character (4.0...32.0). --Larger values will make tables narrower. [default 8.0] -+\fB\-cookie\fP, \fB\-no-cookie\fP -+use stored cookies and accept new ones, or do neither - .TP --.B -ppl count --specify the number of pixels per line (4.0...64.0) -+\fB\-F\fP -+render frames - .TP --.B -dump_source --dump page source into stdout -+\fB\-graph\fP, \fB\-no-graph\fP -+use or do not use graphic characters for drawing HTML table and frame borders - .TP --.B -dump_head --dump response of HEAD request into stdout -+\fB\-header \fIstring\fR -+append \fIstring\fR to the HTTP(S) request. Expected to match the header syntax \f(CW Variable: Value\fP - .TP --.B -dump_both --dump HEAD and source into stdout -+\fB\-m\fP -+Render the body of Usenet messages according to the header \(lqContent-type\(rq - .TP --.B -dump_extra --dump HEAD, source, and extra information into stdout -+\fB\-no-proxy\fP -+do not use proxy - .TP --.B -post file --use POST method with file content -+\fB\-post \fIfile\fR -+use POST method to upload data defined in \fIfile\fR. The syntax to be used -+is \f(CWvar1=value1[&var2=value2]...\fP - .TP --.B -header string --insert string as a header -+\fB\-4\fP -+IPv4 only. Corresponds to dns_order=4 in configuration files - .TP --.B +<num> --goto <num> line -+\fB\-6\fP -+IPv6 only. Corresponds to dns_order=6 in configuration files -+.SS Text pager options: - .TP --.B -num --show line number -+\fB\-l \fInum\fR -+number of lines preserved internally when receiving plain text from -+stdin (default 10,000) - .TP --.B -no-proxy --don't use proxy -+\fB\-r\fP -+use caret notation to display special escape characters (such -+as ANSI escapes or nroff-style backspaces for bold and underlined -+characters) instead of processing them - .TP --.B -4 --IPv4 only (-o dns_order=4) -+\fB\-s\fP -+squeeze multiple blank lines into one - .TP --.B -6 --IPv6 only (-o dns_order=6) -+\fB\-t\fP \fInum\fP -+set tab width to \fInum\fR columns. No effect on stdout -+.SS Data type/encoding options: - .TP --.B -no-mouse --don't use mouse -+\fB\-I \fIcharset\fR -+user defined character encoding of input data - .TP --.B -cookie --use cookie. -+\fB\-O \fIcharset\fR -+user defined character encoding of output data - .TP --.B -no-cookie --don't use cookie -+\fB\-T \fItype\fR -+explicit characterization of input data by MIME type -+.SS Options for data output, followed by immediate exit: - .TP --.B -graph --use graphic character -+\fB\-dump\fP -+dump rendered page into stdout. Set implicitly when output is directed -+to a file or pipe - .TP --.B -no-graph --don't use graphic character -+\fB\-dump_source\fP -+dump the page's source code into stdout - .TP --.B -s --squeeze multiple blank lines -+\fB\-dump_head\fP -+dump response of a HEAD request for a URL into stdout - .TP --.B -W --toggle wrap search mode -+\fB\-dump_both\fP -+dump HEAD, and source code for a URL into stdout - .TP --.B -X --don't use termcap init/deinit -+\fB\-dump_extra\fP -+dump HEAD, source code, and extra information for a URL into stdout - .TP --.B -title [=TERM] --set buffer name to terminal title string. --If TERM is specified, use the TERM style title configuration. -+\fB\-help\fP -+show a summary of compiled-in features and command line options - .TP --.B -o opt=value --assign value to config option -+\fB\-show-option\fP -+show all available config options - .TP --.B -show-option --show all available config option -+\fB\-version\fP -+show the version of \fIw3m\fP -+.SS Options for overriding default settings and resources: - .TP --.B -config file --specify config file -+\fB\-bookmark \fIfile\fR -+use \fIfile\fR instead of the default bookmark.html file - .TP --.B -help --show usage -+\fB\-config \fIfile\fR -+use \fIfile\fR instead of the default config file - .TP --.B -version --show w3m version -+\fB\-debug\fP -+DO NOT USE - .TP --.B -reqlog --write request logfile -+\fB\-o \fIoption=value\fR -+modify one configuration item with an explicitly given value; without \fIoption=value\fR, equivalent to -show-option - .TP --.B -debug --DO NOT USE -+\fB\-reqlog\fP -+log headers of HTTP communication in file \f(CW~/.w3m/request.log\fP - .SH EXAMPLES -+.SS Pager-like usage -+.TP -+Combine snippets of HTML code and preview the page -+.EX -+$ cat header.html footer.html | w3m -T text/html -+.EE -+.TP -+Compare two files using tabs -+.EX -+$ w3m -N config.old config -+.EE -+.SS Browser-like usage -+.TP -+Display web content in monochrome terminal -+.EX -+$ w3m -M http://w3m.sourceforge.net -+.EE -+.TP -+Display embedded graphics -+.EX -+$ w3m -o auto_image=TRUE http://w3m.sourceforge.net -+.EE -+.TP -+Display content from Usenet -+.EX -+$ w3m -m nntp://news.aioe.org/comp.os.linux.networking -+.EE -+.TP -+Upload data for a URL using the POST method -+.EX -+$ w3m -post - http://example.com/form.php <<<'a=0&b=1' -+.EE -+.SS Filter-like usage -+.TP -+Convert an HTML file to plain text with a defined line length -+.EX -+$ w3m -cols 40 foo.html > foo.txt -+.EE -+.TP -+Output the bookmarks page as text with an appended list of links -+.EX -+$ w3m -B -o display_link_number=1 > out.txt -+.EE -+.TP -+Conversion of file format and character encoding -+.EX -+$ w3m -T text/html -I EUC-JP -O UTF-8 < foo.html > foo.txt -+.EE -+.SS Start with no input -+.TP -+Welcome users with a built-in page -+.EX -+$ w3m -v -+.EE -+.\".SH Errors -+.SH ENVIRONMENT -+\fIw3m\fP recognises the environment variable WWW_HOME as defining a -+fallback target for use if it is invoked without one. -+.SH FILES - .TP --To use w3m as a pager: --.br --$ ls | w3m --.br --.TP --To use w3m to translate HTML files: --.br --$ cat foo.html | w3m -T text/html -+\f(CW~/.w3m/bookmark.html\fP -+default bookmark file - .TP --or --.br --$ cat foo.html | w3m -dump -T text/html >foo.txt --.SH FILES -+\f(CW~/.w3m/config\fP -+user defined configuration file; overrides \f(CW/etc/w3m/config\fP - .TP --.I ${HOME}/.w3m/config --configuration file -+\f(CW~/.w3m/cookie\fP -+cookie jar; written on exit, read on launch - .TP --.I ${HOME}/.w3m/keymap --key binding configuration file --.\" .TP --.\" .I ${HOME}/.w3m/menu --.\" ??? -+\f(CW~/.w3m/history\fP -+browser history - visited files and URLs - .TP --.I ${HOME}/.w3m/mouse --mouse configuration file -+\f(CW~/.w3m/keymap\fP -+user defined key bindings; overrides default key bindings - .TP --.I ${HOME}/.w3m/cookie --cookie file -+\f(CW~/.w3m/mailcap\fP -+external viewer configuration file - .TP --.I ${HOME}/.w3m/history --history file -+\f(CW~/.w3m/menu\fP -+user defined menu; overrides default menu - .TP --.I ${HOME}/.w3m/passwd --passowrd and username file -+\f(CW~/.w3m/mime.types\fP -+MIME types file - .TP --.I ${HOME}/.w3m/pre_form --form parameters file -+\f(CW~/.w3m/mouse\fP -+user defined mouse settings - .TP --.I ${HOME}/.w3m/mailcap --external viewer configuration file -+\f(CW~/.w3m/passwd\fP -+password and username file - .TP --.I ${HOME}/.w3m/mime.types --MIME types file -+\f(CW~/.w3m/pre_form\fP -+contains predefined values to fill recurrent HTML forms - .\" .TP --.\" .I ${HOME}/.w3m/urimethodmap -+.\" .I $~/.w3m/urimethodmap - .\" ??? - .SH NOTES --This is the --.I --w3m --0.5.3 Release. --.PP --Please see the MANUAL.html file distributed with w3m for --more detailed documentation. -- --Additional information about --.I --w3m --may be found on its Japanese language Web site located at: -- http://w3m.sourceforge.net/index.ja.html --.br --or on its English version of the site at: -- http://w3m.sourceforge.net/index.en.html -+This is the \fIw3m\fP 0.5.3 Release. -+.SH SEE ALSO -+README and example files are to be found in the doc directory of your \fIw3m\fP installation. Recent information about \fIw3m\fP may be found on -+.UR http://w3m.sourceforge.net -+the project's web pages at -+.UE - .SH ACKNOWLEDGMENTS --.I --w3m --has incorporated code from several sources. -+\fIw3m\fP has incorporated code from several sources. - Users have contributed patches and suggestions over time. - .SH AUTHOR --Akinori ITO <aito@fw.ipsj.or.jp> -+.UR aito@fw.ipsj.or.jp -+Akinori ITO -+.UE -+ -diff --git a/scripts/w3mman/w3mman.1.in b/scripts/w3mman/w3mman.1.in -index 1c0361d..1b1d990 100644 ---- a/scripts/w3mman/w3mman.1.in -+++ b/scripts/w3mman/w3mman.1.in -@@ -1,4 +1,4 @@ --.TH W3MMAN 1 "Nov 5, 2005" -+.TH W3MMAN 1 "Nov 23, 2014" - .\" Please adjust this date whenever revising the manpage. - .\" - .\" Some roff macros, for reference: -@@ -12,19 +12,19 @@ - .\" .sp <n> insert n+1 empty lines - .\" for manpage-specific macros, see man(7) - .SH NAME --w3mman \- an interface to the on-line reference manuals by w3m(1) -+w3mman \- an interface to the on-line reference manuals via w3m(1) - .SH SYNOPSIS - .B w3mman --.RI "[-M " path ] " " [ section ] " page" -+.RI "[\-M " path ] " " [ section ] " page" - .br - .B w3mman --.RI "[-M " path "] -k " keyword -+.RI "[\-M " path "] \-k " keyword - .br - .B w3mman --.RI -l " file -+.RI \-l " file - .SH DESCRIPTION - .B w3mman --is the system's manual pager by -+is a pager for manual pages, using - .BR w3m (1). - .SH OPTIONS - A summary of options is included below. -@@ -42,6 +42,7 @@ Specify - Specify a - .I file. - .SH ENVIRONMENT -+Two variables are available for debugging. - .TP - .B W3MMAN_W3M - If W3MMAN_W3M is set, its value is used instead of @W3M@. -@@ -51,7 +52,7 @@ If W3MMAN_MAN is set, its value is used instead of @MAN@. - .SH FILES - .TP - .I @libexecdir@/@PACKAGE@/cgi-bin/w3mman2html.cgi --convert manual page to html. -+manual page to HTML convertor. - .SH SEE ALSO - .BR man (1), - .BR w3m (1). diff --git a/debian/patches/810_lang-de.patch b/debian/patches/810_lang-de.patch deleted file mode 100644 index 831d85b..0000000 --- a/debian/patches/810_lang-de.patch +++ /dev/null @@ -1,921 +0,0 @@ -Subject: Add German translation -Author: Markus Hiereth <markus.hiereth@freenet.de> -Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763964 - -diff --git a/po/LINGUAS b/po/LINGUAS -index 1489115..ade7ca2 100644 ---- a/po/LINGUAS -+++ b/po/LINGUAS -@@ -1,2 +1,2 @@ - # Set of available languages. --ja -+ja de -diff --git a/po/de.po b/po/de.po -new file mode 100644 -index 0000000..5e84022 ---- /dev/null -+++ b/po/de.po -@@ -0,0 +1,903 @@ -+# German translation of w3m -+# Copyright (C) 2014 Fumitoshi UKAI -+# This file is distributed under the same license as the w3m package. -+# Markus Hiereth <markus.hiereth@freenet.de>, 2014. -+msgid "" -+msgstr "" -+"Project-Id-Version: w3m 0.5.3\n" -+"Report-Msgid-Bugs-To: satodai@w3m.jp\n" -+"POT-Creation-Date: 2010-08-20 18:44+0900\n" -+"PO-Revision-Date: 2014-10-19 11:15+0200\n" -+"Last-Translator: Markus Hiereth <markus.hiereth@freenet.de>\n" -+"Language-Team: German <debian-l10n-german@lists.debian.org>\n" -+"Language: de\n" -+"MIME-Version: 1.0\n" -+"Content-Type: text/plain; charset=UTF-8\n" -+"Content-Transfer-Encoding: 8bit\n" -+"Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Virtaal 0.7.1\n" -+ -+#: menu.c:267 -+msgid " Back (b) " -+msgstr " Zurück (b) " -+ -+#: menu.c:268 -+msgid " Select Buffer(s) " -+msgstr " Puffer auswählen (s) " -+ -+#: menu.c:270 -+msgid " Select Tab (t) " -+msgstr " Reiter auswählen (t) " -+ -+#: menu.c:272 -+msgid " View Source (v) " -+msgstr " Codeansicht (v) " -+ -+#: menu.c:273 -+msgid " Edit Source (e) " -+msgstr " Code bearbeiten (e) " -+ -+#: menu.c:274 -+msgid " Save Source (S) " -+msgstr " Code speichern (S) " -+ -+#: menu.c:275 -+msgid " Reload (r) " -+msgstr " Erneut laden (r) " -+ -+#: menu.c:276 menu.c:283 menu.c:287 -+msgid " ---------------- " -+msgstr " ---------------------- " -+ -+#: menu.c:277 -+msgid " Go Link (a) " -+msgstr " Ziel öffnen.. (a) " -+ -+#: menu.c:278 -+msgid " on New Tab (n) " -+msgstr " ..in neuem Reiter (n) " -+ -+#: menu.c:279 -+msgid " Save Link (A) " -+msgstr " Ziel speichern (A) " -+ -+#: menu.c:280 -+msgid " View Image (i) " -+msgstr " Bild anzeigen (i) " -+ -+#: menu.c:281 -+msgid " Save Image (I) " -+msgstr " Bild speichern (I) " -+ -+#: menu.c:282 -+msgid " View Frame (f) " -+msgstr " Frames zeigen (f) " -+ -+#: menu.c:284 -+msgid " Bookmark (B) " -+msgstr " Lesezeichen (B) " -+ -+#: menu.c:285 -+msgid " Help (h) " -+msgstr " Hilfe (h) " -+ -+#: menu.c:286 -+msgid " Option (o) " -+msgstr " Einstellungen (o) " -+ -+#: menu.c:288 -+msgid " Quit (q) " -+msgstr " Programm verlassen (q) " -+ -+#: rc.c:60 -+msgid "External Viewer Setup" -+msgstr "Konfiguration für externe Anzeigeprogramme" -+ -+#: rc.c:61 -+msgid "Tab width in characters" -+msgstr "Tabulatorbreite in Zeichen" -+ -+#: rc.c:62 -+msgid "Indent for HTML rendering" -+msgstr "Einzug bei HTML-Darstellung" -+ -+#: rc.c:63 -+msgid "Number of pixels per character (4.0...32.0)" -+msgstr "Anzahl von Pixeln pro Zeichen (4.0 bis 32.0)" -+ -+#: rc.c:64 -+msgid "Number of pixels per line (4.0...64.0)" -+msgstr "Anzahl von Pixeln pro Zeile (4.0 bis 64.0)" -+ -+#: rc.c:65 -+#entsprechend Bescheibung aus MANUAL.html, mh 14.10.2014 -+msgid "Number of remembered lines when used as a pager" -+msgstr "Anzahl gemerkter, über die Standardeingabe erhaltener Zeilen" -+ -+#: rc.c:66 -+msgid "Use URL history" -+msgstr "URL-Chronik verwenden" -+ -+#: rc.c:67 -+msgid "Number of remembered URL" -+msgstr "Anzahl von URLs in Chronik" -+ -+#: rc.c:68 -+msgid "Save URL history" -+msgstr "URL-Chronik speichern" -+ -+#: rc.c:69 -+msgid "Render frames automatically" -+msgstr "Frames selbstständig darstellen" -+ -+#: rc.c:70 -+msgid "Treat argument without scheme as URL" -+msgstr "Eingabe ohne Protokoll-Präfix als URL auffassen" -+ -+#: rc.c:71 -+msgid "Use _self as default target" -+msgstr "_self als Standard-Zielfenster verwenden" -+ -+#: rc.c:72 -+msgid "Open link on new tab if target is _blank or _new" -+msgstr "Link in neuem Reiter öffnen, falls für Zielfenster _blank oder _new definiert ist" -+ -+#: rc.c:73 -+msgid "Open download list panel on new tab" -+msgstr "Downloadliste in neuem Reiter öffnen" -+ -+#: rc.c:74 -+msgid "Display link URL automatically" -+msgstr "URL der Links selbstständig anzeigen" -+ -+#: rc.c:75 -+msgid "Display link numbers" -+msgstr "Linknummern anzeigen" -+ -+#: rc.c:76 -+msgid "Display decoded URL" -+msgstr "URL entschlüsselt anzeigen" -+ -+#: rc.c:77 -+msgid "Display current line number" -+msgstr "Aktuelle Zeilennummer anzeigen" -+ -+#: rc.c:78 -+msgid "Display inline images" -+msgstr "Eingebettete Bilder anzeigen" -+ -+#: rc.c:79 -+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string" -+msgstr "Pseudo-ALTs zu eingebetteten Bildern ohne ALT oder TITLE anzeigen" -+ -+#: rc.c:81 -+msgid "Load inline images automatically" -+msgstr "Eingebettete Bilder selbstständig laden" -+ -+#: rc.c:82 -+msgid "Maximum processes for parallel image loading" -+msgstr "Anzahl zulässiger Prozesse zum gleichzeitigen Laden von Bildern" -+ -+#: rc.c:83 -+msgid "Use external image viewer" -+msgstr "Externen Bildbetrachter verwenden" -+ -+#: rc.c:84 -+msgid "Scale of image (%)" -+msgstr "Bilder prozentual skalieren" -+ -+#: rc.c:85 -+msgid "External command to display image" -+msgstr "Befehl für externen Bildbetrachter" -+ -+#: rc.c:86 -+msgid "Use link list of image map" -+msgstr "Bei Grafiken mit eingebetteten Links Ziele auflisten" -+ -+#: rc.c:88 -+msgid "Display file names in multi-column format" -+msgstr "Dateinamen auf Spalten verteilt anzeigen" -+ -+#: rc.c:89 -+msgid "Use ASCII equivalents to display entities" -+msgstr "ASCII-Ersatz für in HTML benannte Zeichen verwenden" -+ -+#: rc.c:90 -+msgid "Character type for border of table and menu" -+msgstr "Zeichen zum Einrahmen von Tabellen und Menüs" -+ -+#: rc.c:91 -+msgid "Fold lines in TEXTAREA" -+msgstr "In Eingabefeldern vom Typ TEXTAREA Texte umbrechen" -+ -+#: rc.c:92 -+msgid "Display INS, DEL, S and STRIKE element" -+msgstr "Umsetzung der Elemente INS, DEL, S und STRIKE" -+ -+#: rc.c:93 -+msgid "Display with color" -+msgstr "In Farbe anzeigen" -+ -+#: rc.c:94 -+msgid "Color of normal character" -+msgstr "Farbe für normalen Text" -+ -+#: rc.c:95 -+msgid "Color of anchor" -+msgstr "Farbe für Links / Element A" -+ -+#: rc.c:96 -+msgid "Color of image link" -+msgstr "Farbe für Bilder / Element IMG" -+ -+#: rc.c:97 -+msgid "Color of form" -+msgstr "Farbe für Eingaben / Element INPUT" -+ -+#: rc.c:98 -+msgid "Enable coloring of active link" -+msgstr "Aktiven Link farblich hervorheben" -+ -+#: rc.c:99 -+msgid "Color of currently active link" -+msgstr "Farbe des derzeit aktiven Links " -+ -+#: rc.c:100 -+msgid "Use visited link color" -+msgstr "Besuchte Links farblich hervorheben" -+ -+#: rc.c:101 -+msgid "Color of visited link" -+msgstr "Farbe für besuchte Links" -+ -+#: rc.c:102 -+msgid "Color of background" -+msgstr "Hintergrundfarbe" -+ -+#: rc.c:103 -+msgid "Color of mark" -+msgstr "Farbe für Textmarken" -+#msgstr "Farbe für Textmarkierungen" -+ -+#: rc.c:104 -+msgid "Use proxy" -+msgstr "Proxy verwenden" -+ -+#: rc.c:105 -+msgid "URL of HTTP proxy host" -+msgstr "URL des HTTP-Proxy-Hosts" -+ -+#: rc.c:107 -+msgid "URL of HTTPS proxy host" -+msgstr "URL des HTTPS-Proxy-Hosts" -+ -+#: rc.c:110 -+msgid "URL of GOPHER proxy host" -+msgstr "URL des GOPHER-Proxy-Hosts" -+ -+#: rc.c:112 -+msgid "URL of FTP proxy host" -+msgstr "URL des FTP-Proxy-Hosts" -+ -+#: rc.c:113 -+msgid "Domains to be accessed directly (no proxy)" -+msgstr "Ohne Proxy, direkt zu kontaktierende Domains" -+ -+#: rc.c:114 -+msgid "Check noproxy by network address" -+msgstr "Direkten Datentransfer ohne Proxy mittels Netzwerkadresse sicherstellen" -+ -+#: rc.c:115 -+msgid "Disable cache" -+msgstr "Zwischenspeicherung deaktivieren" -+ -+#: rc.c:117 -+msgid "News server" -+msgstr "News-Server" -+ -+#: rc.c:118 -+msgid "Mode of news server" -+msgstr "Modus des News-Servers" -+ -+#: rc.c:119 -+msgid "Number of news messages" -+msgstr "News-Anzahl" -+ -+#: rc.c:121 -+msgid "Order of name resolution" -+msgstr "Reihenfolge der Namens-Auflösung" -+ -+#: rc.c:122 -+msgid "Directory corresponding to / (document root)" -+msgstr "Wurzelverzeichnis für Dokumente (/)" -+ -+#: rc.c:123 -+msgid "Directory corresponding to /~user" -+msgstr "Pfad zum Benutzerverzeichnis (~)" -+ -+#: rc.c:124 -+msgid "Directory corresponding to /cgi-bin" -+msgstr "Verzeichnis für ausführbare Skripte (cgi-bin)" -+ -+#: rc.c:125 -+msgid "Confirm when quitting with q" -+msgstr "Das Programm erst nach Bestätigung verlassen" -+ -+#: rc.c:126 -+msgid "Close tab if buffer is last when back" -+msgstr "Reiter mit nur einem Puffer auf Zurück-Befehl hin schließen" -+ -+#: rc.c:128 -+msgid "Enable mark operations" -+msgstr "Arbeit mit Textmarken ermöglichen" -+#msgstr "Arbeit mit Textmarkierungen ermöglichen" -+ -+#: rc.c:130 -+msgid "Enable Emacs-style line editing" -+msgstr "Zeilen wie in Emacs bearbeiten" -+ -+#: rc.c:131 -+msgid "Enable vi-like numeric prefix" -+msgstr "Vorangestellte Zahlen wie in vi aktivieren" -+ -+#: rc.c:132 -+msgid "Move cursor to top line when going to label" -+msgstr "Labels nach Aufsuchen immer oben positionieren" -+ -+#: rc.c:133 -+msgid "Move cursor to top line when moving to next page" -+msgstr "Beim Umblättern Eingabemarke nach oben setzen" -+ -+#: rc.c:134 -+msgid "Fold lines of plain text file" -+msgstr "Zeilen in Textdateien umbrechen" -+ -+#: rc.c:135 -+msgid "Show line numbers" -+msgstr "Zeilennummern anzeigen" -+ -+#: rc.c:136 -+msgid "Show search string" -+msgstr "Suchbegriff anzeigen" -+ -+#: rc.c:137 -+msgid "List of mime.types files" -+msgstr "Liste der mime.types-Dateien" -+ -+#: rc.c:138 -+msgid "List of mailcap files" -+msgstr "Liste der mailcap-Dateien" -+ -+#: rc.c:139 -+msgid "List of urimethodmap files" -+msgstr "Liste von Dateien mit URI-Methode-Zuordnungen" -+ -+#: rc.c:140 -+msgid "Editor" -+msgstr "Editor" -+ -+#: rc.c:141 -+msgid "Mailer" -+msgstr "Mail-Programm" -+ -+#: rc.c:142 -+# korrespondiert mit Pulldown-Menü, daher verkürzt. mh 09.10.2014 -+msgid "How to call Mailer for mailto URLs with options" -+msgstr "Umgang mit mailto-URLs" -+ -+#: rc.c:143 -+msgid "External Browser" -+msgstr "Externer Browser" -+ -+#: rc.c:144 -+msgid "Second External Browser" -+msgstr "Zweiter externer Browser" -+ -+#: rc.c:145 -+msgid "Third External Browser" -+msgstr "Dritter externer Browser" -+ -+#: rc.c:146 -+# entsprechend file:///usr/share/doc/w3m/README.passwd -+# Prüfung beanstandete auch passwd_file mit Zugriffbytes 600, mh, 05.10.2014 -+msgid "Disable secret file security check" -+msgstr "Keine Prüfung der Sicherheit bei Dateien mit geheimem Inhalt" -+ -+#: rc.c:147 -+msgid "Password file" -+msgstr "Passwort-Datei" -+ -+#: rc.c:148 -+msgid "File for setting form on loading" -+msgstr "Datei mit vordefinierten Eingaben für Formulare" -+ -+#: rc.c:149 -+msgid "Password for anonymous FTP (your mail address)" -+msgstr "Passwort für anonyme FTP-Anmeldung (Ihre Mailadresse)" -+ -+#: rc.c:150 -+msgid "Generate domain part of password for FTP" -+msgstr "Domain-Teil des FTP-Passwortes erzeugen" -+ -+#: rc.c:151 -+msgid "User-Agent identification string" -+msgstr "Browserkennung übermitteln" -+ -+#: rc.c:152 -+msgid "Accept-Encoding header" -+msgstr "Accept-Encoding-Kopfzeile" -+ -+#: rc.c:153 -+msgid "Accept header" -+msgstr "Accept-Kopfzeile" -+ -+#: rc.c:154 -+msgid "Accept-Language header" -+msgstr "Accept-Language-Kopfzeile" -+ -+#: rc.c:155 -+msgid "Treat URL-like strings as links in all pages" -+msgstr "URL-artige Zeichenketten auf allen Seiten als Links auffassen" -+ -+#: rc.c:156 -+msgid "Wrap search" -+msgstr "Im Dokument umlaufend suchen" -+ -+#: rc.c:157 -+msgid "Display unseen objects (e.g. bgimage tag)" -+msgstr "Nicht gezeigte Objekte melden (z.B. Hintergrundbild)" -+ -+#: rc.c:158 -+msgid "Uncompress compressed data automatically when downloading" -+msgstr "Komprimierte Daten beim Download selbstständig dekomprimieren" -+ -+#: rc.c:160 -+# String nicht in Optionen-Menü gefunden. mh, 05.10.2014 -+msgid "Run external viewer in a separate session" -+msgstr "Externe Anzeigeprogramme in eigener Sitzung laufen lassen" -+ -+#: rc.c:162 -+msgid "Run external viewer in the background" -+msgstr "Externe Anzeigeprogramme im Hintergrund laufen lassen" -+ -+#: rc.c:164 -+msgid "Use external program for directory listing" -+msgstr "Externes Programm zum Auflisten von Verzeichnissen verwenden" -+ -+#: rc.c:165 -+msgid "URL of directory listing command" -+msgstr "URL des Befehls zum Auflisten von Verzeichnissen" -+ -+#: rc.c:167 -+msgid "Enable dictionary lookup through CGI" -+msgstr "Wörterbuchabfrage mittels CGI aktivieren" -+ -+#: rc.c:168 -+msgid "URL of dictionary lookup command" -+msgstr "URL des Befehls zur Wörterbuch-Abfrage" -+ -+#: rc.c:170 -+msgid "Display link name for images lacking ALT" -+msgstr "Bei Bildern ohne ALT-Angabe Linkziel anzeigen" -+ -+#: rc.c:171 -+msgid "Index file for directories" -+msgstr "Indexdatei für Verzeichnisse" -+ -+#: rc.c:172 -+msgid "Prepend http:// to URL automatically" -+msgstr "Ziel-Eingaben gegebenenfalls http:// voranstellen" -+ -+#: rc.c:173 -+msgid "Default value for open-URL command" -+msgstr "Vorgabewert bei der Adresseneingabe" -+ -+#: rc.c:174 -+msgid "Decode Content-Transfer-Encoding when saving" -+msgstr "Beim Speichern entsprechend Content-Transfer-Encoding entschlüsseln" -+ -+#: rc.c:175 -+msgid "Preserve timestamp when saving" -+msgstr "Zeitstempel beim Speichern erhalten" -+ -+#: rc.c:177 -+msgid "Enable mouse" -+msgstr "Maus aktivieren" -+ -+#: rc.c:178 -+msgid "Scroll in reverse direction of mouse drag" -+msgstr "Mausbewegungen entgegengesetzt scrollen" -+ -+#: rc.c:179 -+msgid "Behavior of wheel scroll speed" -+msgstr "Umsetzung der Mausradbewegung" -+ -+#: rc.c:180 -+msgid "(A only)Scroll by # (%) of screen" -+msgstr "(nur A) Um # % des Fensters scrollen" -+ -+#: rc.c:181 -+msgid "(B only)Scroll by # lines" -+msgstr "(nur B) Um # Zeilen scrollen" -+ -+#: rc.c:183 -+msgid "Free memory of undisplayed buffers" -+msgstr "Speicherplatz nicht angezeigter Puffer freigeben" -+ -+#: rc.c:184 -+msgid "Suppress `Referer:' header" -+msgstr "Referer-Kopfzeile unterdrücken" -+ -+#: rc.c:185 -+msgid "Search case-insensitively" -+msgstr "Groß- und Kleinschreibung beim Suchen ignorieren" -+ -+#: rc.c:186 -+msgid "Use LESSOPEN" -+msgstr "LESSOPEN verwenden" -+ -+#: rc.c:189 -+msgid "Perform SSL server verification" -+msgstr "SSL-Server-Verifizierung durchführen" -+ -+#: rc.c:190 -+msgid "PEM encoded certificate file of client" -+msgstr "PEM-kodierte Zertifikatsdatei des Clients" -+ -+#: rc.c:191 -+msgid "PEM encoded private key file of client" -+msgstr "PEM-kodierte private Schlüsseldatei des Clients" -+ -+#: rc.c:192 -+msgid "Path to directory for PEM encoded certificates of CAs" -+msgstr "Pfad zum Verzeichnis für PEM-kodierte Zertifikate von CAs" -+ -+#: rc.c:193 -+msgid "File consisting of PEM encoded certificates of CAs" -+msgstr "Datei mit PEM-kodierten Zertifikaten von CAs" -+ -+#: rc.c:195 -+msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)" -+msgstr "Liste unzulässiger SSL-Verfahren (2: SSLv2, 3: SSLv3, t: TLSv1)" -+ -+#: rc.c:198 -+msgid "Enable cookie processing" -+msgstr "Cookie-Verarbeitung aktivieren" -+ -+#: rc.c:199 -+msgid "Print a message when receiving a cookie" -+msgstr "Den Empfang von Cookies melden" -+ -+#: rc.c:200 -+msgid "Accept cookies" -+msgstr "Cookies akzeptieren" -+ -+#: rc.c:201 -+msgid "Action to be taken on invalid cookie" -+msgstr "Reaktion auf ungültiges Cookie" -+ -+#: rc.c:202 -+msgid "Domains to reject cookies from" -+msgstr "Domains, deren Cookies abzulehnen sind" -+ -+#: rc.c:203 -+msgid "Domains to accept cookies from" -+msgstr "Domains, deren Cookies akzeptiert werden" -+ -+#: rc.c:204 -+# Variable vom Typ String im Abschnitt Cookies-Einstellungen, mh 10.10.2014 -+#, fuzzy -+msgid "Domains to avoid [wrong number of dots]" -+msgstr "Zu meidende Domains (falsche Anzahl von Punkten)" -+ -+#: rc.c:206 -+msgid "Number of redirections to follow" -+msgstr "Anzahl zu akzeptierender Umleitungen" -+ -+# Konfigurationsvariable vom Typ string, mh, 05.10.2014 -+#: rc.c:207 -+msgid "Enable processing of meta-refresh tag" -+msgstr "Meta-Refresh-Element verarbeiten" -+ -+#: rc.c:210 -+msgid "Enable Migemo (Roma-ji search)" -+msgstr "Romaji-Suche mittels Migemo aktivieren" -+ -+#: rc.c:211 -+msgid "Migemo command" -+msgstr "Migemo-Befehl" -+ -+#: rc.c:215 -+msgid "Display charset" -+msgstr "Zeichenkodierung der Anzeige" -+ -+#: rc.c:216 -+msgid "Default document charset" -+msgstr "Zeichenkodierungs-Vorgabe für Dokumente" -+ -+#: rc.c:217 -+msgid "Automatic charset detect when loading" -+msgstr "Selbstständige Erkennung der Zeichenkodierung beim Laden" -+ -+#: rc.c:218 -+msgid "System charset" -+msgstr "Zeichenkodierung des Systems" -+ -+#: rc.c:219 -+msgid "System charset follows locale(LC_CTYPE)" -+msgstr "Zeichenkodierung des Systems entsprechend Locale (LC_CTYPE)" -+ -+#: rc.c:220 -+# war zuvor -+# msgstr "Halfdump mit der zur Anzeige benutzten Zeichenkodierung exportieren" -+msgid "Output halfdump with display charset" -+msgstr "Halfdump in der zur Anzeige benutzten Kodierung" -+ -+#: rc.c:221 -+# Konfigurationsvariable vom Typ boolean, mh, 05.10.2014 -+#, fuzzy -+msgid "Use multi column characters" -+msgstr "Spaltenübergreifende Zeichen verwenden" -+ -+#: rc.c:222 -+msgid "Use combining characters" -+msgstr "Kombinationszeichen verwenden" -+ -+#: rc.c:223 -+msgid "Use double width for some Unicode characters" -+msgstr "Einzelnen Unicode-Zeichen zwei Spalten einräumen" -+ -+#: rc.c:224 -+msgid "Use Unicode language tags" -+msgstr "Unicode-Sprach-Tags verwenden" -+ -+#: rc.c:225 -+msgid "Charset conversion using Unicode map" -+msgstr "Zeichen in Unicode kodieren" -+ -+#: rc.c:226 -+msgid "Charset conversion when loading" -+msgstr "Zeichenkodierung beim Laden anpassen" -+ -+#: rc.c:227 -+msgid "Adjust search string for document charset" -+msgstr "Zu suchende Zeichenkette der Kodierung des Dokumentes anpassen" -+ -+#: rc.c:228 -+msgid "Fix character width when conversion" -+msgstr "Bei Umwandlung an der Breite von Zeichen festhalten" -+ -+#: rc.c:229 -+msgid "Use GB 12345 Unicode map instead of GB 2312's" -+msgstr "GB-12345-Unicode statt GB 2312 verwenden" -+ -+#: rc.c:230 -+msgid "Use JIS X 0201 Roman for ISO-2022-JP" -+msgstr "JIS X 0201 Roman statt ISO-2022-JP verwenden" -+ -+#: rc.c:231 -+msgid "Use JIS C 6226:1978 for ISO-2022-JP" -+msgstr "JIS C 6226:1978 statt ISO-2022-JP verwenden" -+ -+#: rc.c:232 -+msgid "Use JIS X 0201 Katakana" -+msgstr "JIS X 0201 Katakana verwenden" -+ -+#: rc.c:233 -+msgid "Use JIS X 0212:1990 (Supplemental Kanji)" -+msgstr "JIS X 0212:1990 verwenden (ergänzendes Kanji)" -+ -+#: rc.c:234 -+msgid "Use JIS X 0213:2000 (2000JIS)" -+msgstr "JIS X 0213:2000 verwenden (2000JIS)" -+ -+#: rc.c:235 -+msgid "Strict ISO-2022-JP/KR/CN" -+msgstr "Striktes ISO-2022-JP/KR/CN" -+ -+#: rc.c:236 -+msgid "Treat 4 bytes char. of GB18030 as Unicode" -+msgstr "4-Byte-Zeichen von GB 18030 als Unicode auffassen" -+ -+#: rc.c:237 -+msgid "Simple Preserve space" -+msgstr "Einfache Platzerhaltung" -+ -+#: rc.c:240 -+msgid "keymap file" -+msgstr "Tastaturbelegungs-Datei" -+ -+#: rc.c:257 -+msgid "black" -+msgstr "schwarz" -+ -+#: rc.c:258 -+msgid "red" -+msgstr "rot" -+ -+#: rc.c:259 -+msgid "green" -+msgstr "grün" -+ -+#: rc.c:260 -+msgid "yellow" -+msgstr "gelb" -+ -+#: rc.c:261 -+msgid "blue" -+msgstr "blau" -+ -+#: rc.c:262 -+msgid "magenta" -+msgstr "magenta" -+ -+#: rc.c:263 -+msgid "cyan" -+msgstr "cyan" -+ -+#: rc.c:264 -+msgid "white" -+msgstr "weiß" -+ -+#: rc.c:265 -+msgid "terminal" -+msgstr "wie Terminal" -+ -+#: rc.c:284 -+msgid "none" -+msgstr "keiner" -+ -+#: rc.c:285 -+msgid "current URL" -+msgstr "aktuelle URL" -+ -+#: rc.c:286 -+msgid "link URL" -+msgstr "Link-URL" -+ -+#: rc.c:291 -+msgid "simple" -+msgstr "einfach" -+ -+#: rc.c:292 -+msgid "use tag" -+msgstr "durch Tags" -+ -+#: rc.c:293 -+msgid "fontify" -+msgstr "hervorgehoben" -+ -+#: rc.c:299 -+msgid "A:relative to screen height" -+msgstr "A: relativ zu Fensterhöhe" -+ -+#: rc.c:300 -+msgid "B:fixed speed" -+msgstr "B: feste Geschwindigkeit" -+ -+#: rc.c:307 -+msgid "unspecified" -+msgstr "nicht spezifiziert" -+ -+#: rc.c:308 -+msgid "inet inet6" -+msgstr "inet inet6" -+ -+#: rc.c:309 -+msgid "inet6 inet" -+msgstr "inet6 inet" -+ -+#: rc.c:310 -+msgid "inet only" -+msgstr "nur inet" -+ -+#: rc.c:311 -+msgid "inet6 only" -+msgstr "nur inet6" -+ -+#: rc.c:318 -+msgid "discard" -+msgstr "verwerfen" -+ -+#: rc.c:320 -+msgid "accept" -+msgstr "annehmen" -+ -+#: rc.c:322 -+msgid "ask" -+msgstr "nachfragen" -+ -+#: rc.c:329 -+# gehört zu rc.c:142 -+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014 -+msgid "use internal mailer instead" -+msgstr "Mail intern erstellen" -+ -+#: rc.c:331 -+# gehört zu rc.c:142 -+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014 -+msgid "ignore options and use only the address" -+msgstr "Optionen ignorieren" -+ -+#: rc.c:332 -+# gehört zu rc.c:142 -+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014 -+msgid "use full mailto URL" -+msgstr "komplett verwenden" -+ -+#: rc.c:341 -+msgid "OFF" -+msgstr "AUS" -+ -+#: rc.c:342 -+msgid "Only ISO 2022" -+msgstr "Nur ISO-2022" -+ -+#: rc.c:343 -+msgid "ON" -+msgstr "AN" -+ -+#: rc.c:349 -+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 -+msgid "ASCII" -+msgstr "ASCII" -+ -+#: rc.c:350 -+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 -+# hier ist "Zeichensatz" akzeptabel mh, 09.10.2014 -+msgid "charset specific" -+msgstr "zeichensatzspezifisch" -+ -+#: rc.c:351 -+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 -+msgid "DEC special graphics" -+msgstr "mit DEC-Grafiken" -+ -+#: rc.c:714 -+msgid "Display Settings" -+msgstr "Einstellungen zur Anzeige" -+ -+#: rc.c:716 -+msgid "Color Settings" -+msgstr "Farbeinstellungen" -+ -+#: rc.c:718 -+msgid "Miscellaneous Settings" -+msgstr "Weitere Einstellungen" -+ -+#: rc.c:719 -+msgid "Directory Settings" -+msgstr "Verzeichnis-Einstellungen" -+ -+#: rc.c:720 -+msgid "External Program Settings" -+msgstr "Einstellungen für externe Programme" -+ -+#: rc.c:721 -+msgid "Network Settings" -+msgstr "Netzwerk-Einstellungen" -+ -+#: rc.c:722 -+msgid "Proxy Settings" -+msgstr "Proxy-Einstellungen" -+ -+#: rc.c:724 -+msgid "SSL Settings" -+msgstr "SSL-Einstellungen" -+ -+#: rc.c:727 -+msgid "Cookie Settings" -+msgstr "Cookie-Einstellungen" -+ -+#: rc.c:730 -+msgid "Charset Settings" -+msgstr "Zeichenkodierungs-Einstellungen" -+ -+#. TRANSLATORS: -+#. * AcceptLang default: this is used in Accept-Language: HTTP request -+#. * header. For example, ja.po should translate it as -+#. * "ja;q=1.0, en;q=0.5" like that. -+#. -+#: rc.c:1209 -+msgid "en;q=1.0" -+msgstr "de;q=1.0, en;q=0.5" diff --git a/debian/patches/820_lang-ja.patch b/debian/patches/820_lang-ja.patch deleted file mode 100644 index 12324d0..0000000 --- a/debian/patches/820_lang-ja.patch +++ /dev/null @@ -1,18 +0,0 @@ -Subject: Set Language tag properly for Japanese translation -Author: zimous <zimous@matfyz.cz> -Origin: https://512722.bugs.gentoo.org/attachment.cgi?id=378452 -Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=512722 - -diff --git a/po/ja.po b/po/ja.po -index 947191c..c16557a 100644 ---- a/po/ja.po -+++ b/po/ja.po -@@ -12,7 +12,7 @@ msgstr "" - "PO-Revision-Date: 2010-08-20 18:45+0900\n" - "Last-Translator: Fumitoshi UKAI <ukai@debian.or.jp>\n" - "Language-Team: Japanese\n" --"Language: \n" -+"Language: ja\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" diff --git a/debian/patches/900_ChangeLog.patch b/debian/patches/900_ChangeLog.patch deleted file mode 100644 index 3482292..0000000 --- a/debian/patches/900_ChangeLog.patch +++ /dev/null @@ -1,613 +0,0 @@ -Subject: Update ChangeLog -From: Tatsuya Kinoshita <tats@debian.org> - -diff --git a/ChangeLog b/ChangeLog -index 88358ef..7629962 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,605 @@ -+2015-01-24 Tatsuya Kinoshita <tats@debian.org> -+ -+ * acinclude.m4, configure, version.c.in: -+ Update to 0.5.3+gitYYYYMMDD (generate from ChangeLog). -+ -+2015-01-15 Tatsuya Kinoshita <tats@debian.org> -+ -+ * alloc.h, main.c: Drop C99 features. -+ -+2015-01-15 Scarlett <scarlett@xavin.net> -+ -+ Add overflow detection. -+ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2 -+ * main.c: Call exit(1) when out of memory to avoid dereferencing null -+ pointers when gc's malloc fails. -+ * alloc.h: Replacements for w3m's allocation macros which add -+ overflow detection and concentrate the macros in one file. -+ * indep.h, libwc/charset.c, libwc/status.c, matrix.c: Use the -+ overflow-detecting allocation macros from alloc.h. -+ -+2015-01-15 Tatsuya Kinoshita <tats@debian.org> -+ -+ * Str.c, cookie.c, map.c: -+ Do not use C99 printf format specifiers and asprintf. -+ -+2015-01-15 Scarlett <scarlett@xavin.net> -+ -+ Correct printf arguments and use asprintf. -+ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2 -+ * Str.c: Use asprintf() instead of rolling our own printf string -+ length detection. -+ * cookie.c: Pass the char pointer in the string struct to printf %s -+ instead of the string struct itself. -+ Print time_t using %lld instead of %ld to allow for 64-bit time_t. -+ * main.c: Print a long int using the correct format specifier. -+ * map.c: Print size_t using the correct format specifier. -+ -+2014-12-06 Araki Ken <arakiken@users.sf.net> -+ -+ Support OSC 5379 remote imaging and sixel graphics. -+ Origin: https://bitbucket.org/arakiken/w3m/branch/remoteimg (2014-11-16) -+ -+ * doc/README.sixel, terms.c: Add README.sixel. W3M_IMG2SIXEL -+ environmental variable enables to specify options of img2sixel. -+ -+ * image.c, terms.c: -+ Add n_terminal_image argument to put_image_{sixel|osc5379}(). -+ Use struct winsize to calculate ppc and ppl. -+ -+ * terms.c: If SCREEN_VARIANT=sixel on GNU screen, exec img2sixel -+ without -P option. -+ -+ * terms.c: ttymode_set() -> ttymode_reset(). -+ -+ * terms.c: Fix. -+ -+ * terms.c: Support GNU screen. -+ -+ * terms.c: Show GIF (except animation GIF) correctly. -+ -+ * main.c, terms.c: img2sixel exits by Ctrl+C. Enable GIF Animation if -+ 'I' is pressed to show it. -+ -+ * image.c: Add declaration of get_pixel_per_cell(). -+ -+ * terms.c: Show the first frame of animation gif files. -+ -+ * terms.c: system() -> fork()&execvp() -+ -+ * display.c: Draw underline on anchor which contains cboth text and -+ images. -+ -+ * etc.c: Remove close_tty() from setup_child() because close_tty() -+ sometimes interrupts loadGeneralFile() in loadImage() and corrupt -+ image data can be cached in ~/.w3m. -+ -+ * image.c: Minor fix. -+ -+ * image.c: Cache image files if at all possible and convert them to -+ sixel when -sixel option is specified. -+ -+ * image.c: Init pixel_per_{char|line}_i if get_pixel_per_cell() fails. -+ -+ * display.c, file.c, fm.h, image.c, main.c, terms.c: -+ Add -sixel option which supports image processing by img2sixel. -+ -+ * image.c: Don't download image files whose size is specified in -+ <img> tag. -+ -+ * image.c: Minor fixes of parseImageHeader(). -+ -+ * image.c: Determine the format of an image file by its header data -+ not by its file name suffix. -+ -+ * image.c: Read width and height from jpeg, png and gif files directly -+ instead of executing w3mimgdisplay -size. -+ -+ * display.c: display.c: Draw underline on anchor text which is not -+ overlapped with any image. -+ -+ * terms.c: Clear fd_set by FD_ZERO() before select(). -+ -+ * file.c: nw and ni are rounded up instead of rounded off to show -+ every corner of images. -+ -+ * terms.c: Change time to wait for the response of "\x1b[14t\x1b[18t" -+ from 0.1 sec to 0.5 sec. -+ -+ * image.c: -+ - clearImage() works. -+ - Use cached image files created by w3m in getImage(). -+ -+ * file.c: Hack for alignment. -+ -+ * fm.h, image.c, terms.c: -+ - Adjust the image size to the terminal cell size. -+ - If the image size is specified in html source, skip to load the image. -+ -+ * display.c, fm.h, image.c, main.c, terms.c, w3mimg/x11/x11_w3mimg.c: -+ Support remote image by OSC 5379 show_picture sequence. -+ -+2014-12-06 Olaf Hering <olh@suse.de> -+ -+ * parsetagx.c: Fix crash in parse_tag() during every start. -+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-parsetagx-crash.patch?expand=1 -+ -+ * fm.h: Change the default to alt_entity=0. -+ Change the default for the option "Use ASCII equivalents to -+ display entities" from YES to NO. -+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.5.1-no-ASCII-equivalents-by-default.patch?expand=1 -+ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=247397 -+ -+ * anchor.c, libwc/gb18030.c, libwc/ucs.c, regex.c: -+ Fix a few harmless uninitialized variables. -+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-uninitialized.patch?expand=1 -+ -+2014-12-06 Peter Poeml <poeml@suse.de> -+ -+ * terms.c: Prevent segfault when editing a textarea field with vi. -+ Add fix for segfault that can occur when editing a textarea field -+ with vi, and returning to w3m (it seems to happen if the terminal -+ is not writable, as when using w3m after 'su - some_user') -+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.4.1-textarea-segfault.dif?expand=1 -+ -+2014-12-04 Tatsuya Kinoshita <tats@debian.org> -+ -+ * acinclude.m4: Follow updated configure. -+ -+2014-12-03 Yusuke Baba <babayaga1@y8.dion.ne.jp> -+ -+ * configure, w3mimg/fb/fb.c, w3mimg/fb/fb.h, w3mimg/fb/fb_w3mimg.c: -+ Support FreeBSD framebuffer. -+ Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html -+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673 -+ -+2014-12-02 Naohiro Aota <naota@gentoo.org> -+ -+ * acinclude.m4, configure, w3mimg/fb/fb_gdkpixbuf.c: -+ * w3mimg/x11/x11_w3mimg.c: -+ Depend on gdk-pixbuf instead of gtk when gtk2. -+ Origin: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-gdk-pixbuf.patch?revision=1.1 -+ -+2014-12-02 Jeroen Roovers <jer@gentoo.org> -+ -+ * acinclude.m4, configure: Add tinfo to with_termlib. -+ Fix building against sys-libs/ncurses[tinfo]. -+ Origin: https://504588.bugs.gentoo.org/attachment.cgi?id=372650 -+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=504588 -+ -+2014-12-01 OBATA Akio <obache@netbsd.org> -+ -+ * acinclude.m4, configure: -+ Assume defined PKG_CONFIG points right location when gtk2. -+ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-aa?rev=1.13&content-type=text/x-cvsweb-markup -+ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-ak?rev=1.1&content-type=text/x-cvsweb-markup -+ -+2014-12-01 Vsevolod Stakhov <vsevolod@FreeBSD.org> -+ -+ * config.h.in: Disable USE_EGD for LibreSSL. -+ Disable use of RAND_egd as it is absent in FreeBSD. -+ This also fixes build error with LibreSSL. -+ Origin: https://bz-attachments.freebsd.org/attachment.cgi?id=144635 -+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191852 -+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191956 -+ -+2014-12-01 zimous <zimous@matfyz.cz> -+ -+ * po/ja.po: Set Language tag properly for Japanese translation. -+ Origin: https://512722.bugs.gentoo.org/attachment.cgi?id=378452 -+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=512722 -+ -+2014-11-30 Tatsuya Kinoshita <tats@debian.org> -+ -+ * doc/w3m.1: Typo fix. -+ -+2014-11-30 Markus Hiereth <post@hiereth.de> -+ -+ * doc/w3m.1: Miscellaneous changes to improve English manpage. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 -+ -+2014-11-29 Markus Hiereth <post@hiereth.de> -+ -+ * doc/w3m.1: Improve FILES. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 -+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=403634 -+ -+ * doc/w3m.1: Improve EXAMPLES. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 -+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=380560 -+ -+ * doc/w3m.1: Improve explanation about option -N. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 -+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=345084 -+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=530468 -+ -+ * doc/w3m.1: Note that -cols only affects when HTML is rendered. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 -+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=285251 -+ -+ * doc/w3m.1: Add more info on configuration. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30 -+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=268211 -+ -+2014-11-29 Justin B Rye <justin.byam.rye@gmail.com> -+ -+ * scripts/w3mman/w3mman.1.in: Tweak for W3MMAN_W3M. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771003#5 -+ -+ * scripts/w3mman/w3mman.1.in: English fixes. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#25 -+ -+2014-11-29 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-19+. -+ -+2014-11-29 Justin B Rye <justin.byam.rye@gmail.com> -+ -+ * scripts/w3mman/w3mman2html.cgi.in: Fix Perl warnings. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771004 -+ -+2014-10-21 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-19 -+ -+ * po/LINGUAS: Correct LINGUAS to a whitespace separated list -+ -+2014-10-21 Markus Hiereth <markus.hiereth@freenet.de> -+ -+ * po/LINGUAS, po/de.po: Add German translation -+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763964 -+ -+2014-10-15 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-18 -+ -+ * doc-jp/README.SSL: Update README.SSL to follow default values -+ -+ * config.sub: Update config.sub with autotools-dev 20140911.1 -+ -+ * fm.h: Disable SSLv3 by default [CVE-2014-3566] -+ cf. https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/ -+ -+2014-10-15 Ludwig Nussel <ludwig.nussel@suse.de> -+ -+ * fm.h: Force ssl_verify_server on and disable SSLv2 support -+ Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4 -+ -+2014-10-13 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-17+ -+ -+2014-10-04 Tatsuya Kinoshita <tats@debian.org> -+ -+ * libwc/ambwidth_map.awk, libwc/map/ucs_ambwidth.map: -+ Fix incorrect generation of ucs_ambwidth_map -+ -+2014-08-22 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-17 -+ -+ * config.guess: -+ Update config.guess to 2014-03-23 with autotools-dev 20140510.1 -+ -+ * config.sub: -+ Update config.sub to 2014-05-01 with autotools-dev 20140510.1 -+ -+2014-08-22 Micah Cowan <micah@addictivecode.org> -+ -+ * main.c: Support Boehm GC 7.2 -+ Replace Gentoo's patch to prevent segfaults due to infinite recursion. -+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=080_gc72.patch;att=1;bug=758831 -+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758831 -+ Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=555467 -+ Bug: http://sourceforge.net/p/w3m/patches/63/ -+ Bug: http://sourceforge.net/p/w3m/patches/59/ -+ -+2014-08-22 Tatsuya Kinoshita <tats@debian.org> -+ -+ * main.c: -+ Revert "Support Boehm GC 7.2" (w3m-0.5.2-gc72.patch from Gentoo) -+ This reverts commit 4331db3e3e673ac4dbfe8e9f2b42a8e0478dc98a. -+ -+2014-06-23 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-16 -+ -+ * url.c: Disable ciphers that use keys smaller than 128 bits -+ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1325674 -+ -+2014-01-04 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-15 -+ -+2014-01-03 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-14 -+ -+ * acinclude.m4, configure: Use pkg-config to build with imlib2 1.4.6 -+ -+ * doc/HISTORY, doc/README.cookie, doc/README.m17n: -+ Prefer US-ASCII rathar than Japanese encodings in English documents -+ -+2013-12-27 Tatsuya Kinoshita <tats@debian.org> -+ -+ * doc-jp/MANUAL.html, doc/MANUAL.html: -+ Cleanup unusable links in MANUAL.html -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517315 -+ -+ * version.c.in: Update to 0.5.3+debian-13+ -+ -+2013-12-17 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-13 -+ -+2013-12-14 Tatsuya Kinoshita <tats@debian.org> -+ -+ * config.guess: -+ Update config.guess to 2013-06-10 with autotools-dev 20130810.1 -+ -+ * config.sub: -+ Update config.sub to 2013-08-10 with autotools-dev 20130810.1 -+ -+2013-12-07 Reinhard Max <max@suse.de> -+ -+ * local.c: Fix a directory descriptor leak in loadLocalDir -+ Patch from openSUSE on 2009-09-07. -+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-closedir.patch -+ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=531675 -+ -+2013-12-07 AIDA Shinra <shinra@j10n.org> -+ -+ * main.c: Fix crash after SEARCH_NEXT -+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-search-next.patch>, -+ [w3m-dev:04473] on 2013-12-07. -+ -+2013-11-11 Paul Boekholt <p.boekholt@gmail.com> -+ -+ * file.c: Add support for single quoted meta refresh URL -+ Bug: https://sourceforge.net/p/w3m/patches/53/ -+ -+2013-11-07 Cristian Rodriguez <crrodriguez@opensuse.org> -+ -+ * url.c: Use SSL_OP_NO_COMPRESSION if available -+ Due to the "CRIME attack" (CVE-2012-4929) HTTPS clients that -+ negotiate TLS-level compression can be abused for MITM attacks. -+ * url.c: Use SSL_MODE_RELEASE_BUFFERS if available -+ Patch from openSUSE on 2012-11-12: -+ https://build.opensuse.org/request/show/141054 -+ -+2013-10-15 Tatsuya Kinoshita <tats@debian.org> -+ -+ * Makefile.in: -+ Depend on funcname.tab to fix parallel make issue of scripts -+ Bug: https://sourceforge.net/p/w3m/patches/64/ -+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=362249 -+ -+ * w3mimg/Makefile.in: -+ Avoid prerequisite $(IMGOBJS) to fix parallel make issue of w3mimg -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726188 -+ -+ * acinclude.m4, configure: -+ Explicitly add -lX11 to IMGX11LDFLAGS only when gtk2 -+ Bug: https://sourceforge.net/p/w3m/patches/57/ -+ -+ * w3mimg/Makefile.in: Revert "Fix parallel make issue" -+ This reverts commit aa6f871c6dcc108118142bcc786e4a6ac3d46867. -+ -+ * Makefile.in: -+ Revert "Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5" -+ This reverts commit 7410954066d68ac2ad6aea638801714447321fec. -+ -+2013-10-14 AIDA Shinra <shinra@j10n.org> -+ -+ * url.c: Define schemeNumToName() to fix scheme bug -+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-schemebug.patch>, -+ [w3m-dev:04470] on 2013-10-14. -+ Bug: https://sourceforge.net/p/w3m/patches/60/ -+ -+ * config.h.in, file.c, fm.h, html.h, image.c, indep.c, indep.h: -+ * istream.c, istream.h, local.c, main.c, mimehead.c, proto.h: -+ Workaround of GC crash on Cygwin64 -+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch>, -+ [w3m-dev:04469] on 2013-10-14. -+ -+2013-10-14 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-12+ -+ -+2013-10-14 Jarek Czekalski <jarekczek@poczta.onet.pl> -+ -+ * terms.c: Fix paren in check_cygwin_console() -+ Bug: https://sourceforge.net/p/w3m/patches/66/ -+ -+2013-10-13 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-12 -+ -+ * doc-jp/MANUAL.html, doc-jp/w3m.1, doc/MANUAL.html, doc/w3m.1: -+ Update document for the -s option change -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527 -+ -+ * terms.c: Do not fail when LANG is not set -+ Check whether the value of LC_ALL, LC_CTYPE or LANG is not NULL in -+ check_cygwin_console(). -+ Bug: https://sourceforge.net/p/w3m/patches/66/ -+ -+2013-10-12 Tatsuya Kinoshita <tats@debian.org> -+ -+ * table.h: Bump MAXCOL to 256 -+ Bug: https://sourceforge.net/p/w3m/feature-requests/24/ -+ -+2013-10-12 Laurence Richert <laurencerichert@yahoo.de> -+ -+ * main.c, proto.h: vim/-perator like handling -+ - half page scrolling -+ - jumping to elements numbered by getLinkNumberStr() from Karsten -+ Schoelzel -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028 -+ -+2013-10-12 Tatsuya Kinoshita <tats@debian.org> -+ -+ * doc-jp/README, doc/README: -+ Mention project page rather than unavailable mailing lists -+ -+2013-10-09 Rafael Laboissiere <rafael@laboissiere.net> -+ -+ * doc/README.img: Fix typo -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=725892 -+ -+2013-08-12 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-11+ -+ -+ * ChangeLog: Update ChangeLog to use contributor's name -+ -+2013-08-08 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-11 -+ -+2013-08-04 Tatsuya Kinoshita <tats@debian.org> -+ -+ * Str.c: Check length for Strchop() -+ -+ * main.c: Fix potentially segfault of execdict() -+ -+ * version.c.in: Update to 0.5.3+debian-10+ -+ -+ * file.c: Fix segfault of loadGeneralFile() -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718612 -+ -+2013-08-02 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-10 -+ -+2013-08-02 Piotr P. Karwasz <piotr.p@karwasz.org> -+ -+ * scripts/w3mman/w3mman2html.cgi.in: -+ Correct underline processing and more UTF-8 support for w3mman2html.cgi -+ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/680202> -+ on 2010-11-23. -+ -+2013-08-01 Hilko Bengen <bengen@debian.org> -+ -+ * entity.c: Ignore SOFT HYPHEN to prevent drawing hyphens everywhere -+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441934> -+ on 2011-03-01. -+ -+2013-08-01 Tatsuya Kinoshita <tats@debian.org> -+ -+ * doc-jp/README, doc/README: Update contact list in README -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696209 -+ -+2013-07-30 Tatsuya Kinoshita <tats@debian.org> -+ -+ * config.guess, config.sub: -+ Update config.guess and config.sub to supprot aarch64 -+ Updated with Debian autotools-dev version 20130515.1. -+ -+2013-07-30 Conrad J.C. Hughes <debbugs@xrad.org> -+ -+ * main.c: Sort anchors by sequence number in -dump -+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657666> -+ on 2012-01-27. -+ -+2013-07-30 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update to 0.5.3+debian-9+ -+ -+2013-07-29 Tatsuya Kinoshita <tats@debian.org> -+ -+ * version.c.in: Update version to w3m/0.5.3+debian-9 -+ -+ * version.c.in: Set CURRENT_VERSION to debian version -+ -+2013-07-28 Tatsuya Kinoshita <tats@debian.org> -+ -+ * file.c: Fix segfault of process_button() -+ -+2013-04-08 AIDA Shinra <shinra@j10n.org> -+ -+ * file.c: One more patch for siteconf from [w3m-dev 04464] -+ -+ * anchor.c, config.h.in, display.c, doc-jp/README.siteconf: -+ * doc/README.siteconf, file.c, fm.h, form.c, frame.c, func.c: -+ * history.c, indep.c, indep.h, linein.c, main.c, map.c, menu.c: -+ * po/ja.po, proto.h, rc.c, url.c: Support the siteconf feature -+ Patch to support the siteconf feature, from [w3m-dev 04463] -+ on 2012-06-27. -+ -+2013-04-08 Hayaki Saito <user@zuse.jp> -+ -+ * keybind.c, main.c, proto.h, terms.c: -+ Support SGR 1006 mouse reporting -+ Patch to support SGR 1006 mouse reporting, from [w3m-dev 04466] -+ on 2012-07-15. -+ -+2012-05-19 Hilko Bengen <bengen@debian.org> -+ -+ * form.c: Assume "text" if an input type is unknown -+ Patch from <http://bugs.debian.org/615843> on 2011-03-01. -+ -+2012-05-19 Simon Ruderich <simon@ruderich.org> -+ -+ * Makefile.in: Use $(CPPFLAGS) with $(CPP) -+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665491> -+ on 2012-03-24. -+ -+2012-05-03 Miroslav Šulc <fordfrog@gentoo.org> -+ -+ * w3mimg/Makefile.in: Fix parallel make issue -+ Patch from Gentoo -+ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-parallel-make.patch?revision=1.1&view=markup> -+ <https://bugs.gentoo.org/show_bug.cgi?id=353390> on 2011-02-01. -+ -+2012-05-03 MATSUU Takuto <matsuu@gentoo.org> -+ -+ * main.c: Support Boehm GC 7.2 -+ Patch from Gentoo -+ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.2-gc72.patch?revision=1.1&view=markup> -+ on 2009-12-13. -+ -+2012-05-02 Reinhard Tartler <siretart@tauware.de> -+ -+ * istream.c, istream.h: -+ Fix that struct file_handle conflicts with glibc 2.14 -+ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/935540> -+ on 2012-02-19. -+ -+2011-10-30 Colin Watson <cjwatson@ubuntu.com> -+ -+ * acinclude.m4, configure, w3mbookmark.c: -+ Appease gcc -Werror=format-security. -+ Patch from 0.5.3-3ubuntu1 on 2011-10-23. -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646321 -+ -+2011-06-19 Martin Pitt <martin.pitt@ubuntu.com> -+ -+ * Makefile.in: -+ Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5 -+ Patch from 0.5.2-10ubuntu1 on 2010-12-03. -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605761 -+ -+2011-06-19 Fumitoshi UKAI <ukai@debian.or.jp> -+ -+ * main.c: -+ Change the -s option to "squeeze multiple blank lines" for pager -+ Change the -s option from "display charset Shift_JIS" to "squeeze -+ multiple blank lines" to work as /usr/bin/pager. In addition, the -+ options -j and -e are disabled. To specify the display charset, -+ use -O{s|j|e} instead. -+ Patch from [w3m-dev 01275] on 2000-10-26. -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527 -+ -+2011-06-19 Hiroyuki Ito <ZXB01226@nifty.com> -+ -+ * file.c, fm.h, html.c, html.h, proto.h, table.c, tagtable.tab: -+ Support the button element as defined in HTML 4.01 -+ Patch from upstream, [w3m-dev 04411] on 2010-09-17, to support the -+ button element. It is discussed upstream and incomplete, but enough -+ to login Launchpad. -+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=136810 -+ - 2012-05-22 Tatsuya Kinoshita <tats@vega.ocn.ne.jp> - - * [w3m-dev 04451] w3m/entity.h should be removed when `make clean' diff --git a/debian/patches/series b/debian/patches/series index 1f5a350..4c59f00 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,52 +1,2 @@ 010_upstream.patch -015_debian-version.patch -020_button.patch -030_pager-s-option.patch -040_link-gtk2.patch -#050_autotools-config.patch -060_format-security.patch -070_glibc2.14.patch -080_gc72.patch -090_parallel-make.patch -100_use-cppflags.patch -110_form-input-text.patch -120_sgrmouse.patch -130_siteconf.patch -140_sort-dump-links.patch -150_contact-list.patch -160_ignore-shy.patch -170_w3mman2html-utf8.patch -180_execdict.patch -190_Strchop.patch -200_readme-img-typo.patch -210_vim-like.patch -220_maxcol.patch -230_cygwin-lang.patch -240_win64gc.patch -250_schemebug.patch -260_openssl.patch -270_refresh-url.patch -280_search-next.patch -290_closedir.patch -300_manual-links.patch -310_doc-ascii.patch -320_imlib2-config.patch -330_Disable-weak-ciphers.patch -340_ssl-init.patch -350_ambwidth.patch -360_libressl.patch -370_gtk2-pkg-config.patch -380_tinfo.patch -390_gdk-pixbuf.patch -400_w3m-img-freebsd.patch -410_textarea-segfault.patch -420_uninitialized.patch -430_no-ascii-default.patch -440_parsetagx-crash.patch -450_remoteimg.patch -460_printf.patch -470_alloc.patch -800_lang-en.patch -810_lang-de.patch -820_lang-ja.patch -900_ChangeLog.patch +020_debian.patch |