<html>
<body>
  <div id="body" style="background-color:#ffffff;" >
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head" style="border-bottom-width:1px;border-bottom-style:solid;" ><td class="headtd" style="padding:0;padding-top:.2em;" colspan="4">Commit in <b><tt>lxdream/src</tt></b></td></tr>
<tr><td><tt><a href="#file1">Makefile.am</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">e1848ca9b5b1 -> 6464d890cc9e</td></tr>
<tr class="alt" style=";" ><td><tt><a href="#file2">Makefile.in</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+38</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-21</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">e1848ca9b5b1 -> 6464d890cc9e</td></tr>
<tr><td><tt>drivers/cdrom/<a href="#file3">isofs.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">e1848ca9b5b1 -> 6464d890cc9e</td></tr>
<tr class="alt" style=";" ><td><tt>             /<a href="#file4"><span id="addedalt" style="background-color:#ccf7cc;" >isomem.c</span></a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+178</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" align="right" nowrap="nowrap">added 6464d890cc9e</td></tr>
<tr><td><tt><a href="#file5">loader.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">e1848ca9b5b1 -> 6464d890cc9e</td></tr>
<tr><td></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+219</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-24</td><td></td></tr>
</table>
<small id="info" style="color: #888888;" >1 added + 4 modified, total 5 files</small><br />
<pre class="comment" style="white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd;" >
Clone iso_memory_stream_new() as iso_mem_stream_new(), since current
versions of libisofs have made it unlinkable on linux
</pre>
<hr /><a name="file1" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>Makefile.am</b></big> <small id="info" style="color: #888888;" >e1848ca9b5b1 -> 6464d890cc9e</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/Makefile.am
+++ lxdream/src/Makefile.am
@@ -73,7 +73,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         drivers/cdrom/edc_ecc.c drivers/cdrom/ecc.h drivers/cdrom/drive.c \
         drivers/cdrom/edc_crctable.h drivers/cdrom/edc_encoder.h \
        drivers/cdrom/edc_l2sq.h drivers/cdrom/edc_scramble.h drivers/cdrom/cd_mmc.c \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   drivers/cdrom/isofs.h drivers/cdrom/isofs.c \
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     drivers/cdrom/isofs.h drivers/cdrom/isofs.c <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >drivers/cdrom/isomem.c </span>\
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >    sh4/sh4.def sh4/sh4core.in sh4/sh4x86.in sh4/sh4dasm.in sh4/sh4stat.in \
        hotkeys.c hotkeys.h
 lxdream_CPPFLAGS = @LXDREAMCPPFLAGS@
</pre></div>
<hr /><a name="file2" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>Makefile.in</b></big> <small id="info" style="color: #888888;" >e1848ca9b5b1 -> 6464d890cc9e</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/Makefile.in
+++ lxdream/src/Makefile.in
@@ -175,11 +175,12 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >      drivers/cdrom/drive.c drivers/cdrom/edc_crctable.h \
        drivers/cdrom/edc_encoder.h drivers/cdrom/edc_l2sq.h \
        drivers/cdrom/edc_scramble.h drivers/cdrom/cd_mmc.c \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   drivers/cdrom/isofs.h drivers/cdrom/isofs.c sh4/sh4.def \
-       sh4/sh4core.in sh4/sh4x86.in sh4/sh4dasm.in sh4/sh4stat.in \
-       hotkeys.c hotkeys.h plugin.c plugin.h sh4/sh4x86.c \
-       xlat/x86/x86op.h xlat/x86/ia32abi.h xlat/x86/amd64abi.h \
-       sh4/sh4trans.c sh4/sh4trans.h sh4/mmux86.c x86dasm/x86dasm.c \
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     drivers/cdrom/isofs.h drivers/cdrom/isofs.c \
+       drivers/cdrom/isomem.c sh4/sh4.def sh4/sh4core.in \
+       sh4/sh4x86.in sh4/sh4dasm.in sh4/sh4stat.in hotkeys.c \
+       hotkeys.h plugin.c plugin.h sh4/sh4x86.c xlat/x86/x86op.h \
+       xlat/x86/ia32abi.h xlat/x86/amd64abi.h sh4/sh4trans.c \
+       sh4/sh4trans.h sh4/mmux86.c x86dasm/x86dasm.c \
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >    x86dasm/x86dasm.h x86dasm/i386-dis.c x86dasm/dis-init.c \
        x86dasm/dis-buf.c x86dasm/ansidecl.h x86dasm/bfd.h \
        x86dasm/dis-asm.h x86dasm/symcat.h x86dasm/sysdep.h \
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -280,13 +281,14 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >      lxdream-cd_nrg.$(OBJEXT) lxdream-cd_cdi.$(OBJEXT) \
        lxdream-cd_gdi.$(OBJEXT) lxdream-edc_ecc.$(OBJEXT) \
        lxdream-drive.$(OBJEXT) lxdream-cd_mmc.$(OBJEXT) \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   lxdream-isofs.$(OBJEXT) lxdream-hotkeys.$(OBJEXT) \
