Index: uspace/lib/block/block.c
===================================================================
--- uspace/lib/block/block.c	(revision c1f268348e2949baec4193287fac5e4982077fa4)
+++ uspace/lib/block/block.c	(revision 3abf70c73779dc7dc5529512275597a1d116e82d)
@@ -877,26 +877,14 @@
  *
  * @return Allocated TOC structure.
- * @return NULL on failure.
- *
- */
-toc_block_t *block_get_toc(service_id_t service_id, uint8_t session)
+ * @return EOK on success or negative error code.
+ *
+ */
+int block_read_toc(service_id_t service_id, uint8_t session, void *buf,
+    size_t bufsize)
 {
 	devcon_t *devcon = devcon_search(service_id);
-	toc_block_t *toc = NULL;
-	int rc;
-	
-	assert(devcon);
-	
-	toc = (toc_block_t *) malloc(sizeof(toc_block_t));
-	if (toc == NULL)
-		return NULL;
-	
-	rc = bd_read_toc(devcon->bd, session, toc, sizeof(toc_block_t));
-	if (rc != EOK) {
-		free(toc);
-		return NULL;
-	}
-	
-	return toc;
+	
+	assert(devcon);
+	return bd_read_toc(devcon->bd, session, buf, bufsize);
 }
 
Index: uspace/lib/block/block.h
===================================================================
--- uspace/lib/block/block.h	(revision c1f268348e2949baec4193287fac5e4982077fa4)
+++ uspace/lib/block/block.h	(revision 3abf70c73779dc7dc5529512275597a1d116e82d)
@@ -99,17 +99,4 @@
 };
 
-typedef struct {
-	uint16_t size;
-	uint8_t first_session;
-	uint8_t last_session;
-	
-	uint8_t res0;
-	uint8_t adr_ctrl;
-	uint8_t first_track;
-	uint8_t res1;
-	
-	uint32_t first_lba;
-} __attribute__((packed)) toc_block_t;
-
 extern int block_init(exch_mgmt_t, service_id_t, size_t);
 extern void block_fini(service_id_t);
@@ -129,5 +116,5 @@
 extern int block_get_bsize(service_id_t, size_t *);
 extern int block_get_nblocks(service_id_t, aoff64_t *);
-extern toc_block_t *block_get_toc(service_id_t, uint8_t);
+extern int block_read_toc(service_id_t, uint8_t, void *, size_t);
 extern int block_read_direct(service_id_t, aoff64_t, size_t, void *);
 extern int block_read_bytes_direct(service_id_t, aoff64_t, size_t, void *);
