#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;
}
#include "captive/client-directory.h"
#include "reactos/ddk/obfuncs.h" /* for ObReferenceObjectByHandle() */
#include "captive/macros.h"
+#include "captive/leave.h"
+#include "captive/usecount.h"
static gpointer captive_file_object_parent_class=NULL;
GnomeVFSResult captive_file_new_open
(CaptiveFileObject **captive_file_object_return,const gchar *pathname,GnomeVFSOpenMode mode)
{
+GnomeVFSResult r;
+
g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
- return captive_file_new_internal(captive_file_object_return,pathname,mode,
+ r=captive_file_new_internal(captive_file_object_return,pathname,mode,
FALSE, /* create */
FALSE, /* create_exclusive; ignored */
0); /* create_perm; ignored */
+
+ captive_leave();
+ if (r==GNOME_VFS_OK)
+ captive_usecount(+1);
+ return r;
}
GnomeVFSResult captive_file_new_create
(CaptiveFileObject **captive_file_object_return,const gchar *pathname,GnomeVFSOpenMode mode,gboolean exclusive,guint perm)
{
+GnomeVFSResult r;
+
g_return_val_if_fail(captive_file_object_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
- return captive_file_new_internal(captive_file_object_return,pathname,mode,
+ r=captive_file_new_internal(captive_file_object_return,pathname,mode,
TRUE, /* create */
exclusive, /* create_exclusive */
perm); /* create_perm */
+
+ captive_leave();
+ if (r==GNOME_VFS_OK)
+ captive_usecount(+1);
+ return r;
}
g_return_val_if_fail(captive_file_object!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(captive_file_object->file_Handle!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS); /* already closed */
+ captive_usecount(-1); /* close() errors notwithstanding */
+
file_Handle=captive_file_object->file_Handle;
captive_file_object->file_Handle=NULL;
err=NtClose(file_Handle);
g_return_val_if_fail(NT_SUCCESS(err),GNOME_VFS_ERROR_GENERIC);
+ captive_leave();
return GNOME_VFS_OK;
}
captive_file_object->offset+=file_IoStatusBlock.Information;
*bytes_read_return=file_IoStatusBlock.Information;
+ captive_leave();
return GNOME_VFS_OK;
}
captive_file_object->offset+=file_IoStatusBlock.Information;
*bytes_written_return=file_IoStatusBlock.Information;
+ captive_leave();
return GNOME_VFS_OK;
}
g_return_val_if_reached(GNOME_VFS_ERROR_BAD_PARAMETERS);
}
+ captive_leave();
return GNOME_VFS_OK;
}
g_return_val_if_fail(offset_return!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
*offset_return=captive_file_object->offset;
+ 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;
}
errvfsresult=FileStandardInformationStruct_to_GnomeVFSFileInfo(file_info,FileStandardInformationStruct);
g_return_val_if_fail(errvfsresult==GNOME_VFS_OK,errvfsresult);
+ captive_leave();
return GNOME_VFS_OK;
}
/* owner ignored for W32 */
}
+ 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;
}
goto err_free_ObjectAttributes;
g_return_val_if_fail(NT_SUCCESS(err),GNOME_VFS_ERROR_GENERIC);
+ errvfsresult=GNOME_VFS_OK;
+
err_free_ObjectAttributes:
g_free(pathname_new_ObjectAttributes.ObjectName); /* left from captive_file_uri_parent_init() */
+ captive_leave();
return errvfsresult;
}