Added compile-vs-runtime library version checks

This commit is contained in:
Paul LeoNerd Evans 2008-11-16 12:40:14 +00:00
parent c2dd9675d6
commit 4f73b850c5
4 changed files with 26 additions and 0 deletions

View File

@ -11,6 +11,8 @@ void on_key(termkey_t *tk, termkey_key *key)
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
TERMKEY_CHECK_VERSION;
termkey_t *tk = termkey_new(0, 0); termkey_t *tk = termkey_new(0, 0);
if(!tk) { if(!tk) {

2
demo.c
View File

@ -3,6 +3,8 @@
#include "termkey.h" #include "termkey.h"
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
TERMKEY_CHECK_VERSION;
char buffer[50]; char buffer[50];
termkey_t *tk = termkey_new(0, 0); termkey_t *tk = termkey_new(0, 0);

View File

@ -8,6 +8,23 @@
#include <stdio.h> #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[] = { static struct termkey_driver *drivers[] = {
&termkey_driver_ti, &termkey_driver_ti,
&termkey_driver_csi, &termkey_driver_csi,

View File

@ -7,6 +7,9 @@
#define TERMKEY_VERSION_MAJOR @@VERSION_MAJOR@@ #define TERMKEY_VERSION_MAJOR @@VERSION_MAJOR@@
#define TERMKEY_VERSION_MINOR @@VERSION_MINOR@@ #define TERMKEY_VERSION_MINOR @@VERSION_MINOR@@
#define TERMKEY_CHECK_VERSION \
termkey_check_version(TERMKEY_VERSION_MAJOR, TERMKEY_VERSION_MINOR)
typedef enum { typedef enum {
TERMKEY_SYM_UNKNOWN = -1, TERMKEY_SYM_UNKNOWN = -1,
TERMKEY_SYM_NONE = 0, TERMKEY_SYM_NONE = 0,
@ -128,6 +131,8 @@ enum {
TERMKEY_FLAG_NOTERMIOS = 1 << 4, // Do not make initial termios calls on construction 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); termkey_t *termkey_new(int fd, int flags);
void termkey_free(termkey_t *tk); void termkey_free(termkey_t *tk);
void termkey_destroy(termkey_t *tk); void termkey_destroy(termkey_t *tk);