1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 01:48:00 +00:00
Go to file
Simon Tatham f9e572595b windows/window.c: move (most) static vars into WinGuiSeat.
This is a piece of refactoring that's been overdue forever. In the
Unix front end, all the variables specific to a particular SSH session
live in a big 'inst' structure, and calls to any of the trait APIs
like Seat or TermWin can recover the right 'inst' from their input
context pointer. But the Windows frontend was written before that kind
of thing became habitual to me, and all its variables have been just
lying around at the top level of window.c, and most of those context
pointers were just ignored.

Now I've swept them all up and put them where they ought to be, in a
big context structure. This was made immeasurably easier by the very
nifty 'clang-rename' tool, which can rename a single variable in a C
source file, and find just the right set of identifiers to change even
if other variables in the file have the same name, even in sub-scopes.
So I started by clang-renaming all the top-level variables in question
to have names beginning with a prefix that didn't previously appear
anywhere in the code; checked that still worked; and then moved all
the declarations into the struct type and did a purely textual
search-and-replace of the prefix with 'wgs->'.

One potential benefit of this change is that it allows more than one
instance of the WinGuiSeat structure to exist in the same process. I
don't have any immediate plans to actually do that, but it's nice to
know it wouldn't be ruled out if we ever did need it.

But that's not the main reason I did it. The main reason is that I
recently looked at the output of a Windows build using clang -Wall,
and was horrified by the number of casual shadowings of
generically-named global variables like 'term' and 'conf' with local
variables of the same name. That seemed like a recipe for confusion,
and I decided the best way to disambiguate them all was to do this
refactoring that I'd wanted anyway for years.

A few uses of the global variables occurred in functions that didn't
have convenient access to the right WinGuiSeat via a callback
parameter of some kind. Those had to be treated specially. Most were
cleaned up in advance by the previous few commits; the remaining fixes
in this commit itself were in functions like modalfatalbox(),
nonfatal() and cleanup_exit(). The error reporting functions want the
terminal HWND to use as a MessageBox parameter; they also have the
side effect of un-hiding the mouse pointer in the terminal window, in
case it's hidden; and cleanup_exit wanted to free some resources
dangling off the WinGuiSeat.

For most of those cases, I've made a linked list of all currently live
WinGuiSeat structures, so that they can loop over _all_ live instances
(whether there's one as usual, none, or maybe more than one in
future). The parent window for non-connection-specific error messages
is found by simply picking one arbitrarily off the linked list (if
any); the cleanups are done by iterating over the _whole_ list.

The mouse-pointer unhiding is dealt with by simply allowing
show_mouseptr to take a _null_ WinGuiSeat pointer. The only thing it
needs the context for at all is to check whether pointer-hiding is
enabled in the session's Conf; so if we're _un_-hiding the pointer we
don't need to check, and can unhide it unconditionally.

