#include "reactos/ddk/iofuncs.h" /* for IoCreateFile() */
#include "captive/sandbox.h"
#include "result.h"
+#include "captive/leave.h"
+#include "captive/usecount.h"
static gpointer captive_directory_object_parent_class=NULL;
NTSTATUS err;
CaptiveDirectoryObject *captive_directory_object;
- if (CAPTIVE_IS_SANDBOX_PARENT())
- return captive_sandbox_parent_directory_new_open(captive_directory_object_return,pathname);
-
g_return_val_if_fail(captive_directory_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
GnomeVFSResult captive_directory_new_open(CaptiveDirectoryObject **captive_directory_object_return,
const gchar *pathname)
{
+GnomeVFSResult r;
+
+ if (CAPTIVE_IS_SANDBOX_PARENT())
+ return captive_sandbox_parent_directory_new_open(captive_directory_object_return,pathname);
+
g_return_val_if_fail(captive_directory_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
- return captive_directory_new_internal(captive_directory_object_return,pathname,
+ r=captive_directory_new_internal(captive_directory_object_return,pathname,
FALSE, /* create */
0); /* create_perm; ignored */
+
+ captive_leave();
+ if (r==GNOME_VFS_OK)
+ captive_usecount(+1);
+ return r;
}
GnomeVFSResult captive_directory_new_make(CaptiveDirectoryObject **captive_directory_object_return,
const gchar *pathname,guint perm)
{
+GnomeVFSResult r;
+
g_return_val_if_fail(captive_directory_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
- return captive_directory_new_internal(captive_directory_object_return,pathname,
+ r=captive_directory_new_internal(captive_directory_object_return,pathname,
TRUE, /* create */
perm); /* create_perm; ignored */
+
+ captive_leave();
+ if (r==GNOME_VFS_OK)
+ captive_usecount(+1);
+ return r;
}
g_return_val_if_fail(captive_directory_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(captive_directory_object->dir_Handle!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS); /* already closed */
+ captive_usecount(-1); /* close() errors notwithstanding */
+
dir_Handle=captive_directory_object->dir_Handle;
captive_directory_object->dir_Handle=NULL;
err=NtClose(dir_Handle);
g_return_val_if_fail(NT_SUCCESS(err),GNOME_VFS_ERROR_GENERIC);
+ captive_leave();
return GNOME_VFS_OK;
}
&dir_IoStatusBlock);
g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
+ captive_leave();
return GNOME_VFS_OK;
}
return errvfsresult;
g_return_val_if_fail(NT_SUCCESS(err),GNOME_VFS_ERROR_GENERIC);
+ captive_leave();
return GNOME_VFS_OK;
}