diff options
author | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2008-11-16 12:40:14 +0000 |
---|---|---|
committer | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2008-11-16 12:40:14 +0000 |
commit | 4f73b850c5a215e6cce7a559650a3cf7ec89d433 (patch) | |
tree | ce1cdf78bdaa18bc4c9546b007c2c4fa51d10448 | |
parent | c2dd9675d6af30ab5129519325bac68491087cc1 (diff) | |
download | termo-4f73b850c5a215e6cce7a559650a3cf7ec89d433.tar.gz termo-4f73b850c5a215e6cce7a559650a3cf7ec89d433.tar.xz termo-4f73b850c5a215e6cce7a559650a3cf7ec89d433.zip |
Added compile-vs-runtime library version checks
-rw-r--r-- | demo-async.c | 2 | ||||
-rw-r--r-- | demo.c | 2 | ||||
-rw-r--r-- | termkey.c | 17 | ||||
-rw-r--r-- | termkey.h.in | 5 |
4 files changed, 26 insertions, 0 deletions
diff --git a/demo-async.c b/demo-async.c index d4d0d46..0cb7066 100644 --- a/demo-async.c +++ b/demo-async.c @@ -11,6 +11,8 @@ void on_key(termkey_t *tk, termkey_key *key) } int main(int argc, char *argv[]) { + TERMKEY_CHECK_VERSION; + termkey_t *tk = termkey_new(0, 0); if(!tk) { @@ -3,6 +3,8 @@ #include "termkey.h" int main(int argc, char *argv[]) { + TERMKEY_CHECK_VERSION; + char buffer[50]; termkey_t *tk = termkey_new(0, 0); @@ -8,6 +8,23 @@ #include <stdio.h> +void termkey_check_version(int major, int minor) +{ + if(major != TERMKEY_VERSION_MAJOR) { + fprintf(stderr, "libtermkey major version mismatch; %d (wants) != %d (library)\n", + major, TERMKEY_VERSION_MAJOR); + exit(1); + } + + if(minor > TERMKEY_VERSION_MINOR) { + fprintf(stderr, "libtermkey minor version mismatch; %d (wants) > %d (library)\n", + minor, TERMKEY_VERSION_MINOR); + exit(1); + } + + // Happy +} + static struct termkey_driver *drivers[] = { &termkey_driver_ti, &termkey_driver_csi, diff --git a/termkey.h.in b/termkey.h.in index 4849923..7f0dc49 100644 --- a/termkey.h.in +++ b/termkey.h.in @@ -7,6 +7,9 @@ #define TERMKEY_VERSION_MAJOR @@VERSION_MAJOR@@ #define TERMKEY_VERSION_MINOR @@VERSION_MINOR@@ +#define TERMKEY_CHECK_VERSION \ + termkey_check_version(TERMKEY_VERSION_MAJOR, TERMKEY_VERSION_MINOR) + typedef enum { TERMKEY_SYM_UNKNOWN = -1, TERMKEY_SYM_NONE = 0, @@ -128,6 +131,8 @@ enum { TERMKEY_FLAG_NOTERMIOS = 1 << 4, // Do not make initial termios calls on construction }; +void termkey_check_version(int major, int minor); + termkey_t *termkey_new(int fd, int flags); void termkey_free(termkey_t *tk); void termkey_destroy(termkey_t *tk); |