g_log() accelerated by 'captive_debug_messages_disabled' slave global flag.
[captive.git] / src / libcaptive / client / init.c
index 9b7469e..a2459e4 100644 (file)
@@ -51,6 +51,7 @@
 #include "lib.h"
 #include <reactos/ddk/obfuncs.h>
 #include <syslog.h>
+#include "captive/macros.h"
 
 
 struct captive_options *captive_options;
@@ -73,14 +74,7 @@ static TOP_LEVEL_IRP TopLevelIrp;    /* TODO:thread */
 void *_local_unwind2_addr;
 
 
-/* Acceleration hack for ntoskrnl/dbg/print.c/DbgPrint() */
-gboolean captive_get_debug_messages(void)
-{
-       g_return_val_if_fail(captive_options!=NULL,TRUE);
-
-       return captive_options->debug_messages;
-}
-
+gboolean captive_debug_messages_disabled=FALSE;
 
 static gboolean captive_w32_init(void)
 {
@@ -256,6 +250,10 @@ void captive_log_init(const struct captive_options *captive_options)
 {
        g_return_if_fail(captive_options!=NULL);
 
+       /* FIXME: Fix sharing of different 'debug_messages' for various sandboxes. */
+       captive_debug_messages_disabled=!captive_options->debug_messages;
+
+       /* FIXME: Fix sharing of different 'debug_messages' for various sandboxes. */
        if (!captive_options->debug_messages) {
                /* FIXME: Save handler_id and destroy it in captive_vfs_close(). */
                g_log_set_handler(
@@ -377,6 +375,8 @@ WCHAR wzero;
        /* wanted: * IoCreateFile()->ObCreateObject(,,,IoFileObjectType)->
         * ->(IoFileObjectType->Create==IopCreateFile)()->IoMountVolume()
         */
+       CAPTIVE_MEMZERO(&dir_IoStatusBlock);    /* FIXME: Try to pre-clear it - uninitialized otherwise? */
+       dir_IoStatusBlock.Information=FILE_OPENED;      /* FIXME: Try to pre-set it - uninitialized otherwise? */
        err=IoCreateFile(
                        &dir_Handle,    /* FileHandle */
                        GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE|0x80,    /* DesiredAccess; 0xC0100080=GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE|0x80 */
@@ -398,8 +398,8 @@ WCHAR wzero;
                        NULL,   /* ExtraCreateParameters */
                        0);     /* Options */
        g_free(dir_ObjectAttributes.ObjectName);        /* left from captive_gnomevfs_uri_parent_init() */
-       g_return_if_fail(NT_SUCCESS(err)==NT_SUCCESS(dir_IoStatusBlock.Status));
        g_return_if_fail(NT_SUCCESS(err));
+       g_return_if_fail(NT_SUCCESS(err)==NT_SUCCESS(dir_IoStatusBlock.Status));
        g_return_if_fail(dir_IoStatusBlock.Information==FILE_OPENED);
 
        Status=ObReferenceObjectByHandle(dir_Handle,FILE_LIST_DIRECTORY,IoFileObjectType,UserMode,(PVOID *)&FileObject,NULL);
@@ -453,7 +453,8 @@ WCHAR wzero;
                        KeWaitForSingleObject(&FileObject->Event,Executive,KernelMode,FALSE,NULL);
                        Status=IoStatusBlock.Status;
                        }
-               g_assert(NT_SUCCESS(Status));
+               g_assert(NT_SUCCESS(Status)
+                               || (Status==STATUS_MEDIA_WRITE_PROTECTED && captive_options->rwmode==CAPTIVE_OPTION_RWMODE_RO));
        }
 
        ObDereferenceObject(FileObject);