all: move more struct fields into substructers for clarity
diff --git a/sanitizers.c b/sanitizers.c
index aed795e..f380077 100644
--- a/sanitizers.c
+++ b/sanitizers.c
@@ -154,10 +154,11 @@
     /* Address Sanitizer (ASan) */
     if (hfuzz->useSanCov) {
         snprintf(san_opts, bufSz, "%s:%s:%s:%s%s/%s:%s%s/%s", kASAN_OPTS, abortFlag, kSAN_COV_OPTS,
-            kSANCOVDIR, hfuzz->workDir, _HF_SANCOV_DIR, kSANLOGDIR, hfuzz->workDir, kLOGPREFIX);
+            kSANCOVDIR, hfuzz->io.workDir, _HF_SANCOV_DIR, kSANLOGDIR, hfuzz->io.workDir,
+            kLOGPREFIX);
     } else {
         snprintf(san_opts, bufSz, "%s:%s:%s%s/%s", kASAN_OPTS, abortFlag, kSANLOGDIR,
-            hfuzz->workDir, kLOGPREFIX);
+            hfuzz->io.workDir, kLOGPREFIX);
     }
 
     flagsSz = strlen(san_opts) + 1;
@@ -169,10 +170,11 @@
     memset(san_opts, 0, bufSz);
     if (hfuzz->useSanCov) {
         snprintf(san_opts, bufSz, "%s:%s:%s:%s%s/%s:%s%s/%s", kUBSAN_OPTS, abortFlag, kSAN_COV_OPTS,
-            kSANCOVDIR, hfuzz->workDir, _HF_SANCOV_DIR, kSANLOGDIR, hfuzz->workDir, kLOGPREFIX);
+            kSANCOVDIR, hfuzz->io.workDir, _HF_SANCOV_DIR, kSANLOGDIR, hfuzz->io.workDir,
+            kLOGPREFIX);
     } else {
         snprintf(san_opts, bufSz, "%s:%s:%s%s/%s", kUBSAN_OPTS, abortFlag, kSANLOGDIR,
-            hfuzz->workDir, kLOGPREFIX);
+            hfuzz->io.workDir, kLOGPREFIX);
     }
 
     flagsSz = strlen(san_opts) + 1;
@@ -185,10 +187,11 @@
 
     if (hfuzz->useSanCov) {
         snprintf(san_opts, bufSz, "%s:%s:%s:%s%s/%s:%s%s/%s", kMSAN_OPTS, abortFlag, kSAN_COV_OPTS,
-            kSANCOVDIR, hfuzz->workDir, _HF_SANCOV_DIR, kSANLOGDIR, hfuzz->workDir, kLOGPREFIX);
+            kSANCOVDIR, hfuzz->io.workDir, _HF_SANCOV_DIR, kSANLOGDIR, hfuzz->io.workDir,
+            kLOGPREFIX);
     } else {
         snprintf(san_opts, bufSz, "%s:%s:%s%s/%s", kMSAN_OPTS, abortFlag, kSANLOGDIR,
-            hfuzz->workDir, kLOGPREFIX);
+            hfuzz->io.workDir, kLOGPREFIX);
     }
 
     flagsSz = strlen(san_opts) + 1;