The remaining global variables in window.c are the new linked list of
all WinGuiSeat structures; 'wm_mousewheel' and 'trust_icon' which
really should be global across all WinGuiSeats even if we were to have
more than one; and there's a static variable 'cursor_visible' in
show_mouseptr() which is likewise legitimately Seat-independent (since
it records the last value we passed to the Win32 API ShowCursor
function, and _that's_ global across the whole process state).

All of this should cause no functional change whatsoever.
2022-09-13 11:47:39 +01:00
charset sbcsgen.pl: handle \r\n line endings. 2022-09-01 20:43:23 +01:00
cmake 32-bit Windows x86: reinstate subsystem version of 5.01. 2022-09-11 15:17:20 +01:00
contrib New feature: k-i authentication helper plugins. 2022-09-01 20:43:23 +01:00
crypto Change priority of new Diffie-Hellman groups. 2022-09-12 09:34:01 +01:00
doc Standardise RFC URLs in docs and comments. 2022-09-11 23:59:12 +01:00
icons New script to draw the icons as SVG. 2022-03-18 12:55:01 +00:00
keygen Add some missing #includes. 2022-09-03 11:59:12 +01:00
otherbackends Comment typo in supdup.c. 2022-08-03 20:48:46 +01:00
proxy New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
ssh New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
stubs New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
terminal Add a batch of missing 'static's. 2022-09-03 12:02:48 +01:00
test Add RFC8268 / RFC3126 Diffie-Hellman group{15,16,17,18}. 2022-08-30 18:09:39 +01:00
unix New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
utils New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
windows windows/window.c: move (most) static vars into WinGuiSeat. 2022-09-13 11:47:39 +01:00
.gitignore Add .gitignore rules for in-tree builds. 2021-04-19 18:26:56 +01:00
aqsync.c Build outgoing SSH agent requests in a strbuf. 2018-05-25 14:36:16 +01:00
be_list.c Merge be_*.c into one ifdef-controlled module. 2021-11-26 17:58:55 +00:00
Buildscr 32-bit Windows x86: reinstate subsystem version of 5.01. 2022-09-11 15:17:20 +01:00
Buildscr.cv Replace mkfiles.pl with a CMake build system. 2021-04-17 13:53:02 +01:00
callback.c Add lots of missing 'static' keywords. 2020-01-29 06:44:18 +00:00
cgtest.c Richer data type for interactive prompt results. 2021-12-28 18:08:31 +00:00
CHECKLST.txt Checklist updates for pre-release setup. 2022-09-13 08:35:49 +01:00
clicons.c Change vtable defs to use C99 designated initialisers. 2020-03-10 21:06:29 +00:00
CMakeLists.txt Reorganise the stubs collection. 2022-09-01 20:43:23 +01:00
cmdgen.c Certificate-aware handling of key fingerprints. 2022-08-05 18:08:59 +01:00
cmdline.c Merge assorted pterm fixes from 'pre-0.77'. 2022-05-21 10:59:31 +01:00
config.c New feature: k-i authentication helper plugins. 2022-09-01 20:43:23 +01:00
console.c New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
console.h Mention the host name in host-key prompts. 2021-09-16 14:33:59 +01:00
defs.h Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
dialog.c Fix uninitialised field in ctrl_fileselect. 2022-07-24 14:08:56 +01:00
dialog.h Replace integer context2 encoding in conf_editbox_handler. 2022-09-01 20:43:23 +01:00
errsock.c Change vtable defs to use C99 designated initialisers. 2020-03-10 21:06:29 +00:00
import.c Add a batch of missing 'static's. 2022-09-03 12:02:48 +01:00
LATEST.VER Update version number for 0.77 release. 2022-05-24 17:53:18 +01:00
ldisc.c Formatting: realign labels and case/default statements. 2022-08-03 20:48:46 +01:00
LICENCE It's a new year. 2022-01-04 10:17:17 +00:00
licence.pl Separate the functions of licence.pl. 2021-04-17 13:52:27 +01:00
logging.c sshproxy: share the caller's LogPolicy. 2021-09-13 17:18:31 +01:00
marshal.h Formatting: realign run-on parenthesised stuff. 2022-08-03 20:48:46 +01:00
misc.h Add a missing prototype. 2022-09-03 11:59:12 +01:00
mksrcarc.sh Updates to mksrcarc.sh. 2022-09-01 20:43:23 +01:00
mkunxarc.sh Integrate the 'doc' subdir into the CMake system. 2021-05-03 17:01:55 +01:00
mpint.h Utility function mp_resize. 2022-04-15 17:46:06 +01:00
network.h New facility, platform_start_subprocess. 2022-09-01 20:43:23 +01:00
pageant.c Formatting: another handful of mis-indented labels. 2022-08-07 18:44:11 +01:00
pageant.h winpgnt: menu options to delete/reencrypt everything. 2021-04-04 10:02:24 +01:00
pinger.c Whitespace rationalisation of entire code base. 2019-09-08 20:29:21 +01:00
pscp.c New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
psftp.c New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
psftp.h Remove FLAG_VERBOSE. 2020-01-30 06:40:21 +00:00
psftpcommon.c Move the SSH implementation into its own subdirectory. 2021-04-22 18:09:13 +01:00
psocks.c New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
psocks.h Auxiliary application: 'psocks', a simple SOCKS server. 2020-02-23 16:36:27 +00:00
putty.h New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
puttymem.h Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
README Restore advice about making pterm set[ug]id. 2022-05-19 10:52:56 +01:00
release.pl Remove FTP from release machinery. 2022-09-12 09:34:01 +01:00
settings.c Change priority of new Diffie-Hellman groups. 2022-09-12 09:34:01 +01:00
sign.sh GPG key rollover. 2021-08-14 08:02:27 +01:00
ssh.h Remove spurious 'const' on return types. 2022-09-03 11:59:12 +01:00
sshcr.h Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
sshkeygen.h Side-channel-safe rewrite of the Miller-Rabin test. 2021-08-27 18:04:49 +01:00
sshpubk.c Certificate-aware handling of key fingerprints. 2022-08-05 18:08:59 +01:00
sshrand.c Remove dependency of sshrand.c on SHA-512. 2020-09-13 09:11:31 +01:00
storage.h New Seat method, seat_nonfatal(). 2022-09-13 11:26:57 +01:00
timing.c Whitespace rationalisation of entire code base. 2019-09-08 20:29:21 +01:00
tree234.h Formatting: remove spurious spaces in 'type * var'. 2022-08-03 20:48:46 +01:00
version.h Replace mkfiles.pl with a CMake build system. 2021-04-17 13:53:02 +01:00
x11disp.c Move the SSH implementation into its own subdirectory. 2021-04-22 18:09:13 +01:00

This is the README for PuTTY, a free Windows and Unix Telnet and SSH
client.

PuTTY is built using CMake <https://cmake.org/>. To compile in the
simplest way (on any of Linux, Windows or Mac), run these commands in
the source directory:

  cmake .
  cmake --build .

Then, to install in the simplest way on Linux or Mac:

  cmake --build . --target install

On Unix, pterm would like to be setuid or setgid, as appropriate, to
permit it to write records of user logins to /var/run/utmp and
/var/log/wtmp. (Of course it will not use this privilege for
anything else, and in particular it will drop all privileges before
starting up complex subsystems like GTK.) The cmake install step
doesn't attempt to add these privileges, so if you want user login
recording to work, you should manually ch{own,grp} and chmod the
pterm binary yourself after installation. If you don't do this,
pterm will still work, but not update the user login databases.

Documentation (in various formats including Windows Help and Unix
`man' pages) is built from the Halibut (`.but') files in the `doc'
subdirectory using `doc/Makefile'. If you aren't using one of our
source snapshots, you'll need to do this yourself. Halibut can be
found at <https://www.chiark.greenend.org.uk/~sgtatham/halibut/>.

The PuTTY home web site is

    https://www.chiark.greenend.org.uk/~sgtatham/putty/

If you want to send bug reports or feature requests, please read the
Feedback section of the web site before doing so. Sending one-line
reports saying `it doesn't work' will waste your time as much as
ours.

See the file LICENCE for the licence conditions.