Index: uspace/lib/libblock/Makefile
===================================================================
--- uspace/lib/libblock/Makefile	(revision 7a5cdded4b158b590a65f9d5082c0b44398b618e)
+++ uspace/lib/libblock/Makefile	(revision 7a5cdded4b158b590a65f9d5082c0b44398b618e)
@@ -0,0 +1,66 @@
+#
+# Copyright (c) 2005 Martin Decky
+# Copyright (c) 2007 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Common compiler flags
+#
+
+LIBC_PREFIX = ../libc
+## Setup toolchain
+#
+
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+CFLAGS += -Iinclude
+
+## Sources
+#
+
+SOURCES = \
+	libblock.c
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend
+
+all: libblock.a
+
+-include Makefile.depend
+
+clean:
+	-rm -f libblock.a Makefile.depend
+	find . -name '*.o' -follow -exec rm \{\} \;
+
+depend:
+	-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null
+
+libblock.a: depend $(OBJECTS)
+	$(AR) rc libblock.a $(OBJECTS)
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/lib/libblock/libblock.c
===================================================================
--- uspace/lib/libblock/libblock.c	(revision 7a5cdded4b158b590a65f9d5082c0b44398b618e)
+++ uspace/lib/libblock/libblock.c	(revision 7a5cdded4b158b590a65f9d5082c0b44398b618e)
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2008 Jakub Jermar 
+ * Copyright (c) 2008 Martin Decky 
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libblock 
+ * @{
+ */ 
+/**
+ * @file
+ * @brief
+ */
+
+#include "libblock.h" 
+#include "../../srv/vfs/vfs.h"
+#include "../../srv/rd/rd.h"
+#include <errno.h>
+#include <async.h>
+#include <ipc/ipc.h>
+#include <as.h>
+#include <assert.h>
+
+/** Read data from a block device.
+ *
+ * @param phone		Phone to be used to communicate with the device.
+ * @param buffer	Communication buffer shared with the device.
+ * @param bufpos	Pointer to the first unread valid offset within the
+ * 			communication buffer.
+ * @param buflen	Pointer to the number of unread bytes that are ready in
+ * 			the communication buffer.
+ * @param pos		Device position to be read.
+ * @param dst		Destination buffer.
+ * @param size		Size of the destination buffer.
+ * @param block_size	Block size to be used for the transfer.
+ *
+ * @return		True on success, false on failure.
+ */
+bool blockread(int phone, void *buffer, off_t *bufpos, size_t *buflen,
+    off_t *pos, void *dst, size_t size, size_t block_size)
+{
+	off_t offset = 0;
+	size_t left = size;
+	
+	while (left > 0) {
+		size_t rd;
+		
+		if (*bufpos + left < *buflen)
+			rd = left;
+		else
+			rd = *buflen - *bufpos;
+		
+		if (rd > 0) {
+			/*
+			 * Copy the contents of the communication buffer to the
+			 * destination buffer.
+			 */
+			memcpy(dst + offset, buffer + *bufpos, rd);
+			offset += rd;
+			*bufpos += rd;
+			*pos += rd;
+			left -= rd;
+		}
+		
+		if (*bufpos == *buflen) {
+			/* Refill the communication buffer with a new block. */
+			ipcarg_t retval;
+			int rc = async_req_2_1(phone, RD_READ_BLOCK,
+			    *pos / block_size, block_size, &retval);
+			if ((rc != EOK) || (retval != EOK))
+				return false;
+			
+			*bufpos = 0;
+			*buflen = block_size;
+		}
+	}
+	
+	return true;
+}
+
+int dev_phone = -1;		/* FIXME */
+void *dev_buffer = NULL;	/* FIXME */
+
+block_t *block_get(dev_handle_t dev_handle, off_t offset, size_t bs)
+{
+	/* FIXME */
+	block_t *b;
+	off_t bufpos = 0;
+	size_t buflen = 0;
+	off_t pos = offset * bs;
+
+	assert(dev_phone != -1);
+	assert(dev_buffer);
+
+	b = malloc(sizeof(block_t));
+	if (!b)
+		return NULL;
+	
+	b->data = malloc(bs);
+	if (!b->data) {
+		free(b);
+		return NULL;
+	}
+	b->size = bs;
+
+	if (!blockread(dev_phone, dev_buffer, &bufpos, &buflen, &pos, b->data,
+	    bs, bs)) {
+		free(b->data);
+		free(b);
+		return NULL;
+	}
+
+	return b;
+}
+
+void block_put(block_t *block)
+{
+	/* FIXME */
+	free(block->data);
+	free(block);
+}
+
+/** @}
+ */
Index: uspace/lib/libblock/libblock.h
===================================================================
--- uspace/lib/libblock/libblock.h	(revision 7a5cdded4b158b590a65f9d5082c0b44398b618e)
+++ uspace/lib/libblock/libblock.h	(revision 7a5cdded4b158b590a65f9d5082c0b44398b618e)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2008 Jakub Jermar
+ * Copyright (c) 2008 Martin Decky 
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libblock 
+ * @{
+ */ 
+/**
+ * @file
+ */
+
+#ifndef LIBBLOCK_LIBBLOCK_H_
+#define	LIBBLOCK_LIBBLOCK_H_ 
+
+#include <stdint.h>
+#include "../../srv/vfs/vfs.h"
+
+typedef struct block {
+	void *data;
+	size_t size;
+	bool dirty;
+} block_t;
+
+extern int dev_phone;		/* FIXME */
+extern void *dev_buffer;	/* FIXME */
+
+extern block_t *block_get(dev_handle_t, off_t, size_t);
+extern void block_put(block_t *);
+
+extern bool blockread(int, void *, off_t *, size_t *, off_t *, void *, size_t,
+    size_t);
+
+#endif
+
+/** @}
+ */
+
Index: uspace/lib/libfs/libfs.c
===================================================================
--- uspace/lib/libfs/libfs.c	(revision f772105ed5925f83580e75e164e8fbc7833ddf4e)
+++ uspace/lib/libfs/libfs.c	(revision 7a5cdded4b158b590a65f9d5082c0b44398b618e)
@@ -37,5 +37,4 @@
 #include "libfs.h" 
 #include "../../srv/vfs/vfs.h"
-#include "../../srv/rd/rd.h"
 #include <errno.h>
 #include <async.h>
@@ -332,61 +331,4 @@
 }
 
-/** Read data from a block device.
- *
- * @param phone		Phone to be used to communicate with the device.
- * @param buffer	Communication buffer shared with the device.
- * @param bufpos	Pointer to the first unread valid offset within the
- * 			communication buffer.
- * @param buflen	Pointer to the number of unread bytes that are ready in
- * 			the communication buffer.
- * @param pos		Device position to be read.
- * @param dst		Destination buffer.
- * @param size		Size of the destination buffer.
- * @param block_size	Block size to be used for the transfer.
- *
- * @return		True on success, false on failure.
- */
-bool libfs_blockread(int phone, void *buffer, off_t *bufpos, size_t *buflen,
-    off_t *pos, void *dst, size_t size, size_t block_size)
-{
-	off_t offset = 0;
-	size_t left = size;
-	
-	while (left > 0) {
-		size_t rd;
-		
-		if (*bufpos + left < *buflen)
-			rd = left;
-		else
-			rd = *buflen - *bufpos;
-		
-		if (rd > 0) {
-			/*
-			 * Copy the contents of the communication buffer to the
-			 * destination buffer.
-			 */
-			memcpy(dst + offset, buffer + *bufpos, rd);
-			offset += rd;
-			*bufpos += rd;
-			*pos += rd;
-			left -= rd;
-		}
-		
-		if (*bufpos == *buflen) {
-			/* Refill the communication buffer with a new block. */
-			ipcarg_t retval;
-			int rc = async_req_2_1(phone, RD_READ_BLOCK,
-			    *pos / block_size, block_size, &retval);
-			if ((rc != EOK) || (retval != EOK))
-				return false;
-			
-			*bufpos = 0;
-			*buflen = block_size;
-		}
-	}
-	
-	return true;
-}
-
 /** @}
  */
Index: uspace/lib/libfs/libfs.h
===================================================================
--- uspace/lib/libfs/libfs.h	(revision f772105ed5925f83580e75e164e8fbc7833ddf4e)
+++ uspace/lib/libfs/libfs.h	(revision 7a5cdded4b158b590a65f9d5082c0b44398b618e)
@@ -70,7 +70,4 @@
 extern void libfs_lookup(libfs_ops_t *, fs_handle_t, ipc_callid_t, ipc_call_t *);
 
-extern bool libfs_blockread(int, void *, off_t *, size_t *, off_t *, void *,
-    size_t, size_t);
-
 #endif
 
