summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/main.c b/src/main.c
index 1bac2de..f4990ac 100644
--- a/src/main.c
+++ b/src/main.c
@@ -14,6 +14,7 @@
#include "cache.h"
#include "datagen.h"
#include "mergesort.h"
+#include "util.h"
static struct settings settings = {0, 0, 0, NULL, NULL, mode_normal, array, cached};
@@ -53,7 +54,14 @@ int main(int argc, char **argv)
file_out.name = settings.fileout ? settings.fileout : settings.filein;
try_s((ret = stream_open(&file_in)), out);
- file_out.n = settings.opmode == mode_normal ? file_in.n : file_in.n - settings.ss;
+
+ if (settings.opmode == mode_fetch) {
+ settings.to = settings.to == settings.ss ? file_in.n : settings.to;
+ file_tmp.n = settings.to - settings.ss;
+ } else {
+ file_out.n = file_in.n;
+ }
+
try_s((ret = stream_open(&file_out)), out);
load_io_functions(&settings, &file_out);
@@ -64,11 +72,15 @@ int main(int argc, char **argv)
switch (settings.opmode) {
case mode_fetch:
+ stream_shallow_copy(&file_in, &file_tmp);
if (settings.format == array) {
- try_s((ret = cache_block_copy(&file_in, &file_out)), out);
+ try_s((ret = cache_block_copy(&file_in, &file_tmp)), out);
} else { /* settings.format == list */
- try_s((ret = stream_copy_range(&file_in, &file_out)), out);
+ try_s((ret = stream_copy_range(&file_in, &file_tmp)), out);
}
+
+ print_data(&file_tmp);
+
break;
case mode_generate:
try_s((ret = cache_transfer(&file_in, &file_out)), out);
@@ -191,11 +203,13 @@ static int parseargs(int argc, char **argv, struct settings * settings)
}
- if (s.opmode == mode_generate) {
- /* we always generate in-memory for PERFORMANCE */
+ if (s.opmode != mode_normal) {
+ /* we always generate and print out in-memory for PERFORMANCE */
s.access = cached;
- } else if (s.opmode == mode_fetch) {
- s.to = s.ss + s.to;
+
+ if (s.opmode == mode_fetch) {
+ s.to = s.ss + s.to;
+ }
}
s.stride = s.format == list ? sizeof(struct entry_l) : sizeof(struct entry);