Force sandbox commit on each 16MB read.
[captive.git] / src / libcaptive / client / file-slave.c
index fac5eef..aeca8e8 100644 (file)
@@ -40,6 +40,7 @@
 
 
 /* Config: */
+#define MAX_FILE_READ   0x1000000      /* FIXME: Workaround memory consumption for non-journalled fastfat.sys */
 #define MAX_FILE_WRITTEN 0x100000      /* FIXME: Workaround memory consumption for non-journalled fastfat.sys */
 
 
@@ -298,6 +299,7 @@ NTSTATUS err;
 IO_STATUS_BLOCK file_IoStatusBlock;
 LARGE_INTEGER file_offset;
 GnomeVFSResult errvfsresult;
+static GnomeVFSFileSize total_read=0;
 
        g_return_val_if_fail(CAPTIVE_FILE_SLAVE_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
@@ -308,6 +310,11 @@ GnomeVFSResult errvfsresult;
 
        g_return_val_if_fail(captive_file_slave_object->file_Handle!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
 
+       /* FIXME: Workaround memory consumption for non-journalled fastfat.sys */
+       if (total_read>=MAX_FILE_READ && captive_options->sandbox)
+               return GNOME_VFS_ERROR_SERVICE_OBSOLETE;
+       total_read+=num_bytes;
+
        file_offset.QuadPart=captive_file_slave_object->offset;
        err=NtReadFile(
                        captive_file_slave_object->file_Handle, /* FileHandle */