X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=scp.c;h=45930c0e7606fbe7079a55c3e7019a21cd1808b3;hb=726f9dde7e747f0e317da6fbe0594a81597d4a2b;hp=db9952efbc8ba9cfa815ec66b10f325c4e300e0f;hpb=6608016fc28d97e9fd5f53cfc671f9e7ccafd8ce;p=PuTTY.git diff --git a/scp.c b/scp.c index db9952ef..45930c0e 100644 --- a/scp.c +++ b/scp.c @@ -226,6 +226,44 @@ void askcipher(char *ciphername, int cs) } } +/* + * Ask whether to wipe a session log file before writing to it. + * Returns 2 for wipe, 1 for append, 0 for cancel (don't log). + */ +int askappend(char *filename) +{ + HANDLE hin; + DWORD savemode, i; + + static const char msgtemplate[] = + "The session log file \"%.*s\" already exists.\n" + "You can overwrite it with a new session log,\n" + "append your session log to the end of it,\n" + "or disable session logging for this session.\n" + "Enter \"y\" to wipe the file, \"n\" to append to it,\n" + "or just press Return to disable logging.\n" + "Wipe the log file? (y/n, Return cancels logging) "; + + char line[32]; + + fprintf(stderr, msgtemplate, FILENAME_MAX, filename); + fflush(stderr); + + hin = GetStdHandle(STD_INPUT_HANDLE); + GetConsoleMode(hin, &savemode); + SetConsoleMode(hin, (savemode | ENABLE_ECHO_INPUT | + ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT)); + ReadFile(hin, line, sizeof(line) - 1, &i, NULL); + SetConsoleMode(hin, savemode); + + if (line[0] == 'y' || line[0] == 'Y') + return 2; + else if (line[0] == 'n' || line[0] == 'N') + return 1; + else + return 0; +} + /* * Warn about the obsolescent key file format. */ @@ -689,7 +727,7 @@ static void do_cmd(char *host, char *user, char *cmd) back = &ssh_backend; - err = back->init(cfg.host, cfg.port, &realhost); + err = back->init(cfg.host, cfg.port, &realhost, 0); if (err != NULL) bump("ssh_init: %s", err); ssh_scp_init();