diff options
author | Thomas E. Dickey <dickey@invisible-island.net> | 2018-03-02 00:39:46 +0000 |
---|---|---|
committer | Thomas E. Dickey <dickey@invisible-island.net> | 2018-03-02 00:39:46 +0000 |
commit | 952761081f2a2a9631352a3edf2f410e0e36c9be (patch) | |
tree | d24fc92a22e284bedc1b1626b1a871bc75850fac | |
parent | b518192561f738e5249e4f1e38ed0cdc2f059e0f (diff) | |
download | lynx-snapshots-952761081f2a2a9631352a3edf2f410e0e36c9be.tar.gz |
snapshot of project "lynx", label v2-8-9dev_16k
-rw-r--r-- | AUTHORS | 4 | ||||
-rw-r--r-- | CHANGES | 21 | ||||
-rw-r--r-- | src/GridText.c | 4 | ||||
-rw-r--r-- | src/HTFWriter.c | 8 | ||||
-rw-r--r-- | src/LYCurses.c | 92 | ||||
-rw-r--r-- | src/LYMain.c | 10 | ||||
-rw-r--r-- | src/LYMainLoop.c | 7 | ||||
-rw-r--r-- | src/LYUtils.c | 22 | ||||
-rw-r--r-- | src/LYUtils.h | 3 |
9 files changed, 97 insertions, 74 deletions
diff --git a/AUTHORS b/AUTHORS index 8baac8b0..d6a88cc3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,4 +1,4 @@ --- $LynxId: AUTHORS,v 1.6 2008/04/11 22:36:11 tom Exp $ +-- $LynxId: AUTHORS,v 1.7 2018/03/01 22:00:51 tom Exp $ -- vile:txtmode Most of the people who have contributed more than one patch to Lynx (as well as a few who have only one) are noted in the changelogs by their initials (to keep @@ -47,7 +47,7 @@ SKY Sinan Kaan Yerli SS Sergey Svishchev TD Thomas E Dickey TG Thorsten Glaser -TH Hataguchi Takeshi +TH Hataguchi Takeshi (patakuti) VH Vlad Harchev WB Wayne Buttles WS Bill Schiavo diff --git a/CHANGES b/CHANGES index 0a658300..d75779c8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,22 @@ --- $LynxId: CHANGES,v 1.931 2018/03/01 01:52:40 tom Exp $ +-- $LynxId: CHANGES,v 1.936 2018/03/01 22:28:02 tom Exp $ =============================================================================== Changes since Lynx 2.8 release =============================================================================== -2018-02-27 (2.8.9dev.17) +2018-03-01 (2.8.9dev.17) +* several fixes for Windows version -TH + + fix an abnormal terminate when pressing 'd'(download) on no action button. + + work around incompatibility in move() between POSIX and Windows. + ref: https://www.securecoding.cert.org/confluence/display/c/FIO10-C.+Take+care+when+using+the+rename%28%29+function + + fix limit-check for SJIS which prevented showing a show long title in the + title bar on Windows environment. + + fix problem with PDCurses when wrapping lines. + ref: lynx-dev discussions "Subject: Wrapping line behavior" + + fix resizing terminal problem with Windows + PDCurses. + This problem occurs only with some combinations of source and destination + screen size. + For example: 80x25 -> 90x20 + + including some code clean up * improve consistency in help-files discussing line-edit keymaps (prompted by Debian #888391) -TD * additional fixes to work with LibreSSL on OpenBSD 6.2 -TD @@ -20,7 +33,7 @@ Changes since Lynx 2.8 release (Savannah #47803). * update eo.po, fr.po from http://translationproject.org/latest/lynx -* improved several configure macros: +* improved several configure macros: CF_BUILD_CC, CF_CC_ENV_FLAGS, CF_CURSES_FUNCS, CF_CURSES_LIBS, CF_NCURSES_CONFIG -D * updated ftp-site url -TD @@ -93,7 +106,7 @@ Changes since Lynx 2.8 release CF_XOPEN_SOURCE -TD * modify Windows makefile to allow SSL_LIBS and SSL_DEFS to be overridden, reflecting naming-incompatibility in recent OpenSSL development -TD -* modify ncurses-specific code to allow its TERMINAL struct to be opaque -TD +* modify ncurses-specific code to allow its TERMINAL struct to be opaque -TD * refine special case of server Content-Type from 2.8.7dev.11 changes to decompress files offered for download when the server has gzip'd them (report by TH) -TD diff --git a/src/GridText.c b/src/GridText.c index 48e7459b..82596e8e 100644 --- a/src/GridText.c +++ b/src/GridText.c @@ -1,5 +1,5 @@ /* - * $LynxId: GridText.c,v 1.306 2018/02/19 23:03:00 tom Exp $ + * $LynxId: GridText.c,v 1.307 2018/03/01 22:23:53 Takeshi.Hataguchi Exp $ * * Character grid hypertext object * =============================== @@ -4322,7 +4322,7 @@ void HText_appendCharacter(HText *text, int ch) - ctrl_chars_on_this_line); if (( -#ifndef USE_SLANG +#if !defined(USE_SLANG) && !defined(PDCURSES) (text->permissible_split #ifdef USE_CURSES_PADS || !LYwideLines diff --git a/src/HTFWriter.c b/src/HTFWriter.c index 6e729ae1..ee123013 100644 --- a/src/HTFWriter.c +++ b/src/HTFWriter.c @@ -1,5 +1,5 @@ /* - * $LynxId: HTFWriter.c,v 1.113 2017/07/02 20:42:32 tom Exp $ + * $LynxId: HTFWriter.c,v 1.114 2018/03/01 22:14:42 Takeshi.Hataguchi Exp $ * * FILE WRITER HTFWrite.h * =========== @@ -177,7 +177,7 @@ static void decompress_gzip(HTStream *me) CAST_off_t (me->anchor->actual_length), actual)); if (success) { - if (rename(copied, in_name) == 0) + if (LYRenameFile(copied, in_name) == 0) me->anchor->actual_length = (off_t) actual; LYRemoveTemp(copied); } @@ -200,7 +200,7 @@ static void decompress_gzip(HTStream *me) strcpy(expanded, copied); *strrchr(expanded, '.') = '\0'; - if (rename(expanded, in_name) != 0) { + if (LYRenameFile(expanded, in_name) != 0) { CTRACE((tfp, "rename failed %s to %s\n", expanded, in_name)); } else if (stat(in_name, &stat_buf) != 0) { CTRACE((tfp, "stat failed for %s\n", in_name)); @@ -364,7 +364,7 @@ static void HTFWriter_free(HTStream *me) new_path[off] = '.'; if (strlen(new_path + off) > 4) new_path[off + 4] = '\0'; - if (rename(path, new_path) == 0) { + if (LYRenameFile(path, new_path) == 0) { FREE(path); path = new_path; } else { diff --git a/src/LYCurses.c b/src/LYCurses.c index 28826a62..f28999f7 100644 --- a/src/LYCurses.c +++ b/src/LYCurses.c @@ -1,4 +1,4 @@ -/* $LynxId: LYCurses.c,v 1.184 2017/04/30 17:52:12 tom Exp $ */ +/* $LynxId: LYCurses.c,v 1.186 2018/03/02 00:39:46 tom Exp $ */ #include <HTUtils.h> #include <HTAlert.h> @@ -970,6 +970,23 @@ int saved_scrsize_x2 = 0; int saved_scrsize_y2 = 0; int saved_winpos_x2 = 0; int saved_winpos_y2 = 0; + +static int LYresize_term(int nlines, int ncols) +{ +#ifdef _WINDOWS + HANDLE hConsole; + CONSOLE_SCREEN_BUFFER_INFO csbi; + SMALL_RECT srWindowRect; + + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + srWindowRect.Right = min(ncols, csbi.dwSize.X) - 1; + srWindowRect.Bottom = min(nlines, csbi.dwSize.Y) - 1; + srWindowRect.Left = srWindowRect.Top = (SHORT) 0; + SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect); +#endif + return resize_term(nlines, ncols); +} #endif #ifdef USE_MAXSCREEN_TOGGLE @@ -1077,64 +1094,35 @@ static void adjustWindowPos(void) void maxmizeWindowSize(void) { - int disp_height, disp_width, win_height, win_width; RECT winrect; - DWORD pid; - int font_width, font_height; + HANDLE hConsole; + COORD coordScreen; setCurrentWindowHandle(); if (currentWindowHandle == NULL) { return; } - GetWindowThreadProcessId(currentWindowHandle, &pid); - disp_width = GetSystemMetrics(SM_CXFULLSCREEN); - disp_height = GetSystemMetrics(SM_CYFULLSCREEN); GetWindowRect(currentWindowHandle, &winrect); - win_width = winrect.right - winrect.left; - win_height = winrect.bottom - winrect.top; saved_winpos_x2 = winrect.left; saved_winpos_y2 = winrect.top; - if ((win_width <= disp_width) && (win_height <= disp_height)) { - GetClientRect(currentWindowHandle, &winrect); - win_width = winrect.right - winrect.left; - win_height = winrect.bottom - winrect.top; - CTRACE((tfp, "Current Rect: (%4d,%4d,%3d,%3d), ", - (int) winrect.left, (int) winrect.right, - (int) winrect.top, (int) winrect.bottom)); - CTRACE((tfp, "Size: (%4d,%3d)\n", win_width, win_height)); - - if (scrsize_x == 0) { - scrsize_x = COLS; - scrsize_y = LINES + 1; - } - if ((scrsize_x == 0) || (scrsize_y == 0)) { - CTRACE((tfp, "Illegal value: scrsize_x=%d, scrsize_y=%d\n", - scrsize_x, scrsize_y)); - } else { - font_width = win_width / scrsize_x; - font_height = win_height / scrsize_y; - CTRACE((tfp, "Font Size: (%2d,%2d)\n", font_width, font_height)); - if ((font_width == 0) || (font_height == 0)) { - CTRACE((tfp, "Illegal font size.\n")); - } else { - LYcols = scrsize_x = (disp_width - 4) / font_width; - LYlines = scrsize_y = (disp_height - 32) / font_height; - LYlines--; - CTRACE((tfp, "Request maximum screen size: %dx%d\n", - scrsize_y, scrsize_x)); - resize_term(scrsize_y, scrsize_x); - Sleep(100); - moveWindowHXY(currentWindowHandle, 0, 0); - LYlines = LYscreenHeight(); - LYcols = LYscreenWidth(); - CTRACE((tfp, "...actual maximum screen size: %dx%d\n", - LYlines, LYcols)); - LYStatusLine = -1; - recent_sizechange = TRUE; - } - } - } + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + coordScreen = GetLargestConsoleWindowSize(hConsole); + + LYcols = scrsize_x = coordScreen.X - 1; + LYlines = scrsize_y = coordScreen.Y - 1; + LYlines--; + CTRACE((tfp, "Request maximum screen size: %dx%d\n", + scrsize_x, scrsize_y)); + LYresize_term(scrsize_y, scrsize_x); + Sleep(100); + moveWindowHXY(currentWindowHandle, 0, 0); + LYlines = LYscreenHeight(); + LYcols = LYscreenWidth(); + CTRACE((tfp, "...actual maximum screen size: %dx%d\n", + LYcols, LYlines)); + LYStatusLine = -1; + recent_sizechange = TRUE; } void recoverWindowSize(void) @@ -1146,7 +1134,7 @@ void recoverWindowSize(void) LYStatusLine = -1; wclear(curscr); doupdate(); - resize_term(scrsize_y, scrsize_x); + LYresize_term(scrsize_y, scrsize_x); setCurrentWindowHandle(); if (currentWindowHandle != NULL) { @@ -1389,7 +1377,7 @@ void start_curses(void) size_change(0); recent_sizechange = FALSE; /* prevent mainloop drawing 1st doc twice */ #endif /* SIGWINCH */ - CTRACE((tfp, "Screen size is now %d x %d\n", LYlines, LYcols)); + CTRACE((tfp, "Screen size is now %d x %d\n", LYcols, LYlines)); #ifdef USE_CURSES_PADS if (LYuseCursesPads) { @@ -1560,7 +1548,7 @@ void start_curses(void) } CTRACE((tfp, "resize_term: x=%d, y=%d\n", scrsize_x, scrsize_y)); CTRACE((tfp, "saved terminal size: x=%d, y=%d\n", saved_scrsize_x, saved_scrsize_y)); - resize_term(scrsize_y, scrsize_x); + LYresize_term(scrsize_y, scrsize_x); LYlines = LYscreenHeight(); LYcols = LYscreenWidth(); LYStatusLine = -1; diff --git a/src/LYMain.c b/src/LYMain.c index 38a9a7c9..87f8489e 100644 --- a/src/LYMain.c +++ b/src/LYMain.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYMain.c,v 1.266 2018/02/19 14:29:30 tom Exp $ + * $LynxId: LYMain.c,v 1.267 2018/03/01 22:27:37 Takeshi.Hataguchi Exp $ */ #include <HTUtils.h> #include <HTTP.h> @@ -3307,11 +3307,11 @@ static int scrsize_fun(char *next_arg) if ((scrsize_x <= 1) || (scrsize_y <= 1)) { scrsize_x = scrsize_y = 0; } - if ((scrsize_x > 0) && (scrsize_x < 80)) { - scrsize_x = 80; + if ((scrsize_x > 0) && (scrsize_x < 40)) { + scrsize_x = 40; } - if ((scrsize_y > 0) && (scrsize_y < 4)) { - scrsize_y = 4; + if ((scrsize_y > 0) && (scrsize_y < 6)) { + scrsize_y = 6; } CTRACE((tfp, "scrsize: x=%d, y=%d\n", scrsize_x, scrsize_y)); } diff --git a/src/LYMainLoop.c b/src/LYMainLoop.c index dbf51dd4..eee3d22e 100644 --- a/src/LYMainLoop.c +++ b/src/LYMainLoop.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYMainLoop.c,v 1.236 2018/02/15 01:53:44 tom Exp $ + * $LynxId: LYMainLoop.c,v 1.238 2018/03/01 22:20:33 Takeshi.Hataguchi Exp $ */ #include <HTUtils.h> #include <HTAccess.h> @@ -2165,7 +2165,8 @@ static int handle_LYK_DOWNLOAD(int *cmd, } return 0; } - if (isLYNXOPTIONS(links[curdoc.link].l_form->submit_action)) { + if (isEmpty(links[curdoc.link].l_form->submit_action) || + isLYNXOPTIONS(links[curdoc.link].l_form->submit_action)) { if (*old_c != real_c) { *old_c = real_c; HTUserMsg(NO_DOWNLOAD_SPECIAL); @@ -6725,7 +6726,7 @@ int mainloop(void) p = links[curdoc.link].lname; } - if (strlen(p) < (sizeof(sjis_buff) / 10)) { + if (strlen(p) < ((sizeof(sjis_buff) / 2) - 1)) { strcpy(temp_buff, p); if (StrChr(temp_buff, '%')) { HTUnEscape(temp_buff); diff --git a/src/LYUtils.c b/src/LYUtils.c index 61dc1c5d..7a12ae66 100644 --- a/src/LYUtils.c +++ b/src/LYUtils.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYUtils.c,v 1.279 2018/02/15 01:54:02 tom Exp $ + * $LynxId: LYUtils.c,v 1.280 2018/03/01 22:14:57 Takeshi.Hataguchi Exp $ */ #include <HTUtils.h> #include <HTTCP.h> @@ -7099,6 +7099,26 @@ void LYAddHtmlSep0(char *path) } /* + * Rename a file + */ +int LYRenameFile(char *src, + char *dst) +{ +#ifdef _WINDOWS + /* + * If dest_file exists prior to calling rename(), rename() will fail on Windows platforms. + * https://www.securecoding.cert.org/confluence/display/c/FIO10-C.+Take+care+when+using+the+rename%28%29+function + */ + struct stat st; + + if (stat(dst, &st) == 0) { + unlink(dst); + } +#endif + return rename(src, dst); +} + +/* * Copy a file */ int LYCopyFile(char *src, diff --git a/src/LYUtils.h b/src/LYUtils.h index 173a9940..9e228303 100644 --- a/src/LYUtils.h +++ b/src/LYUtils.h @@ -1,4 +1,4 @@ -/* $LynxId: LYUtils.h,v 1.98 2014/07/24 22:10:20 tom Exp $ */ +/* $LynxId: LYUtils.h,v 1.99 2018/03/01 22:14:42 Takeshi.Hataguchi Exp $ */ #ifndef LYUTILS_H #define LYUTILS_H @@ -166,6 +166,7 @@ extern "C" { extern const char *wwwName(const char *pathname); extern int HTCheckForInterrupt(void); extern int LYConsoleInputFD(int need_selectable); + extern int LYRenameFile(char *src, char *dst); extern int LYCopyFile(char *src, char *dst); extern int LYGetHilitePos(int cur, int count); extern int LYRemoveTemp(char *name); |