[PATCH] init.c: Expose f_out and f_err to loaded libraries via dlsym()
[fio.git] / init.c
diff --git a/init.c b/init.c
index fb3e3ccf9f893d39d445b6a3e24edaad36f46965..c6837c9f91d3bea0db10d7a8a4a106bcf9268deb 100644 (file)
--- a/init.c
+++ b/init.c
@@ -103,6 +103,7 @@ static struct fio_option options[] = {
 #ifdef FIO_HAVE_SYSLET
                          { .ival = "syslet-rw", },
 #endif
+                         { .ival = "external", },
                          },
        },
        {
@@ -607,6 +608,16 @@ FILE *f_err = NULL;
 static int write_lat_log = 0;
 int write_bw_log = 0;
 
+FILE *get_f_out()
+{
+       return f_out;
+}
+
+FILE *get_f_err()
+{
+       return f_err;
+}
+
 /*
  * Return a free job structure.
  */
@@ -1017,11 +1028,26 @@ static int str_mem_cb(void *data, const char *mem)
        return 0;
 }
 
+/* External engines are specified by "external:name.o") */
+static const char *get_engine_name(const char *str)
+{
+       char *p = strstr(str, ":");
+
+       if (!p)
+               return str;
+
+       p++;
+       strip_blank_front(&p);
+       strip_blank_end(p);
+       return p;
+}
+
 static int str_ioengine_cb(void *data, const char *str)
 {
        struct thread_data *td = data;
+       const char *name = get_engine_name(str);
 
-       td->io_ops = load_ioengine(td, str);
+       td->io_ops = load_ioengine(td, name);
        if (td->io_ops)
                return 0;