diff --git a/main.c b/main.c index b33f8c9..d304fc6 100644 --- a/main.c +++ b/main.c @@ -13,10 +13,27 @@ typedef const char *(*getmsg_t)(void); int main(void) { - void *mod = dlopen("libmod.so", RTLD_NOW); - const getmsg_t getmsg = (getmsg_t)dlsym(mod, "getmsg"); - const struct timespec pause = { .tv_nsec = 16666667 }; + const char *libfn = "libmod.so"; + const char *symn = "getmsg"; + void *mod = NULL; + getmsg_t getmsg = NULL; + const struct timespec pause = { .tv_nsec = 100000000 }; while (1) { + if (mod) + dlclose(mod); + mod = dlopen(libfn, RTLD_NOW); + if (!mod) { + fprintf( + stderr, "Error: couldn't open %s: %s\n", libfn, dlerror()); + return 1; + } + getmsg = (getmsg_t)dlsym(mod, symn); + if (!getmsg) { + fprintf( + stderr, "Error: couldn't find symbol %s: %s\n", symn, + dlerror()); + return 1; + } printf("\33[2K\r%s", getmsg()); fflush(stdout); nanosleep(&pause, NULL);