[PATCH] Dynamically allocate the big filename entries in td
diff --git a/fio-ini.c b/fio-ini.c
index 05afbf1..315622d 100644
--- a/fio-ini.c
+++ b/fio-ini.c
@@ -216,7 +216,7 @@
 	}
 
 	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);
@@ -648,7 +648,7 @@
 
 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;
 }
 
@@ -658,7 +658,7 @@
 	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;
@@ -671,6 +671,7 @@
 
 	string = malloc(4096);
 	name = malloc(256);
+	tmpbuf = malloc(4096);
 
 	while ((p = fgets(string, 4096, f)) != NULL) {
 		if (is_empty_or_comment(p))
@@ -853,7 +854,8 @@
 				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;
 			}
@@ -917,6 +919,7 @@
 
 	free(string);
 	free(name);
+	free(tmpbuf);
 	fclose(f);
 	return 0;
 }