From b31202ad4af6765c028682c8c3311cf0c3043e7b Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Wed, 15 Sep 2010 15:06:06 -0500 Subject: [PATCH] Test implementation using mmap and msync(MS_INVALIDATE) --- eyefi-config.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) mode change 100755 => 100644 eyefi-config.c diff --git a/eyefi-config.c b/eyefi-config.c old mode 100755 new mode 100644 index 4a6eb85..35a6d6f --- a/eyefi-config.c +++ b/eyefi-config.c @@ -9,6 +9,7 @@ */ #include "eyefi-config.h" +#include int eyefi_debug_level = 1; @@ -196,7 +197,17 @@ retry: if (fd < 0) open_error(file, fd); fd_flush(fd); - ret = read(fd, eyefi_buf, EYEFI_BUF_SIZE); + + void * map = mmap(0, EYEFI_BUF_SIZE, PROT_READ, MAP_PRIVATE, fd, 0); + if (ret = msync(map, EYEFI_BUF_SIZE, MS_INVALIDATE)) + debug_printf(0, "msync error %u", ret); + + ret = memcpy(eyefi_buf, map, EYEFI_BUF_SIZE); + + if (ret = msync(map, EYEFI_BUF_SIZE, MS_INVALIDATE)) + debug_printf(0, "msync error %u", ret); + munmap(map, EYEFI_BUF_SIZE); + if (eyefi_debug_level > 3) dumpbuf(eyefi_buf, 128); if (ret < 0) { @@ -205,7 +216,7 @@ retry: goto retry; exit(1); } - debug_printf(4, "read '%s': bytes: %d\n", file, ret); + debug_printf(4, "read '%s': bytes: %d\n", file, EYEFI_BUF_SIZE); /* * There was a time when I was carefully recording how each response * looked, and I counted the zeros in each response. I don't care -- 2.45.0