[MethodImplAttribute (MethodImplOptions.InternalCall)]
get;
}
-
- [MethodImplAttribute (MethodImplOptions.InternalCall)]
- public extern static int GetTempPath(out string path);
}
}
return(TRUE);
}
-guint32 GetTempPath (guint32 len, gunichar2 *buf)
-{
- gchar *tmpdir=g_strdup (g_get_tmp_dir ());
- gunichar2 *tmpdir16=NULL;
- glong dirlen;
- gsize bytes;
- guint32 ret;
-
- if(tmpdir[strlen (tmpdir)]!='/') {
- g_free (tmpdir);
- tmpdir=g_strdup_printf ("%s/", g_get_tmp_dir ());
- }
-
- tmpdir16=mono_unicode_from_external (tmpdir, &bytes);
- if(tmpdir16==NULL) {
- g_free (tmpdir);
- return(0);
- } else {
- dirlen=(bytes/2);
-
- if(dirlen+1>len) {
- DEBUG ("%s: Size %d smaller than needed (%ld)",
- __func__, len, dirlen+1);
-
- ret=dirlen+1;
- } else {
- /* Add the terminator */
- memset (buf, '\0', bytes+2);
- memcpy (buf, tmpdir16, bytes);
-
- ret=dirlen;
- }
- }
-
- if(tmpdir16!=NULL) {
- g_free (tmpdir16);
- }
- g_free (tmpdir);
-
- return(ret);
-}
-
#ifdef HAVE_GETFSSTAT
/* Darwin has getfsstat */
gint32 GetLogicalDriveStrings (guint32 len, gunichar2 *buf)
extern gboolean SetCurrentDirectory (const gunichar2 *path);
extern gboolean CreatePipe (gpointer *readpipe, gpointer *writepipe,
WapiSecurityAttributes *security, guint32 size);
-extern guint32 GetTempPath (guint32 len, gunichar2 *buf);
extern gint32 GetLogicalDriveStrings (guint32 len, gunichar2 *buf);
extern gboolean GetDiskFreeSpaceEx(const gunichar2 *path_name, WapiULargeInteger *free_bytes_avail,
WapiULargeInteger *total_number_of_bytes,
#define GetCurrentDirectory wapi_GetCurrentDirectory
#define SetCurrentDirectory wapi_SetCurrentDirectory
#define CreatePipe wapi_CreatePipe
-#define GetTempPath wapi_GetTempPath
#define GetLogicalDriveStrings wapi_GetLogicalDriveStrings
#define GetDiskFreeSpaceEx wapi_GetDiskFreeSpaceEx
#define GetDriveType wapi_GetDriveType
return chars;
}
-gint32
-ves_icall_System_IO_MonoIO_GetTempPath (MonoString **mono_name)
-{
- gunichar2 *name;
- int ret;
-
- MONO_PREPARE_BLOCKING;
- name=g_new0 (gunichar2, 256);
-
- ret=GetTempPath (256, name);
- if(ret>255) {
- /* Buffer was too short. Try again... */
- g_free (name);
- name=g_new0 (gunichar2, ret+2); /* include the terminator */
- ret=GetTempPath (ret, name);
- }
- MONO_FINISH_BLOCKING;
-
- if(ret>0) {
-#ifdef DEBUG
- g_message ("%s: Temp path is [%s] (len %d)", __func__, name, ret);
-#endif
-
- mono_gc_wbarrier_generic_store ((gpointer) mono_name,
- (MonoObject*) mono_string_new_utf16 (mono_domain_get (), name, ret));
- }
-
- g_free (name);
-
- return(ret);
-}
-
void ves_icall_System_IO_MonoIO_Lock (HANDLE handle, gint64 position,
gint64 length, gint32 *error)
{
extern MonoArray *
ves_icall_System_IO_MonoIO_get_InvalidPathChars (void);
-extern gint32
-ves_icall_System_IO_MonoIO_GetTempPath (MonoString **mono_name);
-
extern void ves_icall_System_IO_MonoIO_Lock (HANDLE handle, gint64 position,
gint64 length, gint32 *error);
extern void ves_icall_System_IO_MonoIO_Unlock (HANDLE handle, gint64 position,
ICALL(MONOIO_11, "GetFileType(intptr,System.IO.MonoIOError&)", ves_icall_System_IO_MonoIO_GetFileType)
ICALL(MONOIO_12, "GetLength(intptr,System.IO.MonoIOError&)", ves_icall_System_IO_MonoIO_GetLength)
#ifndef PLATFORM_RO_FS
-ICALL(MONOIO_13, "GetTempPath(string&)", ves_icall_System_IO_MonoIO_GetTempPath)
ICALL(MONOIO_14, "Lock(intptr,long,long,System.IO.MonoIOError&)", ves_icall_System_IO_MonoIO_Lock)
ICALL(MONOIO_15, "MoveFile(string,string,System.IO.MonoIOError&)", ves_icall_System_IO_MonoIO_MoveFile)
#endif /* !PLATFORM_RO_FS */