}
if (td->filetype == FIO_TYPE_FILE) {
- if (td->directory[0] != '\0')
+ if (td->directory && td->directory[0] != '\0')
sprintf(td->file_name, "%s/%s.%d", td->directory, jobname, td->jobnum);
else
sprintf(td->file_name, "%s.%d", jobname, td->jobnum);
static int str_iolog_cb(struct thread_data *td, char *file)
{
- strncpy(td->iolog_file, file, sizeof(td->iolog_file) - 1);
+ td->iolog_file = strdup(file);
+ return 0;
+}
+
+static int str_prerun_cb(struct thread_data *td, char *file)
+{
+ td->exec_prerun = strdup(file);
+ return 0;
+}
+
+static int str_postrun_cb(struct thread_data *td, char *file)
+{
+ td->exec_postrun = strdup(file);
+ return 0;
+}
+
+static int str_iosched_cb(struct thread_data *td, char *file)
+{
+ td->ioscheduler = strdup(file);
return 0;
}
unsigned long long ull;
unsigned long ul1, ul2;
struct thread_data *td;
- char *string, *name;
+ char *string, *name, *tmpbuf;
fpos_t off;
FILE *f;
char *p;
string = malloc(4096);
name = malloc(256);
+ tmpbuf = malloc(4096);
while ((p = fgets(string, 4096, f)) != NULL) {
if (is_empty_or_comment(p))
fgetpos(f, &off);
continue;
}
- if (!check_strstore(p, "directory", td->directory)) {
+ if (!check_strstore(p, "directory", tmpbuf)) {
+ td->directory = strdup(tmpbuf);
fgetpos(f, &off);
continue;
}
continue;
}
if (!check_str(p, "iolog", str_iolog_cb, td)) {
- printf("got read iolog\n");
td->read_iolog = 1;
td->write_iolog = 0;
fgetpos(f, &off);
}
if (!td->read_iolog &&
!check_str(p, "write_iolog", str_iolog_cb, td)) {
- printf("got write iolog\n");
td->write_iolog = 1;
fgetpos(f, &off);
continue;
}
+ if (!check_str(p, "exec_prerun", str_prerun_cb, td)) {
+ fgetpos(f, &off);
+ continue;
+ }
+ if (!check_str(p, "exec_postrun", str_postrun_cb, td)) {
+ fgetpos(f, &off);
+ continue;
+ }
+ if (!check_str(p, "ioscheduler", str_iosched_cb, td)) {
+ fgetpos(f, &off);
+ continue;
+ }
printf("Client%d: bad option %s\n",td->thread_number,p);
return 1;
free(string);
free(name);
+ free(tmpbuf);
fclose(f);
return 0;
}