Imported Upstream version 3.12.0
Former-commit-id: cf92446697332992ec36726e78eb8703e1f259d7
This commit is contained in:
parent
8b9b85e7f5
commit
181b81b4a4
@ -494,16 +494,12 @@ Directory Roadmap
|
|||||||
|
|
||||||
* `dis/` - CIL executable Disassembler
|
* `dis/` - CIL executable Disassembler
|
||||||
|
|
||||||
* `cli/` - Common code for the JIT and the interpreter.
|
|
||||||
|
|
||||||
* `io-layer/` - The I/O layer and system abstraction for
|
* `io-layer/` - The I/O layer and system abstraction for
|
||||||
emulating the .NET IO model.
|
emulating the .NET IO model.
|
||||||
|
|
||||||
* `cil/` - Common Intermediate Representation, XML
|
* `cil/` - Common Intermediate Representation, XML
|
||||||
definition of the CIL bytecodes.
|
definition of the CIL bytecodes.
|
||||||
|
|
||||||
* `interp/` - Interpreter for CLI executables (obsolete).
|
|
||||||
|
|
||||||
* `arch/` - Architecture specific portions.
|
* `arch/` - Architecture specific portions.
|
||||||
|
|
||||||
* `man/` - Manual pages for the various Mono commands and programs.
|
* `man/` - Manual pages for the various Mono commands and programs.
|
||||||
|
@ -26,7 +26,7 @@ i?86-*-linux*|i?86-apple-darwin*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-li
|
|||||||
|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
|
|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
|
||||||
pic_options='-fPIC'
|
pic_options='-fPIC'
|
||||||
;;
|
;;
|
||||||
?86-pc-cygwin*|i?86-pc-cygwin*)
|
?86-pc-cygwin*|i?86-pc-cygwin*|i?86-pc-mingw32*)
|
||||||
pic_options='-DDLL_EXPORT'
|
pic_options='-DDLL_EXPORT'
|
||||||
;;
|
;;
|
||||||
i?86-apple-darwin*|arm-apple-darwin*)
|
i?86-apple-darwin*|arm-apple-darwin*)
|
||||||
|
@ -335,6 +335,9 @@
|
|||||||
/* Define to 1 if you have the `getresuid' function. */
|
/* Define to 1 if you have the `getresuid' function. */
|
||||||
#undef HAVE_GETRESUID
|
#undef HAVE_GETRESUID
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getrlimit' function. */
|
||||||
|
#undef HAVE_GETRLIMIT
|
||||||
|
|
||||||
/* Define to 1 if you have the `getrusage' function. */
|
/* Define to 1 if you have the `getrusage' function. */
|
||||||
#undef HAVE_GETRUSAGE
|
#undef HAVE_GETRUSAGE
|
||||||
|
|
||||||
@ -761,6 +764,9 @@
|
|||||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||||
#undef HAVE_SYS_POLL_H
|
#undef HAVE_SYS_POLL_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/resource.h> header file. */
|
||||||
|
#undef HAVE_SYS_RESOURCE_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/sdt.h> header file. */
|
/* Define to 1 if you have the <sys/sdt.h> header file. */
|
||||||
#undef HAVE_SYS_SDT_H
|
#undef HAVE_SYS_SDT_H
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
f98bd1e8bf7b203688329a408624ecaaf8192c9a
|
03ca165ce83cc7c3a8c992c897eb02312b51e7b8
|
@ -1 +1 @@
|
|||||||
6792b0c1cb1e40049a4610645db04eb603741561
|
5d9961ae1eab15d979b37b7a90e6507b7a79f51b
|
@ -26,17 +26,8 @@ else
|
|||||||
SGENPCFILE=
|
SGENPCFILE=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if JIT_SUPPORTED
|
|
||||||
if INTERP_SUPPORTED
|
|
||||||
pkgconfig_DATA= mono.pc mono-2.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
|
||||||
system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE)
|
|
||||||
else
|
|
||||||
pkgconfig_DATA= mono.pc mono-2.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
pkgconfig_DATA= mono.pc mono-2.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
||||||
system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE)
|
system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE)
|
||||||
endif
|
|
||||||
else
|
|
||||||
pkgconfig_DATA= mint.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc
|
|
||||||
endif
|
|
||||||
|
|
||||||
DISTCLEANFILES= mono-2.pc mono.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
DISTCLEANFILES= mono-2.pc mono.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
||||||
system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc $(SGENPCFILE) mono-sgen-gdb.py
|
system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc $(SGENPCFILE) mono-sgen-gdb.py
|
||||||
|
@ -447,13 +447,9 @@ EXTRA_DIST = \
|
|||||||
pkgconfigdir = $(libdir)/pkgconfig
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
@SUPPORT_SGEN_FALSE@SGENPCFILE =
|
@SUPPORT_SGEN_FALSE@SGENPCFILE =
|
||||||
@SUPPORT_SGEN_TRUE@SGENPCFILE = monosgen-2.pc
|
@SUPPORT_SGEN_TRUE@SGENPCFILE = monosgen-2.pc
|
||||||
@INTERP_SUPPORTED_FALSE@@JIT_SUPPORTED_TRUE@pkgconfig_DATA = mono.pc mono-2.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
pkgconfig_DATA = mono.pc mono-2.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
||||||
@INTERP_SUPPORTED_FALSE@@JIT_SUPPORTED_TRUE@ system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE)
|
system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE)
|
||||||
|
|
||||||
@INTERP_SUPPORTED_TRUE@@JIT_SUPPORTED_TRUE@pkgconfig_DATA = mono.pc mono-2.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
|
||||||
@INTERP_SUPPORTED_TRUE@@JIT_SUPPORTED_TRUE@ system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE)
|
|
||||||
|
|
||||||
@JIT_SUPPORTED_FALSE@pkgconfig_DATA = mint.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc
|
|
||||||
DISTCLEANFILES = mono-2.pc mono.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
DISTCLEANFILES = mono-2.pc mono.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
|
||||||
system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc $(SGENPCFILE) mono-sgen-gdb.py
|
system.web.extensions.design_1.0.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc $(SGENPCFILE) mono-sgen-gdb.py
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<dllmap dll="i:odbc32.dll" target="libiodbc.dylib" os="osx"/>
|
<dllmap dll="i:odbc32.dll" target="libiodbc.dylib" os="osx"/>
|
||||||
<dllmap dll="oci" target="libclntsh@libsuffix@" os="!windows"/>
|
<dllmap dll="oci" target="libclntsh@libsuffix@" os="!windows"/>
|
||||||
<dllmap dll="db2cli" target="libdb2_36@libsuffix@" os="!windows"/>
|
<dllmap dll="db2cli" target="libdb2_36@libsuffix@" os="!windows"/>
|
||||||
<dllmap dll="MonoPosixHelper" target="@prefix@/lib/libMonoPosixHelper@libsuffix@" os="!windows" />
|
<dllmap dll="MonoPosixHelper" target="@prefix@/@reloc_libdir@/libMonoPosixHelper@libsuffix@" os="!windows" />
|
||||||
<dllmap dll="i:msvcrt" target="@LIBC@" os="!windows"/>
|
<dllmap dll="i:msvcrt" target="@LIBC@" os="!windows"/>
|
||||||
<dllmap dll="i:msvcrt.dll" target="@LIBC@" os="!windows"/>
|
<dllmap dll="i:msvcrt.dll" target="@LIBC@" os="!windows"/>
|
||||||
<dllmap dll="sqlite" target="@SQLITE@" os="!windows"/>
|
<dllmap dll="sqlite" target="@SQLITE@" os="!windows"/>
|
||||||
|
@ -125,7 +125,7 @@ mono_class_from_name_case (MonoImage *image, const char* name_space, const char
|
|||||||
</div>
|
</div>
|
||||||
<p />
|
<p />
|
||||||
<b>Parameters</b>
|
<b>Parameters</b>
|
||||||
<blockquote><dt><i>image:</i></dt><dd> The MonoImage where the type is looked up in</dd><dt><i>name_space:</i></dt><dd> the type namespace</dd><dt><i>name:</i></dt><dd> the type short name.</dd></blockquote>
|
<blockquote><dt><i>image:</i></dt><dd> The MonoImage where the type is looked up in</dd><dt><i>name_space:</i></dt><dd> the type namespace</dd><dt><i>name:</i></dt><dd> the type short name.</dd><dt><i>deprecated:</i></dt><dd> use the _checked variant</dd></blockquote>
|
||||||
<b>Remarks</b>
|
<b>Remarks</b>
|
||||||
<p />
|
<p />
|
||||||
Obtains a MonoClass with a given namespace and a given name which
|
Obtains a MonoClass with a given namespace and a given name which
|
||||||
@ -332,7 +332,7 @@ mono_class_get_full (MonoImage *image, guint32 type_token, MonoGenericContext *c
|
|||||||
</div>
|
</div>
|
||||||
<p />
|
<p />
|
||||||
<b>Parameters</b>
|
<b>Parameters</b>
|
||||||
<blockquote><dt><i>image:</i></dt><dd> the image where the class resides</dd><dt><i>type_token:</i></dt><dd> the token for the class</dd><dt><i>context:</i></dt><dd> the generic context used to evaluate generic instantiations in</dd></blockquote>
|
<blockquote><dt><i>image:</i></dt><dd> the image where the class resides</dd><dt><i>type_token:</i></dt><dd> the token for the class</dd><dt><i>context:</i></dt><dd> the generic context used to evaluate generic instantiations in</dd><dt><i>deprecated:</i></dt><dd> Functions that expose MonoGenericContext are going away in mono 4.0</dd></blockquote>
|
||||||
<b>Returns</b>
|
<b>Returns</b>
|
||||||
<blockquote> the MonoClass that represents <i>type_token</i> in <i>image</i>
|
<blockquote> the MonoClass that represents <i>type_token</i> in <i>image</i>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
@ -26,7 +26,7 @@ i?86-*-linux*|i?86-apple-darwin*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-li
|
|||||||
|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
|
|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
|
||||||
pic_options='-fPIC'
|
pic_options='-fPIC'
|
||||||
;;
|
;;
|
||||||
?86-pc-cygwin*|i?86-pc-cygwin*)
|
?86-pc-cygwin*|i?86-pc-cygwin*|i?86-pc-mingw32*)
|
||||||
pic_options='-DDLL_EXPORT'
|
pic_options='-DDLL_EXPORT'
|
||||||
;;
|
;;
|
||||||
i?86-apple-darwin*|arm-apple-darwin*)
|
i?86-apple-darwin*|arm-apple-darwin*)
|
||||||
|
@ -12,6 +12,9 @@
|
|||||||
/* Define to 1 if you have the `getpwuid_r' function. */
|
/* Define to 1 if you have the `getpwuid_r' function. */
|
||||||
#undef HAVE_GETPWUID_R
|
#undef HAVE_GETPWUID_R
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getrlimit' function. */
|
||||||
|
#undef HAVE_GETRLIMIT
|
||||||
|
|
||||||
/* Define if you have the iconv() function and it works. */
|
/* Define if you have the iconv() function and it works. */
|
||||||
#undef HAVE_ICONV
|
#undef HAVE_ICONV
|
||||||
|
|
||||||
@ -60,6 +63,9 @@
|
|||||||
/* Define to 1 if you have the `strtok_r' function. */
|
/* Define to 1 if you have the `strtok_r' function. */
|
||||||
#undef HAVE_STRTOK_R
|
#undef HAVE_STRTOK_R
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/resource.h> header file. */
|
||||||
|
#undef HAVE_SYS_RESOURCE_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
#undef HAVE_SYS_SELECT_H
|
#undef HAVE_SYS_SELECT_H
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
8efa2ac8877cc4d116d3625738612cdba7e474a4
|
f63e8c4f995b49470fb7c4bd1f34dac0e85ad20c
|
@ -135,6 +135,7 @@ AC_CHECK_SIZEOF(void *)
|
|||||||
AC_CHECK_SIZEOF(long)
|
AC_CHECK_SIZEOF(long)
|
||||||
AC_CHECK_SIZEOF(long long)
|
AC_CHECK_SIZEOF(long long)
|
||||||
AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
|
AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
|
||||||
|
AC_CHECK_FUNCS(getrlimit)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
|
# Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
|
||||||
@ -179,7 +180,7 @@ if test "x$have_iso_varargs" = "xyes"; then
|
|||||||
fi
|
fi
|
||||||
AC_SUBST(G_HAVE_ISO_VARARGS)
|
AC_SUBST(G_HAVE_ISO_VARARGS)
|
||||||
|
|
||||||
AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h langinfo.h iconv.h localcharset.h sys/types.h)
|
AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h langinfo.h iconv.h localcharset.h sys/types.h sys/resource.h)
|
||||||
AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
|
AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
|
||||||
AC_SUBST(HAVE_ALLOCA_H)
|
AC_SUBST(HAVE_ALLOCA_H)
|
||||||
|
|
||||||
|
@ -176,7 +176,6 @@ typedef struct _GMemChunk GMemChunk;
|
|||||||
/*
|
/*
|
||||||
* Misc.
|
* Misc.
|
||||||
*/
|
*/
|
||||||
#define g_atexit(func) ((void) atexit (func))
|
|
||||||
|
|
||||||
const gchar * g_getenv(const gchar *variable);
|
const gchar * g_getenv(const gchar *variable);
|
||||||
gboolean g_setenv(const gchar *variable, const gchar *value, gboolean overwrite);
|
gboolean g_setenv(const gchar *variable, const gchar *value, gboolean overwrite);
|
||||||
|
@ -176,7 +176,7 @@ default_stderr_handler (const gchar *message)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#elif MONOTOUCH
|
#elif defined(HOST_IOS)
|
||||||
#include <asl.h>
|
#include <asl.h>
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -53,6 +53,10 @@
|
|||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_RESOURCE_H
|
||||||
|
# include <sys/resource.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
@ -213,6 +217,23 @@ write_all (int fd, const void *vbuf, size_t n)
|
|||||||
return nwritten;
|
return nwritten;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef G_OS_WIN32
|
||||||
|
static int
|
||||||
|
g_getdtablesize (void)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_GETRLIMIT
|
||||||
|
struct rlimit limit;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
res = getrlimit (RLIMIT_NOFILE, &limit);
|
||||||
|
g_assert (res == 0);
|
||||||
|
return limit.rlim_cur;
|
||||||
|
#else
|
||||||
|
return getdtablesize ();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
g_spawn_command_line_sync (const gchar *command_line,
|
g_spawn_command_line_sync (const gchar *command_line,
|
||||||
gchar **standard_output,
|
gchar **standard_output,
|
||||||
@ -256,7 +277,7 @@ g_spawn_command_line_sync (const gchar *command_line,
|
|||||||
close (stderr_pipe [0]);
|
close (stderr_pipe [0]);
|
||||||
dup2 (stderr_pipe [1], STDERR_FILENO);
|
dup2 (stderr_pipe [1], STDERR_FILENO);
|
||||||
}
|
}
|
||||||
for (i = getdtablesize () - 1; i >= 3; i--)
|
for (i = g_getdtablesize () - 1; i >= 3; i--)
|
||||||
close (i);
|
close (i);
|
||||||
|
|
||||||
/* G_SPAWN_SEARCH_PATH is always enabled for g_spawn_command_line_sync */
|
/* G_SPAWN_SEARCH_PATH is always enabled for g_spawn_command_line_sync */
|
||||||
@ -417,7 +438,7 @@ g_spawn_async_with_pipes (const gchar *working_directory,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & G_SPAWN_LEAVE_DESCRIPTORS_OPEN) != 0) {
|
if ((flags & G_SPAWN_LEAVE_DESCRIPTORS_OPEN) != 0) {
|
||||||
for (i = getdtablesize () - 1; i >= 3; i--)
|
for (i = g_getdtablesize () - 1; i >= 3; i--)
|
||||||
close (i);
|
close (i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
/* config.h. Generated by configure. */
|
/* config.h. Generated by configure. */
|
||||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#include "cygconfig.h"
|
||||||
|
#else
|
||||||
|
|
||||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
#define HAVE_DLFCN_H 1
|
#define HAVE_DLFCN_H 1
|
||||||
|
|
||||||
@ -74,3 +78,4 @@
|
|||||||
#define VERSION "0.1"
|
#define VERSION "0.1"
|
||||||
|
|
||||||
#define HAVE_STRTOK_R 1
|
#define HAVE_STRTOK_R 1
|
||||||
|
#endif
|
||||||
|
@ -26,7 +26,7 @@ i?86-*-linux*|i?86-apple-darwin*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-li
|
|||||||
|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
|
|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*|x86_64-apple-darwin*|aarch64*)
|
||||||
pic_options='-fPIC'
|
pic_options='-fPIC'
|
||||||
;;
|
;;
|
||||||
?86-pc-cygwin*|i?86-pc-cygwin*)
|
?86-pc-cygwin*|i?86-pc-cygwin*|i?86-pc-mingw32*)
|
||||||
pic_options='-DDLL_EXPORT'
|
pic_options='-DDLL_EXPORT'
|
||||||
;;
|
;;
|
||||||
i?86-apple-darwin*|arm-apple-darwin*)
|
i?86-apple-darwin*|arm-apple-darwin*)
|
||||||
|
@ -1 +1 @@
|
|||||||
8f066765940517df1ea0554208196aab32b6b19b
|
2f526024d2da61894c7ed648a1207722cbb90688
|
22
man/mono.1
22
man/mono.1
@ -1075,19 +1075,10 @@ first generation (of two). A larger nursery will usually speed up the
|
|||||||
program but will obviously use more memory. The default nursery size
|
program but will obviously use more memory. The default nursery size
|
||||||
4 MB.
|
4 MB.
|
||||||
.TP
|
.TP
|
||||||
\fBmajor=\fIcollector\fR
|
\fBmajor=\fIcollector\fR Specifies which major collector to use.
|
||||||
Specifies which major collector to use. Options are `marksweep' for
|
Options are `marksweep' for the Mark&Sweep collector, and
|
||||||
the Mark&Sweep collector, `marksweep-conc' for concurrent Mark&Sweep,
|
`marksweep-conc' for concurrent Mark&Sweep. The non-concurrent
|
||||||
`marksweep-par' for parallel Mark&Sweep, `marksweep-fixed' for
|
Mark&Sweep collector is the default.
|
||||||
Mark&Sweep with a fixed heap, and `marksweep-fixed-par' for parallel
|
|
||||||
Mark&Sweep with a fixed heap. The Mark&Sweep collector is the default.
|
|
||||||
.TP
|
|
||||||
\fBmajor-heap-size=\fIsize\fR
|
|
||||||
Sets the size of the major heap (not including the large object space)
|
|
||||||
for the fixed-heap Mark&Sweep collector (i.e. `marksweep-fixed' and
|
|
||||||
`marksweep-fixed-par'). The size is in bytes, with optional suffixes
|
|
||||||
`k', `m' and `g' to specify kilo-, mega- and gigabytes, respectively.
|
|
||||||
The default is 512 megabytes.
|
|
||||||
.TP
|
.TP
|
||||||
\fBsoft-heap-limit=\fIsize\fR
|
\fBsoft-heap-limit=\fIsize\fR
|
||||||
Once the heap size gets larger than this size, ignore what the default
|
Once the heap size gets larger than this size, ignore what the default
|
||||||
@ -1266,6 +1257,11 @@ work, Mono needs to be compiled with the BINARY_PROTOCOL define on
|
|||||||
sgen-gc.c. You can then use this command to explore the output
|
sgen-gc.c. You can then use this command to explore the output
|
||||||
.nf
|
.nf
|
||||||
sgen-grep-binprot 0x1234 0x5678 < file
|
sgen-grep-binprot 0x1234 0x5678 < file
|
||||||
|
.TP
|
||||||
|
\fBnursery-canaries\fR
|
||||||
|
If set, objects allocated in the nursery are suffixed with a canary (guard)
|
||||||
|
word, which is checked on each minor collection. Can be used to detect/debug
|
||||||
|
heap corruption issues.
|
||||||
.fi
|
.fi
|
||||||
.ne
|
.ne
|
||||||
.RE
|
.RE
|
||||||
|
@ -12,6 +12,7 @@ monotouch_SUBDIRS := build class
|
|||||||
monotouch_runtime_SUBDIRS := build class
|
monotouch_runtime_SUBDIRS := build class
|
||||||
xammac_SUBDIRS := build class
|
xammac_SUBDIRS := build class
|
||||||
mobile_SUBDIRS := build class
|
mobile_SUBDIRS := build class
|
||||||
|
mobile_static_SUBDIRS := build class
|
||||||
net_3_5_SUBDIRS := build class tools/xbuild
|
net_3_5_SUBDIRS := build class tools/xbuild
|
||||||
net_4_0_SUBDIRS := build class
|
net_4_0_SUBDIRS := build class
|
||||||
net_4_5_SUBDIRS := build mcs class nunit24 ilasm tools tests errors docs
|
net_4_5_SUBDIRS := build mcs class nunit24 ilasm tools tests errors docs
|
||||||
@ -114,6 +115,7 @@ $(_boot_:%=profile-do--monotouch--%): profile-do--monotouch--%:
|
|||||||
$(_boot_:%=profile-do--monotouch_runtime--%): profile-do--monotouch_runtime--%: profile-do--build--%
|
$(_boot_:%=profile-do--monotouch_runtime--%): profile-do--monotouch_runtime--%: profile-do--build--%
|
||||||
$(_boot_:%=profile-do--xammac--%): profile-do--xammac--%: profile-do--build--%
|
$(_boot_:%=profile-do--xammac--%): profile-do--xammac--%: profile-do--build--%
|
||||||
$(_boot_:%=profile-do--mobile--%): profile-do--mobile--%: profile-do--build--%
|
$(_boot_:%=profile-do--mobile--%): profile-do--mobile--%: profile-do--build--%
|
||||||
|
$(_boot_:%=profile-do--mobile_static--%): profile-do--mobile_static--%: profile-do--build--%
|
||||||
$(_boot_:%=profile-do--net_2_0--%): profile-do--net_2_0--%: profile-do--build--%
|
$(_boot_:%=profile-do--net_2_0--%): profile-do--net_2_0--%: profile-do--build--%
|
||||||
$(_boot_:%=profile-do--build--%): profile-do--build--%: profile-do--basic--%
|
$(_boot_:%=profile-do--build--%): profile-do--build--%: profile-do--basic--%
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ static class Consts
|
|||||||
// Use these assembly version constants to make code more maintainable.
|
// Use these assembly version constants to make code more maintainable.
|
||||||
//
|
//
|
||||||
|
|
||||||
public const string MonoVersion = "3.10.0.0";
|
public const string MonoVersion = "3.12.0.0";
|
||||||
public const string MonoCompany = "Mono development team";
|
public const string MonoCompany = "Mono development team";
|
||||||
public const string MonoProduct = "Mono Common Language Infrastructure";
|
public const string MonoProduct = "Mono Common Language Infrastructure";
|
||||||
public const string MonoCopyright = "(c) Various Mono authors";
|
public const string MonoCopyright = "(c) Various Mono authors";
|
||||||
|
@ -107,7 +107,7 @@ namespace Commons.Xml.Relaxng.Rnc
|
|||||||
|
|
||||||
public RelaxngPattern Parse (TextReader source, string baseUri, string defaultNamespace)
|
public RelaxngPattern Parse (TextReader source, string baseUri, string defaultNamespace)
|
||||||
{
|
{
|
||||||
this.defaultNamespace = defaultNamespace;
|
this.defaultNamespace = defaultNamespace ?? string.Empty;
|
||||||
if (defaultNamespace != null && defaultNamespace.Length != 0)
|
if (defaultNamespace != null && defaultNamespace.Length != 0)
|
||||||
nsmgr.AddNamespace (String.Empty, defaultNamespace);
|
nsmgr.AddNamespace (String.Empty, defaultNamespace);
|
||||||
try {
|
try {
|
||||||
|
@ -13,7 +13,7 @@ using System.Xml;
|
|||||||
using Commons.Xml.Nvdl;
|
using Commons.Xml.Nvdl;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace MonoTests.Commons.Xml.Nvdl
|
namespace MonoTests.Commons.Xml.Relaxng
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class NvdlValidatingReaderTests
|
public class NvdlValidatingReaderTests
|
||||||
|
@ -95,5 +95,19 @@ start = mine";
|
|||||||
r.Close ();
|
r.Close ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void SimpleDefaultNamespace ()
|
||||||
|
{
|
||||||
|
var g = RncParser.ParseRnc (new StringReader ("element e { empty }"));
|
||||||
|
var x = XmlReader.Create (new StringReader ("<e/>"));
|
||||||
|
var r = new RelaxngValidatingReader (x, g);
|
||||||
|
try {
|
||||||
|
while (!r.EOF)
|
||||||
|
r.Read ();
|
||||||
|
} finally {
|
||||||
|
r.Close ();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.COMException))]
|
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.COMException))]
|
||||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComMemberType))]
|
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComMemberType))]
|
||||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComSourceInterfacesAttribute))]
|
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComSourceInterfacesAttribute))]
|
||||||
|
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComInterfaceType))]
|
||||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComTypes.IStream))]
|
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComTypes.IStream))]
|
||||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComTypes.STATSTG))]
|
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComTypes.STATSTG))]
|
||||||
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.CriticalHandle))]
|
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.CriticalHandle))]
|
||||||
|
@ -106,7 +106,7 @@ net_2_0_only_dirs := \
|
|||||||
|
|
||||||
pcl_facade_dirs := Facades
|
pcl_facade_dirs := Facades
|
||||||
|
|
||||||
mobile_dirs := \
|
mobile_common_dirs := \
|
||||||
corlib \
|
corlib \
|
||||||
System \
|
System \
|
||||||
System.Core \
|
System.Core \
|
||||||
@ -134,19 +134,27 @@ mobile_dirs := \
|
|||||||
System.Net \
|
System.Net \
|
||||||
System.Windows \
|
System.Windows \
|
||||||
System.Xml.Serialization \
|
System.Xml.Serialization \
|
||||||
$(pcl_facade_dirs)
|
|
||||||
|
|
||||||
monodroid_dirs := \
|
|
||||||
Mono.CompilerServices.SymbolWriter \
|
|
||||||
Mono.CSharp \
|
Mono.CSharp \
|
||||||
Microsoft.CSharp \
|
Microsoft.CSharp \
|
||||||
|
$(pcl_facade_dirs)
|
||||||
|
|
||||||
|
mobile_static_dirs := \
|
||||||
|
$(mobile_common_dirs) \
|
||||||
|
Mono.Dynamic.Interpreter
|
||||||
|
|
||||||
|
mobile_dynamic_dirs := \
|
||||||
|
$(mobile_common_dirs) \
|
||||||
|
Mono.CompilerServices.SymbolWriter \
|
||||||
System.Net.Http
|
System.Net.Http
|
||||||
|
|
||||||
xammac_dirs := \
|
xammac_dirs := \
|
||||||
Mono.CompilerServices.SymbolWriter \
|
$(mobile_dynamic_dirs)
|
||||||
Mono.CSharp \
|
|
||||||
Microsoft.CSharp \
|
monodroid_dirs := \
|
||||||
System.Net.Http
|
$(mobile_dynamic_dirs)
|
||||||
|
|
||||||
|
monotouch_dirs := \
|
||||||
|
$(mobile_static_dirs)
|
||||||
|
|
||||||
monotouch_runtime_dirs := \
|
monotouch_runtime_dirs := \
|
||||||
corlib \
|
corlib \
|
||||||
@ -155,11 +163,6 @@ monotouch_runtime_dirs := \
|
|||||||
System.XML \
|
System.XML \
|
||||||
Mono.CSharp
|
Mono.CSharp
|
||||||
|
|
||||||
monotouch_dirs := \
|
|
||||||
Mono.CSharp \
|
|
||||||
Microsoft.CSharp \
|
|
||||||
Mono.Dynamic.Interpreter
|
|
||||||
|
|
||||||
net_4_0_dirs := \
|
net_4_0_dirs := \
|
||||||
System.Numerics \
|
System.Numerics \
|
||||||
Microsoft.CSharp \
|
Microsoft.CSharp \
|
||||||
@ -229,12 +232,12 @@ xbuild_4_0_dirs := \
|
|||||||
Microsoft.Build
|
Microsoft.Build
|
||||||
|
|
||||||
net_2_0_SUBDIRS := $(net_2_0_dirs) $(net_2_0_only_dirs) $(xbuild_2_0_dirs) aot-compiler
|
net_2_0_SUBDIRS := $(net_2_0_dirs) $(net_2_0_only_dirs) $(xbuild_2_0_dirs) aot-compiler
|
||||||
monodroid_SUBDIRS := $(mobile_dirs) $(monodroid_dirs)
|
monodroid_SUBDIRS := $(monodroid_dirs)
|
||||||
monotouch_SUBDIRS := $(mobile_dirs) $(monotouch_dirs)
|
monotouch_SUBDIRS := $(monotouch_dirs)
|
||||||
monotouch_runtime_SUBDIRS := $(monotouch_runtime_dirs)
|
monotouch_runtime_SUBDIRS := $(monotouch_runtime_dirs)
|
||||||
mobile_static_SUBDIRS := $(mobile_dirs)
|
mobile_static_SUBDIRS := $(mobile_static_dirs)
|
||||||
mobile_SUBDIRS := $(mobile_dirs)
|
mobile_SUBDIRS := $(mobile_dynamic_dirs)
|
||||||
xammac_SUBDIRS := $(mobile_dirs) $(xammac_dirs)
|
xammac_SUBDIRS := $(xammac_dirs)
|
||||||
net_3_5_SUBDIRS := $(xbuild_2_0_dirs)
|
net_3_5_SUBDIRS := $(xbuild_2_0_dirs)
|
||||||
net_4_0_SUBDIRS := $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(xbuild_4_0_dirs)
|
net_4_0_SUBDIRS := $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(xbuild_4_0_dirs)
|
||||||
net_4_5_SUBDIRS := $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler
|
net_4_5_SUBDIRS := $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler
|
||||||
@ -242,7 +245,7 @@ xbuild_12_SUBDIRS := $(xbuild_4_0_dirs)
|
|||||||
|
|
||||||
include ../build/rules.make
|
include ../build/rules.make
|
||||||
|
|
||||||
SUBDIRS = $(net_2_0_dirs) $(net_2_0_only_dirs) $(mobile_dirs) $(monotouch_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(net_4_5_dirs)
|
SUBDIRS = $(net_2_0_dirs) $(net_2_0_only_dirs) $(mobile_static_dirs) $(mobile_dynamic_dirs) $(monotouch_dirs) $(monodroid_dirs) $(xammac_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(net_4_5_dirs)
|
||||||
|
|
||||||
DIST_ONLY_SUBDIRS = dlr aot-compiler $(xbuild_4_0_dirs)
|
DIST_ONLY_SUBDIRS = dlr aot-compiler $(xbuild_4_0_dirs)
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ namespace System.Windows.Forms {
|
|||||||
Rectangle text_rectangle;
|
Rectangle text_rectangle;
|
||||||
Rectangle image_rectangle;
|
Rectangle image_rectangle;
|
||||||
|
|
||||||
ThemeEngine.Current.CalculateButtonTextAndImageLayout (this, out text_rectangle, out image_rectangle);
|
ThemeEngine.Current.CalculateButtonTextAndImageLayout (pevent.Graphics, this, out text_rectangle, out image_rectangle);
|
||||||
|
|
||||||
// Draw our button
|
// Draw our button
|
||||||
if (this.FlatStyle == FlatStyle.Standard)
|
if (this.FlatStyle == FlatStyle.Standard)
|
||||||
|
@ -1 +1 @@
|
|||||||
f7075e8ef8f7cfbc0c67a85dbedc54b114523b38
|
3af4684710ade1ef9420d2e56c7319fc0e32c4cd
|
@ -259,10 +259,18 @@ namespace System.Windows.Forms
|
|||||||
|
|
||||||
Size retval;
|
Size retval;
|
||||||
|
|
||||||
|
int proposedWidth;
|
||||||
|
if (proposedSize.Width == 0)
|
||||||
|
proposedWidth = Int32.MaxValue;
|
||||||
|
else {
|
||||||
|
proposedWidth = proposedSize.Width;
|
||||||
|
if ((flags & TextFormatFlags.NoPadding) == 0)
|
||||||
|
proposedWidth -= 9;
|
||||||
|
}
|
||||||
if (dc is Graphics)
|
if (dc is Graphics)
|
||||||
retval = (dc as Graphics).MeasureString (text, font, proposedSize.Width == 0 ? Int32.MaxValue : proposedSize.Width, sf).ToSize ();
|
retval = (dc as Graphics).MeasureString (text, font, proposedWidth, sf).ToSize ();
|
||||||
else
|
else
|
||||||
retval = TextRenderer.MeasureString (text, font, proposedSize.Width == 0 ? Int32.MaxValue : proposedSize.Width, sf).ToSize ();
|
retval = TextRenderer.MeasureString (text, font, proposedWidth, sf).ToSize ();
|
||||||
|
|
||||||
if (retval.Width > 0 && (flags & TextFormatFlags.NoPadding) == 0)
|
if (retval.Width > 0 && (flags & TextFormatFlags.NoPadding) == 0)
|
||||||
retval.Width += 9;
|
retval.Width += 9;
|
||||||
|
@ -698,7 +698,7 @@ namespace System.Windows.Forms
|
|||||||
|
|
||||||
#region Button
|
#region Button
|
||||||
public abstract Size CalculateButtonAutoSize (Button button);
|
public abstract Size CalculateButtonAutoSize (Button button);
|
||||||
public abstract void CalculateButtonTextAndImageLayout (ButtonBase b, out Rectangle textRectangle, out Rectangle imageRectangle);
|
public abstract void CalculateButtonTextAndImageLayout (Graphics g, ButtonBase b, out Rectangle textRectangle, out Rectangle imageRectangle);
|
||||||
public abstract void DrawButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
|
public abstract void DrawButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
|
||||||
public abstract void DrawFlatButton (Graphics g, ButtonBase b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
|
public abstract void DrawFlatButton (Graphics g, ButtonBase b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
|
||||||
public abstract void DrawPopupButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
|
public abstract void DrawPopupButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
|
||||||
|
@ -1 +1 @@
|
|||||||
522dec40ec616af384bc431f1c9406aabdaec3fb
|
29921942b4eddbcd9cdbc0b9c29b4e12a60804a8
|
@ -1 +1 @@
|
|||||||
1f3af25846450af900f33b95ed551929392ee807
|
657a42457c9f222751c977278db272df8f1f1caf
|
@ -1018,13 +1018,27 @@ namespace Microsoft.Build.BuildEngine
|
|||||||
if (!StartHandlerHasExecuted)
|
if (!StartHandlerHasExecuted)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (EventArgs is ProjectStartedEventArgs)
|
if (EventArgs is ProjectStartedEventArgs) {
|
||||||
ConsoleLogger.ProjectFinishedHandler (Sender, finished_args as ProjectFinishedEventArgs);
|
var pfa = finished_args as ProjectFinishedEventArgs;
|
||||||
else if (EventArgs is TargetStartedEventArgs)
|
// FIXME: BuildFinishedHandlerActual sends us BuildFinishedEventArgs via PopEvent
|
||||||
ConsoleLogger.TargetFinishedHandler (Sender, finished_args as TargetFinishedEventArgs);
|
if (pfa == null)
|
||||||
else if (EventArgs is TaskStartedEventArgs)
|
return;
|
||||||
ConsoleLogger.TaskFinishedHandler (Sender, finished_args as TaskFinishedEventArgs);
|
|
||||||
else if (!(EventArgs is BuildStartedEventArgs))
|
ConsoleLogger.ProjectFinishedHandler (Sender, pfa);
|
||||||
|
} else if (EventArgs is TargetStartedEventArgs) {
|
||||||
|
var fa = finished_args as TargetFinishedEventArgs;
|
||||||
|
// FIXME: BuildFinishedHandlerActual sends us BuildFinishedEventArgs via PopEvent
|
||||||
|
if (fa == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ConsoleLogger.TargetFinishedHandler (Sender, fa);
|
||||||
|
} else if (EventArgs is TaskStartedEventArgs) {
|
||||||
|
// FIXME: BuildFinishedHandlerActual sends us BuildFinishedEventArgs via PopEvent
|
||||||
|
if (!(finished_args is TaskFinishedEventArgs))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ConsoleLogger.TaskFinishedHandler (Sender, (TaskFinishedEventArgs) finished_args);
|
||||||
|
} else if (!(EventArgs is BuildStartedEventArgs))
|
||||||
throw new InvalidOperationException ("Unexpected event on the stack, type: " + EventArgs.GetType ());
|
throw new InvalidOperationException ("Unexpected event on the stack, type: " + EventArgs.GetType ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
//
|
//
|
||||||
// ToolTask.cs: Base class for command line tool tasks.
|
// ToolTask.cs: Base class for command line tool tasks.
|
||||||
//
|
//
|
||||||
// Author:
|
// Authors:
|
||||||
// Marek Sieradzki (marek.sieradzki@gmail.com)
|
// Marek Sieradzki (marek.sieradzki@gmail.com)
|
||||||
// Ankit Jain (jankit@novell.com)
|
// Ankit Jain (jankit@novell.com)
|
||||||
|
// Marek Safar (marek.safar@gmail.com)
|
||||||
//
|
//
|
||||||
// (C) 2005 Marek Sieradzki
|
// (C) 2005 Marek Sieradzki
|
||||||
// Copyright 2009 Novell, Inc (http://www.novell.com)
|
// Copyright 2009 Novell, Inc (http://www.novell.com)
|
||||||
|
// Copyright 2014 Xamarin Inc
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
@ -90,12 +92,45 @@ namespace Microsoft.Build.Utilities
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string CreateToolPath ()
|
||||||
|
{
|
||||||
|
string tp;
|
||||||
|
if (string.IsNullOrEmpty (ToolPath)) {
|
||||||
|
tp = GenerateFullPathToTool ();
|
||||||
|
if (string.IsNullOrEmpty (tp))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
//
|
||||||
|
// GenerateFullPathToTool can return path including tool name
|
||||||
|
//
|
||||||
|
if (string.IsNullOrEmpty (ToolExe))
|
||||||
|
return tp;
|
||||||
|
|
||||||
|
tp = Path.GetDirectoryName (tp);
|
||||||
|
} else {
|
||||||
|
tp = ToolPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
var path = Path.Combine (tp, ToolExe);
|
||||||
|
if (!File.Exists (path)) {
|
||||||
|
if (Log != null)
|
||||||
|
Log.LogError ("Tool executable '{0}' could not be found", path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
public override bool Execute ()
|
public override bool Execute ()
|
||||||
{
|
{
|
||||||
if (SkipTaskExecution ())
|
if (SkipTaskExecution ())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
exitCode = ExecuteTool (GenerateFullPathToTool (), GenerateResponseFileCommands (),
|
var tool_path = CreateToolPath ();
|
||||||
|
if (tool_path == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
exitCode = ExecuteTool (tool_path, GenerateResponseFileCommands (),
|
||||||
GenerateCommandLineCommands ());
|
GenerateCommandLineCommands ());
|
||||||
|
|
||||||
// HandleTaskExecutionErrors is called only if exitCode != 0
|
// HandleTaskExecutionErrors is called only if exitCode != 0
|
||||||
@ -289,14 +324,14 @@ namespace Microsoft.Build.Utilities
|
|||||||
|
|
||||||
protected virtual string GenerateCommandLineCommands ()
|
protected virtual string GenerateCommandLineCommands ()
|
||||||
{
|
{
|
||||||
return null;
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract string GenerateFullPathToTool ();
|
protected abstract string GenerateFullPathToTool ();
|
||||||
|
|
||||||
protected virtual string GenerateResponseFileCommands ()
|
protected virtual string GenerateResponseFileCommands ()
|
||||||
{
|
{
|
||||||
return null;
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string GetResponseFileSwitch (string responseFilePath)
|
protected virtual string GetResponseFileSwitch (string responseFilePath)
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -424,6 +425,53 @@ namespace MonoTests.Microsoft.Build.Utilities {
|
|||||||
Assert.AreEqual (a.ToolPath, "Bar", "#5");
|
Assert.AreEqual (a.ToolPath, "Bar", "#5");
|
||||||
a.ToolPath = "";
|
a.ToolPath = "";
|
||||||
Assert.AreEqual (a.ToolPath, "", "#6");
|
Assert.AreEqual (a.ToolPath, "", "#6");
|
||||||
|
|
||||||
|
a.Execute ();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Execute_1 ()
|
||||||
|
{
|
||||||
|
var t = new TestExecuteToolTask ();
|
||||||
|
t.OnExecuteTool = delegate { Assert.Fail ("#1"); };
|
||||||
|
t.BuildEngine = new MockBuildEngine ();
|
||||||
|
Assert.IsFalse (t.Execute (), "result");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Execute_2 ()
|
||||||
|
{
|
||||||
|
var t = new TestExecuteToolTask ();
|
||||||
|
t.BuildEngine = new MockBuildEngine ();
|
||||||
|
t.ToolPath = Directory.GetCurrentDirectory ();
|
||||||
|
t.ToolExe = "Makefile";
|
||||||
|
|
||||||
|
t.OnExecuteTool = (pathToTool, responseFileCommands, commandLineCommands) => {
|
||||||
|
Assert.AreEqual (Path.Combine (Directory.GetCurrentDirectory (), "Makefile"), pathToTool, "#1");
|
||||||
|
Assert.AreEqual ("", responseFileCommands, "#2");
|
||||||
|
Assert.AreEqual ("", commandLineCommands, "#3");
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Assert.IsTrue (t.Execute (), "result");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Execute_3 ()
|
||||||
|
{
|
||||||
|
var t = new TestExecuteToolTask ();
|
||||||
|
t.FullPathToTool = "fpt";
|
||||||
|
t.BuildEngine = new MockBuildEngine ();
|
||||||
|
t.ToolExe = "Makefile.mk";
|
||||||
|
|
||||||
|
t.OnExecuteTool = (pathToTool, responseFileCommands, commandLineCommands) => {
|
||||||
|
Assert.AreEqual ("Makefile.mk", pathToTool, "#1");
|
||||||
|
Assert.AreEqual ("", responseFileCommands, "#2");
|
||||||
|
Assert.AreEqual ("", commandLineCommands, "#3");
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Assert.IsFalse (t.Execute (), "result");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -549,8 +597,85 @@ namespace MonoTests.Microsoft.Build.Utilities {
|
|||||||
|
|
||||||
protected override string GenerateFullPathToTool ()
|
protected override string GenerateFullPathToTool ()
|
||||||
{
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MockBuildEngine : IBuildEngine
|
||||||
|
{
|
||||||
|
public int ColumnNumberOfTaskNode {
|
||||||
|
get {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ContinueOnError {
|
||||||
|
get {
|
||||||
throw new NotImplementedException ();
|
throw new NotImplementedException ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int LineNumberOfTaskNode {
|
||||||
|
get {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ProjectFileOfTaskNode {
|
||||||
|
get {
|
||||||
|
return "ProjectFileOfTaskNode";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool BuildProjectFile (string projectFileName, string[] targetNames, IDictionary globalProperties, IDictionary targetOutputs)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException ();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LogCustomEvent (CustomBuildEventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LogErrorEvent (BuildErrorEventArgs e)
|
||||||
|
{
|
||||||
|
Console.WriteLine (e.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LogMessageEvent (BuildMessageEventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LogWarningEvent (BuildWarningEventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestExecuteToolTask : ToolTask
|
||||||
|
{
|
||||||
|
public Action<string, string, string> OnExecuteTool;
|
||||||
|
public string FullPathToTool;
|
||||||
|
|
||||||
|
protected override string ToolName {
|
||||||
|
get { return "TestTool.exe"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool CallHostObjectToExecute ()
|
||||||
|
{
|
||||||
|
return base.CallHostObjectToExecute ();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string GenerateFullPathToTool ()
|
||||||
|
{
|
||||||
|
return FullPathToTool;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override int ExecuteTool (string pathToTool, string responseFileCommands, string commandLineCommands)
|
||||||
|
{
|
||||||
|
if (OnExecuteTool != null)
|
||||||
|
OnExecuteTool (pathToTool, responseFileCommands, commandLineCommands);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,9 @@ LIBRARY = Mono.CSharp.dll
|
|||||||
|
|
||||||
LIB_MCS_FLAGS = -r:System.Core.dll -r:System.Xml.dll -r:System.dll
|
LIB_MCS_FLAGS = -r:System.Core.dll -r:System.Xml.dll -r:System.dll
|
||||||
|
|
||||||
ifeq (monotouch, $(PROFILE))
|
MOBILE_STATIC := $(filter mobile_static monotouch, $(PROFILE))
|
||||||
|
|
||||||
|
ifdef MOBILE_STATIC
|
||||||
LIB_MCS_FLAGS += -d:IOS_REFLECTION
|
LIB_MCS_FLAGS += -d:IOS_REFLECTION
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
13
mcs/class/Mono.CSharp/mobile_static_Mono.CSharp.dll.sources
Normal file
13
mcs/class/Mono.CSharp/mobile_static_Mono.CSharp.dll.sources
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include Mono.CSharp.dll.sources
|
||||||
|
../corlib/System.Reflection.Emit/AssemblyBuilderAccess.cs
|
||||||
|
../corlib/System.Reflection.Emit/FlowControl.cs
|
||||||
|
../corlib/System.Reflection.Emit/OpCode.cs
|
||||||
|
../corlib/System.Reflection.Emit/OpCodeNames.cs
|
||||||
|
../corlib/System.Reflection.Emit/OpCodes.cs
|
||||||
|
../corlib/System.Reflection.Emit/OpCodeType.cs
|
||||||
|
../corlib/System.Reflection.Emit/OperandType.cs
|
||||||
|
../corlib/System.Reflection.Emit/PEFileKinds.cs
|
||||||
|
../corlib/System.Reflection.Emit/Label.cs
|
||||||
|
../corlib/System.Reflection.Emit/MethodToken.cs
|
||||||
|
../corlib/System.Reflection.Emit/StackBehaviour.cs
|
||||||
|
monotouch.cs
|
@ -1,13 +1,2 @@
|
|||||||
#include Mono.CSharp.dll.sources
|
#include mobile_static_Mono.CSharp.dll.sources
|
||||||
../corlib/System.Reflection.Emit/AssemblyBuilderAccess.cs
|
|
||||||
../corlib/System.Reflection.Emit/FlowControl.cs
|
|
||||||
../corlib/System.Reflection.Emit/OpCode.cs
|
|
||||||
../corlib/System.Reflection.Emit/OpCodeNames.cs
|
|
||||||
../corlib/System.Reflection.Emit/OpCodes.cs
|
|
||||||
../corlib/System.Reflection.Emit/OpCodeType.cs
|
|
||||||
../corlib/System.Reflection.Emit/OperandType.cs
|
|
||||||
../corlib/System.Reflection.Emit/PEFileKinds.cs
|
|
||||||
../corlib/System.Reflection.Emit/Label.cs
|
|
||||||
../corlib/System.Reflection.Emit/MethodToken.cs
|
|
||||||
../corlib/System.Reflection.Emit/StackBehaviour.cs
|
|
||||||
monotouch.cs
|
monotouch.cs
|
@ -41,7 +41,9 @@ using System.ComponentModel;
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Mono.Data.Tds.Protocol
|
namespace Mono.Data.Tds.Protocol
|
||||||
{
|
{
|
||||||
@ -1468,7 +1470,7 @@ namespace Mono.Data.Tds.Protocol
|
|||||||
t3.Domain = this.connectionParms.DefaultDomain;
|
t3.Domain = this.connectionParms.DefaultDomain;
|
||||||
t3.Host = this.connectionParms.Hostname;
|
t3.Host = this.connectionParms.Hostname;
|
||||||
t3.Username = this.connectionParms.User;
|
t3.Username = this.connectionParms.User;
|
||||||
t3.Password = this.connectionParms.Password;
|
t3.Password = GetPlainPassword(this.connectionParms.Password);
|
||||||
|
|
||||||
Comm.StartPacket (TdsPacketType.SspAuth); // 0x11
|
Comm.StartPacket (TdsPacketType.SspAuth); // 0x11
|
||||||
Comm.Append (t3.GetBytes ());
|
Comm.Append (t3.GetBytes ());
|
||||||
@ -1919,6 +1921,20 @@ namespace Mono.Data.Tds.Protocol
|
|||||||
comm.Skip(4);
|
comm.Skip(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string GetPlainPassword(SecureString secPass)
|
||||||
|
{
|
||||||
|
IntPtr plainString = IntPtr.Zero;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
plainString = Marshal.SecureStringToGlobalAllocUnicode(secPass);
|
||||||
|
return Marshal.PtrToStringUni(plainString);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Marshal.ZeroFreeGlobalAllocUnicode(plainString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion // Private Methods
|
#endregion // Private Methods
|
||||||
|
|
||||||
#if NET_2_0
|
#if NET_2_0
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Security;
|
||||||
|
|
||||||
namespace Mono.Data.Tds.Protocol {
|
namespace Mono.Data.Tds.Protocol {
|
||||||
public sealed class Tds42 : Tds
|
public sealed class Tds42 : Tds
|
||||||
@ -77,7 +78,7 @@ namespace Mono.Data.Tds.Protocol {
|
|||||||
Comm.Append ((byte) (tmp.Length < 30 ? tmp.Length : 30));
|
Comm.Append ((byte) (tmp.Length < 30 ? tmp.Length : 30));
|
||||||
|
|
||||||
// password (offset 62 0x3e)
|
// password (offset 62 0x3e)
|
||||||
tmp = Comm.Append (connectionParameters.Password, 30, pad);
|
tmp = Comm.Append (GetPlainPassword(connectionParameters.Password), 30, pad);
|
||||||
Comm.Append ((byte) (tmp.Length < 30 ? tmp.Length : 30));
|
Comm.Append ((byte) (tmp.Length < 30 ? tmp.Length : 30));
|
||||||
|
|
||||||
// hostproc (offset 93 0x5d)
|
// hostproc (offset 93 0x5d)
|
||||||
@ -145,7 +146,7 @@ namespace Mono.Data.Tds.Protocol {
|
|||||||
|
|
||||||
// remote passwords
|
// remote passwords
|
||||||
Comm.Append (empty, 2, pad);
|
Comm.Append (empty, 2, pad);
|
||||||
tmp = Comm.Append (connectionParameters.Password, 253, pad);
|
tmp = Comm.Append (GetPlainPassword(connectionParameters.Password), 253, pad);
|
||||||
Comm.Append ((byte) (tmp.Length < 253 ? tmp.Length + 2 : 253 + 2));
|
Comm.Append ((byte) (tmp.Length < 253 ? tmp.Length + 2 : 253 + 2));
|
||||||
|
|
||||||
// tds version
|
// tds version
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
using Mono.Data.Tds;
|
using Mono.Data.Tds;
|
||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Security;
|
||||||
|
|
||||||
namespace Mono.Data.Tds.Protocol
|
namespace Mono.Data.Tds.Protocol
|
||||||
{
|
{
|
||||||
@ -118,7 +119,7 @@ namespace Mono.Data.Tds.Protocol
|
|||||||
|
|
||||||
// password (offset 62 0x3e)
|
// password (offset 62 0x3e)
|
||||||
// 62-92
|
// 62-92
|
||||||
tmp = Comm.Append (connectionParameters.Password, 30, pad);
|
tmp = Comm.Append (GetPlainPassword(connectionParameters.Password), 30, pad);
|
||||||
Comm.Append ((byte) (tmp.Length < 30 ? tmp.Length : 30));
|
Comm.Append ((byte) (tmp.Length < 30 ? tmp.Length : 30));
|
||||||
|
|
||||||
// hostproc (offset 93 0x5d)
|
// hostproc (offset 93 0x5d)
|
||||||
@ -187,7 +188,7 @@ namespace Mono.Data.Tds.Protocol
|
|||||||
// remote passwords
|
// remote passwords
|
||||||
// 202-457
|
// 202-457
|
||||||
Comm.Append (empty, 2, pad);
|
Comm.Append (empty, 2, pad);
|
||||||
tmp = Comm.Append (connectionParameters.Password, 253, pad);
|
tmp = Comm.Append (GetPlainPassword(connectionParameters.Password), 253, pad);
|
||||||
Comm.Append ((byte) (tmp.Length < 253 ? tmp.Length + 2 : 253 + 2));
|
Comm.Append ((byte) (tmp.Length < 253 ? tmp.Length + 2 : 253 + 2));
|
||||||
|
|
||||||
// tds version
|
// tds version
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Security;
|
||||||
|
|
||||||
using Mono.Security.Protocol.Ntlm;
|
using Mono.Security.Protocol.Ntlm;
|
||||||
|
|
||||||
@ -392,11 +393,12 @@ namespace Mono.Data.Tds.Protocol
|
|||||||
return IsConnected;
|
return IsConnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string EncryptPassword (string pass)
|
private static string EncryptPassword (SecureString secPass)
|
||||||
{
|
{
|
||||||
int xormask = 0x5a5a;
|
int xormask = 0x5a5a;
|
||||||
int len = pass.Length;
|
int len = secPass.Length;
|
||||||
char[] chars = new char[len];
|
char[] chars = new char[len];
|
||||||
|
string pass = GetPlainPassword(secPass);
|
||||||
|
|
||||||
for (int i = 0; i < len; ++i) {
|
for (int i = 0; i < len; ++i) {
|
||||||
int c = ((int) (pass[i])) ^ xormask;
|
int c = ((int) (pass[i])) ^ xormask;
|
||||||
@ -488,6 +490,19 @@ namespace Mono.Data.Tds.Protocol
|
|||||||
Comm.Append ((byte) 0x00); // no param meta data name
|
Comm.Append ((byte) 0x00); // no param meta data name
|
||||||
Comm.Append ((byte) 0x00); // no status flags
|
Comm.Append ((byte) 0x00); // no status flags
|
||||||
|
|
||||||
|
// Convert BigNVarChar values larger than 4000 chars to nvarchar(max)
|
||||||
|
// Need to do this here so WritePreparedParameterInfo emit the
|
||||||
|
// correct data type
|
||||||
|
foreach (TdsMetaParameter param2 in parameters) {
|
||||||
|
var colType = param2.GetMetaType ();
|
||||||
|
|
||||||
|
if (colType == TdsColumnType.BigNVarChar) {
|
||||||
|
int size = param2.GetActualSize ();
|
||||||
|
if ((size >> 1) > 4000)
|
||||||
|
param2.Size = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Write sql as a parameter value - UCS2
|
// Write sql as a parameter value - UCS2
|
||||||
TdsMetaParameter param = new TdsMetaParameter ("sql",
|
TdsMetaParameter param = new TdsMetaParameter ("sql",
|
||||||
sql.Length > 4000 ? "ntext":"nvarchar",
|
sql.Length > 4000 ? "ntext":"nvarchar",
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Security;
|
||||||
|
|
||||||
namespace Mono.Data.Tds.Protocol
|
namespace Mono.Data.Tds.Protocol
|
||||||
{
|
{
|
||||||
@ -42,7 +43,8 @@ namespace Mono.Data.Tds.Protocol
|
|||||||
public string Hostname;
|
public string Hostname;
|
||||||
public string Language;
|
public string Language;
|
||||||
public string LibraryName;
|
public string LibraryName;
|
||||||
public string Password;
|
public SecureString Password;
|
||||||
|
public bool PasswordSet;
|
||||||
public string ProgName;
|
public string ProgName;
|
||||||
public string User;
|
public string User;
|
||||||
public bool DomainLogin;
|
public bool DomainLogin;
|
||||||
@ -62,7 +64,8 @@ namespace Mono.Data.Tds.Protocol
|
|||||||
Hostname = System.Net.Dns.GetHostName();
|
Hostname = System.Net.Dns.GetHostName();
|
||||||
Language = String.Empty;
|
Language = String.Empty;
|
||||||
LibraryName = "Mono";
|
LibraryName = "Mono";
|
||||||
Password = String.Empty;
|
Password = new SecureString();
|
||||||
|
PasswordSet = false;
|
||||||
ProgName = "Mono";
|
ProgName = "Mono";
|
||||||
User = String.Empty;
|
User = String.Empty;
|
||||||
DomainLogin = false;
|
DomainLogin = false;
|
||||||
|
@ -27,11 +27,11 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
namespace bug4786test
|
namespace MonoTests.Mono.Data.Tds
|
||||||
{
|
{
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using Mono.Data.Tds.Protocol;
|
using global::Mono.Data.Tds.Protocol;
|
||||||
using System;
|
using System;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
|
@ -155,11 +155,12 @@ namespace Mono.Debugger.Soft
|
|||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
enum InvokeFlags {
|
enum InvokeFlags {
|
||||||
NONE = 0x0,
|
NONE = 0,
|
||||||
DISABLE_BREAKPOINTS = 0x1,
|
DISABLE_BREAKPOINTS = 1,
|
||||||
SINGLE_THREADED = 0x2,
|
SINGLE_THREADED = 2,
|
||||||
OUT_THIS = 0x4,
|
OUT_THIS = 4,
|
||||||
OUT_ARGS = 0x8,
|
OUT_ARGS = 8,
|
||||||
|
VIRTUAL = 16,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ElementType {
|
enum ElementType {
|
||||||
@ -416,7 +417,7 @@ namespace Mono.Debugger.Soft
|
|||||||
* with newer runtimes, and vice versa.
|
* with newer runtimes, and vice versa.
|
||||||
*/
|
*/
|
||||||
internal const int MAJOR_VERSION = 2;
|
internal const int MAJOR_VERSION = 2;
|
||||||
internal const int MINOR_VERSION = 35;
|
internal const int MINOR_VERSION = 38;
|
||||||
|
|
||||||
enum WPSuspendPolicy {
|
enum WPSuspendPolicy {
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
@ -584,7 +585,8 @@ namespace Mono.Debugger.Soft
|
|||||||
enum CmdStackFrame {
|
enum CmdStackFrame {
|
||||||
GET_VALUES = 1,
|
GET_VALUES = 1,
|
||||||
GET_THIS = 2,
|
GET_THIS = 2,
|
||||||
SET_VALUES = 3
|
SET_VALUES = 3,
|
||||||
|
GET_DOMAIN = 4,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum CmdArrayRef {
|
enum CmdArrayRef {
|
||||||
@ -2377,6 +2379,10 @@ namespace Mono.Debugger.Soft
|
|||||||
SendReceive (CommandSet.STACK_FRAME, (int)CmdStackFrame.SET_VALUES, new PacketWriter ().WriteId (thread_id).WriteId (id).WriteInt (len).WriteInts (pos).WriteValues (values));
|
SendReceive (CommandSet.STACK_FRAME, (int)CmdStackFrame.SET_VALUES, new PacketWriter ().WriteId (thread_id).WriteId (id).WriteInt (len).WriteInts (pos).WriteValues (values));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal long StackFrame_GetDomain (long thread_id, long id) {
|
||||||
|
return SendReceive (CommandSet.STACK_FRAME, (int)CmdStackFrame.GET_DOMAIN, new PacketWriter ().WriteId (thread_id).WriteId (id)).ReadId ();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ARRAYS
|
* ARRAYS
|
||||||
*/
|
*/
|
||||||
|
@ -22,6 +22,11 @@ namespace Mono.Debugger.Soft
|
|||||||
/*
|
/*
|
||||||
* Return the values of out arguments
|
* Return the values of out arguments
|
||||||
*/
|
*/
|
||||||
ReturnOutArgs = 8
|
ReturnOutArgs = 8,
|
||||||
|
/*
|
||||||
|
* Do a virtual invoke
|
||||||
|
* Since protocol version 2.37
|
||||||
|
*/
|
||||||
|
Virtual = 16
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -307,6 +307,8 @@ namespace Mono.Debugger.Soft
|
|||||||
f |= InvokeFlags.OUT_THIS;
|
f |= InvokeFlags.OUT_THIS;
|
||||||
if ((options & InvokeOptions.ReturnOutArgs) != 0)
|
if ((options & InvokeOptions.ReturnOutArgs) != 0)
|
||||||
f |= InvokeFlags.OUT_ARGS;
|
f |= InvokeFlags.OUT_ARGS;
|
||||||
|
if ((options & InvokeOptions.Virtual) != 0)
|
||||||
|
f |= InvokeFlags.VIRTUAL;
|
||||||
|
|
||||||
InvokeAsyncResult r = new InvokeAsyncResult { AsyncState = state, AsyncWaitHandle = new ManualResetEvent (false), VM = vm, Thread = thread, Callback = callback };
|
InvokeAsyncResult r = new InvokeAsyncResult { AsyncState = state, AsyncWaitHandle = new ManualResetEvent (false), VM = vm, Thread = thread, Callback = callback };
|
||||||
thread.InvalidateFrames ();
|
thread.InvalidateFrames ();
|
||||||
|
@ -7,6 +7,7 @@ namespace Mono.Debugger.Soft
|
|||||||
public class StackFrame : Mirror
|
public class StackFrame : Mirror
|
||||||
{
|
{
|
||||||
ThreadMirror thread;
|
ThreadMirror thread;
|
||||||
|
AppDomainMirror domain;
|
||||||
MethodMirror method;
|
MethodMirror method;
|
||||||
int il_offset;
|
int il_offset;
|
||||||
Location location;
|
Location location;
|
||||||
@ -32,6 +33,16 @@ namespace Mono.Debugger.Soft
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AppDomainMirror Domain {
|
||||||
|
get {
|
||||||
|
vm.CheckProtocolVersion (2, 38);
|
||||||
|
if (domain == null)
|
||||||
|
domain = vm.GetDomain (vm.conn.StackFrame_GetDomain (thread.Id, Id));
|
||||||
|
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public MethodMirror Method {
|
public MethodMirror Method {
|
||||||
get {
|
get {
|
||||||
return method;
|
return method;
|
||||||
|
@ -22,6 +22,10 @@ public class TestsBase
|
|||||||
static string base_static_s = "C";
|
static string base_static_s = "C";
|
||||||
#pragma warning restore 0414
|
#pragma warning restore 0414
|
||||||
#pragma warning restore 0169
|
#pragma warning restore 0169
|
||||||
|
|
||||||
|
public virtual string virtual_method () {
|
||||||
|
return "V1";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum AnEnum {
|
public enum AnEnum {
|
||||||
@ -1365,6 +1369,10 @@ public class Tests : TestsBase, ITest2
|
|||||||
j = 5;
|
j = 5;
|
||||||
set_ip_2 ();
|
set_ip_2 ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override string virtual_method () {
|
||||||
|
return "V2";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TypeLoadClass {
|
class TypeLoadClass {
|
||||||
|
@ -2137,6 +2137,11 @@ public class DebuggerTests
|
|||||||
v = this_obj.InvokeMethod (e.Thread, m, null);
|
v = this_obj.InvokeMethod (e.Thread, m, null);
|
||||||
AssertValue (42, v);
|
AssertValue (42, v);
|
||||||
|
|
||||||
|
// virtual call
|
||||||
|
m = t.BaseType.GetMethod ("virtual_method");
|
||||||
|
v = this_obj.InvokeMethod (e.Thread, m, null, InvokeOptions.Virtual);
|
||||||
|
AssertValue ("V2", v);
|
||||||
|
|
||||||
#if NET_4_5
|
#if NET_4_5
|
||||||
// instance
|
// instance
|
||||||
m = t.GetMethod ("invoke_pass_ref");
|
m = t.GetMethod ("invoke_pass_ref");
|
||||||
@ -2864,8 +2869,10 @@ public class DebuggerTests
|
|||||||
|
|
||||||
var frames = e.Thread.GetFrames ();
|
var frames = e.Thread.GetFrames ();
|
||||||
Assert.AreEqual ("invoke_in_domain", frames [0].Method.Name);
|
Assert.AreEqual ("invoke_in_domain", frames [0].Method.Name);
|
||||||
|
Assert.AreEqual (domain, frames [0].Domain);
|
||||||
Assert.AreEqual ("invoke", frames [1].Method.Name);
|
Assert.AreEqual ("invoke", frames [1].Method.Name);
|
||||||
Assert.AreEqual ("domains", frames [2].Method.Name);
|
Assert.AreEqual ("domains", frames [2].Method.Name);
|
||||||
|
Assert.AreEqual (vm.RootDomain, frames [2].Domain);
|
||||||
|
|
||||||
// Test breakpoints on already JITted methods in other domains
|
// Test breakpoints on already JITted methods in other domains
|
||||||
m = entry_point.DeclaringType.GetMethod ("invoke_in_domain_2");
|
m = entry_point.DeclaringType.GetMethod ("invoke_in_domain_2");
|
||||||
|
@ -9,7 +9,9 @@ LIB_MCS_FLAGS = -r:System.dll -r:System.Core.dll \
|
|||||||
-d:MONO_INTERPRETER \
|
-d:MONO_INTERPRETER \
|
||||||
-delaysign -keyfile:../mono.pub
|
-delaysign -keyfile:../mono.pub
|
||||||
|
|
||||||
ifeq (monotouch, $(subst _runtime,,$(PROFILE)))
|
MOBILE_STATIC := $(filter mobile_static monotouch monotouch_runtime, $(PROFILE))
|
||||||
|
|
||||||
|
ifdef MOBILE_STATIC
|
||||||
mono_dynamic_interpreter_deps = $(the_libdir_base)plaincore/System.Core.dll
|
mono_dynamic_interpreter_deps = $(the_libdir_base)plaincore/System.Core.dll
|
||||||
LIB_MCS_FLAGS += -lib:$(the_libdir_base)plaincore
|
LIB_MCS_FLAGS += -lib:$(the_libdir_base)plaincore
|
||||||
endif
|
endif
|
||||||
|
@ -39,7 +39,7 @@ using NUnit.Framework;
|
|||||||
#if NDESK_OPTIONS
|
#if NDESK_OPTIONS
|
||||||
namespace Tests.NDesk.Options
|
namespace Tests.NDesk.Options
|
||||||
#else
|
#else
|
||||||
namespace Tests.Mono.Options
|
namespace MonoTests.Mono.Options
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
|
@ -46,7 +46,7 @@ using NUnit.Framework;
|
|||||||
#if NDESK_OPTIONS
|
#if NDESK_OPTIONS
|
||||||
namespace Tests.NDesk.Options
|
namespace Tests.NDesk.Options
|
||||||
#else
|
#else
|
||||||
namespace Tests.Mono.Options
|
namespace MonoTests.Mono.Options
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
class FooConverter : TypeConverter {
|
class FooConverter : TypeConverter {
|
||||||
|
@ -39,7 +39,7 @@ using NUnit.Framework;
|
|||||||
#if NDESK_OPTIONS
|
#if NDESK_OPTIONS
|
||||||
namespace Tests.NDesk.Options
|
namespace Tests.NDesk.Options
|
||||||
#else
|
#else
|
||||||
namespace Tests.Mono.Options
|
namespace MonoTests.Mono.Options
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
class DefaultOption : Option {
|
class DefaultOption : Option {
|
||||||
|
@ -31,7 +31,7 @@ using System;
|
|||||||
#if NDESK_OPTIONS
|
#if NDESK_OPTIONS
|
||||||
namespace Tests.NDesk.Options
|
namespace Tests.NDesk.Options
|
||||||
#else
|
#else
|
||||||
namespace Tests.Mono.Options
|
namespace MonoTests.Mono.Options
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
static class Utils {
|
static class Utils {
|
||||||
|
@ -221,15 +221,13 @@ namespace Mono.Security.Cryptography {
|
|||||||
string msg = Locale.GetText ("Could not create user key store '{0}'.");
|
string msg = Locale.GetText ("Could not create user key store '{0}'.");
|
||||||
throw new CryptographicException (String.Format (msg, _userPath), e);
|
throw new CryptographicException (String.Format (msg, _userPath), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ProtectUser (_userPath)) {
|
|
||||||
string msg = Locale.GetText ("Could not secure user key store '{0}'.");
|
|
||||||
throw new IOException (String.Format (msg, _userPath));
|
|
||||||
}
|
|
||||||
|
|
||||||
_userPathExists = true;
|
_userPathExists = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!IsUserProtected (_userPath) && !ProtectUser (_userPath)) {
|
||||||
|
string msg = Locale.GetText ("Could not secure user key store '{0}'.");
|
||||||
|
throw new IOException (String.Format (msg, _userPath));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// is it properly protected ?
|
// is it properly protected ?
|
||||||
if (!IsUserProtected (_userPath)) {
|
if (!IsUserProtected (_userPath)) {
|
||||||
@ -258,15 +256,13 @@ namespace Mono.Security.Cryptography {
|
|||||||
string msg = Locale.GetText ("Could not create machine key store '{0}'.");
|
string msg = Locale.GetText ("Could not create machine key store '{0}'.");
|
||||||
throw new CryptographicException (String.Format (msg, _machinePath), e);
|
throw new CryptographicException (String.Format (msg, _machinePath), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ProtectMachine (_machinePath)) {
|
|
||||||
string msg = Locale.GetText ("Could not secure machine key store '{0}'.");
|
|
||||||
throw new IOException (String.Format (msg, _machinePath));
|
|
||||||
}
|
|
||||||
|
|
||||||
_machinePathExists = true;
|
_machinePathExists = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!IsMachineProtected (_machinePath) && !ProtectMachine (_machinePath)) {
|
||||||
|
string msg = Locale.GetText ("Could not secure machine key store '{0}'.");
|
||||||
|
throw new IOException (String.Format (msg, _machinePath));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// is it properly protected ?
|
// is it properly protected ?
|
||||||
if (!IsMachineProtected (_machinePath)) {
|
if (!IsMachineProtected (_machinePath)) {
|
||||||
|
@ -97,10 +97,26 @@ namespace Mono.Security.X509 {
|
|||||||
// methods
|
// methods
|
||||||
|
|
||||||
public void Clear ()
|
public void Clear ()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Both _certificates and _crls extend CollectionBase, whose Clear() method calls OnClear() and
|
||||||
|
* OnClearComplete(), which should be overridden in derivative classes. So we should not worry about
|
||||||
|
* other threads that might be holding references to _certificates or _crls. They should be smart enough
|
||||||
|
* to handle this gracefully. And if not, it's their own fault.
|
||||||
|
*/
|
||||||
|
ClearCertificates ();
|
||||||
|
ClearCrls ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearCertificates()
|
||||||
{
|
{
|
||||||
if (_certificates != null)
|
if (_certificates != null)
|
||||||
_certificates.Clear ();
|
_certificates.Clear ();
|
||||||
_certificates = null;
|
_certificates = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearCrls ()
|
||||||
|
{
|
||||||
if (_crls != null)
|
if (_crls != null)
|
||||||
_crls.Clear ();
|
_crls.Clear ();
|
||||||
_crls = null;
|
_crls = null;
|
||||||
@ -117,6 +133,7 @@ namespace Mono.Security.X509 {
|
|||||||
fs.Write (data, 0, data.Length);
|
fs.Write (data, 0, data.Length);
|
||||||
fs.Close ();
|
fs.Close ();
|
||||||
}
|
}
|
||||||
|
ClearCertificates (); // We have modified the store on disk. So forget the old state.
|
||||||
}
|
}
|
||||||
#if !NET_2_1
|
#if !NET_2_1
|
||||||
// Try to save privateKey if available..
|
// Try to save privateKey if available..
|
||||||
@ -141,6 +158,7 @@ namespace Mono.Security.X509 {
|
|||||||
byte[] data = crl.RawData;
|
byte[] data = crl.RawData;
|
||||||
fs.Write (data, 0, data.Length);
|
fs.Write (data, 0, data.Length);
|
||||||
}
|
}
|
||||||
|
ClearCrls (); // We have modified the store on disk. So forget the old state.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,6 +167,7 @@ namespace Mono.Security.X509 {
|
|||||||
string filename = Path.Combine (_storePath, GetUniqueName (certificate));
|
string filename = Path.Combine (_storePath, GetUniqueName (certificate));
|
||||||
if (File.Exists (filename)) {
|
if (File.Exists (filename)) {
|
||||||
File.Delete (filename);
|
File.Delete (filename);
|
||||||
|
ClearCertificates (); // We have modified the store on disk. So forget the old state.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,6 +176,7 @@ namespace Mono.Security.X509 {
|
|||||||
string filename = Path.Combine (_storePath, GetUniqueName (crl));
|
string filename = Path.Combine (_storePath, GetUniqueName (crl));
|
||||||
if (File.Exists (filename)) {
|
if (File.Exists (filename)) {
|
||||||
File.Delete (filename);
|
File.Delete (filename);
|
||||||
|
ClearCrls (); // We have modified the store on disk. So forget the old state.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,8 +256,13 @@ namespace Mono.Security.X509 {
|
|||||||
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
|
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
|
||||||
KeyPairPersistence kpp = new KeyPairPersistence (cspParams);
|
KeyPairPersistence kpp = new KeyPairPersistence (cspParams);
|
||||||
|
|
||||||
|
try {
|
||||||
if (!kpp.Load ())
|
if (!kpp.Load ())
|
||||||
return cert;
|
return cert;
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return cert;
|
||||||
|
}
|
||||||
|
|
||||||
if (cert.RSA != null)
|
if (cert.RSA != null)
|
||||||
cert.RSA = new RSACryptoServiceProvider (cspParams);
|
cert.RSA = new RSACryptoServiceProvider (cspParams);
|
||||||
|
@ -12,7 +12,7 @@ CLEAN_FILES += $(STRING_MESSAGES)
|
|||||||
EXTRA_DISTFILES = \
|
EXTRA_DISTFILES = \
|
||||||
src/ComponentModel/Strings.resx
|
src/ComponentModel/Strings.resx
|
||||||
|
|
||||||
VALID_PROFILE := $(filter net_4_0 net_4_5 monotouch monodroid xammac mobile_static, $(PROFILE))
|
VALID_PROFILE := $(filter net_4_0 net_4_5 monotouch monodroid xammac mobile mobile_static, $(PROFILE))
|
||||||
ifndef VALID_PROFILE
|
ifndef VALID_PROFILE
|
||||||
LIBRARY_NAME = dummy-System.ComponentModel.Composition.dll
|
LIBRARY_NAME = dummy-System.ComponentModel.Composition.dll
|
||||||
NO_INSTALL = yes
|
NO_INSTALL = yes
|
||||||
|
@ -18,7 +18,7 @@ endif
|
|||||||
TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
|
TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
|
||||||
|
|
||||||
# This is a .NET 3.5+ assembly
|
# This is a .NET 3.5+ assembly
|
||||||
VALID_PROFILE := $(filter net_2_0 net_4_0 net_4_5 monotouch monodroid xammac mobile_static, $(PROFILE))
|
VALID_PROFILE := $(filter net_2_0 net_4_0 net_4_5 monotouch monodroid xammac mobile mobile_static, $(PROFILE))
|
||||||
ifndef VALID_PROFILE
|
ifndef VALID_PROFILE
|
||||||
LIBRARY_NAME = dummy-System.ComponentModel.DataAnnotations.dll
|
LIBRARY_NAME = dummy-System.ComponentModel.DataAnnotations.dll
|
||||||
NO_INSTALL = yes
|
NO_INSTALL = yes
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
#include net_4_5_System.ComponentModel.DataAnnotations.dll.sources
|
@ -10,17 +10,16 @@ ifneq (2.1, $(FRAMEWORK_VERSION))
|
|||||||
LIB_MCS_FLAGS += -d:NET_3_5 -nowarn:1720
|
LIB_MCS_FLAGS += -d:NET_3_5 -nowarn:1720
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq (monodroid, $(PROFILE))
|
MOBILE_DYNAMIC := $(filter monodroid xammac mobile, $(PROFILE))
|
||||||
LIB_MCS_FLAGS += -d:FEATURE_CORE_DLR,FEATURE_REFEMIT,ANDROID
|
MOBILE_STATIC := $(filter mobile_static monotouch monotouch_runtime, $(PROFILE))
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq (xammac, $(PROFILE))
|
ifdef MOBILE_DYNAMIC
|
||||||
LIB_MCS_FLAGS += -d:FEATURE_CORE_DLR,FEATURE_REFEMIT
|
LIB_MCS_FLAGS += -d:FEATURE_CORE_DLR,FEATURE_REFEMIT
|
||||||
endif
|
endif
|
||||||
|
|
||||||
system_core_plain_libdir = $(the_libdir_base)plaincore
|
system_core_plain_libdir = $(the_libdir_base)plaincore
|
||||||
|
|
||||||
ifeq (monotouch, $(subst _runtime,,$(PROFILE)))
|
ifdef MOBILE_STATIC
|
||||||
extra_test_flags := -exclude:NotWorkingInterpreter
|
extra_test_flags := -exclude:NotWorkingInterpreter
|
||||||
system_core_library_deps = $(the_libdir_base)Mono.Dynamic.Interpreter.dll $(system_core_plain_libdir)/System.Core.dll
|
system_core_library_deps = $(the_libdir_base)Mono.Dynamic.Interpreter.dll $(system_core_plain_libdir)/System.Core.dll
|
||||||
LIB_MCS_FLAGS += -d:FEATURE_CORE_DLR
|
LIB_MCS_FLAGS += -d:FEATURE_CORE_DLR
|
||||||
|
@ -24,13 +24,16 @@
|
|||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (INSIDE_CORLIB && NET_4_0) || (!INSIDE_CORLIB && (NET_3_5 && !NET_4_0 && !MOBILE))
|
#if INSIDE_CORLIB || (NET_3_5 && !NET_4_0 && !MOBILE)
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
public sealed partial class TimeZoneInfo {
|
#if NET_4_0 || !INSIDE_CORLIB
|
||||||
|
public
|
||||||
|
#endif
|
||||||
|
sealed partial class TimeZoneInfo {
|
||||||
[SerializableAttribute]
|
[SerializableAttribute]
|
||||||
#if MOBILE
|
#if MOBILE
|
||||||
[TypeForwardedFrom (Consts.AssemblySystem_Core)]
|
[TypeForwardedFrom (Consts.AssemblySystem_Core)]
|
||||||
|
@ -453,29 +453,29 @@ namespace System {
|
|||||||
: db.GetAvailableIds ();
|
: db.GetAvailableIds ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static TimeZoneInfo _GetTimeZone (string name)
|
static TimeZoneInfo _GetTimeZone (string id, string name)
|
||||||
{
|
{
|
||||||
if (db == null)
|
if (db == null)
|
||||||
return null;
|
return null;
|
||||||
byte[] buffer = db.GetTimeZoneData (name);
|
byte[] buffer = db.GetTimeZoneData (name);
|
||||||
if (buffer == null)
|
if (buffer == null)
|
||||||
return null;
|
return null;
|
||||||
return TimeZoneInfo.ParseTZBuffer (name, buffer, buffer.Length);
|
return TimeZoneInfo.ParseTZBuffer (id, buffer, buffer.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static TimeZoneInfo GetTimeZone (string id)
|
internal static TimeZoneInfo GetTimeZone (string id, string name)
|
||||||
{
|
{
|
||||||
if (id != null) {
|
if (name != null) {
|
||||||
if (id == "GMT" || id == "UTC")
|
if (name == "GMT" || name == "UTC")
|
||||||
return new TimeZoneInfo (id, TimeSpan.FromSeconds (0), id, id, id, null, true);
|
return new TimeZoneInfo (id, TimeSpan.FromSeconds (0), id, name, name, null, disableDaylightSavingTime:true);
|
||||||
if (id.StartsWith ("GMT"))
|
if (name.StartsWith ("GMT"))
|
||||||
return new TimeZoneInfo (id,
|
return new TimeZoneInfo (id,
|
||||||
TimeSpan.FromSeconds (ParseNumericZone (id)),
|
TimeSpan.FromSeconds (ParseNumericZone (name)),
|
||||||
id, id, id, null, true);
|
id, name, name, null, disableDaylightSavingTime:true);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return _GetTimeZone (id);
|
return _GetTimeZone (id, name);
|
||||||
} catch (Exception) {
|
} catch (Exception) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -533,12 +533,13 @@ namespace System {
|
|||||||
static readonly object _lock = new object ();
|
static readonly object _lock = new object ();
|
||||||
|
|
||||||
static TimeZoneInfo defaultZone;
|
static TimeZoneInfo defaultZone;
|
||||||
internal static TimeZoneInfo Default {
|
internal static TimeZoneInfo Local {
|
||||||
get {
|
get {
|
||||||
lock (_lock) {
|
lock (_lock) {
|
||||||
if (defaultZone != null)
|
if (defaultZone != null)
|
||||||
return defaultZone;
|
return defaultZone;
|
||||||
return defaultZone = GetTimeZone (GetDefaultTimeZoneName ());
|
var id = GetDefaultTimeZoneName ();
|
||||||
|
return defaultZone = GetTimeZone (id, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -553,7 +554,10 @@ namespace System {
|
|||||||
{
|
{
|
||||||
IntPtr value = IntPtr.Zero;
|
IntPtr value = IntPtr.Zero;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
string defaultTimeZone;
|
string defaultTimeZone = Environment.GetEnvironmentVariable ("__XA_OVERRIDE_TIMEZONE_ID__");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty (defaultTimeZone))
|
||||||
|
return defaultTimeZone;
|
||||||
|
|
||||||
// Used by the tests
|
// Used by the tests
|
||||||
if (Environment.GetEnvironmentVariable ("__XA_USE_JAVA_DEFAULT_TIMEZONE_ID__") == null)
|
if (Environment.GetEnvironmentVariable ("__XA_USE_JAVA_DEFAULT_TIMEZONE_ID__") == null)
|
||||||
@ -576,16 +580,20 @@ namespace System {
|
|||||||
#if SELF_TEST
|
#if SELF_TEST
|
||||||
/*
|
/*
|
||||||
* Compile:
|
* Compile:
|
||||||
* mcs /out:tzi.exe /unsafe "/d:INSIDE_CORLIB;MONODROID;NET_4_0;LIBC;SELF_TEST" System/TimeZone*.cs ../../build/common/Consts.cs ../Mono.Options/Mono.Options/Options.cs
|
* mcs /debug+ /out:tzi.exe /unsafe "/d:INSIDE_CORLIB;MONODROID;NET_4_0;LIBC;SELF_TEST" ../corlib/System/AndroidPlatform.cs System/TimeZone*.cs ../../build/common/Consts.cs ../Mono.Options/Mono.Options/Options.cs
|
||||||
* Prep:
|
* Prep:
|
||||||
* mkdir -p usr/share/zoneinfo
|
* mkdir -p usr/share/zoneinfo
|
||||||
|
* mkdir -p misc/zoneinfo/zoneinfo
|
||||||
* android_root=`adb shell echo '$ANDROID_ROOT' | tr -d "\r"`
|
* android_root=`adb shell echo '$ANDROID_ROOT' | tr -d "\r"`
|
||||||
|
* android_data=`adb shell echo '$ANDROID_DATA' | tr -d "\r"`
|
||||||
* adb pull $android_root/usr/share/zoneinfo usr/share/zoneinfo
|
* adb pull $android_root/usr/share/zoneinfo usr/share/zoneinfo
|
||||||
|
* adb pull $android_data/misc/zoneinfo/tzdata misc/zoneinfo
|
||||||
* Run:
|
* Run:
|
||||||
* ANDROID_ROOT=`pwd` mono tzi.exe
|
* __XA_OVERRIDE_TIMEZONE_ID__=America/New_York ANDROID_ROOT=`pwd` ANDROID_DATA=`pwd` mono --debug tzi.exe --offset=1969-01-01
|
||||||
*/
|
*/
|
||||||
static void Main (string[] args)
|
static void Main (string[] args)
|
||||||
{
|
{
|
||||||
|
DateTime? offset = null;
|
||||||
Func<IAndroidTimeZoneDB> c = () => GetDefaultTimeZoneDB ();
|
Func<IAndroidTimeZoneDB> c = () => GetDefaultTimeZoneDB ();
|
||||||
Mono.Options.OptionSet p = null;
|
Mono.Options.OptionSet p = null;
|
||||||
p = new Mono.Options.OptionSet () {
|
p = new Mono.Options.OptionSet () {
|
||||||
@ -595,6 +603,10 @@ namespace System {
|
|||||||
{ "Z=", "Create ZoneInfoDB from {DIR}.", v => {
|
{ "Z=", "Create ZoneInfoDB from {DIR}.", v => {
|
||||||
c = () => new ZoneInfoDB (v);
|
c = () => new ZoneInfoDB (v);
|
||||||
} },
|
} },
|
||||||
|
{ "offset=", "Show timezone info offset for DateTime {OFFSET}.", v => {
|
||||||
|
offset = DateTime.Parse (v);
|
||||||
|
Console.WriteLine ("Using DateTime Offset: {0}", offset);
|
||||||
|
} },
|
||||||
{ "help", "Show this message and exit", v => {
|
{ "help", "Show this message and exit", v => {
|
||||||
p.WriteOptionDescriptions (Console.Out);
|
p.WriteOptionDescriptions (Console.Out);
|
||||||
Environment.Exit (0);
|
Environment.Exit (0);
|
||||||
@ -606,9 +618,13 @@ namespace System {
|
|||||||
foreach (var id in GetAvailableIds ()) {
|
foreach (var id in GetAvailableIds ()) {
|
||||||
Console.Write ("name={0,-40}", id);
|
Console.Write ("name={0,-40}", id);
|
||||||
try {
|
try {
|
||||||
TimeZoneInfo zone = _GetTimeZone (id);
|
TimeZoneInfo zone = _GetTimeZone (id, id);
|
||||||
if (zone != null)
|
if (zone != null) {
|
||||||
Console.Write (" {0}", zone);
|
Console.Write (" {0,-40}", zone);
|
||||||
|
if (offset.HasValue) {
|
||||||
|
Console.Write ("From Offset: {0}", zone.GetUtcOffset (offset.Value));
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
Console.Write (" ERROR:null");
|
Console.Write (" ERROR:null");
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (INSIDE_CORLIB && NET_4_0) || (!INSIDE_CORLIB && (NET_3_5 && !NET_4_0 && !MOBILE))
|
#if INSIDE_CORLIB || (NET_3_5 && !NET_4_0 && !MOBILE)
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
@ -33,7 +33,10 @@ using System.Text;
|
|||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
public partial class TimeZoneInfo
|
#if NET_4_0 || !INSIDE_CORLIB
|
||||||
|
public
|
||||||
|
#endif
|
||||||
|
partial class TimeZoneInfo
|
||||||
{
|
{
|
||||||
public static TimeZoneInfo FromSerializedString (string source)
|
public static TimeZoneInfo FromSerializedString (string source)
|
||||||
{
|
{
|
||||||
|
@ -24,14 +24,17 @@
|
|||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (INSIDE_CORLIB && NET_4_0) || (!INSIDE_CORLIB && (NET_3_5 && !NET_4_0 && !MOBILE))
|
#if INSIDE_CORLIB || (NET_3_5 && !NET_4_0 && !MOBILE)
|
||||||
|
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
public sealed partial class TimeZoneInfo
|
#if NET_4_0 || !INSIDE_CORLIB
|
||||||
|
public
|
||||||
|
#endif
|
||||||
|
sealed partial class TimeZoneInfo
|
||||||
{
|
{
|
||||||
[SerializableAttribute]
|
[SerializableAttribute]
|
||||||
#if MOBILE
|
#if MOBILE
|
||||||
|
@ -35,7 +35,7 @@ using System.Threading;
|
|||||||
|
|
||||||
[assembly:TypeForwardedTo (typeof(TimeZoneInfo))]
|
[assembly:TypeForwardedTo (typeof(TimeZoneInfo))]
|
||||||
|
|
||||||
#elif (INSIDE_CORLIB && NET_4_0) || (!INSIDE_CORLIB && (NET_3_5 && !NET_4_0 && !MOBILE))
|
#elif INSIDE_CORLIB || (NET_3_5 && !NET_4_0 && !MOBILE)
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@ -57,7 +57,10 @@ namespace System
|
|||||||
[TypeForwardedFrom (Consts.AssemblySystemCore_3_5)]
|
[TypeForwardedFrom (Consts.AssemblySystemCore_3_5)]
|
||||||
#endif
|
#endif
|
||||||
[SerializableAttribute]
|
[SerializableAttribute]
|
||||||
public sealed partial class TimeZoneInfo : IEquatable<TimeZoneInfo>, ISerializable, IDeserializationCallback
|
#if NET_4_0 || !INSIDE_CORLIB
|
||||||
|
public
|
||||||
|
#endif
|
||||||
|
sealed partial class TimeZoneInfo : IEquatable<TimeZoneInfo>, ISerializable, IDeserializationCallback
|
||||||
{
|
{
|
||||||
TimeSpan baseUtcOffset;
|
TimeSpan baseUtcOffset;
|
||||||
public TimeSpan BaseUtcOffset {
|
public TimeSpan BaseUtcOffset {
|
||||||
@ -100,15 +103,31 @@ namespace System
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
TimeZone transitions are stored when there is a change on the base offset.
|
||||||
|
*/
|
||||||
|
private List<KeyValuePair<DateTime, TimeType>> transitions;
|
||||||
|
|
||||||
static TimeZoneInfo CreateLocal ()
|
static TimeZoneInfo CreateLocal ()
|
||||||
{
|
{
|
||||||
#if MONODROID
|
#if MONODROID
|
||||||
return AndroidTimeZones.Default;
|
return AndroidTimeZones.Local;
|
||||||
#elif MONOTOUCH
|
#elif MONOTOUCH
|
||||||
using (Stream stream = GetMonoTouchData (null)) {
|
using (Stream stream = GetMonoTouchData (null)) {
|
||||||
return BuildFromStream ("Local", stream);
|
return BuildFromStream ("Local", stream);
|
||||||
}
|
}
|
||||||
#elif LIBC
|
#elif LIBC
|
||||||
|
var tz = Environment.GetEnvironmentVariable ("TZ");
|
||||||
|
if (tz != null) {
|
||||||
|
if (tz == String.Empty)
|
||||||
|
return Utc;
|
||||||
|
try {
|
||||||
|
return FindSystemTimeZoneByFileName (tz, Path.Combine (TimeZoneDirectory, tz));
|
||||||
|
} catch {
|
||||||
|
return Utc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return FindSystemTimeZoneByFileName ("Local", "/etc/localtime");
|
return FindSystemTimeZoneByFileName ("Local", "/etc/localtime");
|
||||||
} catch {
|
} catch {
|
||||||
@ -332,8 +351,7 @@ namespace System
|
|||||||
if (dateTime.Kind == DateTimeKind.Utc)
|
if (dateTime.Kind == DateTimeKind.Utc)
|
||||||
return dateTime;
|
return dateTime;
|
||||||
|
|
||||||
//FIXME: do not rely on DateTime implementation !
|
return ConvertTimeToUtc (dateTime, TimeZoneInfo.Local);
|
||||||
return DateTime.SpecifyKind (dateTime.ToUniversalTime (), DateTimeKind.Utc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DateTime ConvertTimeToUtc (DateTime dateTime, TimeZoneInfo sourceTimeZone)
|
public static DateTime ConvertTimeToUtc (DateTime dateTime, TimeZoneInfo sourceTimeZone)
|
||||||
@ -350,15 +368,9 @@ namespace System
|
|||||||
if (sourceTimeZone.IsInvalidTime (dateTime))
|
if (sourceTimeZone.IsInvalidTime (dateTime))
|
||||||
throw new ArgumentException ("dateTime parameter is an invalid time");
|
throw new ArgumentException ("dateTime parameter is an invalid time");
|
||||||
|
|
||||||
if (dateTime.Kind == DateTimeKind.Utc && sourceTimeZone == TimeZoneInfo.Utc)
|
|
||||||
return dateTime;
|
|
||||||
|
|
||||||
if (dateTime.Kind == DateTimeKind.Utc)
|
if (dateTime.Kind == DateTimeKind.Utc)
|
||||||
return dateTime;
|
return dateTime;
|
||||||
|
|
||||||
if (dateTime.Kind == DateTimeKind.Local)
|
|
||||||
return ConvertTimeToUtc (dateTime);
|
|
||||||
|
|
||||||
if (sourceTimeZone.IsAmbiguousTime (dateTime) || !sourceTimeZone.IsDaylightSavingTime (dateTime))
|
if (sourceTimeZone.IsAmbiguousTime (dateTime) || !sourceTimeZone.IsDaylightSavingTime (dateTime))
|
||||||
return DateTime.SpecifyKind (dateTime - sourceTimeZone.BaseUtcOffset, DateTimeKind.Utc);
|
return DateTime.SpecifyKind (dateTime - sourceTimeZone.BaseUtcOffset, DateTimeKind.Utc);
|
||||||
else {
|
else {
|
||||||
@ -414,12 +426,6 @@ namespace System
|
|||||||
return FromRegistryKey(id, key);
|
return FromRegistryKey(id, key);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if MONODROID
|
|
||||||
var timeZoneInfo = AndroidTimeZones.GetTimeZone (id);
|
|
||||||
if (timeZoneInfo == null)
|
|
||||||
throw new TimeZoneNotFoundException ();
|
|
||||||
return timeZoneInfo;
|
|
||||||
#else
|
|
||||||
// Local requires special logic that already exists in the Local property (bug #326)
|
// Local requires special logic that already exists in the Local property (bug #326)
|
||||||
if (id == "Local")
|
if (id == "Local")
|
||||||
return Local;
|
return Local;
|
||||||
@ -427,12 +433,16 @@ namespace System
|
|||||||
using (Stream stream = GetMonoTouchData (id)) {
|
using (Stream stream = GetMonoTouchData (id)) {
|
||||||
return BuildFromStream (id, stream);
|
return BuildFromStream (id, stream);
|
||||||
}
|
}
|
||||||
|
#elif MONODROID
|
||||||
|
var timeZoneInfo = AndroidTimeZones.GetTimeZone (id, id);
|
||||||
|
if (timeZoneInfo == null)
|
||||||
|
throw new TimeZoneNotFoundException ();
|
||||||
|
return timeZoneInfo;
|
||||||
#elif LIBC
|
#elif LIBC
|
||||||
string filepath = Path.Combine (TimeZoneDirectory, id);
|
string filepath = Path.Combine (TimeZoneDirectory, id);
|
||||||
return FindSystemTimeZoneByFileName (id, filepath);
|
return FindSystemTimeZoneByFileName (id, filepath);
|
||||||
#else
|
#else
|
||||||
throw new NotImplementedException ();
|
throw new NotImplementedException ();
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -644,7 +654,7 @@ namespace System
|
|||||||
#endif
|
#endif
|
||||||
#if MONODROID
|
#if MONODROID
|
||||||
foreach (string id in AndroidTimeZones.GetAvailableIds ()) {
|
foreach (string id in AndroidTimeZones.GetAvailableIds ()) {
|
||||||
var tz = AndroidTimeZones.GetTimeZone (id);
|
var tz = AndroidTimeZones.GetTimeZone (id, id);
|
||||||
if (tz != null)
|
if (tz != null)
|
||||||
systemTimeZones.Add (tz);
|
systemTimeZones.Add (tz);
|
||||||
}
|
}
|
||||||
@ -684,13 +694,8 @@ namespace System
|
|||||||
|
|
||||||
public TimeSpan GetUtcOffset (DateTime dateTime)
|
public TimeSpan GetUtcOffset (DateTime dateTime)
|
||||||
{
|
{
|
||||||
if (IsDaylightSavingTime (dateTime)) {
|
bool isDST;
|
||||||
AdjustmentRule rule = GetApplicableRule (dateTime);
|
return GetUtcOffset (dateTime, out isDST);
|
||||||
if (rule != null)
|
|
||||||
return BaseUtcOffset + rule.DaylightDelta;
|
|
||||||
}
|
|
||||||
|
|
||||||
return BaseUtcOffset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimeSpan GetUtcOffset (DateTimeOffset dateTimeOffset)
|
public TimeSpan GetUtcOffset (DateTimeOffset dateTimeOffset)
|
||||||
@ -698,6 +703,82 @@ namespace System
|
|||||||
throw new NotImplementedException ();
|
throw new NotImplementedException ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TimeSpan GetUtcOffset (DateTime dateTime, out bool isDST)
|
||||||
|
{
|
||||||
|
isDST = false;
|
||||||
|
|
||||||
|
TimeZoneInfo tz = this;
|
||||||
|
if (dateTime.Kind == DateTimeKind.Utc)
|
||||||
|
tz = TimeZoneInfo.Utc;
|
||||||
|
|
||||||
|
if (dateTime.Kind == DateTimeKind.Local)
|
||||||
|
tz = TimeZoneInfo.Local;
|
||||||
|
|
||||||
|
bool isTzDst;
|
||||||
|
var tzOffset = GetUtcOffset (dateTime, tz, out isTzDst);
|
||||||
|
|
||||||
|
if (tz == this) {
|
||||||
|
isDST = isTzDst;
|
||||||
|
return tzOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
var utcTicks = dateTime.Ticks - tzOffset.Ticks;
|
||||||
|
if (utcTicks < 0 || utcTicks > DateTime.MaxValue.Ticks)
|
||||||
|
return BaseUtcOffset;
|
||||||
|
|
||||||
|
var utcDateTime = new DateTime (utcTicks, DateTimeKind.Utc);
|
||||||
|
|
||||||
|
return GetUtcOffset (utcDateTime, this, out isDST);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TimeSpan GetUtcOffset (DateTime dateTime, TimeZoneInfo tz, out bool isDST)
|
||||||
|
{
|
||||||
|
if (dateTime.Kind == DateTimeKind.Local && tz != TimeZoneInfo.Local)
|
||||||
|
throw new Exception ();
|
||||||
|
|
||||||
|
isDST = false;
|
||||||
|
|
||||||
|
if (tz == TimeZoneInfo.Utc)
|
||||||
|
return TimeSpan.Zero;
|
||||||
|
|
||||||
|
TimeSpan offset;
|
||||||
|
if (tz.TryGetTransitionOffset(dateTime, out offset, out isDST))
|
||||||
|
return offset;
|
||||||
|
|
||||||
|
if (dateTime.Kind == DateTimeKind.Utc) {
|
||||||
|
var utcRule = tz.GetApplicableRule (dateTime);
|
||||||
|
if (utcRule != null && tz.IsInDST (utcRule, dateTime)) {
|
||||||
|
isDST = true;
|
||||||
|
return tz.BaseUtcOffset + utcRule.DaylightDelta;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tz.BaseUtcOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
var stdTicks = dateTime.Ticks - tz.BaseUtcOffset.Ticks;
|
||||||
|
if (stdTicks < 0 || stdTicks > DateTime.MaxValue.Ticks)
|
||||||
|
return tz.BaseUtcOffset;
|
||||||
|
|
||||||
|
var stdUtcDateTime = new DateTime (stdTicks, DateTimeKind.Utc);
|
||||||
|
var tzRule = tz.GetApplicableRule (stdUtcDateTime);
|
||||||
|
|
||||||
|
DateTime dstUtcDateTime = DateTime.MinValue;
|
||||||
|
if (tzRule != null) {
|
||||||
|
var dstTicks = stdUtcDateTime.Ticks - tzRule.DaylightDelta.Ticks;
|
||||||
|
if (dstTicks < 0 || dstTicks > DateTime.MaxValue.Ticks)
|
||||||
|
return tz.BaseUtcOffset;
|
||||||
|
|
||||||
|
dstUtcDateTime = new DateTime (dstTicks, DateTimeKind.Utc);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tzRule != null && tz.IsInDST (tzRule, stdUtcDateTime) && tz.IsInDST (tzRule, dstUtcDateTime)) {
|
||||||
|
isDST = true;
|
||||||
|
return tz.BaseUtcOffset + tzRule.DaylightDelta;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tz.BaseUtcOffset;
|
||||||
|
}
|
||||||
|
|
||||||
public bool HasSameRules (TimeZoneInfo other)
|
public bool HasSameRules (TimeZoneInfo other)
|
||||||
{
|
{
|
||||||
if (other == null)
|
if (other == null)
|
||||||
@ -752,6 +833,16 @@ namespace System
|
|||||||
throw new NotImplementedException ();
|
throw new NotImplementedException ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsInDST (AdjustmentRule rule, DateTime dateTime)
|
||||||
|
{
|
||||||
|
// Check whether we're in the dateTime year's DST period
|
||||||
|
if (IsInDSTForYear (rule, dateTime, dateTime.Year))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// We might be in the dateTime previous year's DST period
|
||||||
|
return IsInDSTForYear (rule, dateTime, dateTime.Year - 1);
|
||||||
|
}
|
||||||
|
|
||||||
bool IsInDSTForYear (AdjustmentRule rule, DateTime dateTime, int year)
|
bool IsInDSTForYear (AdjustmentRule rule, DateTime dateTime, int year)
|
||||||
{
|
{
|
||||||
DateTime DST_start = TransitionPoint (rule.DaylightTransitionStart, year);
|
DateTime DST_start = TransitionPoint (rule.DaylightTransitionStart, year);
|
||||||
@ -775,24 +866,10 @@ namespace System
|
|||||||
if (!SupportsDaylightSavingTime)
|
if (!SupportsDaylightSavingTime)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//FIXME: do not rely on DateTime implementation !
|
bool isDst;
|
||||||
if ((dateTime.Kind == DateTimeKind.Local || dateTime.Kind == DateTimeKind.Unspecified) && this == TimeZoneInfo.Local)
|
GetUtcOffset (dateTime, out isDst);
|
||||||
return dateTime.IsDaylightSavingTime ();
|
|
||||||
|
|
||||||
//FIXME: do not rely on DateTime implementation !
|
return isDst;
|
||||||
if (dateTime.Kind == DateTimeKind.Local && this != TimeZoneInfo.Utc)
|
|
||||||
return IsDaylightSavingTime (DateTime.SpecifyKind (dateTime.ToUniversalTime (), DateTimeKind.Utc));
|
|
||||||
|
|
||||||
AdjustmentRule rule = GetApplicableRule (dateTime.Date);
|
|
||||||
if (rule == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Check whether we're in the dateTime year's DST period
|
|
||||||
if (IsInDSTForYear (rule, dateTime, dateTime.Year))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// We might be in the dateTime previous year's DST period
|
|
||||||
return IsInDSTForYear (rule, dateTime, dateTime.Year - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsDaylightSavingTime (DateTimeOffset dateTimeOffset)
|
public bool IsDaylightSavingTime (DateTimeOffset dateTimeOffset)
|
||||||
@ -969,6 +1046,40 @@ namespace System
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool TryGetTransitionOffset (DateTime dateTime, out TimeSpan offset,out bool isDst)
|
||||||
|
{
|
||||||
|
offset = BaseUtcOffset;
|
||||||
|
isDst = false;
|
||||||
|
|
||||||
|
if (transitions == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//Transitions are always in standard time
|
||||||
|
DateTime date = dateTime;
|
||||||
|
|
||||||
|
if (dateTime.Kind == DateTimeKind.Local && this != TimeZoneInfo.Local)
|
||||||
|
date = date.ToUniversalTime () + BaseUtcOffset;
|
||||||
|
|
||||||
|
if (dateTime.Kind == DateTimeKind.Utc && this != TimeZoneInfo.Utc)
|
||||||
|
date = date + BaseUtcOffset;
|
||||||
|
|
||||||
|
for (var i = transitions.Count - 1; i >= 0; i--) {
|
||||||
|
var pair = transitions [i];
|
||||||
|
DateTime ttime = pair.Key;
|
||||||
|
TimeType ttype = pair.Value;
|
||||||
|
|
||||||
|
if (ttime > date)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
offset = new TimeSpan (0, 0, ttype.Offset);
|
||||||
|
isDst = ttype.IsDst;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static DateTime TransitionPoint (TransitionTime transition, int year)
|
private static DateTime TransitionPoint (TransitionTime transition, int year)
|
||||||
{
|
{
|
||||||
if (transition.IsFixedDateRule)
|
if (transition.IsFixedDateRule)
|
||||||
@ -1059,6 +1170,7 @@ namespace System
|
|||||||
bool dst_observed = false;
|
bool dst_observed = false;
|
||||||
DateTime dst_start = DateTime.MinValue;
|
DateTime dst_start = DateTime.MinValue;
|
||||||
List<AdjustmentRule> adjustmentRules = new List<AdjustmentRule> ();
|
List<AdjustmentRule> adjustmentRules = new List<AdjustmentRule> ();
|
||||||
|
bool storeTransition = false;
|
||||||
|
|
||||||
for (int i = 0; i < transitions.Count; i++) {
|
for (int i = 0; i < transitions.Count; i++) {
|
||||||
var pair = transitions [i];
|
var pair = transitions [i];
|
||||||
@ -1069,6 +1181,8 @@ namespace System
|
|||||||
standardDisplayName = ttype.Name;
|
standardDisplayName = ttype.Name;
|
||||||
daylightDisplayName = null;
|
daylightDisplayName = null;
|
||||||
baseUtcOffset = new TimeSpan (0, 0, ttype.Offset);
|
baseUtcOffset = new TimeSpan (0, 0, ttype.Offset);
|
||||||
|
if (adjustmentRules.Count > 0) // We ignore AdjustmentRules but store transitions.
|
||||||
|
storeTransition = true;
|
||||||
adjustmentRules = new List<AdjustmentRule> ();
|
adjustmentRules = new List<AdjustmentRule> ();
|
||||||
dst_observed = false;
|
dst_observed = false;
|
||||||
}
|
}
|
||||||
@ -1110,16 +1224,22 @@ namespace System
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adjustmentRules.Count == 0) {
|
TimeZoneInfo tz;
|
||||||
|
if (adjustmentRules.Count == 0 && !storeTransition) {
|
||||||
TimeType t = (TimeType)time_types [0];
|
TimeType t = (TimeType)time_types [0];
|
||||||
if (standardDisplayName == null) {
|
if (standardDisplayName == null) {
|
||||||
standardDisplayName = t.Name;
|
standardDisplayName = t.Name;
|
||||||
baseUtcOffset = new TimeSpan (0, 0, t.Offset);
|
baseUtcOffset = new TimeSpan (0, 0, t.Offset);
|
||||||
}
|
}
|
||||||
return CreateCustomTimeZone (id, baseUtcOffset, id, standardDisplayName);
|
tz = CreateCustomTimeZone (id, baseUtcOffset, id, standardDisplayName);
|
||||||
} else {
|
} else {
|
||||||
return CreateCustomTimeZone (id, baseUtcOffset, id, standardDisplayName, daylightDisplayName, ValidateRules (adjustmentRules).ToArray ());
|
tz = CreateCustomTimeZone (id, baseUtcOffset, id, standardDisplayName, daylightDisplayName, ValidateRules (adjustmentRules).ToArray ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (storeTransition)
|
||||||
|
tz.transitions = transitions;
|
||||||
|
|
||||||
|
return tz;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Dictionary<int, string> ParseAbbreviations (byte [] buffer, int index, int count)
|
static Dictionary<int, string> ParseAbbreviations (byte [] buffer, int index, int count)
|
||||||
|
@ -401,9 +401,14 @@ namespace MonoTests.System.Threading
|
|||||||
{
|
{
|
||||||
var v = new ReaderWriterLockSlim ();
|
var v = new ReaderWriterLockSlim ();
|
||||||
int local = 10;
|
int local = 10;
|
||||||
|
int ready_count = 0;
|
||||||
|
int entered_count = 0;
|
||||||
|
const int thread_count = 10;
|
||||||
|
|
||||||
var r = from i in Enumerable.Range (1, 10) select new Thread (() => {
|
var r = from i in Enumerable.Range (1, thread_count) select new Thread (() => {
|
||||||
|
Interlocked.Increment (ref ready_count);
|
||||||
v.EnterReadLock ();
|
v.EnterReadLock ();
|
||||||
|
Interlocked.Increment (ref entered_count);
|
||||||
|
|
||||||
Assert.AreEqual (11, local);
|
Assert.AreEqual (11, local);
|
||||||
});
|
});
|
||||||
@ -415,12 +420,16 @@ namespace MonoTests.System.Threading
|
|||||||
t.Start ();
|
t.Start ();
|
||||||
}
|
}
|
||||||
|
|
||||||
Thread.Sleep (200);
|
while (ready_count != thread_count)
|
||||||
|
Thread.Sleep (10);
|
||||||
|
|
||||||
|
/* Extra up to 2s of sleep to ensure all threads got the chance to enter the lock */
|
||||||
|
for (int i = 0; i < 200 && v.WaitingReadCount != thread_count; ++i)
|
||||||
|
Thread.Sleep (10);
|
||||||
local = 11;
|
local = 11;
|
||||||
|
|
||||||
// FIXME: Don't rely on Thread.Sleep (200)
|
|
||||||
Assert.AreEqual (0, v.WaitingWriteCount, "in waiting write");
|
Assert.AreEqual (0, v.WaitingWriteCount, "in waiting write");
|
||||||
Assert.AreEqual (10, v.WaitingReadCount, "in waiting read");
|
Assert.AreEqual (thread_count, v.WaitingReadCount, "in waiting read");
|
||||||
Assert.AreEqual (0, v.WaitingUpgradeCount, "in waiting upgrade");
|
Assert.AreEqual (0, v.WaitingUpgradeCount, "in waiting upgrade");
|
||||||
v.ExitWriteLock ();
|
v.ExitWriteLock ();
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ namespace MonoTests.System
|
|||||||
DateTime afterDST = new DateTime (2007, 10, 28, 2, 0, 0, DateTimeKind.Unspecified);
|
DateTime afterDST = new DateTime (2007, 10, 28, 2, 0, 0, DateTimeKind.Unspecified);
|
||||||
Assert.IsFalse (london.IsDaylightSavingTime (beforeDST), "Just before DST");
|
Assert.IsFalse (london.IsDaylightSavingTime (beforeDST), "Just before DST");
|
||||||
Assert.IsTrue (london.IsDaylightSavingTime (startDST), "the first seconds of DST");
|
Assert.IsTrue (london.IsDaylightSavingTime (startDST), "the first seconds of DST");
|
||||||
Assert.IsTrue (london.IsDaylightSavingTime (endDST), "The last seconds of DST");
|
Assert.IsFalse (london.IsDaylightSavingTime (endDST), "The last seconds of DST");
|
||||||
Assert.IsFalse (london.IsDaylightSavingTime (afterDST), "Just after DST");
|
Assert.IsFalse (london.IsDaylightSavingTime (afterDST), "Just after DST");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -804,6 +804,143 @@ namespace MonoTests.System
|
|||||||
Assert.IsTrue (london.Equals (deserialized));
|
Assert.IsTrue (london.Equals (deserialized));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestFixture]
|
||||||
|
public class MultipleDaylightSavingTimeTests {
|
||||||
|
private TimeZoneInfo cairo;
|
||||||
|
private DateTime dst1Start;
|
||||||
|
private DateTime dst1End;
|
||||||
|
private DateTime dst2Start;
|
||||||
|
private DateTime dst2End;
|
||||||
|
|
||||||
|
private TimeSpan baseUtcOffset;
|
||||||
|
private TimeSpan dstUtcOffset;
|
||||||
|
private TimeSpan dstOffset;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void CreateTimeZones ()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
From 1/1/2014 12:00:00 AM to 6/30/2014 12:00:00 AM
|
||||||
|
Delta: 01:00:00
|
||||||
|
Begins at 12:00 AM on 16 May
|
||||||
|
Ends at 1:00 AM on 29 June
|
||||||
|
From 7/1/2014 12:00:00 AM to 12/31/2014 12:00:00 AM
|
||||||
|
Delta: 01:00:00
|
||||||
|
Begins at 12:00 AM on 29 July
|
||||||
|
Ends at 12:00 AM on 26 September
|
||||||
|
*/
|
||||||
|
dst1Start = new DateTime (2014, 5, 16);
|
||||||
|
dst1End = new DateTime (2014, 6, 29);
|
||||||
|
dst2Start = new DateTime (2014, 7, 29);
|
||||||
|
dst2End = new DateTime (2014, 9, 26);
|
||||||
|
|
||||||
|
baseUtcOffset = new TimeSpan (2, 0, 0);
|
||||||
|
dstUtcOffset = new TimeSpan (3, 0, 0);
|
||||||
|
dstOffset = dstUtcOffset - baseUtcOffset;
|
||||||
|
|
||||||
|
var rule1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (
|
||||||
|
new DateTime (2014, 1, 1), new DateTime (2014, 6, 30), dstOffset,
|
||||||
|
CreateFixedDateRule (dst1Start), CreateFixedDateRule (dst1End));
|
||||||
|
|
||||||
|
var rule2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (
|
||||||
|
new DateTime (2014, 7, 1), new DateTime (2014, 12, 31), dstOffset,
|
||||||
|
CreateFixedDateRule (dst2Start), CreateFixedDateRule (dst2End));
|
||||||
|
|
||||||
|
cairo = TimeZoneInfo.CreateCustomTimeZone ("Africa/Cairo", baseUtcOffset, "Africa/Cairo", "EET", "EEST",
|
||||||
|
new [] {rule1, rule2});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TimeZoneInfo.TransitionTime CreateFixedDateRule (DateTime dateTime)
|
||||||
|
{
|
||||||
|
var time = new DateTime (dateTime.Ticks - dateTime.Date.Ticks);
|
||||||
|
return TimeZoneInfo.TransitionTime.CreateFixedDateRule (time, dateTime.Month, dateTime.Day);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void GetUtcOffset_FromUTC ()
|
||||||
|
{
|
||||||
|
var d = dst1Start.Add (-baseUtcOffset);
|
||||||
|
d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst1End.Add (-baseUtcOffset-dstOffset);
|
||||||
|
d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst2Start.Add (-baseUtcOffset);
|
||||||
|
d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst2End.Add (-baseUtcOffset-dstOffset);
|
||||||
|
d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void GetUtcOffset_FromLocal ()
|
||||||
|
{
|
||||||
|
var d = dst1Start.Add (-baseUtcOffset);
|
||||||
|
d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
|
||||||
|
d = d.ToLocalTime ();
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst1End.Add (-baseUtcOffset-dstOffset);
|
||||||
|
d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
|
||||||
|
d = d.ToLocalTime ();
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst2Start.Add (-baseUtcOffset);
|
||||||
|
d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
|
||||||
|
d = d.ToLocalTime ();
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst2End.Add (-baseUtcOffset-dstOffset);
|
||||||
|
d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
|
||||||
|
d = d.ToLocalTime ();
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void GetUtcOffset_FromUnspecified ()
|
||||||
|
{
|
||||||
|
var d = dst1Start.Add (dstOffset);
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst1End.Add (-dstOffset);
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst2Start.Add (dstOffset);
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
|
||||||
|
d = dst2End.Add (-dstOffset);
|
||||||
|
Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
|
||||||
|
Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,109 +1,4 @@
|
|||||||
Assembly/AssemblyInfo.cs
|
#include mobile_common_System.Core.dll.sources
|
||||||
System/Actions.cs
|
|
||||||
System/Funcs.cs
|
#include dynamic_System.Core.dll.sources
|
||||||
System/InvalidTimeZoneException.cs
|
|
||||||
System/TimeZoneInfo.AdjustmentRule.cs
|
|
||||||
System/TimeZoneInfo.cs
|
|
||||||
System/TimeZoneInfo.Serialization.cs
|
|
||||||
System/TimeZoneInfo.TransitionTime.cs
|
|
||||||
System/TimeZoneNotFoundException.cs
|
|
||||||
System/Util.cs
|
|
||||||
System.Runtime.CompilerServices/DynamicAttribute.cs
|
|
||||||
System.Runtime.CompilerServices/ExecutionScope.cs
|
|
||||||
System.Runtime.CompilerServices/ExtensionAttribute.cs
|
|
||||||
System.Runtime.CompilerServices/IStrongBox.cs
|
|
||||||
System.Runtime.CompilerServices/StrongBox_T.cs
|
|
||||||
System.Linq/Check.cs
|
|
||||||
System.Linq/Enumerable.cs
|
|
||||||
System.Linq/QueryableEnumerable.cs
|
|
||||||
System.Linq/QueryableTransformer.cs
|
|
||||||
System.Linq/Grouping.cs
|
|
||||||
System.Linq/IGrouping.cs
|
|
||||||
System.Linq/IOrderedQueryable.cs
|
|
||||||
System.Linq/IOrderedQueryable_T.cs
|
|
||||||
System.Linq/IOrderedEnumerable_T.cs
|
|
||||||
System.Linq/IQueryable.cs
|
|
||||||
System.Linq/IQueryable_T.cs
|
|
||||||
System.Linq/Lookup.cs
|
|
||||||
System.Linq/ILookup_T.cs
|
|
||||||
System.Linq/OrderedEnumerable.cs
|
|
||||||
System.Linq/OrderedSequence.cs
|
|
||||||
System.Linq/Queryable.cs
|
|
||||||
System.Linq/QuickSort.cs
|
|
||||||
System.Linq/SortContext.cs
|
|
||||||
System.Linq/SortDirection.cs
|
|
||||||
System.Linq/SortSequenceContext.cs
|
|
||||||
System.Linq/IQueryProvider.cs
|
|
||||||
System.Collections.Generic/HashSet.cs
|
|
||||||
System.Security.Cryptography/Aes.cs
|
|
||||||
System.Threading/LockRecursionPolicy.cs
|
|
||||||
System.Threading/ReaderWriterLockSlim.cs
|
|
||||||
System.Threading/ThreadLockState.cs
|
|
||||||
System.Threading/ReaderWriterLockSlimExtensions.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryBaseNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryCastNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryChildNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryConcatNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryDefaultEmptyNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryGroupByNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryHeadWorkerNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryJoinNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryMuxNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryOptionNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryOrderByNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryOrderGuardNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryOrderedStreamNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryReverseNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QuerySelectManyNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QuerySelectNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QuerySetNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryStartNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryStreamNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryWhereNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/QueryZipNode.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/SetInclusion.cs
|
|
||||||
System.Linq.Parallel.QueryNodes/WrapHelper.cs
|
|
||||||
System.Linq.Parallel/AggregationList.cs
|
|
||||||
System.Linq.Parallel/ConcurrentGrouping.cs
|
|
||||||
System.Linq.Parallel/ConcurrentLookup.cs
|
|
||||||
System.Linq.Parallel/INodeVisitor.cs
|
|
||||||
System.Linq.Parallel/IVisitableNode.cs
|
|
||||||
System.Linq.Parallel/OrderingEnumerator.cs
|
|
||||||
System.Linq.Parallel/ParallelExecuter.cs
|
|
||||||
System.Linq.Parallel/ParallelPartitioner.cs
|
|
||||||
System.Linq.Parallel/ParallelQueryEnumerator.cs
|
|
||||||
System.Linq.Parallel/ParallelQuickSort.cs
|
|
||||||
System.Linq.Parallel/QueryCheckerVisitor.cs
|
|
||||||
System.Linq.Parallel/QueryIsOrderedVisitor.cs
|
|
||||||
System.Linq.Parallel/QueryOptions.cs
|
|
||||||
System.Linq.Parallel/RangeList.cs
|
|
||||||
System.Linq.Parallel/RepeatList.cs
|
|
||||||
System.Linq.Parallel/ReverseList.cs
|
|
||||||
System.Linq.Parallel/StripPartitioner.cs
|
|
||||||
System.Linq.Parallel/TemporaryArea.cs
|
|
||||||
System.Linq/EnumerableExecutor.cs
|
|
||||||
System.Linq/EnumerableExecutor_T.cs
|
|
||||||
System.Linq/EnumerableQuery.cs
|
|
||||||
System.Linq/EnumerableQuery_T.cs
|
|
||||||
System.Linq/OrderedParallelQuery.cs
|
|
||||||
System.Linq/ParallelEnumerable.cs
|
|
||||||
System.Linq/ParallelExecutionMode.cs
|
|
||||||
System.Linq/ParallelMergeOptions.cs
|
|
||||||
System.Linq/ParallelQuery.cs
|
|
||||||
System.IO.MemoryMappedFiles/MemoryMappedFile.cs
|
|
||||||
System.IO.MemoryMappedFiles/MemoryMappedFileAccess.cs
|
|
||||||
System.IO.MemoryMappedFiles/MemoryMappedFileOptions.cs
|
|
||||||
System.IO.MemoryMappedFiles/MemoryMappedFileRights.cs
|
|
||||||
System.IO.MemoryMappedFiles/MemoryMappedFileSecurity.cs
|
|
||||||
System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs
|
|
||||||
System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs
|
|
||||||
Microsoft.Win32.SafeHandles/SafeMemoryMappedFileHandle.cs
|
|
||||||
Microsoft.Win32.SafeHandles/SafeMemoryMappedViewHandle.cs
|
|
||||||
System.IO/HandleInheritability.cs
|
|
||||||
System.Threading.Tasks/TaskExtensions.cs
|
|
||||||
System.Linq.Expressions/Extensions.cs
|
|
||||||
System.Linq.Expressions/ExpressionTransformer.cs
|
|
||||||
../dlr/Runtime/Microsoft.Scripting.Core/Ast/DynamicExpression.cs
|
|
||||||
../dlr/Runtime/Microsoft.Scripting.Core/Compiler/Closure.cs
|
|
||||||
System.Linq.Expressions/DynamicExpressionVisitor.cs
|
|
||||||
|
|
||||||
|
108
mcs/class/System.Core/mobile_common_System.Core.dll.sources
Normal file
108
mcs/class/System.Core/mobile_common_System.Core.dll.sources
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
Assembly/AssemblyInfo.cs
|
||||||
|
System/Actions.cs
|
||||||
|
System/Funcs.cs
|
||||||
|
System/InvalidTimeZoneException.cs
|
||||||
|
System/TimeZoneInfo.AdjustmentRule.cs
|
||||||
|
System/TimeZoneInfo.cs
|
||||||
|
System/TimeZoneInfo.Serialization.cs
|
||||||
|
System/TimeZoneInfo.TransitionTime.cs
|
||||||
|
System/TimeZoneNotFoundException.cs
|
||||||
|
System/Util.cs
|
||||||
|
System.Runtime.CompilerServices/DynamicAttribute.cs
|
||||||
|
System.Runtime.CompilerServices/ExecutionScope.cs
|
||||||
|
System.Runtime.CompilerServices/ExtensionAttribute.cs
|
||||||
|
System.Runtime.CompilerServices/IStrongBox.cs
|
||||||
|
System.Runtime.CompilerServices/StrongBox_T.cs
|
||||||
|
System.Linq/Check.cs
|
||||||
|
System.Linq/Enumerable.cs
|
||||||
|
System.Linq/QueryableEnumerable.cs
|
||||||
|
System.Linq/QueryableTransformer.cs
|
||||||
|
System.Linq/Grouping.cs
|
||||||
|
System.Linq/IGrouping.cs
|
||||||
|
System.Linq/IOrderedQueryable.cs
|
||||||
|
System.Linq/IOrderedQueryable_T.cs
|
||||||
|
System.Linq/IOrderedEnumerable_T.cs
|
||||||
|
System.Linq/IQueryable.cs
|
||||||
|
System.Linq/IQueryable_T.cs
|
||||||
|
System.Linq/Lookup.cs
|
||||||
|
System.Linq/ILookup_T.cs
|
||||||
|
System.Linq/OrderedEnumerable.cs
|
||||||
|
System.Linq/OrderedSequence.cs
|
||||||
|
System.Linq/Queryable.cs
|
||||||
|
System.Linq/QuickSort.cs
|
||||||
|
System.Linq/SortContext.cs
|
||||||
|
System.Linq/SortDirection.cs
|
||||||
|
System.Linq/SortSequenceContext.cs
|
||||||
|
System.Linq/IQueryProvider.cs
|
||||||
|
System.Collections.Generic/HashSet.cs
|
||||||
|
System.Security.Cryptography/Aes.cs
|
||||||
|
System.Threading/LockRecursionPolicy.cs
|
||||||
|
System.Threading/ReaderWriterLockSlim.cs
|
||||||
|
System.Threading/ThreadLockState.cs
|
||||||
|
System.Threading/ReaderWriterLockSlimExtensions.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryBaseNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryCastNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryChildNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryConcatNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryDefaultEmptyNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryGroupByNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryHeadWorkerNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryJoinNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryMuxNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryOptionNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryOrderByNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryOrderGuardNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryOrderedStreamNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryReverseNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QuerySelectManyNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QuerySelectNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QuerySetNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryStartNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryStreamNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryWhereNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/QueryZipNode.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/SetInclusion.cs
|
||||||
|
System.Linq.Parallel.QueryNodes/WrapHelper.cs
|
||||||
|
System.Linq.Parallel/AggregationList.cs
|
||||||
|
System.Linq.Parallel/ConcurrentGrouping.cs
|
||||||
|
System.Linq.Parallel/ConcurrentLookup.cs
|
||||||
|
System.Linq.Parallel/INodeVisitor.cs
|
||||||
|
System.Linq.Parallel/IVisitableNode.cs
|
||||||
|
System.Linq.Parallel/OrderingEnumerator.cs
|
||||||
|
System.Linq.Parallel/ParallelExecuter.cs
|
||||||
|
System.Linq.Parallel/ParallelPartitioner.cs
|
||||||
|
System.Linq.Parallel/ParallelQueryEnumerator.cs
|
||||||
|
System.Linq.Parallel/ParallelQuickSort.cs
|
||||||
|
System.Linq.Parallel/QueryCheckerVisitor.cs
|
||||||
|
System.Linq.Parallel/QueryIsOrderedVisitor.cs
|
||||||
|
System.Linq.Parallel/QueryOptions.cs
|
||||||
|
System.Linq.Parallel/RangeList.cs
|
||||||
|
System.Linq.Parallel/RepeatList.cs
|
||||||
|
System.Linq.Parallel/ReverseList.cs
|
||||||
|
System.Linq.Parallel/StripPartitioner.cs
|
||||||
|
System.Linq.Parallel/TemporaryArea.cs
|
||||||
|
System.Linq/EnumerableExecutor.cs
|
||||||
|
System.Linq/EnumerableExecutor_T.cs
|
||||||
|
System.Linq/EnumerableQuery.cs
|
||||||
|
System.Linq/EnumerableQuery_T.cs
|
||||||
|
System.Linq/OrderedParallelQuery.cs
|
||||||
|
System.Linq/ParallelEnumerable.cs
|
||||||
|
System.Linq/ParallelExecutionMode.cs
|
||||||
|
System.Linq/ParallelMergeOptions.cs
|
||||||
|
System.Linq/ParallelQuery.cs
|
||||||
|
System.IO.MemoryMappedFiles/MemoryMappedFile.cs
|
||||||
|
System.IO.MemoryMappedFiles/MemoryMappedFileAccess.cs
|
||||||
|
System.IO.MemoryMappedFiles/MemoryMappedFileOptions.cs
|
||||||
|
System.IO.MemoryMappedFiles/MemoryMappedFileRights.cs
|
||||||
|
System.IO.MemoryMappedFiles/MemoryMappedFileSecurity.cs
|
||||||
|
System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs
|
||||||
|
System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs
|
||||||
|
Microsoft.Win32.SafeHandles/SafeMemoryMappedFileHandle.cs
|
||||||
|
Microsoft.Win32.SafeHandles/SafeMemoryMappedViewHandle.cs
|
||||||
|
System.IO/HandleInheritability.cs
|
||||||
|
System.Threading.Tasks/TaskExtensions.cs
|
||||||
|
System.Linq.Expressions/Extensions.cs
|
||||||
|
System.Linq.Expressions/ExpressionTransformer.cs
|
||||||
|
../dlr/Runtime/Microsoft.Scripting.Core/Ast/DynamicExpression.cs
|
||||||
|
../dlr/Runtime/Microsoft.Scripting.Core/Compiler/Closure.cs
|
||||||
|
System.Linq.Expressions/DynamicExpressionVisitor.cs
|
@ -0,0 +1,2 @@
|
|||||||
|
#include mobile_common_System.Core.dll.sources
|
||||||
|
#include interpreter_System.Core.dll.sources
|
@ -1,4 +1,4 @@
|
|||||||
#include mobile_System.Core.dll.sources
|
#include mobile_common_System.Core.dll.sources
|
||||||
|
|
||||||
#include dynamic_System.Core.dll.sources
|
#include dynamic_System.Core.dll.sources
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
#include mobile_System.Core.dll.sources
|
#include mobile_common_System.Core.dll.sources
|
||||||
#include interpreter_System.Core.dll.sources
|
#include interpreter_System.Core.dll.sources
|
||||||
System/TimeZoneInfo.MonoTouch.cs
|
System/TimeZoneInfo.MonoTouch.cs
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include mobile_System.Core.dll.sources
|
#include mobile_common_System.Core.dll.sources
|
||||||
|
|
||||||
#include dynamic_System.Core.dll.sources
|
#include dynamic_System.Core.dll.sources
|
||||||
|
|
||||||
|
@ -830,9 +830,12 @@ namespace DbLinq.Data.Linq
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MethodInfo _WhereMethod = typeof(Queryable).GetMethods().First(m => m.Name == "Where");
|
private static MethodInfo _WhereMethod;
|
||||||
internal object GetOtherTableQuery(Expression predicate, ParameterExpression parameter, Type otherTableType, IQueryable otherTable)
|
internal object GetOtherTableQuery(Expression predicate, ParameterExpression parameter, Type otherTableType, IQueryable otherTable)
|
||||||
{
|
{
|
||||||
|
if (_WhereMethod == null)
|
||||||
|
System.Threading.Interlocked.CompareExchange (ref _WhereMethod, typeof(Queryable).GetMethods().First(m => m.Name == "Where"), null);
|
||||||
|
|
||||||
//predicate: other.EmployeeID== "WARTH"
|
//predicate: other.EmployeeID== "WARTH"
|
||||||
Expression lambdaPredicate = Expression.Lambda(predicate, parameter);
|
Expression lambdaPredicate = Expression.Lambda(predicate, parameter);
|
||||||
//lambdaPredicate: other=>other.EmployeeID== "WARTH"
|
//lambdaPredicate: other=>other.EmployeeID== "WARTH"
|
||||||
|
@ -95,7 +95,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
IntPtr valuep,
|
IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -111,7 +111,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref IntPtr valuep,
|
ref IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -127,7 +127,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
byte[] valuep,
|
byte[] valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -142,7 +142,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
IntPtr valuep,
|
IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -157,7 +157,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
byte[] valuep,
|
byte[] valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -172,7 +172,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref IntPtr valuep,
|
ref IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -193,8 +193,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
IntPtr valuep,
|
IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U4)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U4)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
ref short rlenp,
|
IntPtr rlenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint mode);
|
uint mode);
|
||||||
|
|
||||||
@ -206,8 +206,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref IntPtr valuep,
|
ref IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U4)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U4)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
ref short rlenp,
|
IntPtr rlenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint mode);
|
uint mode);
|
||||||
|
|
||||||
@ -547,7 +547,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
IntPtr valuep,
|
IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
OciDataType dty,
|
OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -558,7 +558,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
Trace.WriteLineIf(traceOci, "OCIBindByName", "OCI");
|
Trace.WriteLineIf(traceOci, "OCIBindByName", "OCI");
|
||||||
#endif
|
#endif
|
||||||
return OciNativeCalls.OCIBindByName (stmtp, out bindpp, errhp, placeholder, placeh_len, valuep,
|
return OciNativeCalls.OCIBindByName (stmtp, out bindpp, errhp, placeholder, placeh_len, valuep,
|
||||||
value_sz, dty, ref indp, alenp, rcodep, maxarr_len, curelp, mode);
|
value_sz, dty, indp, alenp, rcodep, maxarr_len, curelp, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int OCIBindByNameRef (IntPtr stmtp,
|
internal static int OCIBindByNameRef (IntPtr stmtp,
|
||||||
@ -569,7 +569,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref IntPtr valuep,
|
ref IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
OciDataType dty,
|
OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -580,7 +580,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
Trace.WriteLineIf(traceOci, "OCIBindByName", "OCI");
|
Trace.WriteLineIf(traceOci, "OCIBindByName", "OCI");
|
||||||
#endif
|
#endif
|
||||||
return OciNativeCalls.OCIBindByNameRef (stmtp, out bindpp, errhp, placeholder, placeh_len, ref valuep,
|
return OciNativeCalls.OCIBindByNameRef (stmtp, out bindpp, errhp, placeholder, placeh_len, ref valuep,
|
||||||
value_sz, dty, ref indp, alenp, rcodep, maxarr_len, curelp, mode);
|
value_sz, dty, indp, alenp, rcodep, maxarr_len, curelp, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int OCIBindByNameBytes (IntPtr stmtp,
|
internal static int OCIBindByNameBytes (IntPtr stmtp,
|
||||||
@ -591,7 +591,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
byte[] valuep,
|
byte[] valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -602,7 +602,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
Trace.WriteLineIf(traceOci, "OCIBindByName", "OCI");
|
Trace.WriteLineIf(traceOci, "OCIBindByName", "OCI");
|
||||||
#endif
|
#endif
|
||||||
return OciNativeCalls.OCIBindByNameBytes (stmtp, out bindpp, errhp, placeholder, placeh_len, valuep,
|
return OciNativeCalls.OCIBindByNameBytes (stmtp, out bindpp, errhp, placeholder, placeh_len, valuep,
|
||||||
value_sz, dty, ref indp, alenp, rcodep, maxarr_len, curelp, mode);
|
value_sz, dty, indp, alenp, rcodep, maxarr_len, curelp, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int OCIBindByPos (IntPtr stmtp,
|
internal static int OCIBindByPos (IntPtr stmtp,
|
||||||
@ -612,7 +612,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
IntPtr valuep,
|
IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -623,7 +623,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
Trace.WriteLineIf(traceOci, "OCIBindByPos", "OCI");
|
Trace.WriteLineIf(traceOci, "OCIBindByPos", "OCI");
|
||||||
#endif
|
#endif
|
||||||
return OciNativeCalls.OCIBindByPos (stmtp, out bindpp, errhp, position, valuep,
|
return OciNativeCalls.OCIBindByPos (stmtp, out bindpp, errhp, position, valuep,
|
||||||
value_sz, dty, ref indp, alenp, rcodep, maxarr_len, curelp, mode);
|
value_sz, dty, indp, alenp, rcodep, maxarr_len, curelp, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int OCIBindByPosRef (IntPtr stmtp,
|
internal static int OCIBindByPosRef (IntPtr stmtp,
|
||||||
@ -633,7 +633,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref IntPtr valuep,
|
ref IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -644,7 +644,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
Trace.WriteLineIf(traceOci, "OCIBindByPos", "OCI");
|
Trace.WriteLineIf(traceOci, "OCIBindByPos", "OCI");
|
||||||
#endif
|
#endif
|
||||||
return OciNativeCalls.OCIBindByPosRef (stmtp, out bindpp, errhp, position, ref valuep,
|
return OciNativeCalls.OCIBindByPosRef (stmtp, out bindpp, errhp, position, ref valuep,
|
||||||
value_sz, dty, ref indp, alenp, rcodep, maxarr_len, curelp, mode);
|
value_sz, dty, indp, alenp, rcodep, maxarr_len, curelp, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int OCIBindByPosBytes (IntPtr stmtp,
|
internal static int OCIBindByPosBytes (IntPtr stmtp,
|
||||||
@ -654,7 +654,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
byte[] valuep,
|
byte[] valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
[MarshalAs (UnmanagedType.U2)] OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
IntPtr alenp,
|
IntPtr alenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint maxarr_len,
|
uint maxarr_len,
|
||||||
@ -665,7 +665,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
Trace.WriteLineIf(traceOci, "OCIBindByPos", "OCI");
|
Trace.WriteLineIf(traceOci, "OCIBindByPos", "OCI");
|
||||||
#endif
|
#endif
|
||||||
return OciNativeCalls.OCIBindByPosBytes (stmtp, out bindpp, errhp, position, valuep,
|
return OciNativeCalls.OCIBindByPosBytes (stmtp, out bindpp, errhp, position, valuep,
|
||||||
value_sz, dty, ref indp, alenp, rcodep, maxarr_len, curelp, mode);
|
value_sz, dty, indp, alenp, rcodep, maxarr_len, curelp, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport ("oci")]
|
[DllImport ("oci")]
|
||||||
@ -723,8 +723,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
IntPtr valuep,
|
IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
OciDataType dty,
|
OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
ref short rlenp,
|
IntPtr rlenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint mode)
|
uint mode)
|
||||||
{
|
{
|
||||||
@ -732,7 +732,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
Trace.WriteLineIf(traceOci, "OCIDefineByPos", "OCI");
|
Trace.WriteLineIf(traceOci, "OCIDefineByPos", "OCI");
|
||||||
#endif
|
#endif
|
||||||
return OciNativeCalls.OCIDefineByPos (stmtp, out defnpp, errhp, position, valuep,
|
return OciNativeCalls.OCIDefineByPos (stmtp, out defnpp, errhp, position, valuep,
|
||||||
value_sz, dty, ref indp, ref rlenp, rcodep, mode);
|
value_sz, dty, indp, rlenp, rcodep, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int OCIDefineByPosPtr (IntPtr stmtp,
|
internal static int OCIDefineByPosPtr (IntPtr stmtp,
|
||||||
@ -742,8 +742,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref IntPtr valuep,
|
ref IntPtr valuep,
|
||||||
int value_sz,
|
int value_sz,
|
||||||
OciDataType dty,
|
OciDataType dty,
|
||||||
ref short indp,
|
IntPtr indp,
|
||||||
ref short rlenp,
|
IntPtr rlenp,
|
||||||
IntPtr rcodep,
|
IntPtr rcodep,
|
||||||
uint mode)
|
uint mode)
|
||||||
{
|
{
|
||||||
@ -751,7 +751,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
Trace.WriteLineIf(traceOci, "OCIDefineByPosPtr", "OCI");
|
Trace.WriteLineIf(traceOci, "OCIDefineByPosPtr", "OCI");
|
||||||
#endif
|
#endif
|
||||||
return OciNativeCalls.OCIDefineByPosPtr (stmtp, out defnpp, errhp, position, ref valuep,
|
return OciNativeCalls.OCIDefineByPosPtr (stmtp, out defnpp, errhp, position, ref valuep,
|
||||||
value_sz, dty, ref indp, ref rlenp, rcodep, mode);
|
value_sz, dty, indp, rlenp, rcodep, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int OCIDescriptorFree (IntPtr hndlp,
|
internal static int OCIDescriptorFree (IntPtr hndlp,
|
||||||
|
@ -32,16 +32,16 @@ namespace System.Data.OracleClient.Oci
|
|||||||
|
|
||||||
//IntPtr handle;
|
//IntPtr handle;
|
||||||
IntPtr value;
|
IntPtr value;
|
||||||
short indicator;
|
IntPtr indicator;
|
||||||
//OracleType type;
|
//OracleType type;
|
||||||
OciDataType ociType;
|
OciDataType ociType;
|
||||||
OciDataType definedType;
|
OciDataType definedType;
|
||||||
int definedSize;
|
int definedSize;
|
||||||
short rlenp = 0;
|
IntPtr rlenp;
|
||||||
//short precision;
|
//short precision;
|
||||||
short scale;
|
short scale;
|
||||||
Type fieldType;
|
Type fieldType;
|
||||||
//string name;
|
string name;
|
||||||
|
|
||||||
// Oracle defines the LONG VARCHAR and LONG VARRAW to have a size of 2 to the 31 power - 5
|
// Oracle defines the LONG VARCHAR and LONG VARRAW to have a size of 2 to the 31 power - 5
|
||||||
// see DefineLongVarChar and DefineLongVarRaw
|
// see DefineLongVarChar and DefineLongVarRaw
|
||||||
@ -70,11 +70,13 @@ namespace System.Data.OracleClient.Oci
|
|||||||
{
|
{
|
||||||
OciParameterDescriptor parameter = ((OciStatementHandle) Parent).GetParameter (position);
|
OciParameterDescriptor parameter = ((OciStatementHandle) Parent).GetParameter (position);
|
||||||
|
|
||||||
//name = parameter.GetName ();
|
name = parameter.GetName ();
|
||||||
definedType = parameter.GetDataType ();
|
definedType = parameter.GetDataType ();
|
||||||
definedSize = parameter.GetDataSize ();
|
definedSize = parameter.GetDataSize ();
|
||||||
//precision = parameter.GetPrecision ();
|
//precision = parameter.GetPrecision ();
|
||||||
scale = parameter.GetScale ();
|
scale = parameter.GetScale ();
|
||||||
|
rlenp = OciCalls.AllocateClear (sizeof(short));
|
||||||
|
indicator = OciCalls.AllocateClear (sizeof(short));
|
||||||
|
|
||||||
Define (position, connection);
|
Define (position, connection);
|
||||||
|
|
||||||
@ -103,7 +105,7 @@ namespace System.Data.OracleClient.Oci
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal bool IsNull {
|
internal bool IsNull {
|
||||||
get { return (indicator == -1); }
|
get { return (Indicator == -1); }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal short Scale {
|
internal short Scale {
|
||||||
@ -111,7 +113,13 @@ namespace System.Data.OracleClient.Oci
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal short Size {
|
internal short Size {
|
||||||
get { return rlenp; }
|
get { return(Marshal.ReadInt16(rlenp)); }
|
||||||
|
set { Marshal.WriteInt16(rlenp, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
internal short Indicator {
|
||||||
|
get { return(Marshal.ReadInt16(indicator)); }
|
||||||
|
set { Marshal.WriteInt16(indicator, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal IntPtr Value {
|
internal IntPtr Value {
|
||||||
@ -192,8 +200,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref value,
|
ref value,
|
||||||
definedSize,
|
definedSize,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
@ -222,8 +230,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
value,
|
value,
|
||||||
definedSize,
|
definedSize,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
@ -261,11 +269,11 @@ namespace System.Data.OracleClient.Oci
|
|||||||
value,
|
value,
|
||||||
definedSize,
|
definedSize,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero, 0);
|
IntPtr.Zero, 0);
|
||||||
|
|
||||||
rlenp = (short) definedSize;
|
Size = (short) definedSize;
|
||||||
|
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
OciErrorInfo info = ErrorHandle.HandleError ();
|
OciErrorInfo info = ErrorHandle.HandleError ();
|
||||||
@ -291,8 +299,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
value,
|
value,
|
||||||
maxByteCount,
|
maxByteCount,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0);
|
0);
|
||||||
OciErrorHandle.ThrowExceptionIfError (ErrorHandle, status);
|
OciErrorHandle.ThrowExceptionIfError (ErrorHandle, status);
|
||||||
@ -312,10 +320,10 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ErrorHandle,
|
ErrorHandle,
|
||||||
position + 1,
|
position + 1,
|
||||||
value,
|
value,
|
||||||
definedSize * 2,
|
definedSize,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
@ -357,8 +365,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref value,
|
ref value,
|
||||||
definedSize,
|
definedSize,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
@ -386,8 +394,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
value,
|
value,
|
||||||
definedSize,
|
definedSize,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero, 0);
|
IntPtr.Zero, 0);
|
||||||
|
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
@ -415,8 +423,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
value,
|
value,
|
||||||
definedSize,
|
definedSize,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero, 0);
|
IntPtr.Zero, 0);
|
||||||
|
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
@ -459,8 +467,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
ref value,
|
ref value,
|
||||||
definedSize,
|
definedSize,
|
||||||
ociType,
|
ociType,
|
||||||
ref indicator,
|
indicator,
|
||||||
ref rlenp,
|
rlenp,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
@ -487,6 +495,8 @@ namespace System.Data.OracleClient.Oci
|
|||||||
}
|
}
|
||||||
disposed = true;
|
disposed = true;
|
||||||
} finally {
|
} finally {
|
||||||
|
Marshal.FreeHGlobal (indicator);
|
||||||
|
Marshal.FreeHGlobal (rlenp);
|
||||||
base.Dispose (disposing);
|
base.Dispose (disposing);
|
||||||
value = IntPtr.Zero;
|
value = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
|
@ -39,10 +39,11 @@ namespace System.Data.OracleClient
|
|||||||
[TypeConverter (typeof(OracleParameter.OracleParameterConverter))]
|
[TypeConverter (typeof(OracleParameter.OracleParameterConverter))]
|
||||||
public sealed class OracleParameter :
|
public sealed class OracleParameter :
|
||||||
#if NET_2_0
|
#if NET_2_0
|
||||||
DbParameter, IDbDataParameter, ICloneable
|
DbParameter, IDbDataParameter, ICloneable,
|
||||||
#else
|
#else
|
||||||
MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable
|
MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable,
|
||||||
#endif
|
#endif
|
||||||
|
IDisposable
|
||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
@ -66,6 +67,7 @@ namespace System.Data.OracleClient
|
|||||||
object value = DBNull.Value;
|
object value = DBNull.Value;
|
||||||
OciLobLocator lobLocator; // only if Blob or Clob
|
OciLobLocator lobLocator; // only if Blob or Clob
|
||||||
IntPtr bindOutValue = IntPtr.Zero;
|
IntPtr bindOutValue = IntPtr.Zero;
|
||||||
|
IntPtr indicator = IntPtr.Zero;
|
||||||
OciDateTimeDescriptor dateTimeDesc;
|
OciDateTimeDescriptor dateTimeDesc;
|
||||||
IntPtr cursor = IntPtr.Zero;
|
IntPtr cursor = IntPtr.Zero;
|
||||||
|
|
||||||
@ -77,7 +79,6 @@ namespace System.Data.OracleClient
|
|||||||
bool useRef;
|
bool useRef;
|
||||||
OciDataType bindType;
|
OciDataType bindType;
|
||||||
|
|
||||||
short indicator;
|
|
||||||
int bindSize;
|
int bindSize;
|
||||||
bool sizeManuallySet;
|
bool sizeManuallySet;
|
||||||
|
|
||||||
@ -104,6 +105,7 @@ namespace System.Data.OracleClient
|
|||||||
this.value = value.value;
|
this.value = value.value;
|
||||||
this.lobLocator = value.lobLocator;
|
this.lobLocator = value.lobLocator;
|
||||||
this.oracleTypeSet = value.oracleTypeSet;
|
this.oracleTypeSet = value.oracleTypeSet;
|
||||||
|
this.indicator = OciCalls.AllocateClear (sizeof(short));
|
||||||
}
|
}
|
||||||
|
|
||||||
public OracleParameter ()
|
public OracleParameter ()
|
||||||
@ -119,6 +121,7 @@ namespace System.Data.OracleClient
|
|||||||
this.srcVersion = DataRowVersion.Current;
|
this.srcVersion = DataRowVersion.Current;
|
||||||
this.value = null;
|
this.value = null;
|
||||||
this.oracleTypeSet = false;
|
this.oracleTypeSet = false;
|
||||||
|
this.indicator = OciCalls.AllocateClear (sizeof(short));
|
||||||
}
|
}
|
||||||
|
|
||||||
public OracleParameter (string name, object value)
|
public OracleParameter (string name, object value)
|
||||||
@ -129,6 +132,7 @@ namespace System.Data.OracleClient
|
|||||||
srcColumn = string.Empty;
|
srcColumn = string.Empty;
|
||||||
SourceVersion = DataRowVersion.Current;
|
SourceVersion = DataRowVersion.Current;
|
||||||
InferOracleType (value);
|
InferOracleType (value);
|
||||||
|
this.indicator = OciCalls.AllocateClear (sizeof(short));
|
||||||
#if NET_2_0
|
#if NET_2_0
|
||||||
// Find the OciType before inferring for the size
|
// Find the OciType before inferring for the size
|
||||||
if (value != null && value != DBNull.Value) {
|
if (value != null && value != DBNull.Value) {
|
||||||
@ -173,6 +177,7 @@ namespace System.Data.OracleClient
|
|||||||
OracleType = oracleType;
|
OracleType = oracleType;
|
||||||
SourceColumn = sourceColumn;
|
SourceColumn = sourceColumn;
|
||||||
SourceVersion = sourceVersion;
|
SourceVersion = sourceVersion;
|
||||||
|
this.indicator = OciCalls.AllocateClear (sizeof(short));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -199,6 +204,12 @@ namespace System.Data.OracleClient
|
|||||||
OracleType = oracleType;
|
OracleType = oracleType;
|
||||||
SourceColumn = srcColumn;
|
SourceColumn = srcColumn;
|
||||||
SourceVersion = srcVersion;
|
SourceVersion = srcVersion;
|
||||||
|
this.indicator = OciCalls.AllocateClear (sizeof(short));
|
||||||
|
}
|
||||||
|
|
||||||
|
~OracleParameter ()
|
||||||
|
{
|
||||||
|
Dispose(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion // Constructors
|
#endregion // Constructors
|
||||||
@ -210,6 +221,11 @@ namespace System.Data.OracleClient
|
|||||||
set { container = value; }
|
set { container = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal short Indicator {
|
||||||
|
get { return (Marshal.ReadInt16(indicator)); }
|
||||||
|
set { Marshal.WriteInt16(indicator, value); }
|
||||||
|
}
|
||||||
|
|
||||||
#if !NET_2_0
|
#if !NET_2_0
|
||||||
[Browsable (false)]
|
[Browsable (false)]
|
||||||
[RefreshProperties (RefreshProperties.All)]
|
[RefreshProperties (RefreshProperties.All)]
|
||||||
@ -453,7 +469,6 @@ namespace System.Data.OracleClient
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isnull == true && direction == ParameterDirection.Input) {
|
if (isnull == true && direction == ParameterDirection.Input) {
|
||||||
indicator = 0;
|
|
||||||
bindType = OciDataType.VarChar2;
|
bindType = OciDataType.VarChar2;
|
||||||
bindSize = 0;
|
bindSize = 0;
|
||||||
} else {
|
} else {
|
||||||
@ -465,7 +480,6 @@ namespace System.Data.OracleClient
|
|||||||
case OciDataType.CharZ:
|
case OciDataType.CharZ:
|
||||||
case OciDataType.OciString:
|
case OciDataType.OciString:
|
||||||
bindType = OciDataType.String;
|
bindType = OciDataType.String;
|
||||||
indicator = 0;
|
|
||||||
svalue = "\0";
|
svalue = "\0";
|
||||||
// convert value from managed type to type to marshal
|
// convert value from managed type to type to marshal
|
||||||
if (direction == ParameterDirection.Input ||
|
if (direction == ParameterDirection.Input ||
|
||||||
@ -558,7 +572,7 @@ namespace System.Data.OracleClient
|
|||||||
dt = DateTime.MinValue;
|
dt = DateTime.MinValue;
|
||||||
sDate = "";
|
sDate = "";
|
||||||
if (isnull)
|
if (isnull)
|
||||||
indicator = -1;
|
Indicator = -1;
|
||||||
else if (v is String) {
|
else if (v is String) {
|
||||||
sDate = (string) v;
|
sDate = (string) v;
|
||||||
dt = DateTime.Parse (sDate);
|
dt = DateTime.Parse (sDate);
|
||||||
@ -594,7 +608,7 @@ namespace System.Data.OracleClient
|
|||||||
case OciDataType.Float:
|
case OciDataType.Float:
|
||||||
case OciDataType.Number:
|
case OciDataType.Number:
|
||||||
bindType = OciDataType.String;
|
bindType = OciDataType.String;
|
||||||
indicator = 0;
|
Indicator = 0;
|
||||||
svalue = "\0";
|
svalue = "\0";
|
||||||
// convert value from managed type to type to marshal
|
// convert value from managed type to type to marshal
|
||||||
if (direction == ParameterDirection.Input ||
|
if (direction == ParameterDirection.Input ||
|
||||||
@ -638,7 +652,7 @@ namespace System.Data.OracleClient
|
|||||||
|
|
||||||
bindSize = Size + 5; // 4 bytes prepended for length, bytes, 1 byte NUL character
|
bindSize = Size + 5; // 4 bytes prepended for length, bytes, 1 byte NUL character
|
||||||
|
|
||||||
indicator = 0;
|
Indicator = 0;
|
||||||
svalue = "\0";
|
svalue = "\0";
|
||||||
// convert value from managed type to type to marshal
|
// convert value from managed type to type to marshal
|
||||||
if (direction == ParameterDirection.Input ||
|
if (direction == ParameterDirection.Input ||
|
||||||
@ -758,7 +772,7 @@ namespace System.Data.OracleClient
|
|||||||
case OciDataType.VarRaw:
|
case OciDataType.VarRaw:
|
||||||
bindType = OciDataType.VarRaw;
|
bindType = OciDataType.VarRaw;
|
||||||
bindSize = Size + 2; // include 2 bytes prepended to hold the length
|
bindSize = Size + 2; // include 2 bytes prepended to hold the length
|
||||||
indicator = 0;
|
Indicator = 0;
|
||||||
bytes = new byte [bindSize];
|
bytes = new byte [bindSize];
|
||||||
if (direction == ParameterDirection.Input ||
|
if (direction == ParameterDirection.Input ||
|
||||||
direction == ParameterDirection.InputOutput) {
|
direction == ParameterDirection.InputOutput) {
|
||||||
@ -784,7 +798,7 @@ namespace System.Data.OracleClient
|
|||||||
case OciDataType.LongVarRaw:
|
case OciDataType.LongVarRaw:
|
||||||
bindType = OciDataType.LongVarRaw;
|
bindType = OciDataType.LongVarRaw;
|
||||||
bindSize = Size + 4; // include 4 bytes prepended to hold the length
|
bindSize = Size + 4; // include 4 bytes prepended to hold the length
|
||||||
indicator = 0;
|
Indicator = 0;
|
||||||
bytes = new byte [bindSize];
|
bytes = new byte [bindSize];
|
||||||
if (direction == ParameterDirection.Input ||
|
if (direction == ParameterDirection.Input ||
|
||||||
direction == ParameterDirection.InputOutput) {
|
direction == ParameterDirection.InputOutput) {
|
||||||
@ -854,7 +868,7 @@ namespace System.Data.OracleClient
|
|||||||
ref bindValue,
|
ref bindValue,
|
||||||
bindSize,
|
bindSize,
|
||||||
bindType,
|
bindType,
|
||||||
ref indicator,
|
indicator,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0,
|
0,
|
||||||
@ -870,7 +884,7 @@ namespace System.Data.OracleClient
|
|||||||
ref bindValue,
|
ref bindValue,
|
||||||
bindSize,
|
bindSize,
|
||||||
bindType,
|
bindType,
|
||||||
ref indicator,
|
indicator,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0,
|
0,
|
||||||
@ -887,7 +901,7 @@ namespace System.Data.OracleClient
|
|||||||
ref cursor,
|
ref cursor,
|
||||||
bindSize,
|
bindSize,
|
||||||
bindType,
|
bindType,
|
||||||
ref indicator,
|
indicator,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0,
|
0,
|
||||||
@ -903,7 +917,7 @@ namespace System.Data.OracleClient
|
|||||||
bytes,
|
bytes,
|
||||||
bindSize,
|
bindSize,
|
||||||
bindType,
|
bindType,
|
||||||
ref indicator,
|
indicator,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0,
|
0,
|
||||||
@ -919,7 +933,7 @@ namespace System.Data.OracleClient
|
|||||||
bindValue,
|
bindValue,
|
||||||
bindSize,
|
bindSize,
|
||||||
bindType,
|
bindType,
|
||||||
ref indicator,
|
indicator,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
IntPtr.Zero,
|
IntPtr.Zero,
|
||||||
0,
|
0,
|
||||||
@ -1251,7 +1265,7 @@ namespace System.Data.OracleClient
|
|||||||
// used to update the parameter value
|
// used to update the parameter value
|
||||||
// for Output, the output of InputOutput, and Return parameters
|
// for Output, the output of InputOutput, and Return parameters
|
||||||
value = DBNull.Value;
|
value = DBNull.Value;
|
||||||
if (indicator == -1)
|
if (Indicator == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int rsize = 0;
|
int rsize = 0;
|
||||||
@ -1453,6 +1467,22 @@ namespace System.Data.OracleClient
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose ()
|
||||||
|
{
|
||||||
|
Dispose (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Dispose (bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing) {
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
if (indicator != IntPtr.Zero) {
|
||||||
|
Marshal.FreeHGlobal (indicator);
|
||||||
|
indicator = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion // Methods
|
#endregion // Methods
|
||||||
|
|
||||||
internal sealed class OracleParameterConverter : ExpandableObjectConverter
|
internal sealed class OracleParameterConverter : ExpandableObjectConverter
|
||||||
|
@ -1,2 +1 @@
|
|||||||
#include System.Data.Services.Client.dll.sources
|
#include net_4_5_System.Data.Services.Client.dll.sources
|
||||||
./Client/AssemblyAttributes.cs
|
|
||||||
|
@ -26,9 +26,11 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Data.Services;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class ChangeInterceptorAttributeTests {
|
public class ChangeInterceptorAttributeTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,9 +26,11 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Data.Services;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class DataServiceExceptionTests {
|
public class DataServiceExceptionTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,9 +26,11 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Data.Services;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class DataServiceTests {
|
public class DataServiceTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,10 +26,12 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Data.Services;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class ETagAttributeTests {
|
public class ETagAttributeTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,10 +26,11 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System.Data.Services;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class ExpandSegmentCollectionTests {
|
public class ExpandSegmentCollectionTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,10 +26,12 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Data.Services;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class ExpandSegmentTests {
|
public class ExpandSegmentTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,10 +26,12 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Data.Services;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class IgnorePropertiesAttributeTests {
|
public class IgnorePropertiesAttributeTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,9 +26,10 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System.Data.Services;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class MimeTypeAttributeTests {
|
public class MimeTypeAttributeTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,9 +26,11 @@
|
|||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Data.Services;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace System.Data.Services.Tests {
|
namespace MonoTests.System.Data.Services {
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class QueryInterceptorAttributeTests {
|
public class QueryInterceptorAttributeTests {
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -43,7 +43,6 @@ namespace System.Data.Common {
|
|||||||
readonly IDataReader reader;
|
readonly IDataReader reader;
|
||||||
readonly bool closeReader;
|
readonly bool closeReader;
|
||||||
readonly SchemaInfo [] schema;
|
readonly SchemaInfo [] schema;
|
||||||
readonly object [] values;
|
|
||||||
|
|
||||||
#endregion // Fields
|
#endregion // Fields
|
||||||
|
|
||||||
@ -58,7 +57,6 @@ namespace System.Data.Common {
|
|||||||
{
|
{
|
||||||
this.reader = reader;
|
this.reader = reader;
|
||||||
this.closeReader = closeReader;
|
this.closeReader = closeReader;
|
||||||
this.values = new object [reader.FieldCount];
|
|
||||||
this.schema = LoadSchema (reader);
|
this.schema = LoadSchema (reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +66,12 @@ namespace System.Data.Common {
|
|||||||
|
|
||||||
public object Current {
|
public object Current {
|
||||||
get {
|
get {
|
||||||
|
// DbDataRecordImpl does not do copy of the array
|
||||||
|
// and MoveNext would overwrite any previously filled data
|
||||||
|
var values = new object [reader.FieldCount];
|
||||||
reader.GetValues (values);
|
reader.GetValues (values);
|
||||||
|
|
||||||
|
// TODO: Should not allocate on every property call
|
||||||
return new DbDataRecordImpl (schema, values);
|
return new DbDataRecordImpl (schema, values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@ using System.Xml;
|
|||||||
#if NET_2_0
|
#if NET_2_0
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
#endif
|
#endif
|
||||||
|
using System.Security;
|
||||||
|
|
||||||
namespace System.Data.SqlClient
|
namespace System.Data.SqlClient
|
||||||
{
|
{
|
||||||
@ -93,6 +94,9 @@ namespace System.Data.SqlClient
|
|||||||
// The connection string that identifies this connection
|
// The connection string that identifies this connection
|
||||||
string connectionString;
|
string connectionString;
|
||||||
|
|
||||||
|
// The connection credentials
|
||||||
|
SqlCredential credentials;
|
||||||
|
|
||||||
// The transaction object for the current transaction
|
// The transaction object for the current transaction
|
||||||
SqlTransaction transaction;
|
SqlTransaction transaction;
|
||||||
|
|
||||||
@ -133,6 +137,12 @@ namespace System.Data.SqlClient
|
|||||||
ConnectionString = connectionString;
|
ConnectionString = connectionString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SqlConnection (string connectionString, SqlCredential cred)
|
||||||
|
{
|
||||||
|
ConnectionString = connectionString;
|
||||||
|
Credentials = cred;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion // Constructors
|
#endregion // Constructors
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
@ -155,6 +165,15 @@ namespace System.Data.SqlClient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SqlCredential Credentials {
|
||||||
|
get {
|
||||||
|
return credentials;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
credentials = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if !NET_2_0
|
#if !NET_2_0
|
||||||
[DataSysDescription ("Current connection timeout value, 'Connect Timeout=X' in the ConnectionString.")]
|
[DataSysDescription ("Current connection timeout value, 'Connect Timeout=X' in the ConnectionString.")]
|
||||||
#endif
|
#endif
|
||||||
@ -563,6 +582,16 @@ namespace System.Data.SqlClient
|
|||||||
|
|
||||||
if (!tds.IsConnected) {
|
if (!tds.IsConnected) {
|
||||||
try {
|
try {
|
||||||
|
if (Credentials != null) {
|
||||||
|
if (parms.User != String.Empty)
|
||||||
|
throw new ArgumentException("UserID already specified");
|
||||||
|
if (parms.PasswordSet)
|
||||||
|
throw new ArgumentException("Password already specified");
|
||||||
|
if (parms.DomainLogin != false)
|
||||||
|
throw new ArgumentException("Cannot use credentials with DomainLogin");
|
||||||
|
parms.User = Credentials.UserId;
|
||||||
|
parms.Password = Credentials.Password;
|
||||||
|
}
|
||||||
tds.Connect (parms);
|
tds.Connect (parms);
|
||||||
} catch {
|
} catch {
|
||||||
if (pooling)
|
if (pooling)
|
||||||
@ -879,7 +908,10 @@ namespace System.Data.SqlClient
|
|||||||
break;
|
break;
|
||||||
case "password" :
|
case "password" :
|
||||||
case "pwd" :
|
case "pwd" :
|
||||||
parms.Password = value;
|
parms.Password = new SecureString();
|
||||||
|
foreach (char c in value)
|
||||||
|
parms.Password.AppendChar(c);
|
||||||
|
parms.PasswordSet = true;
|
||||||
break;
|
break;
|
||||||
case "persistsecurityinfo" :
|
case "persistsecurityinfo" :
|
||||||
case "persist security info" :
|
case "persist security info" :
|
||||||
|
76
mcs/class/System.Data/System.Data.SqlClient/SqlCredential.cs
Normal file
76
mcs/class/System.Data/System.Data.SqlClient/SqlCredential.cs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
//
|
||||||
|
// System.Data.SqlClient.SqlCredential.cs
|
||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Neale Ferguson (neale@sinenomine.net)
|
||||||
|
//
|
||||||
|
// Copyright (C) Neale Ferguson, 2014
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Data;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Security;
|
||||||
|
|
||||||
|
namespace System.Data.SqlClient {
|
||||||
|
/// <summary>
|
||||||
|
/// Describes an error from a SQL database.
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
public sealed class SqlCredential
|
||||||
|
{
|
||||||
|
#region Fields
|
||||||
|
|
||||||
|
string uid = "";
|
||||||
|
SecureString pwd = null;
|
||||||
|
|
||||||
|
#endregion // Fields
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
public SqlCredential (string user, SecureString password)
|
||||||
|
{
|
||||||
|
if (user == null)
|
||||||
|
throw new ArgumentNullException("UserID");
|
||||||
|
if (password == null)
|
||||||
|
throw new ArgumentNullException("Password");
|
||||||
|
this.uid = user;
|
||||||
|
this.pwd = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion // Constructors
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
|
||||||
|
public string UserId {
|
||||||
|
get { return uid; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public SecureString Password {
|
||||||
|
get { return pwd; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
@ -289,6 +289,7 @@ System.Data.SqlClient/SqlCommand.cs
|
|||||||
System.Data.SqlClient/SqlCommandBuilder.cs
|
System.Data.SqlClient/SqlCommandBuilder.cs
|
||||||
System.Data.SqlClient/SqlConnection.cs
|
System.Data.SqlClient/SqlConnection.cs
|
||||||
System.Data.SqlClient/SqlConnectionStringBuilder.cs
|
System.Data.SqlClient/SqlConnectionStringBuilder.cs
|
||||||
|
System.Data.SqlClient/SqlCredential.cs
|
||||||
System.Data.SqlClient/SqlDataAdapter.cs
|
System.Data.SqlClient/SqlDataAdapter.cs
|
||||||
System.Data.SqlClient/SqlDataReader.cs
|
System.Data.SqlClient/SqlDataReader.cs
|
||||||
System.Data.SqlClient/SqlDataSourceConverter.cs
|
System.Data.SqlClient/SqlDataSourceConverter.cs
|
||||||
|
@ -118,11 +118,11 @@ namespace System.Data {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool HasErrors {
|
public bool HasErrors {
|
||||||
get {
|
get {
|
||||||
if (RowError != string.Empty)
|
if (!string.IsNullOrEmpty (RowError))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
foreach (String columnError in ColumnErrors) {
|
foreach (String columnError in ColumnErrors) {
|
||||||
if (columnError != null && columnError != string.Empty)
|
if (!string.IsNullOrEmpty (columnError))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -509,7 +509,7 @@ namespace System.Data {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string RowError {
|
public string RowError {
|
||||||
get { return rowError; }
|
get { return rowError; }
|
||||||
set { rowError = value; }
|
set { rowError = value ?? string.Empty; }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal int IndexFromVersion (DataRowVersion version)
|
internal int IndexFromVersion (DataRowVersion version)
|
||||||
|
@ -31,7 +31,7 @@ using System.Data;
|
|||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace Test.System.Data.Common
|
namespace MonoTests.System.Data.Common
|
||||||
{
|
{
|
||||||
internal class DbDataReaderMock : DbDataReader
|
internal class DbDataReaderMock : DbDataReader
|
||||||
{
|
{
|
||||||
|
@ -32,7 +32,7 @@ using System.Data;
|
|||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace Test.System.Data.Common
|
namespace MonoTests.System.Data.Common
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class DbDataReaderTest
|
public class DbDataReaderTest
|
||||||
|
@ -12,6 +12,8 @@ using System.Threading;
|
|||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace MonoTests.System.Data
|
||||||
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class BinarySerializationTest
|
public class BinarySerializationTest
|
||||||
{
|
{
|
||||||
@ -751,3 +753,4 @@ public class BinarySerializationTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
@ -33,7 +33,7 @@ using System.IO;
|
|||||||
using System.Data;
|
using System.Data;
|
||||||
using MonoTests.System.Data.Utils;
|
using MonoTests.System.Data.Utils;
|
||||||
|
|
||||||
namespace MonoTests_System.Data
|
namespace MonoTests.System.Data
|
||||||
{
|
{
|
||||||
[TestFixture] public class ConstraintExceptionTest
|
[TestFixture] public class ConstraintExceptionTest
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,7 @@ using System.Data;
|
|||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace MonoTests_System.Data
|
namespace MonoTests.System.Data
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class DBConcurrencyExceptionTest
|
public class DBConcurrencyExceptionTest
|
||||||
|
@ -739,6 +739,21 @@ namespace MonoTests.System.Data
|
|||||||
Assert.AreEqual(true , dr.HasErrors , "DRW48");
|
Assert.AreEqual(true , dr.HasErrors , "DRW48");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test] public void HasErrorsWithNullError()
|
||||||
|
{
|
||||||
|
DataTable dt = new DataTable("myTable");
|
||||||
|
DataRow dr = dt.NewRow();
|
||||||
|
|
||||||
|
// HasErrors (default)
|
||||||
|
Assert.AreEqual(false, dr.HasErrors, "DRW47.2");
|
||||||
|
|
||||||
|
dr.RowError = null;
|
||||||
|
|
||||||
|
// HasErrors (set/get)
|
||||||
|
Assert.AreEqual(string.Empty , dr.RowError , "DRW48.2");
|
||||||
|
Assert.AreEqual(false , dr.HasErrors , "DRW49.2");
|
||||||
|
}
|
||||||
|
|
||||||
[Test] public void HasVersion_ByDataRowVersion()
|
[Test] public void HasVersion_ByDataRowVersion()
|
||||||
{
|
{
|
||||||
DataTable t = new DataTable("atable");
|
DataTable t = new DataTable("atable");
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user