| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /*
- * defs.h: initial definitions for PuTTY.
- *
- * The rule about this header file is that it can't depend on any
- * other header file in this code base. This is where we define
- * things, as much as we can, that other headers will want to refer
- * to, such as opaque structure types and their associated typedefs,
- * or macros that are used by other headers.
- */
- #ifndef PUTTY_DEFS_H
- #define PUTTY_DEFS_H
- #include <stddef.h>
- #include <stdint.h>
- #include <stdbool.h>
- #ifndef WINSCP
- // This is used in pageant, pscp, psftp and servers only
- #if defined _MSC_VER && _MSC_VER < 1800
- /* Work around lack of inttypes.h in older MSVC */
- #define PRIx32 "x"
- #define PRIu64 "I64u"
- #define PRIdMAX "I64d"
- #define PRIXMAX "I64X"
- #define SCNu64 "I64u"
- #else
- #include <inttypes.h>
- #endif
- #endif
- typedef struct conf_tag Conf;
- typedef struct terminal_tag Terminal;
- typedef struct term_utf8_decode term_utf8_decode;
- typedef struct Filename Filename;
- typedef struct FontSpec FontSpec;
- typedef struct bufchain_tag bufchain;
- typedef struct strbuf strbuf;
- typedef struct RSAKey RSAKey;
- typedef struct BinarySink BinarySink;
- typedef struct BinarySource BinarySource;
- typedef struct stdio_sink stdio_sink;
- typedef struct bufchain_sink bufchain_sink;
- typedef struct handle_sink handle_sink;
- typedef struct IdempotentCallback IdempotentCallback;
- typedef struct SockAddr SockAddr;
- typedef struct Socket Socket;
- typedef struct Plug Plug;
- typedef struct SocketPeerInfo SocketPeerInfo;
- typedef struct Backend Backend;
- typedef struct BackendVtable BackendVtable;
- typedef struct Ldisc_tag Ldisc;
- typedef struct LogContext LogContext;
- typedef struct LogPolicy LogPolicy;
- typedef struct LogPolicyVtable LogPolicyVtable;
- typedef struct Seat Seat;
- typedef struct SeatVtable SeatVtable;
- typedef struct TermWin TermWin;
- typedef struct TermWinVtable TermWinVtable;
- typedef struct Ssh Ssh;
- typedef struct mp_int mp_int;
- typedef struct MontyContext MontyContext;
- typedef struct WeierstrassCurve WeierstrassCurve;
- typedef struct WeierstrassPoint WeierstrassPoint;
- typedef struct MontgomeryCurve MontgomeryCurve;
- typedef struct MontgomeryPoint MontgomeryPoint;
- typedef struct EdwardsCurve EdwardsCurve;
- typedef struct EdwardsPoint EdwardsPoint;
- typedef struct SftpServer SftpServer;
- typedef struct SftpServerVtable SftpServerVtable;
- typedef struct Channel Channel;
- typedef struct SshChannel SshChannel;
- typedef struct mainchan mainchan;
- typedef struct ssh_sharing_state ssh_sharing_state;
- typedef struct ssh_sharing_connstate ssh_sharing_connstate;
- typedef struct share_channel share_channel;
- typedef struct PortFwdManager PortFwdManager;
- typedef struct PortFwdRecord PortFwdRecord;
- typedef struct ConnectionLayer ConnectionLayer;
- typedef struct prng prng;
- typedef struct ssh_hashalg ssh_hashalg;
- typedef struct ssh_hash ssh_hash;
- typedef struct ssh_kex ssh_kex;
- typedef struct ssh_kexes ssh_kexes;
- typedef struct ssh_keyalg ssh_keyalg;
- typedef struct ssh_key ssh_key;
- typedef struct ssh_compressor ssh_compressor;
- typedef struct ssh_decompressor ssh_decompressor;
- typedef struct ssh_compression_alg ssh_compression_alg;
- typedef struct ssh2_userkey ssh2_userkey;
- typedef struct ssh2_macalg ssh2_macalg;
- typedef struct ssh2_mac ssh2_mac;
- typedef struct ssh_cipheralg ssh_cipheralg;
- typedef struct ssh_cipher ssh_cipher;
- typedef struct ssh2_ciphers ssh2_ciphers;
- typedef struct dh_ctx dh_ctx;
- typedef struct ecdh_key ecdh_key;
- typedef struct dlgparam dlgparam;
- typedef struct settings_w settings_w;
- typedef struct settings_r settings_r;
- typedef struct settings_e settings_e;
- typedef struct SessionSpecial SessionSpecial;
- typedef struct StripCtrlChars StripCtrlChars;
- /*
- * A small structure wrapping up a (pointer, length) pair so that it
- * can be conveniently passed to or from a function.
- */
- typedef struct ptrlen {
- const void *ptr;
- size_t len;
- } ptrlen;
- typedef struct logblank_t logblank_t;
- typedef struct BinaryPacketProtocol BinaryPacketProtocol;
- typedef struct PacketProtocolLayer PacketProtocolLayer;
- /* Do a compile-time type-check of 'to_check' (without evaluating it),
- * as a side effect of returning the value 'to_return'. Note that
- * although this macro double-*expands* to_return, it always
- * *evaluates* exactly one copy of it, so it's side-effect safe. */
- #define TYPECHECK(to_check, to_return) \
- (sizeof(to_check) ? (to_return) : (to_return))
- /* Return a pointer to the object of structure type 'type' whose field
- * with name 'field' is pointed at by 'object'. */
- #define container_of(object, type, field) \
- TYPECHECK(object == &((type *)0)->field, \
- ((type *)(((char *)(object)) - offsetof(type, field))))
- #if defined __GNUC__ || defined __clang__
- #define NORETURN __attribute__((__noreturn__))
- #else
- #define NORETURN
- #endif
- /* ----------------------------------------------------------------------
- * Platform-specific definitions.
- *
- * Most of these live in the per-platform header files, of which
- * puttyps.h selects the appropriate one. But some of the sources
- * (particularly standalone test applications) would prefer not to
- * have to include a per-platform header at all, because that makes it
- * more portable to platforms not supported by the code base as a
- * whole (for example, compiling purely computational parts of the
- * code for specialist platforms for test and analysis purposes). So
- * any definition that has to affect even _those_ modules will have to
- * go here, with the key constraint being that this code has to come
- * to _some_ decision even if the compilation platform is not a
- * recognised one at all.
- */
- /* Purely computational code uses smemclr(), so we have to make the
- * decision here about whether that's provided by utils.c or by a
- * platform implementation. We define PLATFORM_HAS_SMEMCLR to suppress
- * utils.c's definition. */
- #ifdef _WINDOWS
- /* Windows provides the API function 'SecureZeroMemory', which we use
- * unless the user has told us not to by defining NO_SECUREZEROMEMORY. */
- #ifndef NO_SECUREZEROMEMORY
- #define PLATFORM_HAS_SMEMCLR
- #endif
- #endif
- #endif /* PUTTY_DEFS_H */
|