diff --git a/Makefile b/Makefile
index 213cfc2..74bacaa 100644
--- a/Makefile
+++ b/Makefile
@@ -388,7 +388,7 @@
 # Library code.
 
 LIB_OBJS = libflashrom.o layout.o flashrom.o udelay.o programmer.o programmer_table.o \
-	helpers.o ich_descriptors.o fmap.o platform/endian_$(ENDIAN).o platform/memaccess.o
+	helpers.o helpers_fileio.o ich_descriptors.o fmap.o platform/endian_$(ENDIAN).o platform/memaccess.o
 
 
 ###############################################################################
diff --git a/flashrom.c b/flashrom.c
index ac283c3..453ae6d 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -863,50 +863,6 @@
 	return chip - flashchips;
 }
 
-int read_buf_from_file(unsigned char *buf, unsigned long size,
-		       const char *filename)
-{
-#ifdef __LIBPAYLOAD__
-	msg_gerr("Error: No file I/O support in libpayload\n");
-	return 1;
-#else
-	int ret = 0;
-
-	FILE *image;
-	if (!strcmp(filename, "-"))
-		image = fdopen(fileno(stdin), "rb");
-	else
-		image = fopen(filename, "rb");
-	if (image == NULL) {
-		msg_gerr("Error: opening file \"%s\" failed: %s\n", filename, strerror(errno));
-		return 1;
-	}
-
-	struct stat image_stat;
-	if (fstat(fileno(image), &image_stat) != 0) {
-		msg_gerr("Error: getting metadata of file \"%s\" failed: %s\n", filename, strerror(errno));
-		ret = 1;
-		goto out;
-	}
-	if ((image_stat.st_size != (intmax_t)size) && strcmp(filename, "-")) {
-		msg_gerr("Error: Image size (%jd B) doesn't match the flash chip's size (%lu B)!\n",
-			 (intmax_t)image_stat.st_size, size);
-		ret = 1;
-		goto out;
-	}
-
-	unsigned long numbytes = fread(buf, 1, size, image);
-	if (numbytes != size) {
-		msg_gerr("Error: Failed to read complete file. Got %ld bytes, "
-			 "wanted %ld!\n", numbytes, size);
-		ret = 1;
-	}
-out:
-	(void)fclose(image);
-	return ret;
-#endif
-}
-
 int write_buf_to_file(const unsigned char *buf, unsigned long size, const char *filename)
 {
 #ifdef __LIBPAYLOAD__
diff --git a/helpers_fileio.c b/helpers_fileio.c
new file mode 100644
index 0000000..3b809c6
--- /dev/null
+++ b/helpers_fileio.c
@@ -0,0 +1,71 @@
+/*
+ * This file is part of the flashrom project.
+ *
+ * Copyright (C) 2009-2010 Carl-Daniel Hailfinger
+ * Copyright (C) 2013 Stefan Tauner
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#ifndef __LIBPAYLOAD__
+#include <sys/stat.h>
+#endif
+
+#include "flash.h"
+
+int read_buf_from_file(unsigned char *buf, unsigned long size,
+		       const char *filename)
+{
+#ifdef __LIBPAYLOAD__
+	msg_gerr("Error: No file I/O support in libpayload\n");
+	return 1;
+#else
+	int ret = 0;
+
+	FILE *image;
+	if (!strcmp(filename, "-"))
+		image = fdopen(fileno(stdin), "rb");
+	else
+		image = fopen(filename, "rb");
+	if (image == NULL) {
+		msg_gerr("Error: opening file \"%s\" failed: %s\n", filename, strerror(errno));
+		return 1;
+	}
+
+	struct stat image_stat;
+	if (fstat(fileno(image), &image_stat) != 0) {
+		msg_gerr("Error: getting metadata of file \"%s\" failed: %s\n", filename, strerror(errno));
+		ret = 1;
+		goto out;
+	}
+	if ((image_stat.st_size != (intmax_t)size) && strcmp(filename, "-")) {
+		msg_gerr("Error: Image size (%jd B) doesn't match the flash chip's size (%lu B)!\n",
+			 (intmax_t)image_stat.st_size, size);
+		ret = 1;
+		goto out;
+	}
+
+	unsigned long numbytes = fread(buf, 1, size, image);
+	if (numbytes != size) {
+		msg_gerr("Error: Failed to read complete file. Got %ld bytes, "
+			 "wanted %ld!\n", numbytes, size);
+		ret = 1;
+	}
+out:
+	(void)fclose(image);
+	return ret;
+#endif
+}
diff --git a/meson.build b/meson.build
index 2374b00..4acecf6 100644
--- a/meson.build
+++ b/meson.build
@@ -88,6 +88,7 @@
   'flashrom.c',
   'fmap.c',
   'helpers.c',
+  'helpers_fileio.c',
   'ich_descriptors.c',
   'jedec.c',
   'layout.c',
