Author: post
Date: 2010-07-10 17:40:27 +0200 (Sat, 10 Jul 2010)
New Revision: 3464

Modified:
   trunk/librawstudio/rs-rawfile.c
   trunk/librawstudio/rs-rawfile.h
Log:
Add interface to create a "rawfile" from memory.

Modified: trunk/librawstudio/rs-rawfile.c
===================================================================
--- trunk/librawstudio/rs-rawfile.c     2010-07-10 15:39:14 UTC (rev 3463)
+++ trunk/librawstudio/rs-rawfile.c     2010-07-10 15:40:27 UTC (rev 3464)
@@ -38,6 +38,7 @@
 #else
        gint fd;
 #endif
+       gboolean is_map;
        guint size;
        void *map;
        gushort byteorder;
@@ -210,6 +211,21 @@
 }
 
 RAWFILE *
+raw_create_from_memory(void *memory, guint size, guint first_ifd_offset, 
gushort byteorder)
+{
+       RAWFILE *rawfile;
+       rawfile = g_malloc(sizeof(RAWFILE));
+
+       rawfile->is_map = FALSE;
+       rawfile->size = size;
+       rawfile->map = memory;
+       rawfile->base = 0;
+       rawfile->byteorder = byteorder;
+       rawfile->first_ifd_offset = first_ifd_offset;
+       return rawfile;
+}
+
+RAWFILE *
 raw_open_file(const gchar *filename)
 {
        struct stat st;
@@ -256,6 +272,7 @@
                g_free(rawfile);
                return(NULL);
        }
+       rawfile->is_map = TRUE;
        rawfile->fd = fd;
 #endif
        rawfile->base = 0;
@@ -281,17 +298,21 @@
        return version;
 }
 
+
 void
 raw_close_file(RAWFILE *rawfile)
 {
+       if (rawfile->is_map)
+       {
 #ifdef G_OS_WIN32
-       UnmapViewOfFile(rawfile->map);
-       CloseHandle(rawfile->maphandle);
-       CloseHandle(rawfile->filehandle);
+               UnmapViewOfFile(rawfile->map);
+               CloseHandle(rawfile->maphandle);
+               CloseHandle(rawfile->filehandle);
 #else
-       munmap(rawfile->map, rawfile->size);
-       close(rawfile->fd);
+               munmap(rawfile->map, rawfile->size);
+               close(rawfile->fd);
 #endif
+       }
        g_free(rawfile);
        return;
 }

Modified: trunk/librawstudio/rs-rawfile.h
===================================================================
--- trunk/librawstudio/rs-rawfile.h     2010-07-10 15:39:14 UTC (rev 3463)
+++ trunk/librawstudio/rs-rawfile.h     2010-07-10 15:40:27 UTC (rev 3464)
@@ -26,6 +26,7 @@
 
 void raw_init();
 RAWFILE *raw_open_file(const gchar *filename);
+RAWFILE *raw_create_from_memory(void *memory, guint size, guint 
first_ifd_offset, gushort byteorder);
 guchar raw_init_file_tiff(RAWFILE *rawfile, guint pos);
 gboolean raw_get_uint(RAWFILE *rawfile, guint pos, guint *target);
 gboolean raw_get_ushort(RAWFILE *rawfile, guint pos, gushort *target);


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to