Преглед на файлове

reductions, build fixes

master
Emil преди 8 месеца
родител
ревизия
12f03e20c4
No known key found for this signature in database GPG Key ID: 5432DB986FDBCF8A
променени са 4 файла, в които са добавени 8 реда и са изтрити 6 реда
  1. +1
    -1
      plug/Makefile
  2. +4
    -2
      plug/plug.h
  3. +1
    -0
      src/Makefile
  4. +2
    -3
      src/main.c

+ 1
- 1
plug/Makefile Целия файл

@@ -1,4 +1,4 @@
CFLAGS += -shared -fPIE
CFLAGS += -shared -fPIC

libplug.so: plug.o
${LINK.c} $+ -o $@

+ 4
- 2
plug/plug.h Целия файл

@@ -1,10 +1,12 @@
#ifndef PLUG_H_

#define _QUOTE(name) #name
#define QUOTE(name) _QUOTE(name)
#define BIND(lib, func, func_name) *(void **) (&func) = dlsym(lib, func_name)
#define PLUGIN(lib, x) BIND(lib, x, QUOTE(x))

typedef void (*plug_t)(void);

static plug_t plug;
plug_t plug;

#define PLUG_H_
#endif

+ 1
- 0
src/Makefile Целия файл

@@ -1,4 +1,5 @@
CPPFLAGS += -I../plug -L../plug
LDLIBS += -ldl

plugin: main.o
${LINK.c} $+ -o $@ ${LDLIBS}

+ 2
- 3
src/main.c Целия файл

@@ -12,19 +12,18 @@ main (void)
void * libplug = NULL;
while (1)
{
if (libplug) { dlclose(libplug); }
libplug = dlopen(libplug_fn, RTLD_NOW);
BIND(libplug, plug, "plug");
if (!libplug)
{ fprintf(stderr, "ERR: Cannot load dynamic library %s: %s\n", libplug_fn, dlerror()); }
else
{
*(void **) (&plug) = dlsym(libplug, "plug");
PLUGIN(libplug, plug);
printf("frame %d: ", x++);
if (plug)
{ plug(); }
else
{ fprintf(stderr, "ERR: Cannot find %s symbol in %s: %s\n", "plug", libplug_fn, dlerror()); }
dlclose(libplug);
}
sleep(2);
}