From 9fab77dc00ff2183dd642f4f088d2d54ed3d5887 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 1 Feb 2003 17:24:27 +0000 Subject: [PATCH] Oops, Ben is quite right about the rather appalling design of filename_from_str. Here's a better fix, with some const repercussions too. git-svn-id: svn://svn.tartarus.org/sgt/putty@2768 cda61777-01e9-0310-a592-d414129be87e --- import.c | 2 +- logging.c | 9 +++++---- mac/mac.c | 10 ++++------ plink.c | 3 ++- psftp.c | 2 +- putty.h | 6 +++--- scp.c | 2 +- ssh.c | 8 ++++---- terminal.c | 2 +- unix/uxmisc.c | 6 +++--- unix/uxplink.c | 3 ++- winmisc.c | 6 +++--- 12 files changed, 30 insertions(+), 29 deletions(-) diff --git a/import.c b/import.c index ce304e28..e1609668 100644 --- a/import.c +++ b/import.c @@ -66,7 +66,7 @@ int import_encrypted(const Filename *filename, int type, char **comment) { if (type == SSH_KEYTYPE_OPENSSH) { /* OpenSSH doesn't do key comments */ - *comment = dupstr(filename_to_str(*filename)); + *comment = dupstr(filename_to_str(filename)); return openssh_encrypted(filename); } if (type == SSH_KEYTYPE_SSHCOM) { diff --git a/logging.c b/logging.c index d27c727d..6c4e1889 100644 --- a/logging.c +++ b/logging.c @@ -146,7 +146,7 @@ void logfopen(void *handle) ctx->cfg.logtype == LGTYP_DEBUG ? "raw" : ctx->cfg.logtype == LGTYP_PACKETS ? "SSH packets" : "")); /* Make sure we do not exceed the output buffer size */ - strncat(buf, filename_to_str(ctx->currlogfilename), 128); + strncat(buf, filename_to_str(&ctx->currlogfilename), 128); buf[strlen(buf)] = '\0'; logevent(ctx->frontend, buf); } @@ -210,10 +210,11 @@ static void xlatlognam(Filename *dest, Filename src, int size; char buffer[FILENAME_MAX]; int len = sizeof(buffer)-1; - char *d, *s; + char *d; + const char *s; d = buffer; - s = filename_to_str(src); + s = filename_to_str(&src); while (*s) { /* Let (bufp, len) be the string to append. */ @@ -257,5 +258,5 @@ static void xlatlognam(Filename *dest, Filename src, } *d = '\0'; - *dest = filename_from_str(s); + *dest = filename_from_str(d); } diff --git a/mac/mac.c b/mac/mac.c index 98b1322e..50d3199c 100644 --- a/mac/mac.c +++ b/mac/mac.c @@ -1,4 +1,4 @@ -/* $Id: mac.c,v 1.39 2003/02/01 15:44:08 ben Exp $ */ +/* $Id: mac.c,v 1.40 2003/02/01 17:24:26 simon Exp $ */ /* * Copyright (c) 1999 Ben Harris * All rights reserved. @@ -801,7 +801,7 @@ void platform_get_x11_auth(char *display, int *proto, /* SGT: I have no idea whether Mac X servers need anything here. */ } -Filename filename_from_str(char *str) +Filename filename_from_str(const char *str) { Filename ret; strncpy(ret.path, str, sizeof(ret.path)); @@ -809,11 +809,9 @@ Filename filename_from_str(char *str) return ret; } -char *filename_to_str(Filename fn) +const char *filename_to_str(const Filename *fn) { - /* FIXME: Memory leak! */ - - return dupstr(fn.path); + return fn->path; } int filename_equal(Filename f1, Filename f2) diff --git a/plink.c b/plink.c index 7bd1f901..b1bebf98 100644 --- a/plink.c +++ b/plink.c @@ -166,7 +166,8 @@ void try_output(int is_stderr) } } -int from_backend(void *frontend_handle, int is_stderr, char *data, int len) +int from_backend(void *frontend_handle, int is_stderr, + const char *data, int len) { int osize, esize; diff --git a/psftp.c b/psftp.c index 2c97db27..3fdfa45a 100644 --- a/psftp.c +++ b/psftp.c @@ -1528,7 +1528,7 @@ static unsigned char *outptr; /* where to put the data */ static unsigned outlen; /* how much data required */ static unsigned char *pending = NULL; /* any spare data */ static unsigned pendlen = 0, pendsize = 0; /* length and phys. size of buffer */ -int from_backend(void *frontend, int is_stderr, char *data, int datalen) +int from_backend(void *frontend, int is_stderr, const char *data, int datalen) { unsigned char *p = (unsigned char *) data; unsigned len = (unsigned) datalen; diff --git a/putty.h b/putty.h index 5116210d..72d0cd22 100644 --- a/putty.h +++ b/putty.h @@ -597,7 +597,7 @@ int term_ldisc(Terminal *, int option); void term_copyall(Terminal *); void term_reconfig(Terminal *, Config *); void term_seen_key_event(Terminal *); -int from_backend(void *, int is_stderr, char *data, int len); +int from_backend(void *, int is_stderr, const char *data, int len); void term_provide_resize_fn(Terminal *term, void (*resize_fn)(void *, int, int), void *resize_ctx); @@ -790,8 +790,8 @@ extern const char *const x11_authnames[]; /* declared in x11fwd.c */ /* * Miscellaneous exports from the platform-specific code. */ -Filename filename_from_str(char *string); -char *filename_to_str(Filename fn); +Filename filename_from_str(const char *string); +const char *filename_to_str(const Filename *fn); int filename_equal(Filename f1, Filename f2); int filename_is_null(Filename fn); diff --git a/scp.c b/scp.c index cc09a46b..40d05df4 100644 --- a/scp.c +++ b/scp.c @@ -317,7 +317,7 @@ static unsigned char *outptr; /* where to put the data */ static unsigned outlen; /* how much data required */ static unsigned char *pending = NULL; /* any spare data */ static unsigned pendlen = 0, pendsize = 0; /* length and phys. size of buffer */ -int from_backend(void *frontend, int is_stderr, char *data, int datalen) +int from_backend(void *frontend, int is_stderr, const char *data, int datalen) { unsigned char *p = (unsigned char *) data; unsigned len = (unsigned) datalen; diff --git a/ssh.c b/ssh.c index 9ffb47e9..f01f0bb8 100644 --- a/ssh.c +++ b/ssh.c @@ -734,7 +734,7 @@ static int alloc_channel_id(Ssh ssh) return low + 1 + CHANNEL_NUMBER_OFFSET; } -static void c_write(Ssh ssh, char *buf, int len) +static void c_write(Ssh ssh, const char *buf, int len) { if ((flags & FLAG_STDERR)) { int i; @@ -746,7 +746,7 @@ static void c_write(Ssh ssh, char *buf, int len) from_backend(ssh->frontend, 1, buf, len); } -static void c_write_untrusted(Ssh ssh, char *buf, int len) +static void c_write_untrusted(Ssh ssh, const char *buf, int len) { int i; for (i = 0; i < len; i++) { @@ -757,7 +757,7 @@ static void c_write_untrusted(Ssh ssh, char *buf, int len) } } -static void c_write_str(Ssh ssh, char *buf) +static void c_write_str(Ssh ssh, const char *buf) { c_write(ssh, buf, strlen(buf)); } @@ -2721,7 +2721,7 @@ static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt) int ret = loadrsakey(&ssh->cfg.keyfile, &s->key, s->password); if (ret == 0) { c_write_str(ssh, "Couldn't load private key from "); - c_write_str(ssh, filename_to_str(ssh->cfg.keyfile)); + c_write_str(ssh, filename_to_str(&ssh->cfg.keyfile)); c_write_str(ssh, ".\r\n"); continue; /* go and try password */ } diff --git a/terminal.c b/terminal.c index 5ab7e1bf..f3b2c8a3 100644 --- a/terminal.c +++ b/terminal.c @@ -4602,7 +4602,7 @@ int term_ldisc(Terminal *term, int option) /* * from_backend(), to get data from the backend for the terminal. */ -int from_backend(void *vterm, int is_stderr, char *data, int len) +int from_backend(void *vterm, int is_stderr, const char *data, int len) { Terminal *term = (Terminal *)vterm; diff --git a/unix/uxmisc.c b/unix/uxmisc.c index 39ef7edd..8239158e 100644 --- a/unix/uxmisc.c +++ b/unix/uxmisc.c @@ -18,7 +18,7 @@ unsigned long getticks(void) return tv.tv_sec * 1000000 + tv.tv_usec; } -Filename filename_from_str(char *str) +Filename filename_from_str(const char *str) { Filename ret; strncpy(ret.path, str, sizeof(ret.path)); @@ -26,9 +26,9 @@ Filename filename_from_str(char *str) return ret; } -char *filename_to_str(Filename fn) +const char *filename_to_str(const Filename *fn) { - return fn.path; + return fn->path; } int filename_equal(Filename f1, Filename f2) diff --git a/unix/uxplink.c b/unix/uxplink.c index 7448f26d..50189f9a 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -208,7 +208,8 @@ void try_output(int is_stderr) } } -int from_backend(void *frontend_handle, int is_stderr, char *data, int len) +int from_backend(void *frontend_handle, int is_stderr, + const char *data, int len) { int osize, esize; diff --git a/winmisc.c b/winmisc.c index 92609186..22663419 100644 --- a/winmisc.c +++ b/winmisc.c @@ -13,7 +13,7 @@ void platform_get_x11_auth(char *display, int *proto, /* We don't support this at all under Windows. */ } -Filename filename_from_str(char *str) +Filename filename_from_str(const char *str) { Filename ret; strncpy(ret.path, str, sizeof(ret.path)); @@ -21,9 +21,9 @@ Filename filename_from_str(char *str) return ret; } -char *filename_to_str(Filename fn) +const char *filename_to_str(const Filename *fn) { - return fn.path; + return fn->path; } int filename_equal(Filename f1, Filename f2) -- 2.11.0