[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 33a1c281c696607dfea6c3124bec80d8372141cb..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", },
                          },
        },
        {
@@ -590,7 +591,7 @@ static struct option long_options[FIO_JOB_OPTS + FIO_CMD_OPTS] = {
 
 static int def_timeout = 0;
 
-static char fio_version_string[] = "fio 1.11";
+static char fio_version_string[] = "fio 1.12";
 
 static char **ini_file;
 static int max_jobs = MAX_JOBS;
@@ -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;