-       $(am__objects_1) $(am__objects_2) $(am__objects_3) \
-       $(am__objects_4) $(am__objects_5) $(am__objects_6) \
-       $(am__objects_7) $(am__objects_8) $(am__objects_9) \
-       $(am__objects_10) $(am__objects_11) $(am__objects_12) \
-       $(am__objects_13) $(am__objects_14) $(am__objects_15) \
-       $(am__objects_16) $(am__objects_17) $(am__objects_18)
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     lxdream-isofs.$(OBJEXT) lxdream-isomem.$(OBJEXT) \
+       lxdream-hotkeys.$(OBJEXT) $(am__objects_1) $(am__objects_2) \
+       $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+       $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+       $(am__objects_9) $(am__objects_10) $(am__objects_11) \
+       $(am__objects_12) $(am__objects_13) $(am__objects_14) \
+       $(am__objects_15) $(am__objects_16) $(am__objects_17) \
+       $(am__objects_18)
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > lxdream_OBJECTS = $(am_lxdream_OBJECTS)
 lxdream_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -595,15 +597,15 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >      drivers/cdrom/drive.c drivers/cdrom/edc_crctable.h \
        drivers/cdrom/edc_encoder.h drivers/cdrom/edc_l2sq.h \
        drivers/cdrom/edc_scramble.h drivers/cdrom/cd_mmc.c \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   drivers/cdrom/isofs.h drivers/cdrom/isofs.c sh4/sh4.def \
