1
0
mirror of https://github.com/libssh2/libssh2.git synced 2025-11-06 20:49:29 +03:00
Files
libssh2/vms/libssh2_config.h
Viktor Szakats 4cdf785cd3 snprintf: unify fallback logic
Before this patch, the `snprintf()` fallback logic for envs not
supporting this function (i.e. Visual Studio 2013 and older) varied
depending on build tool, and used different techniques in examples,
tests and libssh2 itself.

This patch aims to apply a common logic to libssh2 and examples/tests.

- libssh2: use local `snprintf()` fallback with all build tools.

  We already had a local implementation, but only with CMake. Move that
  to the library as `_libssh2_snprintf()`, and map `snprintf()` to it
  when `HAVE_SNPRINTF` is not set.

  Also change the length type from `int` to `size_t`, and fix
  formatting.

- set or detect `HAVE_SNPRINTF` in non-CMake builds.

  Detect in autotools. Keep existing logic in `win32/libssh2_config.h`.
  Always set for OS/400, NetWare and VMS, keeping existing behaviour.
  (OS/400 builds use a different local implementation)

- examples/tests: drop the CMake-specific fallback logic and map
  `snprintf()` to `_snprintf()` for old MSVC versions, like we did
  before with other build tools. This is unsafe, but should be fine for
  these uses.

- `win32/libssh2_config.h`: make it easier to read.

Closes #812
2023-03-07 14:08:12 +00:00

90 lines
2.4 KiB
C

#ifndef LIBSSH2_CONFIG_H
#ifdef __VMS
#define LIBSSH2_CONFIG_H
/* VMS specific libssh2_config.h
*/
#define ssize_t SSIZE_T
typedef unsigned int uint32_t ;
typedef unsigned int socklen_t; /* missing in headers on VMS */
/* Have's */
#define HAVE_UNISTD_H
#define HAVE_STDLIB_H
#define HAVE_INTTYPES_H
#define HAVE_SYS_TIME_H
#define HAVE_SELECT
#define HAVE_UIO
#define HAVE_SYS_SOCKET.H
#define HAVE_NETINET_IN_H
#define HAVE_ARPA_INET_H
#define HAVE_GETTIMEOFDAY 1
#define HAVE_SNPRINTF 1
#define POSIX_C_SOURCE
/* Enable the possibility of using tracing */
#define LIBSSH2DEBUG 1
/* For selection of proper block/unblock function in session.c */
#define HAVE_FIONBIO
#include <stropts.h>
/* In VMS TCP/IP Services and some BSD variants SO_STATE retrieves
* a bitmask revealing amongst others the blocking state of the
* socket. On VMS the bits are undocumented, but SS_NBIO
* works, I did not test the other bits. Below bitdefs are
* from Berkely source socketvar.h at
* http://ftp.fibranet.cat/UnixArchive/PDP-11/Trees/2.11BSD/sys/h/socketvar.h
* Socket state bits.
* #define SS_NOFDREF 0x001 no file table ref any more
* #define SS_ISCONNECTED 0x002 socket connected to a peer
* #define SS_ISCONNECTING 0x004 in process of connecting to peer
* #define SS_ISDISCONNECTING 0x008 in process of disconnecting
* #define SS_CANTSENDMORE 0x010 can't send more data to peer
* #define SS_CANTRCVMORE 0x020 can't receive more data from peer
* #define SS_RCVATMARK 0x040 at mark on input
* #define SS_PRIV 0x080 privileged for broadcast, raw...
* #define SS_NBIO 0x100 non-blocking ops
* #define SS_ASYNC 0x200 async i/o notify
*
*/
#ifdef SO_STATE
/* SO_STATE is defined in stropts.h by DECC
* When running on Multinet, SO_STATE renders a protocol
* not started error. Functionally this has no impact,
* apart from libssh2 not being able to restore the socket
* to the proper blocking/non-blocking state.
*/
#define SS_NBIO 0x100
#endif
/* Use OpenSSL */
#define LIBSSH2_OPENSSL 1
/* Compile in zlib support. We link against gnv$libzshr, as available
* from https://sourceforge.net/projects/vms-ports/files/.
*/
#define LIBSSH2_HAVE_ZLIB
/* Enable newer diffie-hellman-group-exchange-sha1 syntax */
#define LIBSSH2_DH_GEX_NEW 1
#endif /* __VMS */
#endif /* LIBSSH2_CONFIG_H */