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