mirror of
https://github.com/lbonn/rofi
synced 2024-11-26 13:50:27 +00:00
Add quick'n dirty abi check.
This commit is contained in:
parent
fb05409365
commit
9bd4096346
2 changed files with 19 additions and 4 deletions
|
@ -1,6 +1,8 @@
|
|||
#ifndef ROFI_MODE_PRIVATE_H
|
||||
#define ROFI_MODE_PRIVATE_H
|
||||
|
||||
#define ABI_VERSION 0x00000001
|
||||
|
||||
/**
|
||||
* @param data Pointer to #Mode object.
|
||||
*
|
||||
|
@ -98,6 +100,8 @@ typedef char* ( *_mode_preprocess_input )( Mode *sw, const char *input );
|
|||
*/
|
||||
struct rofi_mode
|
||||
{
|
||||
/** Used for external plugins. */
|
||||
unsigned int abi_version;
|
||||
/** Name (max 31 char long) */
|
||||
char name[32];
|
||||
char cfg_name_key[128];
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
|
||||
#include <libgwater-xcb.h>
|
||||
|
||||
|
||||
#include "xcb-internal.h"
|
||||
#include "xkb-internal.h"
|
||||
|
||||
|
@ -69,6 +70,10 @@
|
|||
|
||||
#include "timings.h"
|
||||
|
||||
// Plugin abi version.
|
||||
// TODO: move this check to mode.c
|
||||
#include "mode-private.h"
|
||||
|
||||
// Pidfile.
|
||||
char *pidfile = NULL;
|
||||
const char *cache_dir = NULL;
|
||||
|
@ -450,10 +455,16 @@ static int add_mode ( const char * token )
|
|||
// Load module.
|
||||
GModule *mod = g_module_open ( token, G_MODULE_BIND_LAZY|G_MODULE_BIND_LOCAL );
|
||||
if ( mod ) {
|
||||
gpointer m = NULL;
|
||||
if ( g_module_symbol ( mod, "mode", &m) ){
|
||||
modi[num_modi] = m;
|
||||
num_modi++;
|
||||
Mode *m = NULL;
|
||||
if ( g_module_symbol ( mod, "mode", (gpointer *)&m) ){
|
||||
// Simple abi check.
|
||||
if ( m->abi_version != ABI_VERSION ){
|
||||
fprintf(stderr, "ABI version of plugin does not match: %08X expecting: %08X\n", m->abi_version, ABI_VERSION);
|
||||
g_module_close ( mod );
|
||||
} else {
|
||||
modi[num_modi] = m;
|
||||
num_modi++;
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Symbol 'mode' not found in module: %s\n", token);
|
||||
g_module_close ( mod );
|
||||
|
|
Loading…
Reference in a new issue