1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 09:27:59 +00:00
putty-source/errsock.c
Simon Tatham 8be6fbaa09 Remove sk_{get,set}_private_ptr completely!
It was only actually used in X11 and port forwarding, to find internal
state structures given only the Socket that ssh.c held. So now that
that lookup has been reworked to be the sensible way round,
private_ptr is no longer used for anything and can be removed.

[originally from svn r10075]
2013-11-17 14:04:48 +00:00

68 lines
1.3 KiB
C

/*
* A dummy Socket implementation which just holds an error message.
*/
#include <stdio.h>
#include <assert.h>
#define DEFINE_PLUG_METHOD_MACROS
#include "tree234.h"
#include "putty.h"
#include "network.h"
typedef struct Socket_error_tag *Error_Socket;
struct Socket_error_tag {
const struct socket_function_table *fn;
/* the above variable absolutely *must* be the first in this structure */
char *error;
Plug plug;
};
static Plug sk_error_plug(Socket s, Plug p)
{
Error_Socket ps = (Error_Socket) s;
Plug ret = ps->plug;
if (p)
ps->plug = p;
return ret;
}
static void sk_error_close(Socket s)
{
Error_Socket ps = (Error_Socket) s;
sfree(ps->error);
sfree(ps);
}
static const char *sk_error_socket_error(Socket s)
{
Error_Socket ps = (Error_Socket) s;
return ps->error;
}
Socket new_error_socket(const char *errmsg, Plug plug)
{
static const struct socket_function_table socket_fn_table = {
sk_error_plug,
sk_error_close,
NULL /* write */,
NULL /* write_oob */,
NULL /* write_eof */,
NULL /* flush */,
NULL /* set_frozen */,
sk_error_socket_error
};
Error_Socket ret;
ret = snew(struct Socket_error_tag);
ret->fn = &socket_fn_table;
ret->plug = plug;
ret->error = dupstr(errmsg);
return (Socket) ret;
}