Oops, Ben is quite right about the rather appalling design of
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 1 Feb 2003 17:24:27 +0000 (17:24 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 1 Feb 2003 17:24:27 +0000 (17:24 +0000)
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

12 files changed:
import.c
logging.c
mac/mac.c
plink.c
psftp.c
putty.h
scp.c
ssh.c
terminal.c
unix/uxmisc.c
unix/uxplink.c
winmisc.c

index ce304e2..e160966 100644 (file)
--- 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) {
index d27c727..6c4e188 100644 (file)
--- 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" : "<ukwn>"));
        /* 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);
 }
index 98b1322..50d3199 100644 (file)
--- 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 7bd1f90..b1bebf9 100644 (file)
--- 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 2c97db2..3fdfa45 100644 (file)
--- 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 5116210..72d0cd2 100644 (file)
--- 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 cc09a46..40d05df 100644 (file)
--- 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 9ffb47e..f01f0bb 100644 (file)
--- 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 */
                }
index 5ab7e1b..f3b2c8a 100644 (file)
@@ -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;
 
index 39ef7ed..8239158 100644 (file)
@@ -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)
index 7448f26..50189f9 100644 (file)
@@ -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;
 
index 9260918..2266341 100644 (file)
--- 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)