-       sh4/sh4core.in sh4/sh4x86.in sh4/sh4dasm.in sh4/sh4stat.in \
-       hotkeys.c hotkeys.h $(am__append_1) $(am__append_2) \
-       $(am__append_4) $(am__append_5) $(am__append_6) \
-       $(am__append_7) $(am__append_8) $(am__append_9) \
-       $(am__append_10) $(am__append_17) $(am__append_19) \
-       $(am__append_21) $(am__append_23) $(am__append_25) \
-       $(am__append_27) $(am__append_28) $(am__append_29) \
-       $(am__append_30)
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     drivers/cdrom/isofs.h drivers/cdrom/isofs.c \
+       drivers/cdrom/isomem.c sh4/sh4.def sh4/sh4core.in \
+       sh4/sh4x86.in sh4/sh4dasm.in sh4/sh4stat.in hotkeys.c \
+       hotkeys.h $(am__append_1) $(am__append_2) $(am__append_4) \
+       $(am__append_5) $(am__append_6) $(am__append_7) \
+       $(am__append_8) $(am__append_9) $(am__append_10) \
+       $(am__append_17) $(am__append_19) $(am__append_21) \
+       $(am__append_23) $(am__append_25) $(am__append_27) \
+       $(am__append_28) $(am__append_29) $(am__append_30)
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > lxdream_CPPFLAGS = @LXDREAMCPPFLAGS@
 @BUILD_SH4X86_TRUE@test_testsh4x86_LDADD = @LXDREAM_LIBS@ @GLIB_LIBS@ @GTK_LIBS@ @LIBPNG_LIBS@
 @BUILD_SH4X86_TRUE@test_testsh4x86_CPPFLAGS = @LXDREAMCPPFLAGS@
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -838,6 +840,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-io_osx.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-ioutil.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-isofs.Po@am__quote@
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-isomem.Po@am__quote@
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-joy_linux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-kbd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-lightgun.Po@am__quote@
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -2085,6 +2088,20 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__fastdepCC_FALSE@    DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lxdream-isofs.obj `if test -f 'drivers/cdrom/isofs.c'; then $(CYGPATH_W) 'drivers/cdrom/isofs.c'; else $(CYGPATH_W) '$(srcdir)/drivers/cdrom/isofs.c'; fi`
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+lxdream-isomem.o: drivers/cdrom/isomem.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lxdream-isomem.o -MD -MP -MF "$(DEPDIR)/lxdream-isomem.Tpo" -c -o lxdream-isomem.o `test -f 'drivers/cdrom/isomem.c' || echo '$(srcdir)/'`drivers/cdrom/isomem.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/lxdream-isomem.Tpo" "$(DEPDIR)/lxdream-isomem.Po"; else rm -f "$(DEPDIR)/lxdream-isomem.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='drivers/cdrom/isomem.c' object='lxdream-isomem.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lxdream-isomem.o `test -f 'drivers/cdrom/isomem.c' || echo '$(srcdir)/'`drivers/cdrom/isomem.c
+
+lxdream-isomem.obj: drivers/cdrom/isomem.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lxdream-isomem.obj -MD -MP -MF "$(DEPDIR)/lxdream-isomem.Tpo" -c -o lxdream-isomem.obj `if test -f 'drivers/cdrom/isomem.c'; then $(CYGPATH_W) 'drivers/cdrom/isomem.c'; else $(CYGPATH_W) '$(srcdir)/drivers/cdrom/isomem.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/lxdream-isomem.Tpo" "$(DEPDIR)/lxdream-isomem.Po"; else rm -f "$(DEPDIR)/lxdream-isomem.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='drivers/cdrom/isomem.c' object='lxdream-isomem.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lxdream-isomem.obj `if test -f 'drivers/cdrom/isomem.c'; then $(CYGPATH_W) 'drivers/cdrom/isomem.c'; else $(CYGPATH_W) '$(srcdir)/drivers/cdrom/isomem.c'; fi`
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > lxdream-hotkeys.o: hotkeys.c
 @am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lxdream-hotkeys.o -MD -MP -MF "$(DEPDIR)/lxdream-hotkeys.Tpo" -c -o lxdream-hotkeys.o `test -f 'hotkeys.c' || echo '$(srcdir)/'`hotkeys.c; \
 @am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/lxdream-hotkeys.Tpo" "$(DEPDIR)/lxdream-hotkeys.Po"; else rm -f "$(DEPDIR)/lxdream-hotkeys.Tpo"; exit 1; fi
</pre></div>
<hr /><a name="file3" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/drivers/cdrom</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>isofs.h</b></big> <small id="info" style="color: #888888;" >e1848ca9b5b1 -> 6464d890cc9e</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/drivers/cdrom/isofs.h
+++ lxdream/src/drivers/cdrom/isofs.h
@@ -57,6 +57,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 
 /** Prototypes for "Internal" Libisofs functions */
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-int iso_mem<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >ory</span>_stream_new(unsigned char *buf, size_t size, IsoStream **stream);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+int iso_mem_stream_new(unsigned char *buf, size_t size, IsoStream **stream);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 #endif /* !cdrom_isofs_H */
</pre></div>
<hr /><a name="file4" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span id="added" class="pathname" style="font-family:monospace; float:right; background-color:#ddffdd;" >lxdream/src/drivers/cdrom</span><br />
<div id="added" class="fileheader" style="margin-bottom:.5em; background-color:#ddffdd;" ><big><b>isomem.c</b></big> <small id="info" style="color: #888888;" >added at 6464d890cc9e</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/drivers/cdrom/isomem.c
+++ lxdream/src/drivers/cdrom/isomem.c
@@ -0,0 +1,178 @@
</small></pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/*
+ * Copyright (c) 2007 Vreixo Formoso
+ * Copyright (c) 2009 Thomas Schmitt
+ *
+ * This file is part of the libisofs project; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2 
+ * or later as published by the Free Software Foundation. 
+ * See COPYING file for details.
+ *
+ * Memory stream extracted for use in lxdream by Nathan Keynes 2010.
+ */
+
+#include <libisofs.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <stdio.h>
+
+#ifndef MIN
+#define MIN(a,b) ((a)<=(b) ? (a) : (b))
+#endif
+
+#define ISO_MEM_FS_ID 4
+
+ino_t mem_serial_id = (ino_t)1;
+
+typedef struct
+{
+    uint8_t *buf;
+    ssize_t offset; /* -1 if stream closed */
+    ino_t ino_id;
+    size_t size;
+} MemStreamData;
+
+static
+int mem_open(IsoStream *stream)
+{
+    MemStreamData *data;
+    if (stream == NULL) {
+        return ISO_NULL_POINTER;
+    }
+    data = (MemStreamData*)stream->data;
+    if (data->offset != -1) {
+        return ISO_FILE_ALREADY_OPENED;
+    }
+    data->offset = 0;
+    return ISO_SUCCESS;
+}
+
+static
+int mem_close(IsoStream *stream)
+{
+    MemStreamData *data;
+    if (stream == NULL) {
+        return ISO_NULL_POINTER;
+    }
+    data = (MemStreamData*)stream->data;
+    if (data->offset == -1) {
+        return ISO_FILE_NOT_OPENED;
+    }
+    data->offset = -1;
+    return ISO_SUCCESS;
+}
+
+static
+off_t mem_get_size(IsoStream *stream)
+{
+    MemStreamData *data;
+    data = (MemStreamData*)stream->data;
+
+    return (off_t)data->size;
+}
+
+static
+int mem_read(IsoStream *stream, void *buf, size_t count)
+{
+    size_t len;
+    MemStreamData *data;
+    if (stream == NULL || buf == NULL) {
+        return ISO_NULL_POINTER;
+    }
+    if (count == 0) {
+        return ISO_WRONG_ARG_VALUE;
+    }
+    data = stream->data;
+
+    if (data->offset == -1) {
+        return ISO_FILE_NOT_OPENED;
+    }
+
+    if (data->offset >= data->size) {
+        return 0; /* EOF */
+    }
+
+    len = MIN(count, data->size - data->offset);
+    memcpy(buf, data->buf + data->offset, len);
+    data->offset += len;
+    return len;
+}
+
+static
+int mem_is_repeatable(IsoStream *stream)
+{
+    return 1;
+}
+
+static
+void mem_get_id(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id,
+                ino_t *ino_id)
+{
+    MemStreamData *data;
+    data = (MemStreamData*)stream->data;
+    *fs_id = ISO_MEM_FS_ID;
+    *dev_id = 0;
+    *ino_id = data->ino_id;
+}
+
+static
+void mem_free(IsoStream *stream)
+{
+    MemStreamData *data;
+    data = (MemStreamData*)stream->data;
+    free(data->buf);
+    free(data);
+}
+
+IsoStreamIface mem_stream_class = {
+    0,
+    "mem ",
+    mem_open,
+    mem_close,
+    mem_get_size,
+    mem_read,
+    mem_is_repeatable,
+    mem_get_id,
+    mem_free
+};
+
+/**
+ * Create a stream for reading from a arbitrary memory buffer.
+ * When the Stream refcount reach 0, the buffer is free(3).
+ *
+ * @return
+ *      1 sucess, < 0 error
+ */
+int iso_mem_stream_new(unsigned char *buf, size_t size, IsoStream **stream)
+{
+    IsoStream *str;
+    MemStreamData *data;
+
+    if (buf == NULL || stream == NULL) {
+        return ISO_NULL_POINTER;
+    }
+
+    str = malloc(sizeof(IsoStream));
+    if (str == NULL) {
+        return ISO_OUT_OF_MEM;
+    }
+    data = malloc(sizeof(MemStreamData));
+    if (data == NULL) {
+        free(str);
+        return ISO_OUT_OF_MEM;
+    }
+
+    /* fill data */
+    data->buf = buf;
+    data->size = size;
+    data->offset = -1;
+    data->ino_id = mem_serial_id++;
+
+    str->refcount = 1;
+    str->data = data;
+    str->class = &mem_stream_class;
+
+    *stream = str;
+    return ISO_SUCCESS;
+}
</pre></div>
<hr /><a name="file5" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>loader.c</b></big> <small id="info" style="color: #888888;" >e1848ca9b5b1 -> 6464d890cc9e</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/loader.c
+++ lxdream/src/loader.c
@@ -368,7 +368,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     }
 
     IsoStream *stream;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    if( iso_mem<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >ory</span>_stream_new(data, bin_size, &stream) != 1 ) {
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    if( iso_mem_stream_new(data, bin_size, &stream) != 1 ) {
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         g_free(data);
         iso_image_unref(iso);
         SET_ERROR( err, LX_ERR_NOMEM, "Unable to create CD image: out of memory" );
</pre></div>
<center><small>Chaos Theory</small></center>
</div></body></html>