diff options
89 files changed, 1570 insertions, 3176 deletions
diff --git a/ChangeLog b/ChangeLog index f151e6aa336..7c4aa6bea3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,49 +1,3 @@ -2004-10-14 Joe Shaw <joeshaw@novell.com> - - * man/mono.1: Fix the syntax of the M: trace syntax - -2004-10-10 Zoltan Varga <vargaz@freemail.hu> - - * configure.in: Add some checks for cygwin weirdness. - -2004-09-04 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * configure.in: added check for kqueue. Patch from Geoff Norton - in HEAD. - -2004-08-17 Dick Porter <dick@ximian.com> - - * configure.in: Correct intl library for FreeBSD and OpenBSD. - Fixes bug 62884, patch by Tom McLaughlin (tmclaugh@sdf.lonestar.org). - -2004-07-27 John Merryweather Cooper <john_m_cooper@yahoo.com> - * configure.in: Disable __thread test (TLS) for FreeBSD as - it succeeds on FreeBSD 5.x when it should fail. Fix pthread - library detection for FreeBSD 4.x since pthread is embedded - in libc_r on this platform. Fix some typos in my host - regexes for freebsd. - -2004-07-23 Dick Porter <dick@ximian.com> - - * configure.in: Changes for FreeBSD thread support by John - Merryweather Cooper <john_m_cooper@yahoo.com>. - -2004-07-03 Zoltan Varga <vargaz@freemail.hu> - - * configure.in: Add --with-tls option to replace the misnamed - --with-nptl option. - -2004-06-30 Zoltan Varga <vargaz@freemail.hu> - - * configure.in: Fix trunc check + add SPARC64 defines. - - * marshal.c (mono_marshal_get_managed_wrapper): Handle returning - delegates from a delegate. Fixes #61033. - -2004-06-29 Jackson Harper <jackson@ximian.com> - - * man/gacutil.1: Update man with new command line options. - 2004-06-29 Raja R Harinath <rharinath@novell.com> Atsushi Enomoto <atsushi@ximian.com> diff --git a/configure.in b/configure.in index 9e49c0e772a..248763c5a0d 100644 --- a/configure.in +++ b/configure.in @@ -1,7 +1,7 @@ AC_INIT(README) AC_CANONICAL_SYSTEM AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(mono,1.0.3) +AM_INIT_AUTOMAKE(mono,1.0) AM_MAINTAINER_MODE AC_PROG_LN_S @@ -67,62 +67,7 @@ case "$host" in libdl= libgc_threads=no ;; -# these flags will work for all versions of -STABLE -# - *-*-*freebsd4*) - platform_win32=no - if test "x$PTHREAD_CFLAGS" = "x"; then - CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_FREEBSD_THREADS" - libmono_cflags="-D_THREAD_SAFE" - else - CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS" - libmono_cflags="$PTHREAD_CFLAGS" - fi - if test "x$PTHREAD_LIBS" = "x"; then - LDFLAGS="$LDFLAGS -pthread" - libmono_ldflags="-pthread" - else - LDFLAGS="$LDFLAGS $PTHREAD_LIBS" - libmono_ldflags="$PTHREAD_LIBS" - fi - need_link_unlink=yes - AC_DEFINE(PTHREAD_POINTER_ID) - libdl= - libgc_threads=pthreads -# TLS isn't implemented at all on -STABLE - with_nptl=no - with_tls=pthread - ;; -# older versions of -CURRENT will break with these flags but testing -# indicates these older versions won't run Mono anyway -# - *-*-*freebsd5*) - platform_win32=no - if test "x$PTHREAD_CFLAGS" = "x"; then - CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS" - libmono_cflags= - else - CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS" - libmono_cflags="$PTHREAD_CFLAGS" - fi - if test "x$PTHREAD_LIBS" = "x"; then - LDFLAGS="$LDFLAGS -lpthread" - libmono_ldflags="-lpthread" - else - LDFLAGS="$LDFLAGS $PTHREAD_LIBS" - libmono_ldflags="$PTHREAD_LIBS" - fi - need_link_unlink=yes - AC_DEFINE(PTHREAD_POINTER_ID) - libdl= - libgc_threads=pthreads -# TLS is only partially implemented on -CURRENT (compiler support -# but NOT library support) -# - with_nptl=no - with_tls=pthread - ;; - *-*-*openbsd*) + *-*-*freebsd*|*-*-*openbsd*) platform_win32=no CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_FREEBSD_THREADS" libmono_cflags="-D_THREAD_SAFE" @@ -299,46 +244,13 @@ AC_SUBST(GLIB_LIBS) AC_SUBST(GMODULE_CFLAGS) AC_SUBST(GMODULE_LIBS) -if test x$platform_win32 = xyes; then - AC_MSG_CHECKING(for cygwin glib2-dev package) - if [ cygcheck --f /usr/lib/libglib-2.0.dll.a | grep -q glib2-devel ]; then - AC_MSG_RESULT(found) - AC_MSG_ERROR([Mono cannot be built with the cygwin glib2-devel package installed, because that package doesn't work with -mno-cygwin. Please uninstall it then re-run configure.]) - else - AC_MSG_RESULT(not found, ok) - fi - - AC_MSG_CHECKING(for broken gwin32.h) - glib_include=`$PKG_CONFIG --cflags-only-I glib-2.0 | sed -e 's/ -I.*//g' | sed -e 's/-I//g'` - if test -f $glib_include/glib/gwin32.h; then - if [ grep ftruncate $glib_include/glib/gwin32.h | grep -q define ]; then - AC_MSG_RESULT(failed) - hashmark='#' - AC_MSG_ERROR([Your version of gwin32.h is broken and will cause compilation errors when building mono. Please fix it by deleting the line: '$hashmark define ftruncate...' from '$glib_include/glib/gwin32.h' then re-run configure.]) - fi - fi - AC_MSG_RESULT(ok) -fi - AC_ARG_WITH(gc, [ --with-gc=boehm,included,none],[gc=$with_gc],[gc=$gc_default]) # Enable support for fast thread-local storage # Some systems have broken support, so we allow to disable it. -AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation],[],[with_tls=__thread]) - -# Kept for compatibility -AC_ARG_WITH(nptl, [ --with-nptl=yes,no deprecated, use --with-tls instead],[],[with_nptl=default]) - -if test "x$with_nptl" != "xdefault"; then - if test "x$with_nptl" = "xyes"; then - AC_MSG_WARN([--with-nptl=yes is deprecated, use --with-tls=__thread option instead.]) - with_tls=__thread - fi - if test "x$with_nptl" = "xno"; then - AC_MSG_WARN([--with-nptl=no is deprecated, use --with-tls=pthread option instead.]) - with_tls=pthread - fi -fi +# This is misnamed: __thread support has no relation to NPTL, +# but people already use it... +AC_ARG_WITH(nptl, [ --with-nptl=yes,no enable/disable support for __thread support],[],[with_nptl=yes]) # Enable support for using sigaltstack for SIGSEGV and stack overflow handling # This does not work on some platforms (bug #55253) @@ -487,7 +399,6 @@ if test x$platform_win32 = xno; then AC_CHECK_FUNCS(getpwuid_r) AC_CHECK_FUNCS(getresuid) AC_CHECK_FUNCS(setresuid) - AC_CHECK_FUNCS(kqueue) dnl ****************************************************************** dnl *** Check for large file support *** @@ -730,17 +641,7 @@ if test x$platform_win32 = xno; then dnl ***************************** dnl *** Checks for libpthread *** dnl ***************************** -# on FreeBSD -STABLE, the pthreads functions all reside in libc_r -# and libpthread does not exist -# - case "${host}" in - *-*-*freebsd4*) - AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread") - ;; - *) - AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread") - ;; - esac + AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread") AC_CHECK_HEADERS(pthread.h) AC_CHECK_FUNCS(pthread_mutex_timedlock) AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np) @@ -761,7 +662,7 @@ if test x$platform_win32 = xno; then dnl *** Checks for working __thread *** dnl *********************************** AC_MSG_CHECKING(for working __thread) - if test "x$with_tls" != "x__thread"; then + if test "x$with_nptl" != "xyes"; then AC_MSG_RESULT(disabled) else AC_TRY_RUN([ @@ -1053,9 +954,8 @@ ac_cv_c_socklen_t=yes ]) AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h) - # Simply calling trunc (0.0) is no good since gcc will optimize the call away AC_TRY_LINK([#include <math.h>], - [ static void *p = &trunc; ], + [ trunc(0.0); ], [ AC_DEFINE(HAVE_TRUNC) AC_MSG_RESULT(yes) @@ -1196,11 +1096,7 @@ case "$host" in JIT_SUPPORTED=no ;; sparc*-*-*) - if test "x$ac_cv_sizeof_void_p" = "x8"; then - TARGET=SPARC64 - else - TARGET=SPARC - fi + TARGET=SPARC; arch_target=sparc; JIT_SUPPORTED=yes ACCESS_UNALIGNED="no" @@ -1288,14 +1184,6 @@ case "$host" in LIBC="libc.so.12" INTL="libintl.so.0" ;; - *-*-*freebsd*) - LIBC="libc.so" - INTL="libintl.so" - ;; - *-*-*openbsd*) - LIBC="libc.so" - INTL="libintl.so" - ;; esac AC_SUBST(libsuffix) @@ -1339,7 +1227,6 @@ AM_CONDITIONAL(INSTALL_2_0, test x$PREVIEW = xyes) AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes) AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno) AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) -AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64) AM_CONDITIONAL(X86, test x$TARGET = xX86) AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64) AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA) @@ -1412,7 +1299,7 @@ echo " GC: $gc ICU: $enable_icu - TLS: $with_tls + __thread: $with_nptl SIGALTSTACK: $with_sigaltstack Engine: $jit_status 2.0 Alpha: $PREVIEW diff --git a/doc/pending-classes.in b/doc/pending-classes.in new file mode 100644 index 00000000000..1cdb5a4cb36 --- /dev/null +++ b/doc/pending-classes.in @@ -0,0 +1,246 @@ +System.Object +System.Exception +System.ValueType +System.Delegate +System.MulticastDelegate +System.Enum +System.Activator +System.ArgIterator +System.__ComObject +System.TypedReference +System.Security.AllowPartiallyTrustedCallersAttribute +System.Runtime.Serialization.Formatter +System.Runtime.Serialization.FormatterConverter +System.Runtime.Serialization.FormatterServices +System.Runtime.Serialization.ObjectIDGenerator +System.Runtime.Serialization.ObjectManager +System.Reflection.ModuleResolveEventHandler +System.Reflection.Pointer +System.Globalization.CompareInfo +System.Globalization.HebrewCalendar +System.Globalization.HijriCalendar +System.Globalization.JapaneseCalendar +System.Globalization.KoreanCalendar +System.Globalization.SortKey +System.Globalization.StringInfo +System.Globalization.TaiwanCalendar +System.Globalization.TextElementEnumerator +System.Globalization.TextInfo +System.Globalization.ThaiBuddhistCalendar +System.IO.IsolatedStorage.IsolatedStorageFile +System.Reflection.Emit.MethodRental +System.Runtime.CompilerServices.AccessedThroughPropertyAttribute +System.Runtime.CompilerServices.CallConvCdecl +System.Runtime.CompilerServices.CallConvStdcall +System.Runtime.CompilerServices.CallConvThiscall +System.Runtime.CompilerServices.CallConvFastcall +System.Runtime.CompilerServices.CustomConstantAttribute +System.Runtime.CompilerServices.DateTimeConstantAttribute +System.Runtime.CompilerServices.DiscardableAttribute +System.Runtime.CompilerServices.DecimalConstantAttribute +System.Runtime.CompilerServices.CompilationRelaxationsAttribute +System.Runtime.CompilerServices.CompilerGlobalScopeAttribute +System.Runtime.CompilerServices.IDispatchConstantAttribute +System.Runtime.CompilerServices.IsVolatile +System.Runtime.CompilerServices.IUnknownConstantAttribute +System.Runtime.CompilerServices.RequiredAttributeAttribute +System.Runtime.InteropServices.ArrayWithOffset +System.Runtime.InteropServices.DispIdAttribute +System.Runtime.InteropServices.ClassInterfaceType +System.Runtime.InteropServices.ClassInterfaceAttribute +System.Runtime.InteropServices.ComVisibleAttribute +System.Runtime.InteropServices.LCIDConversionAttribute +System.Runtime.InteropServices.ComRegisterFunctionAttribute +System.Runtime.InteropServices.ComUnregisterFunctionAttribute +System.Runtime.InteropServices.ProgIdAttribute +System.Runtime.InteropServices.ImportedFromTypeLibAttribute +System.Runtime.InteropServices.IDispatchImplType +System.Runtime.InteropServices.IDispatchImplAttribute +System.Runtime.InteropServices.ComSourceInterfacesAttribute +System.Runtime.InteropServices.ComConversionLossAttribute +System.Runtime.InteropServices.TypeLibTypeFlags +System.Runtime.InteropServices.TypeLibFuncFlags +System.Runtime.InteropServices.TypeLibVarFlags +System.Runtime.InteropServices.TypeLibTypeAttribute +System.Runtime.InteropServices.TypeLibFuncAttribute +System.Runtime.InteropServices.TypeLibVarAttribute +System.Runtime.InteropServices.ComImportAttribute +System.Runtime.InteropServices.PreserveSigAttribute +System.Runtime.InteropServices.ComAliasNameAttribute +System.Runtime.InteropServices.AutomationProxyAttribute +System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute +System.Runtime.InteropServices.CoClassAttribute +System.Runtime.InteropServices.ComEventInterfaceAttribute +System.Runtime.InteropServices.COMException +System.Runtime.InteropServices.ComMemberType +System.Runtime.InteropServices.CurrencyWrapper +System.Runtime.InteropServices.DispatchWrapper +System.Runtime.InteropServices.ErrorWrapper +System.Runtime.InteropServices.ExtensibleClassFactory +System.Runtime.InteropServices.HandleRef +System.Runtime.InteropServices.InvalidComObjectException +System.Runtime.InteropServices.InvalidOleVariantTypeException +System.Runtime.InteropServices.TypeLibImporterFlags +System.Runtime.InteropServices.ExporterEventKind +System.Runtime.InteropServices.ITypeLibExporterNotifySink +System.Runtime.InteropServices.ITypeLibConverter +System.Runtime.InteropServices.MarshalDirectiveException +System.Runtime.InteropServices.ObjectCreationDelegate +System.Runtime.InteropServices.RuntimeEnvironment +System.Runtime.InteropServices.RegistrationServices +System.Runtime.InteropServices.SafeArrayRankMismatchException +System.Runtime.InteropServices.SafeArrayTypeMismatchException +System.Runtime.InteropServices.SEHException +System.Runtime.InteropServices.TypeLibConverter +System.Runtime.InteropServices.BIND_OPTS +System.Runtime.InteropServices.UCOMIBindCtx +System.Runtime.InteropServices.UCOMIConnectionPointContainer +System.Runtime.InteropServices.UCOMIConnectionPoint +System.Runtime.InteropServices.UCOMIEnumMoniker +System.Runtime.InteropServices.CONNECTDATA +System.Runtime.InteropServices.UCOMIEnumConnections +System.Runtime.InteropServices.UCOMIEnumConnectionPoints +System.Runtime.InteropServices.UCOMIEnumString +System.Runtime.InteropServices.UCOMIEnumVARIANT +System.Runtime.InteropServices.FILETIME +System.Runtime.InteropServices.UCOMIMoniker +System.Runtime.InteropServices.UCOMIPersistFile +System.Runtime.InteropServices.UCOMIRunningObjectTable +System.Runtime.InteropServices.STATSTG +System.Runtime.InteropServices.UCOMIStream +System.Runtime.InteropServices.DESCKIND +System.Runtime.InteropServices.BINDPTR +System.Runtime.InteropServices.UCOMITypeComp +System.Runtime.InteropServices.TYPEKIND +System.Runtime.InteropServices.TYPEFLAGS +System.Runtime.InteropServices.IMPLTYPEFLAGS +System.Runtime.InteropServices.TYPEATTR +System.Runtime.InteropServices.FUNCDESC +System.Runtime.InteropServices.IDLFLAG +System.Runtime.InteropServices.IDLDESC +System.Runtime.InteropServices.PARAMFLAG +System.Runtime.InteropServices.PARAMDESC +System.Runtime.InteropServices.TYPEDESC +System.Runtime.InteropServices.ELEMDESC +System.Runtime.InteropServices.VARDESC +System.Runtime.InteropServices.DISPPARAMS +System.Runtime.InteropServices.EXCEPINFO +System.Runtime.InteropServices.FUNCKIND +System.Runtime.InteropServices.INVOKEKIND +System.Runtime.InteropServices.CALLCONV +System.Runtime.InteropServices.FUNCFLAGS +System.Runtime.InteropServices.VARFLAGS +System.Runtime.InteropServices.UCOMITypeInfo +System.Runtime.InteropServices.SYSKIND +System.Runtime.InteropServices.LIBFLAGS +System.Runtime.InteropServices.TYPELIBATTR +System.Runtime.InteropServices.UCOMITypeLib +System.Runtime.InteropServices.UnknownWrapper +System.Runtime.Remoting.IObjectHandle +System.Runtime.Remoting.IRemotingTypeInfo +System.Runtime.Remoting.IChannelInfo +System.Runtime.Remoting.IEnvoyInfo +System.Runtime.Remoting.RemotingConfiguration +System.Runtime.Remoting.TypeEntry +System.Runtime.Remoting.ActivatedClientTypeEntry +System.Runtime.Remoting.ActivatedServiceTypeEntry +System.Runtime.Remoting.WellKnownClientTypeEntry +System.Runtime.Remoting.WellKnownServiceTypeEntry +System.Runtime.Remoting.RemotingException +System.Runtime.Remoting.ServerException +System.Runtime.Remoting.RemotingTimeoutException +System.Runtime.Remoting.RemotingServices +System.Runtime.Remoting.InternalRemotingServices +System.Runtime.Remoting.SoapServices +System.Runtime.Remoting.Activation.UrlAttribute +System.Runtime.Remoting.Messaging.IMessageSink +System.Runtime.Remoting.Messaging.AsyncResult +System.Runtime.Remoting.Messaging.CallContext +System.Runtime.Remoting.Messaging.ILogicalThreadAffinative +System.Runtime.Remoting.Messaging.InternalMessageWrapper +System.Runtime.Remoting.Messaging.IMethodCallMessage +System.Runtime.Remoting.Messaging.MethodCallMessageWrapper +System.Runtime.Remoting.Messaging.HeaderHandler +System.Runtime.Remoting.Messaging.IMessageCtrl +System.Runtime.Remoting.Messaging.IRemotingFormatter +System.Runtime.Remoting.Messaging.ReturnMessage +System.Runtime.Remoting.Messaging.MethodCall +System.Runtime.Remoting.Messaging.ConstructionCall +System.Runtime.Remoting.Messaging.MethodResponse +System.Runtime.Remoting.Messaging.ConstructionResponse +System.Runtime.Remoting.Messaging.MethodReturnMessageWrapper +System.Runtime.Remoting.Messaging.OneWayAttribute +System.Runtime.Remoting.Messaging.MessageSurrogateFilter +System.Runtime.Remoting.Messaging.RemotingSurrogateSelector +System.Runtime.Remoting.Contexts.CrossContextDelegate +System.Runtime.Remoting.Contexts.ContextProperty +System.Runtime.Remoting.Contexts.IContextPropertyActivator +System.Runtime.Remoting.Contexts.IContributeClientContextSink +System.Runtime.Remoting.Contexts.IContributeDynamicSink +System.Runtime.Remoting.Contexts.IContributeEnvoySink +System.Runtime.Remoting.Contexts.IContributeObjectSink +System.Runtime.Remoting.Contexts.IContributeServerContextSink +System.Runtime.Serialization.Formatters.InternalRM +System.Runtime.Serialization.Formatters.InternalST +System.Runtime.Serialization.Formatters.SoapMessage +System.Runtime.Serialization.Formatters.SoapFault +System.Runtime.Serialization.Formatters.ServerFault +System.Runtime.Serialization.Formatters.Binary.BinaryFormatter +System.Security.Cryptography.CryptoConfig +System.Security.Cryptography.KeyedHashAlgorithm +System.Security.Cryptography.HMACSHA1 +System.Security.Cryptography.MACTripleDES +System.Security.Cryptography.MaskGenerationMethod +System.Security.Cryptography.PasswordDeriveBytes +System.Security.Cryptography.PKCS1MaskGenerationMethod +System.Security.Cryptography.RC2 +System.Security.Cryptography.RC2CryptoServiceProvider +System.Security.Cryptography.RSACryptoServiceProvider +System.Security.Cryptography.RSAOAEPKeyExchangeDeformatter +System.Security.Cryptography.RSAOAEPKeyExchangeFormatter +System.Security.Cryptography.RSAPKCS1KeyExchangeDeformatter +System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter +System.Security.Cryptography.RSAPKCS1SignatureDeformatter +System.Security.Cryptography.RSAPKCS1SignatureFormatter +System.Security.Cryptography.SHA1Managed +System.Security.Cryptography.TripleDES +System.Security.Cryptography.TripleDESCryptoServiceProvider +System.Security.Permissions.EnvironmentPermission +System.Security.Permissions.FileDialogPermission +System.Security.Permissions.IsolatedStorageFilePermission +System.Security.Permissions.PrincipalPermissionAttribute +System.Security.Permissions.SecurityPermissionAttribute +System.Security.Permissions.PublisherIdentityPermissionAttribute +System.Security.Permissions.PublisherIdentityPermission +System.Security.Permissions.ReflectionPermission +System.Security.Permissions.RegistryPermission +System.Security.Permissions.PrincipalPermission +System.Security.Permissions.SiteIdentityPermission +System.Security.Permissions.StrongNameIdentityPermission +System.Security.Permissions.StrongNamePublicKeyBlob +System.Security.Permissions.UIPermission +System.Security.Permissions.UrlIdentityPermission +System.Security.Permissions.ZoneIdentityPermission +System.Security.Policy.ApplicationDirectory +System.Security.Policy.ApplicationDirectoryMembershipCondition +System.Security.Policy.FirstMatchCodeGroup +System.Security.Policy.Hash +System.Security.Policy.HashMembershipCondition +System.Security.Policy.NetCodeGroup +System.Security.Policy.PermissionRequestEvidence +System.Security.Policy.Publisher +System.Security.Policy.PublisherMembershipCondition +System.Security.Policy.Site +System.Security.Policy.SiteMembershipCondition +System.Security.Policy.StrongName +System.Security.Policy.StrongNameMembershipCondition +System.Security.Policy.UnionCodeGroup +System.Security.Policy.Url +System.Security.Policy.UrlMembershipCondition +System.Security.Policy.Zone +System.Security.Policy.ZoneMembershipCondition +System.Security.Principal.WindowsIdentity +System.Security.Principal.WindowsImpersonationContext +System.Security.Principal.WindowsPrincipal +System.Threading.CompressedStack +
diff --git a/man/gacutil.1 b/man/gacutil.1 index 704c263486f..54838e02cc6 100644 --- a/man/gacutil.1 +++ b/man/gacutil.1 @@ -24,17 +24,20 @@ convention is that assemblies must also be placed in a separate directory for being accessed to the compiler. This is done with the -package directive to gacutil. .PP -The tool allows for installation, removal, and listing of the +The tool allows for installationl, removal, and listing of the contents of the assembly cache. .PP The GAC is relative to the Mono installation prefix: mono_prefix/lib/mono. +.SH FLAGS +The "-user" flag enables you to install/remove the assembly into the +user's assembly cache, as opposed to the global one. .PP .SH COMMANDS -.I -i <assembly_path> [-check_refs] [-package NAME] [-root ROOTDIR] [-gacdir GACDIR] +.I "-i path_to_assembly" [-f] [-root ROOTDIR] [-package NAME] .Sp - Installs an assembly into the global assembly cache. <assembly_path> -is the name of the file that contains the assembly manifest +The above installs the assembly into the GAC, use the -f flag to force +an installation an overwrite anything in there. .Sp The -package option can be used to also create a directory in in prefix/lib/mono with the name NAME, and a symlink is created from @@ -44,32 +47,18 @@ developers can reference a set of libraries at once. The -root option is used by developers integrating this with automake tools or packaging tools that require a prefix directory to be specified. The root represents the "libdir" component of a prefix -(typically prefix/lib). -.Sp -The -gacdir option is used to specify the GACs base directory. Once an -assembly has been installed to a non standard gacdir the MONO_GAC_PATH -environment variable must be used to access the assembly. -.Sp -The -check_refs option is used to ensure that the assembly being -installed into the GAC does not reference any non strong named -assemblies. Assemblies being installed to the GAC should not reference -non strong named assemblies, however the is an optional check. +(typically prefix/lib). .fi .PP -.I "-l" [assembly_name] [-root ROOTDIR] [-gacdir GACDIR] +.I "-l" .Sp -Lists the contents of the global assembly cache. When the -<assembly_name> parameter is specified only matching assemblies are -listed. +Lists the contents of the Global Assembly Cache .PP -.I "-u" <assembly_display_name> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR] +.I "-u assembly_name [-root]" .Sp -Uninstalls an assembly from the global assembly cache. -<assembly_display_name> is the name of the assembly (partial or -fully qualified) to remove from the global assembly cache. If a -partial name is specified all matching assemblies will be -uninstalled. As opposed to the install option that takes a filename, -this takes as an argument the assembly name, which looks like this: +The above removes the given assembly name from the Global Assembly +Cache. As opposed to the install option that takes a filename, this +takes as an argument the assembly name, which looks like this: .nf MyLibrary.Something, version=1.0.0.0, publicKeyToken=xxxx,culture=neutral .fi @@ -80,29 +69,6 @@ to quote them. The removal performs a greedy removal, if you only specifiy one component like, "MyLibrary.Something", it will remove all versions of the library. -.Sp -.I "-us" <assembly_path> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR] -Uninstalls an assembly using the specifed assemblies full name. -<assembly path> is the path to an assembly. The full assembly name -is retrieved from the specified assembly if there is an assembly in -the GAC with a matching name, it is removed. Unlike the -u option this -option takes a file name, like this: -.nf - Example: -us myDll.dll -.fi -.Sp -.I "-ul" <assembly_list_file> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR] -Uninstalls one or more assemblies from the global assembly cache. -<assembly_list_file> is the path to a test file containing a list of -assembly names on separate lines. -.nf -Example -ul assembly_list.txt -.fi -.nf -assembly_list.txt contents: - assembly1,Version=1.0.0.0,Culture=en,PublicKeyToken=0123456789abcdef - assembly2,Version=2.0.0.0,Culture=en,PublicKeyToken=0123456789abcdef -.fi .SH FILES On Unix assemblies are loaded from the installation lib directory. If you set `prefix' to /usr, the assemblies will be located in /usr/lib. On diff --git a/man/mono.1 b/man/mono.1 index 66f71a84a68..378351db72d 100644 --- a/man/mono.1 +++ b/man/mono.1 @@ -210,7 +210,7 @@ And individual methods are referenced with the M: prefix, and the standar method notation: .nf - mono --trace=M:System.Console:WriteLine app.exe + mono --trace=M:System.Console.WriteLine app.exe .fi As previously noted, various rules can be specified at once: diff --git a/mcs/class/System.Web/System.Web.Compilation/BuildProviderResultFlags.cs b/mcs/class/System.Web/System.Web.Compilation/BuildProviderResultFlags.cs deleted file mode 100644 index 3cd3ea5723a..00000000000 --- a/mcs/class/System.Web/System.Web.Compilation/BuildProviderResultFlags.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.Compilation.BuildProviderResultFlags.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// 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. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -using System.Resources; - -#if NET_2_0 -namespace System.Web.Compilation -{ - [Serializable, Flags] - public enum BuildProviderResultFlags - { - Default = 0, - ShutdownAppDomainOnChange = 1 - } -} -#endif diff --git a/mcs/class/System.Web/System.Web.Compilation/IImplicitResourceProvider.cs b/mcs/class/System.Web/System.Web.Compilation/IImplicitResourceProvider.cs deleted file mode 100644 index 3e2c38ff5db..00000000000 --- a/mcs/class/System.Web/System.Web.Compilation/IImplicitResourceProvider.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.Compilation.IImplicitResourceProvider.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// 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. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -#if NET_2_0 - -using System.Collections; -using System.Globalization; - -namespace System.Web.Compilation -{ - public interface IImplicitResourceProvider - { - object GetObject (ImplicitResourceKey key, CultureInfo culture); - ICollection GetResources (string keyPrefix); - } -} -#endif diff --git a/mcs/class/System.Web/System.Web.Compilation/IResourceReader.cs b/mcs/class/System.Web/System.Web.Compilation/IResourceReader.cs deleted file mode 100644 index 4cdb8b14784..00000000000 --- a/mcs/class/System.Web/System.Web.Compilation/IResourceReader.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.Compilation.IResourceProvider.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// 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. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -using System.Resources; - -#if NET_2_0 -namespace System.Web.Compilation -{ - public interface IResourceProvider - { - IResourceReader ResourceReader { get; } - } -} -#endif diff --git a/mcs/class/System.Web/System.Web.Compilation/ImplicitResourceKey.cs b/mcs/class/System.Web/System.Web.Compilation/ImplicitResourceKey.cs deleted file mode 100644 index ac2bab3c256..00000000000 --- a/mcs/class/System.Web/System.Web.Compilation/ImplicitResourceKey.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.Compilation.IImplicitResourceProvider.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// 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. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -#if NET_2_0 -namespace System.Web.Compilation -{ - public class ImplicitResourceKey - { - public ImplicitResourceKey () - { - } - - public string Filter; - public string KeyPrefix; - public string Property; - } -} -#endif diff --git a/mcs/class/System.Web/System.Web.Mail/SmtpClient.cs b/mcs/class/System.Web/System.Web.Mail/SmtpClient.cs index 14ef488d089..931274dbd68 100644 --- a/mcs/class/System.Web/System.Web.Mail/SmtpClient.cs +++ b/mcs/class/System.Web/System.Web.Mail/SmtpClient.cs @@ -163,8 +163,8 @@ namespace System.Web.Mail { if (msg.Fields.Data ["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] != null) msg.Fields.Data.Remove ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"); if (msg.Fields.Data ["http://schemas.microsoft.com/cdo/configuration/sendusername"] != null) - msg.Fields.Data.Remove ("http://schemas.microsoft.com/cdo/configuration/sendusername");^M - if (msg.Fields.Data ["http://schemas.microsoft.com/cdo/configuration/sendpassword"] != null)^M + msg.Fields.Data.Remove ("http://schemas.microsoft.com/cdo/configuration/sendusername"); + if (msg.Fields.Data ["http://schemas.microsoft.com/cdo/configuration/sendpassword"] != null) msg.Fields.Data.Remove ("http://schemas.microsoft.com/cdo/configuration/sendpassword"); partHeader.Data.Add(msg.Fields.Data); diff --git a/mcs/class/System.Web/System.Web.UI/ChangeLog b/mcs/class/System.Web/System.Web.UI/ChangeLog index 4f16a45684a..f9bfb626918 100644 --- a/mcs/class/System.Web/System.Web.UI/ChangeLog +++ b/mcs/class/System.Web/System.Web.UI/ChangeLog @@ -1,3 +1,7 @@ +2004-10-29 Gonzalo Paniagua Javier <gonzalo@ximian.com> + + * ControlBuilder.cs: from HEAD. + 2004-10-01 Gonzalo Paniagua Javier <gonzalo@ximian.com> * Control.cs: even if the control has no children the naming container diff --git a/mcs/class/System.Web/System.Web.UI/ControlBuilder.cs b/mcs/class/System.Web/System.Web.UI/ControlBuilder.cs index 77ff7d773c8..4c9abedd44d 100755 --- a/mcs/class/System.Web/System.Web.UI/ControlBuilder.cs +++ b/mcs/class/System.Web/System.Web.UI/ControlBuilder.cs @@ -66,6 +66,7 @@ namespace System.Web.UI { internal int renderIndex; internal bool isProperty; internal ILocation location; + ArrayList otherTags; public ControlBuilder () { @@ -91,6 +92,16 @@ namespace System.Web.UI { this.fileName = sourceFileName; } + internal void EnsureOtherTags () + { + if (otherTags == null) + otherTags = new ArrayList (); + } + + internal ArrayList OtherTags { + get { return otherTags; } + } + public Type ControlType { get { return type; } } diff --git a/mcs/ilasm/AssemblyInfo.cs b/mcs/ilasm/AssemblyInfo.cs index 614d59d75c6..8a90ef2489c 100644 --- a/mcs/ilasm/AssemblyInfo.cs +++ b/mcs/ilasm/AssemblyInfo.cs @@ -1,7 +1,7 @@ using System.Reflection; using System.Runtime.CompilerServices; -[assembly: AssemblyVersion("1.0.2")] +[assembly: AssemblyVersion("1.0.4")] [assembly: AssemblyTitle ("Mono ILasm Compiler")] [assembly: AssemblyDescription ("Mono ILasm Compiler")] [assembly: AssemblyCopyright ("Sergey Chaban and Jackson Harper")] diff --git a/mcs/mcs/AssemblyInfo.cs b/mcs/mcs/AssemblyInfo.cs index d54cda38d27..4615e826ee0 100644 --- a/mcs/mcs/AssemblyInfo.cs +++ b/mcs/mcs/AssemblyInfo.cs @@ -1,7 +1,7 @@ using System.Reflection; using System.Runtime.CompilerServices; -[assembly: AssemblyVersion("1.0.2")] +[assembly: AssemblyVersion("1.0.4")] [assembly: AssemblyTitle ("Mono C# Compiler")] [assembly: AssemblyDescription ("Mono C# Compiler")] [assembly: AssemblyCopyright ("2001, 2002, 2003 Ximian, Inc.")] diff --git a/mono/dis/get.c b/mono/dis/get.c index 22dea4fa32a..43845cd6c19 100644 --- a/mono/dis/get.c +++ b/mono/dis/get.c @@ -197,7 +197,6 @@ get_typespec (MonoImage *m, guint32 idx) if (s) g_string_append (res, s); } - g_string_append (res, "*"); break; case MONO_TYPE_FNPTR: diff --git a/mono/interpreter/ChangeLog b/mono/interpreter/ChangeLog index 088f0756976..2c2d176ef2f 100644 --- a/mono/interpreter/ChangeLog +++ b/mono/interpreter/ChangeLog @@ -1,9 +1,3 @@ -2004-07-05 Zoltan Varga <vargaz@freemail.hu> - - * mintops.h: Applied patch from Marcin Krzyzanowski (krzak@pld-linux.org). Add support for unaligned access on little endian machines. - - * interp.c:Applied patch from Marcin Krzyzanowski (krzak@pld-linux.org). Fix crash seen on amd64. - 2004-06-24 David Waite <mass@akuma.org> * interp.c: change to C90-style comments from C99/C++-style diff --git a/mono/interpreter/interp.c b/mono/interpreter/interp.c index 3f7ad24660d..872fad14aae 100644 --- a/mono/interpreter/interp.c +++ b/mono/interpreter/interp.c @@ -1164,7 +1164,7 @@ handle_enum: } } - if (method->klass->valuetype && obj) + if (method->klass->valuetype) /* Unbox the instance, since valuetype methods expect an interior pointer. */ obj = mono_object_unbox (obj); diff --git a/mono/interpreter/mintops.h b/mono/interpreter/mintops.h index e787526e2fe..ab559de7ac6 100644 --- a/mono/interpreter/mintops.h +++ b/mono/interpreter/mintops.h @@ -1,8 +1,6 @@ #ifndef __INTERPRETER_MINTOPS_H #define __INTERPRETER_MINTOPS_H -#include <glib.h> - typedef enum { MintOpNoArgs, @@ -31,19 +29,11 @@ enum { #undef OPDEF #if NO_UNALIGNED_ACCESS -# if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define READ32(x) (((guint16 *)(x)) [0] | ((guint16 *)(x)) [1] << 16) -#define READ64(x) ((guint64)((guint16 *)(x)) [0] | \ - (guint64)((guint16 *)(x)) [1] << 16 | \ - (guint64)((guint16 *)(x)) [2] << 32 | \ - (guint64)((guint16 *)(x)) [3] << 48) -# else #define READ32(x) (((guint16 *)(x)) [0] << 16 | ((guint16 *)(x)) [1]) #define READ64(x) ((guint64)((guint16 *)(x)) [0] << 48 | \ (guint64)((guint16 *)(x)) [1] << 32 | \ (guint64)((guint16 *)(x)) [2] << 16 | \ (guint64)((guint16 *)(x)) [3]) -# endif #else /* unaligned access OK */ #define READ32(x) (*(guint32 *)(x)) #define READ64(x) (*(guint64 *)(x)) diff --git a/mono/io-layer/ChangeLog b/mono/io-layer/ChangeLog index 14c8487fb2b..5b19c8ceadf 100644 --- a/mono/io-layer/ChangeLog +++ b/mono/io-layer/ChangeLog @@ -1,128 +1,3 @@ -2004-10-14 Dick Porter <dick@ximian.com> - - * sockets.c (_wapi_accept): Revert the previous change. We now - set the accepted socket to have the same blocking status as the - listening socket in managed code. This follows MS behaviour. - -2004-10-14 Dick Porter <dick@ximian.com> - - * sockets.c (_wapi_accept): On Darwin, make sure a newly - accept()ed socket is blocking. Fixes bug 67355, patch by - grompf@sublimeintervention.com. - -2004-09-28 Dick Porter <dick@ximian.com> - - * io.c (pipe_close_private): Fix one small typo in the last change - that totally hosed process creation with redirected pipes. - -2004-09-24 Dick Porter <dick@ximian.com> - - * wapi-private.h: - * sockets.c: - * socket-private.h: - * io.c: - * io-private.h: - * handles-private.h: Cope when a file descriptor is reused while - the handle that thought it owned it is still referenced, instead - of asserting. Probably fixes bug 66479, though we've been unable - to reproduce it. - -2004-09-09 Dick Porter <dick@ximian.com> - - * error.c: - * io.c: Set error codes everywhere. - -2004-09-06 Dick Porter <dick@ximian.com> - - * handles.c (_wapi_handle_unref): Reset the private record's type - (_wapi_handle_process_fork): Fix long-standing bug in checking - handle return values. Also do the required bookkeeping with the - new process's handles. - - * daemon.c: When creating a new process's handles, check whether - the shared space needs to be increased - -2004-08-19 Dick Porter <dick@ximian.com> - - * handles.c (_wapi_handle_count_signalled_handles): Fix thinko - introduced with the fd offset stuff: unlock handles properly when - backing off. Fixes the monologue hang at exit. - -2004-08-18 Dick Porter <dick@ximian.com> - - * sockets.c: - * io.c: Check that new fds fit in the table, return error if not - - * daemon.c (_wapi_daemon_main): - * handles.c (shared_init): Have all processes agree on a size for - the fd table. - -2004-08-17 Dick Porter <dick@ximian.com> - - * daemon.c (process_new): - * handles.c (_wapi_handle_new_internal): Cope when the space - reserved for file descriptors is larger than the shared segment - size. Fixes the crash reported when running mono under gdb on - macosx. - -2004-08-16 Dick Porter <dick@ximian.com> - - * sockets.c: - * io.c: - * handles-private.h (_wapi_handle_fd_offset_to_handle): Improve - error checking with passed-in file descriptors. - -2004-08-11 Dick Porter <dick@ximian.com> - - * sockets.c: - * io.c: Returned handle values are the file descriptor the handle - encapsulates - - * handles.c: - * handles-private.h: - * daemon.c: Reserve the range of handles that can have the same - values as file descriptors. These won't be used, but the values - will be used as file, console, pipe or socket handles. The fd to - handle mapping is done internally and is invisible to users. - Fixes bug 61828. - - * wapi-private.h (_WAPI_HANDLE_VERSION): Increment, because we now - reserve a chunk of handle space. - -2004-07-22 Dick Porter <dick@ximian.com> - - * timed-thread.c: - * threads.c: Move the destruction of the internal thread data to - after the thread has been joined. Fixes bug 61418. - -2004-07-14 Dick Porter <dick@ximian.com> - - * wait.c (test_and_own): When not waiting for all handles to - become signalled, only own and return the lowest. All the - documentation suggests that the old way was correct, but - experimentation shows it actually works like this. Patch by - Sébastien Robitaille - (sebastien.robitaille@croesus.com), fixes bug 61511. - -2004-07-08 Dick Porter <dick@ximian.com> - - * io.c (file_seek): If there is a high 32bit offset part, make - sure the low part isn't sign-extended. Set error codes when - returning failure. Fixes bug 61131. - -2004-07-06 Dick Porter <dick@ximian.com> - - * io.c (file_setfiletime): Check for underflow when converting to - time_t values. Set error codes when returning failure. Fixes bug - 60970. - -2004-07-05 Dick Porter <dick@ximian.com> - - * mutexes.c (mutex_ops_init): Make the named mutex mutex sharable. - - * daemon.c (unref_handle): Only destroy a handle if all processes - have released it, not just the current one. Fixes bug 60887. - 2004-06-24 Dick Porter <dick@ximian.com> * mutexes.c: Indicate when a named mutex was reused diff --git a/mono/io-layer/daemon.c b/mono/io-layer/daemon.c index e2eca91b3eb..746fba49d17 100644 --- a/mono/io-layer/daemon.c +++ b/mono/io-layer/daemon.c @@ -340,14 +340,16 @@ static gboolean unref_handle (ChannelData *channel_data, guint32 handle) channel_data->open_handles[handle]); #endif - if (_wapi_shared_data[segment]->handles[idx].ref == 0) { + if(channel_data->open_handles[handle]==0) { + /* This client has released the handle */ + destroy=TRUE; + } + + if(_wapi_shared_data[segment]->handles[idx].ref==0) { gboolean was_file; dev_t device = 0; ino_t inode = 0; - /* This client has released the handle */ - destroy=TRUE; - if (channel_data->open_handles[handle]!=0) { g_warning (G_GNUC_PRETTY_FUNCTION ": per-process open_handles mismatch, set to %d, should be 0", channel_data->open_handles[handle]); @@ -830,11 +832,23 @@ static void send_reply (GIOChannel *channel, WapiHandleResponse *resp) _wapi_daemon_response (g_io_channel_unix_get_fd (channel), resp); } -static guint32 new_handle_with_shared_check (WapiHandleType type) +/* + * process_new: + * @channel: The client making the request + * @channel_data: Our data for this channel + * @type: type to init handle to + * + * Find a free handle and initialize it to 'type', increase refcnt and + * send back a reply to the client. + */ +static void process_new (GIOChannel *channel, ChannelData *channel_data, + WapiHandleType type) { - guint32 handle = 0; - - while ((handle = _wapi_handle_new_internal (type)) == 0) { + guint32 handle; + WapiHandleResponse resp={0}; + + handle=_wapi_handle_new_internal (type); + if(handle==0) { /* Try and allocate a new shared segment, and have * another go */ @@ -859,34 +873,15 @@ static guint32 new_handle_with_shared_check (WapiHandleType type) channels[i].open_handles=_wapi_g_renew0 (channels[i].open_handles, old_len, new_len); } } + + handle=_wapi_handle_new_internal (type); } else { /* Map failed. Just return 0 meaning "out of * handles" */ - break; } } - return(handle); -} - -/* - * process_new: - * @channel: The client making the request - * @channel_data: Our data for this channel - * @type: type to init handle to - * - * Find a free handle and initialize it to 'type', increase refcnt and - * send back a reply to the client. - */ -static void process_new (GIOChannel *channel, ChannelData *channel_data, - WapiHandleType type) -{ - guint32 handle; - WapiHandleResponse resp={0}; - - handle = new_handle_with_shared_check (type); - /* handle might still be set to 0. This is handled at the * client end */ @@ -1071,11 +1066,11 @@ static void process_process_fork (GIOChannel *channel, ChannelData *channel_data * client must check if either handle is 0 and take * appropriate error handling action. */ - process_handle = new_handle_with_shared_check (WAPI_HANDLE_PROCESS); + process_handle=_wapi_handle_new_internal (WAPI_HANDLE_PROCESS); ref_handle (daemon_channel_data, process_handle); ref_handle (channel_data, process_handle); - thread_handle = new_handle_with_shared_check (WAPI_HANDLE_THREAD); + thread_handle=_wapi_handle_new_internal (WAPI_HANDLE_THREAD); ref_handle (daemon_channel_data, thread_handle); ref_handle (channel_data, thread_handle); @@ -1253,7 +1248,7 @@ static void process_process_fork (GIOChannel *channel, ChannelData *channel_data resp.u.process_fork.pid=pid; } - + resp.u.process_fork.process_handle=process_handle; resp.u.process_fork.thread_handle=thread_handle; @@ -1498,9 +1493,6 @@ void _wapi_daemon_main(gpointer data, gpointer scratch) /* Note that we've got the starting segment already */ _wapi_shared_data[0]->num_segments=1; _wapi_shm_mapped_segments=1; - - _wapi_fd_offset_table_size=getdtablesize (); - _wapi_shared_data[0]->fd_offset_table_size = _wapi_fd_offset_table_size; startup (); diff --git a/mono/io-layer/error.c b/mono/io-layer/error.c index b167c1e9999..ee6dd56c96e 100644 --- a/mono/io-layer/error.c +++ b/mono/io-layer/error.c @@ -194,14 +194,6 @@ _wapi_get_win32_file_error (gint err) ret = ERROR_NOT_SUPPORTED; break; - case EBADF: - ret = ERROR_INVALID_HANDLE; - break; - - case EIO: - ret = ERROR_INVALID_HANDLE; - break; - default: g_message ("Unknown errno: %s\n", strerror (err)); ret = ERROR_GEN_FAILURE; diff --git a/mono/io-layer/handles-private.h b/mono/io-layer/handles-private.h index ad03546705c..674e01384b9 100644 --- a/mono/io-layer/handles-private.h +++ b/mono/io-layer/handles-private.h @@ -28,9 +28,6 @@ extern struct _WapiHandlePrivate_list **_wapi_private_data; extern pthread_mutex_t _wapi_shared_mutex; extern guint32 _wapi_shm_mapped_segments; -extern guint32 _wapi_fd_offset_table_size; -extern gpointer *_wapi_fd_offset_table; - extern guint32 _wapi_handle_new_internal (WapiHandleType type); extern gpointer _wapi_handle_new (WapiHandleType type); extern gboolean _wapi_lookup_handle (gpointer handle, WapiHandleType type, @@ -223,38 +220,11 @@ static inline guint32 _wapi_handle_index (guint32 segment, guint32 idx) return((segment*_WAPI_HANDLES_PER_SEGMENT)+idx); } -static inline gpointer _wapi_handle_fd_offset_to_handle (gpointer fd_handle) -{ - int fd = GPOINTER_TO_INT (fd_handle); - gpointer handle; - - if (fd >= _wapi_fd_offset_table_size) { - return(NULL); - } - - handle = _wapi_fd_offset_table[fd]; - - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - return(NULL); - } - -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": Returning fd offset %d of %p", fd, - handle); -#endif - - return(handle); -} - static inline WapiHandleType _wapi_handle_type (gpointer handle) { guint32 idx; guint32 segment; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); if(segment>=_wapi_shm_mapped_segments) @@ -263,48 +233,6 @@ static inline WapiHandleType _wapi_handle_type (gpointer handle) return(_wapi_handle_get_shared_segment (segment)->handles[idx].type); } -static inline void _wapi_handle_fd_offset_store (int fd, gpointer handle) -{ - g_assert (fd < _wapi_fd_offset_table_size); - - if (_wapi_fd_offset_table[fd] != NULL && handle != NULL) { - gpointer oldhandle = _wapi_fd_offset_table[fd]; - struct _WapiHandlePrivate *private_handle; - guint32 idx; - guint32 segment; - -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION - ": Reassigning fd offset %d from %p", fd, - oldhandle); -#endif - - /* The WapiFDMapped struct at the head of the private - * handle data means we don't need to do a full - * lookup, and we don't need to know the handle type. - */ - g_assert (_wapi_handle_type (oldhandle) == WAPI_HANDLE_FILE || - _wapi_handle_type (oldhandle) == WAPI_HANDLE_CONSOLE || - _wapi_handle_type (oldhandle) == WAPI_HANDLE_PIPE || - _wapi_handle_type (oldhandle) == WAPI_HANDLE_SOCKET); - - _wapi_handle_segment (oldhandle, &segment, &idx); - _wapi_handle_ensure_mapped (segment); - - private_handle=&_wapi_handle_get_private_segment(segment)->handles[idx]; - ((WapiFDMapped *)(&private_handle->u))->assigned = FALSE; - } - - g_assert (GPOINTER_TO_UINT (handle) >= _wapi_fd_offset_table_size || handle==NULL); - -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": Assigning fd offset %d to %p", fd, - handle); -#endif - - _wapi_fd_offset_table[fd]=handle; -} - static inline void _wapi_handle_set_signal_state (gpointer handle, gboolean state, gboolean broadcast) @@ -314,8 +242,6 @@ static inline void _wapi_handle_set_signal_state (gpointer handle, struct _WapiHandleShared *shared_handle; int thr_ret; - g_assert (GPOINTER_TO_UINT (handle) >= _wapi_fd_offset_table_size); - _wapi_handle_segment (handle, &segment, &idx); shared_handle=&_wapi_handle_get_shared_segment (segment)->handles[idx]; @@ -391,8 +317,6 @@ static inline gboolean _wapi_handle_issignalled (gpointer handle) guint32 idx; guint32 segment; - g_assert (GPOINTER_TO_UINT (handle) >= _wapi_fd_offset_table_size); - _wapi_handle_segment (handle, &segment, &idx); return(_wapi_handle_get_shared_segment (segment)->handles[idx].signalled); @@ -428,8 +352,6 @@ static inline int _wapi_handle_lock_handle (gpointer handle) guint32 idx; guint32 segment; - g_assert (GPOINTER_TO_UINT (handle) >= _wapi_fd_offset_table_size); - #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": locking handle %p", handle); #endif @@ -447,8 +369,6 @@ static inline int _wapi_handle_unlock_handle (gpointer handle) guint32 segment; int ret; - g_assert (GPOINTER_TO_UINT (handle) >= _wapi_fd_offset_table_size); - #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": unlocking handle %p", handle); #endif diff --git a/mono/io-layer/handles.c b/mono/io-layer/handles.c index a1c3dde13ef..769235fe76d 100644 --- a/mono/io-layer/handles.c +++ b/mono/io-layer/handles.c @@ -77,9 +77,6 @@ pthread_mutex_t _wapi_shared_mutex=PTHREAD_MUTEX_INITIALIZER; */ guint32 _wapi_shm_mapped_segments; -guint32 _wapi_fd_offset_table_size; -gpointer *_wapi_fd_offset_table=NULL; - static void shared_init (void) { struct sockaddr_un shared_socket_address; @@ -89,7 +86,7 @@ static void shared_init (void) _wapi_shared_data=g_new0 (struct _WapiHandleShared_list *, 1); _wapi_private_data=g_new0 (struct _WapiHandlePrivate_list *, 1); - + attach_again: #ifndef DISABLE_SHARED_HANDLES @@ -149,9 +146,6 @@ attach_again: goto attach_again; } - } else { - _wapi_fd_offset_table_size = _wapi_shared_data[0]->fd_offset_table_size; - _wapi_fd_offset_table=g_new0 (gpointer, _wapi_fd_offset_table_size); } } @@ -164,10 +158,6 @@ attach_again: _wapi_shared_data[0]->num_segments=1; _wapi_shared_scratch=g_new0 (struct _WapiHandleScratch, 1); - - _wapi_fd_offset_table_size=getdtablesize (); - _wapi_fd_offset_table=g_new0 (gpointer, - _wapi_fd_offset_table_size); } _wapi_private_data[0]=g_new0 (struct _WapiHandlePrivate_list, 1); _wapi_shm_mapped_segments=1; @@ -250,7 +240,6 @@ guint32 _wapi_handle_new_internal (WapiHandleType type) guint32 i, j; static guint32 last=1; int thr_ret; - guint32 num_segments = _wapi_handle_get_shared_segment (0)->num_segments; /* A linear scan should be fast enough. Start from the last * allocation, assuming that handles are allocated more often @@ -261,7 +250,8 @@ guint32 _wapi_handle_new_internal (WapiHandleType type) #endif again: _wapi_handle_segment (GUINT_TO_POINTER (last), &segment, &idx); - for(i=segment; i < num_segments; i++) { + for(i=segment; i<_wapi_handle_get_shared_segment (0)->num_segments; + i++) { if(i!=segment) { idx=0; } @@ -269,20 +259,8 @@ again: for(j=idx; j<_WAPI_HANDLES_PER_SEGMENT; j++) { struct _WapiHandleShared *shared; - /* Make sure we dont try and assign the - * handles that would clash with fds - */ - if ((i * _WAPI_HANDLES_PER_SEGMENT + j) < _wapi_fd_offset_table_size) { - i = _wapi_fd_offset_table_size / _WAPI_HANDLES_PER_SEGMENT; - j = _wapi_fd_offset_table_size - (i * _WAPI_HANDLES_PER_SEGMENT); - - if (i >= num_segments) { - /* Need to get the caller to - * add more shared segments - */ - return(0); - } - + /* Make sure we dont try and assign handle 0 */ + if (i==0 && j==0) { continue; } @@ -336,7 +314,7 @@ gpointer _wapi_handle_new (WapiHandleType type) int thr_ret; mono_once (&shared_init_once, shared_init); - + again: if(shared==TRUE) { new.type=WapiHandleRequestType_New; @@ -358,7 +336,8 @@ again: thr_ret = pthread_mutex_lock (&scan_mutex); g_assert (thr_ret == 0); - while ((handle_idx = _wapi_handle_new_internal (type)) == 0) { + handle_idx=_wapi_handle_new_internal (type); + if(handle_idx==0) { /* Try and get a new segment, and have another go */ segment=_wapi_handle_get_shared_segment (0)->num_segments; _wapi_handle_ensure_mapped (segment); @@ -366,6 +345,7 @@ again: if(_wapi_handle_get_shared_segment (segment)!=NULL) { /* Got a new segment */ _wapi_handle_get_shared_segment (0)->num_segments++; + handle_idx=_wapi_handle_new_internal (type); } else { /* Map failed. Just return 0 meaning * "out of handles" @@ -381,9 +361,6 @@ again: pthread_cleanup_pop (0); } - /* Make sure we left the space for fd mappings */ - g_assert (handle_idx >= _wapi_fd_offset_table_size); - if(handle_idx==0) { g_warning (G_GNUC_PRETTY_FUNCTION ": Ran out of handles!"); @@ -437,8 +414,6 @@ gboolean _wapi_lookup_handle (gpointer handle, WapiHandleType type, guint32 idx; guint32 segment; - g_assert (GPOINTER_TO_UINT (handle) >= _wapi_fd_offset_table_size); - _wapi_handle_segment (handle, &segment, &idx); _wapi_handle_ensure_mapped (segment); @@ -617,8 +592,6 @@ gpointer _wapi_search_handle_namespace (WapiHandleType type, void _wapi_handle_ref (gpointer handle) { - g_assert (GPOINTER_TO_UINT (handle) >= _wapi_fd_offset_table_size); - if(shared==TRUE) { WapiHandleRequest req={0}; WapiHandleResponse resp={0}; @@ -655,8 +628,6 @@ void _wapi_handle_unref (gpointer handle) gboolean destroy = FALSE; int thr_ret; - g_assert (GPOINTER_TO_UINT (handle) >= _wapi_fd_offset_table_size); - _wapi_handle_segment (handle, &segment, &idx); if(shared==TRUE) { @@ -705,7 +676,6 @@ void _wapi_handle_unref (gpointer handle) _wapi_handle_ops_close_private (handle); _wapi_handle_get_shared_segment (segment)->handles[idx].type=WAPI_HANDLE_UNUSED; - _wapi_handle_get_private_segment (segment)->handles[idx].type=WAPI_HANDLE_UNUSED; /* Destroy the mutex and cond var. We hope nobody * tried to grab them between the handle unlock and @@ -1210,10 +1180,6 @@ gboolean _wapi_handle_test_capabilities (gpointer handle, guint32 idx, segment; WapiHandleType type; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); type=_wapi_handle_get_shared_segment (segment)->handles[idx].type; @@ -1231,10 +1197,6 @@ void _wapi_handle_ops_close_shared (gpointer handle) guint32 idx, segment; WapiHandleType type; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); type=_wapi_handle_get_shared_segment (segment)->handles[idx].type; @@ -1249,10 +1211,6 @@ void _wapi_handle_ops_close_private (gpointer handle) guint32 idx, segment; WapiHandleType type; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); type=_wapi_handle_get_shared_segment (segment)->handles[idx].type; @@ -1274,10 +1232,6 @@ void _wapi_handle_ops_signal (gpointer handle) guint32 idx, segment; WapiHandleType type; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); type=_wapi_handle_get_shared_segment (segment)->handles[idx].type; @@ -1292,10 +1246,6 @@ void _wapi_handle_ops_own (gpointer handle) guint32 idx, segment; WapiHandleType type; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); type=_wapi_handle_get_shared_segment (segment)->handles[idx].type; @@ -1310,10 +1260,6 @@ gboolean _wapi_handle_ops_isowned (gpointer handle) guint32 idx, segment; WapiHandleType type; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); type=_wapi_handle_get_shared_segment (segment)->handles[idx].type; @@ -1338,14 +1284,6 @@ gboolean _wapi_handle_ops_isowned (gpointer handle) */ gboolean CloseHandle(gpointer handle) { - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - - if (handle == NULL) { - return(FALSE); - } - _wapi_handle_unref (handle); return(TRUE); @@ -1365,17 +1303,12 @@ gboolean _wapi_handle_count_signalled_handles (guint32 numhandles, again: for(i=0; i<numhandles; i++) { guint32 idx, segment; - gpointer handle = handles[i]; - - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); + _wapi_handle_segment (handles[i], &segment, &idx); #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": attempting to lock %p", - handle); + handles[i]); #endif ret=mono_mutex_trylock (&_wapi_handle_get_shared_segment (segment)->handles[idx].signal_mutex); @@ -1384,17 +1317,11 @@ again: struct timespec sleepytime; #ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": attempt failed for %p: %s", handle, strerror (ret)); + g_message (G_GNUC_PRETTY_FUNCTION ": attempt failed for %p", handles[i]); #endif while(i--) { - handle = handles[i]; - - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - - _wapi_handle_segment (handle, &segment, &idx); + _wapi_handle_segment (handles[i], &segment, &idx); thr_ret = mono_mutex_unlock (&_wapi_handle_get_shared_segment (segment)->handles[idx].signal_mutex); g_assert (thr_ret == 0); } @@ -1432,29 +1359,24 @@ again: for(i=0; i<numhandles; i++) { guint32 idx, segment; - gpointer handle = handles[i]; - - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - - _wapi_handle_ref (handle); + + _wapi_handle_ref (handles[i]); - _wapi_handle_segment (handle, &segment, &idx); + _wapi_handle_segment (handles[i], &segment, &idx); #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": Checking handle %p", - handle); + handles[i]); #endif - if(((_wapi_handle_test_capabilities (handle, WAPI_HANDLE_CAP_OWN)==TRUE) && - (_wapi_handle_ops_isowned (handle)==TRUE)) || + if(((_wapi_handle_test_capabilities (handles[i], WAPI_HANDLE_CAP_OWN)==TRUE) && + (_wapi_handle_ops_isowned (handles[i])==TRUE)) || (_wapi_handle_get_shared_segment (segment)->handles[idx].signalled==TRUE)) { count++; #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION - ": Handle %p signalled", handle); + ": Handle %p signalled", handles[i]); #endif if(*lowest>i) { *lowest=i; @@ -1490,23 +1412,18 @@ void _wapi_handle_unlock_handles (guint32 numhandles, gpointer *handles) for(i=0; i<numhandles; i++) { guint32 idx, segment; - gpointer handle = handles[i]; - - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - - _wapi_handle_segment (handle, &segment, &idx); + + _wapi_handle_segment (handles[i], &segment, &idx); #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": unlocking handle %p", - handle); + handles[i]); #endif thr_ret = mono_mutex_unlock (&_wapi_handle_get_shared_segment (segment)->handles[idx].signal_mutex); g_assert (thr_ret == 0); - _wapi_handle_unref (handle); + _wapi_handle_unref (handles[i]); } } @@ -1578,10 +1495,6 @@ int _wapi_handle_wait_signal_handle (gpointer handle) #if defined(_POSIX_THREAD_PROCESS_SHARED) && _POSIX_THREAD_PROCESS_SHARED != -1 guint32 idx, segment; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); return(mono_cond_wait (&_wapi_handle_get_shared_segment (segment)->handles[idx].signal_cond, @@ -1591,10 +1504,6 @@ int _wapi_handle_wait_signal_handle (gpointer handle) struct timespec fake_timeout; int ret; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); _wapi_calc_timeout (&fake_timeout, 100); @@ -1615,10 +1524,6 @@ int _wapi_handle_timedwait_signal_handle (gpointer handle, #if defined(_POSIX_THREAD_PROCESS_SHARED) && _POSIX_THREAD_PROCESS_SHARED != -1 guint32 idx, segment; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); return(mono_cond_timedwait (&_wapi_handle_get_shared_segment (segment)->handles[idx].signal_cond, @@ -1629,10 +1534,6 @@ int _wapi_handle_timedwait_signal_handle (gpointer handle, struct timespec fake_timeout; int ret; - if (GPOINTER_TO_UINT (handle) < _wapi_fd_offset_table_size) { - handle = _wapi_handle_fd_offset_to_handle (handle); - } - _wapi_handle_segment (handle, &segment, &idx); _wapi_calc_timeout (&fake_timeout, 100); @@ -1708,26 +1609,9 @@ gboolean _wapi_handle_process_fork (guint32 cmd, guint32 env, guint32 dir, * exec_errno will be set, and the handle will be * signalled immediately. */ - if(*process_handle==0 || *thread_handle==0) { + if(process_handle==0 || thread_handle==0) { return(FALSE); } else { - /* This call returns new handles, so we need to do - * a little bookkeeping - */ - if (_wapi_private_data != NULL) { - guint32 segment, idx; - - _wapi_handle_segment (*process_handle, - &segment, &idx); - _wapi_handle_ensure_mapped (segment); - _wapi_handle_get_private_segment (segment)->handles[idx].type = WAPI_HANDLE_PROCESS; - - _wapi_handle_segment (*thread_handle, - &segment, &idx); - _wapi_handle_ensure_mapped (segment); - _wapi_handle_get_private_segment (segment)->handles[idx].type = WAPI_HANDLE_THREAD; - } - return(TRUE); } } else { diff --git a/mono/io-layer/io-private.h b/mono/io-layer/io-private.h index 0fd2b4a7d4b..374be059956 100644 --- a/mono/io-layer/io-private.h +++ b/mono/io-layer/io-private.h @@ -34,9 +34,13 @@ struct _WapiHandle_file ino_t inode; }; +/* The boolean is for distinguishing between a zeroed struct being not + * as yet assigned, and one containing a valid fd 0 + */ struct _WapiHandlePrivate_file { - WapiFDMapped fd_mapped; + int fd; + gboolean assigned; gboolean async; WapiOverlappedCB callback; }; diff --git a/mono/io-layer/io.c b/mono/io-layer/io.c index 21708612564..e0436186ee0 100644 --- a/mono/io-layer/io.c +++ b/mono/io-layer/io.c @@ -236,7 +236,6 @@ static void file_close_shared (gpointer handle) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); return; } @@ -264,21 +263,15 @@ static void file_close_private (gpointer handle) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); return; } - if (file_private_handle->fd_mapped.assigned) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": closing file handle %p with fd %d", - handle, file_private_handle->fd_mapped.fd); + g_message(G_GNUC_PRETTY_FUNCTION ": closing file handle %p with fd %d", + handle, file_private_handle->fd); #endif - /* Blank out the mapping, to make catching errors easier */ - _wapi_handle_fd_offset_store (file_private_handle->fd_mapped.fd, NULL); - - close(file_private_handle->fd_mapped.fd); - } + close(file_private_handle->fd); } static WapiFileType file_getfiletype(void) @@ -333,12 +326,6 @@ static gboolean file_read(gpointer handle, gpointer buffer, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -349,17 +336,15 @@ static gboolean file_read(gpointer handle, gpointer buffer, if(!(file_handle->fileaccess&GENERIC_READ) && !(file_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION": handle %p fd %d doesn't have GENERIC_READ access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION": handle %p fd %d doesn't have GENERIC_READ access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } if (file_private_handle->async == FALSE) { do { - ret=read(file_private_handle->fd_mapped.fd, buffer, - numbytes); + ret=read(file_private_handle->fd, buffer, numbytes); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); @@ -369,8 +354,7 @@ static gboolean file_read(gpointer handle, gpointer buffer, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": read of handle %p fd %d error: %s", handle, - file_private_handle->fd_mapped.fd, - strerror(err)); + file_private_handle->fd, strerror(err)); #endif SetLastError (_wapi_get_win32_file_error (err)); return(FALSE); @@ -393,7 +377,7 @@ static gboolean file_read(gpointer handle, gpointer buffer, } { - int fd = file_private_handle->fd_mapped.fd; + int fd = file_private_handle->fd; struct aiocb *aio; int result; notifier_data_t *ndata; @@ -457,12 +441,6 @@ static gboolean file_write(gpointer handle, gconstpointer buffer, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -473,10 +451,9 @@ static gboolean file_write(gpointer handle, gconstpointer buffer, if(!(file_handle->fileaccess&GENERIC_WRITE) && !(file_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } @@ -487,40 +464,37 @@ static gboolean file_write(gpointer handle, gconstpointer buffer, * because we only do advisory locking on POSIX * systems */ - current_pos = lseek (file_private_handle->fd_mapped.fd, - (off_t)0, SEEK_CUR); + current_pos = lseek (file_private_handle->fd, (off_t)0, + SEEK_CUR); if (current_pos == -1) { #ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": handle %p fd %d lseek failed: %s", handle, file_private_handle->fd_mapped.fd, strerror (errno)); + g_message (G_GNUC_PRETTY_FUNCTION ": handle %p fd %d lseek failed: %s", handle, file_private_handle->fd, strerror (errno)); #endif _wapi_set_last_error_from_errno (); return(FALSE); } - if (_wapi_lock_file_region (file_private_handle->fd_mapped.fd, + if (_wapi_lock_file_region (file_private_handle->fd, current_pos, numbytes) == FALSE) { /* The error has already been set */ return(FALSE); } do { - ret=write(file_private_handle->fd_mapped.fd, buffer, - numbytes); + ret=write(file_private_handle->fd, buffer, numbytes); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); - _wapi_unlock_file_region (file_private_handle->fd_mapped.fd, - current_pos, numbytes); + _wapi_unlock_file_region (file_private_handle->fd, current_pos, + numbytes); if(ret==-1) { #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": write of handle %p fd %d error: %s", handle, - file_private_handle->fd_mapped.fd, - strerror(errno)); + file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } if(byteswritten!=NULL) { @@ -539,7 +513,7 @@ static gboolean file_write(gpointer handle, gconstpointer buffer, } { - int fd = file_private_handle->fd_mapped.fd; + int fd = file_private_handle->fd; struct aiocb *aio; int result; notifier_data_t *ndata; @@ -601,34 +575,26 @@ static gboolean file_flush(gpointer handle) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } if(!(file_handle->fileaccess&GENERIC_WRITE) && !(file_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } - ret=fsync(file_private_handle->fd_mapped.fd); + ret=fsync(file_private_handle->fd); if (ret==-1) { #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION - ": fsync of handle %p fd %d error: %s", handle, - file_private_handle->fd_mapped.fd, strerror(errno)); + ": write of handle %p fd %d error: %s", handle, + file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } @@ -651,23 +617,16 @@ static guint32 file_seek(gpointer handle, gint32 movedistance, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); return(INVALID_SET_FILE_POINTER); } - - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } if(!(file_handle->fileaccess&GENERIC_READ) && !(file_handle->fileaccess&GENERIC_WRITE) && !(file_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ or GENERIC_WRITE access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ or GENERIC_WRITE access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(INVALID_SET_FILE_POINTER); } @@ -687,7 +646,6 @@ static guint32 file_seek(gpointer handle, gint32 movedistance, method); #endif - SetLastError (ERROR_INVALID_PARAMETER); return(INVALID_SET_FILE_POINTER); } @@ -700,7 +658,7 @@ static guint32 file_seek(gpointer handle, gint32 movedistance, movedistance); #endif } else { - offset=((gint64) *highmovedistance << 32) | (unsigned long)movedistance; + offset=((gint64) *highmovedistance << 32) | movedistance; #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": setting offset to %lld 0x%llx (high %d 0x%x, low %d 0x%x)", offset, offset, *highmovedistance, *highmovedistance, movedistance, movedistance); @@ -714,24 +672,22 @@ static guint32 file_seek(gpointer handle, gint32 movedistance, #ifdef HAVE_LARGE_FILE_SUPPORT g_message(G_GNUC_PRETTY_FUNCTION ": moving handle %p fd %d by %lld bytes from %d", handle, - file_private_handle->fd_mapped.fd, offset, whence); + file_private_handle->fd, offset, whence); #else g_message(G_GNUC_PRETTY_FUNCTION ": moving handle %p fd %d by %ld bytes from %d", handle, - file_private_handle->fd_mapped.fd, offset, whence); + file_private_handle->fd, offset, whence); #endif #endif - newpos=lseek(file_private_handle->fd_mapped.fd, offset, whence); + newpos=lseek(file_private_handle->fd, offset, whence); if(newpos==-1) { #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": lseek on handle %p fd %d returned error %s", - handle, file_private_handle->fd_mapped.fd, - strerror(errno)); + handle, file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(INVALID_SET_FILE_POINTER); } @@ -759,7 +715,7 @@ static guint32 file_seek(gpointer handle, gint32 movedistance, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": move of handle %p fd %d returning %d/%d", handle, - file_private_handle->fd_mapped.fd, ret, + file_private_handle->fd, ret, highmovedistance==NULL?0:*highmovedistance); #endif @@ -781,22 +737,15 @@ static gboolean file_setendoffile(gpointer handle) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } if(!(file_handle->fileaccess&GENERIC_WRITE) && !(file_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } @@ -806,35 +755,33 @@ static gboolean file_setendoffile(gpointer handle) * than the length, truncate the file. */ - ret=fstat(file_private_handle->fd_mapped.fd, &statbuf); + ret=fstat(file_private_handle->fd, &statbuf); if(ret==-1) { #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d fstat failed: %s", handle, - file_private_handle->fd_mapped.fd, strerror(errno)); + file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } size=statbuf.st_size; - pos=lseek(file_private_handle->fd_mapped.fd, (off_t)0, SEEK_CUR); + pos=lseek(file_private_handle->fd, (off_t)0, SEEK_CUR); if(pos==-1) { #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d lseek failed: %s", handle, - file_private_handle->fd_mapped.fd, strerror(errno)); + file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } if(pos>size) { /* extend */ do { - ret=write(file_private_handle->fd_mapped.fd, "", 1); + ret=write(file_private_handle->fd, "", 1); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); @@ -842,11 +789,10 @@ static gboolean file_setendoffile(gpointer handle) #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d extend write failed: %s", - handle, file_private_handle->fd_mapped.fd, + handle, file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } } @@ -855,7 +801,7 @@ static gboolean file_setendoffile(gpointer handle) * byte to the end of the file */ do { - ret=ftruncate(file_private_handle->fd_mapped.fd, pos); + ret=ftruncate(file_private_handle->fd, pos); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); @@ -863,10 +809,9 @@ static gboolean file_setendoffile(gpointer handle) #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d ftruncate failed: %s", handle, - file_private_handle->fd_mapped.fd, strerror(errno)); + file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } @@ -888,35 +833,27 @@ static guint32 file_getfilesize(gpointer handle, guint32 *highsize) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); return(INVALID_FILE_SIZE); } - - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } if(!(file_handle->fileaccess&GENERIC_READ) && !(file_handle->fileaccess&GENERIC_WRITE) && !(file_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ or GENERIC_WRITE access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ or GENERIC_WRITE access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(INVALID_FILE_SIZE); } - ret=fstat(file_private_handle->fd_mapped.fd, &statbuf); + ret=fstat(file_private_handle->fd, &statbuf); if(ret==-1) { #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d fstat failed: %s", handle, - file_private_handle->fd_mapped.fd, strerror(errno)); + file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(INVALID_FILE_SIZE); } @@ -958,34 +895,26 @@ static gboolean file_getfiletime(gpointer handle, WapiFileTime *create_time, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } if(!(file_handle->fileaccess&GENERIC_READ) && !(file_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } - ret=fstat(file_private_handle->fd_mapped.fd, &statbuf); + ret=fstat(file_private_handle->fd, &statbuf); if(ret==-1) { #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d fstat failed: %s", handle, - file_private_handle->fd_mapped.fd, strerror(errno)); + file_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } @@ -1057,22 +986,15 @@ static gboolean file_setfiletime(gpointer handle, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } if(!(file_handle->fileaccess&GENERIC_WRITE) && !(file_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } @@ -1080,43 +1002,29 @@ static gboolean file_setfiletime(gpointer handle, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d unknown filename", handle, - file_private_handle->fd_mapped.fd); + file_private_handle->fd); #endif - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } /* Get the current times, so we can put the same times back in * the event that one of the FileTime structs is NULL */ - ret=fstat(file_private_handle->fd_mapped.fd, &statbuf); + ret=fstat(file_private_handle->fd, &statbuf); if(ret==-1) { #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d fstat failed: %s", handle, - file_private_handle->fd_mapped.fd, strerror(errno)); + file_private_handle->fd, strerror(errno)); #endif - SetLastError (ERROR_INVALID_PARAMETER); return(FALSE); } if(last_access!=NULL) { access_ticks=((guint64)last_access->dwHighDateTime << 32) + last_access->dwLowDateTime; - /* This is (time_t)0. We can actually go to INT_MIN, - * but this will do for now. - */ - if (access_ticks < 116444736000000000ULL) { -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION - ": attempt to set access time too early"); -#endif - SetLastError (ERROR_INVALID_PARAMETER); - return(FALSE); - } - utbuf.actime=(access_ticks - 116444736000000000ULL) / 10000000; } else { utbuf.actime=statbuf.st_atime; @@ -1125,18 +1033,6 @@ static gboolean file_setfiletime(gpointer handle, if(last_write!=NULL) { write_ticks=((guint64)last_write->dwHighDateTime << 32) + last_write->dwLowDateTime; - /* This is (time_t)0. We can actually go to INT_MIN, - * but this will do for now. - */ - if (write_ticks < 116444736000000000ULL) { -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION - ": attempt to set write time too early"); -#endif - SetLastError (ERROR_INVALID_PARAMETER); - return(FALSE); - } - utbuf.modtime=(write_ticks - 116444736000000000ULL) / 10000000; } else { utbuf.modtime=statbuf.st_mtime; @@ -1155,12 +1051,10 @@ static gboolean file_setfiletime(gpointer handle, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": handle %p [%s] fd %d utime failed: %s", handle, - name, file_private_handle->fd_mapped.fd, - strerror(errno)); + name, file_private_handle->fd, strerror(errno)); #endif g_free (name); - SetLastError (ERROR_INVALID_PARAMETER); return(FALSE); } @@ -1179,7 +1073,6 @@ static void console_close_shared (gpointer handle) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up console handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); return; } @@ -1207,22 +1100,16 @@ static void console_close_private (gpointer handle) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up console handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); return; } - if (console_private_handle->fd_mapped.assigned == TRUE) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION - ": closing console handle %p with fd %d", handle, - console_private_handle->fd_mapped.fd); + g_message(G_GNUC_PRETTY_FUNCTION + ": closing console handle %p with fd %d", handle, + console_private_handle->fd); #endif - /* Blank out the mapping, to make catching errors easier */ - _wapi_handle_fd_offset_store (console_private_handle->fd_mapped.fd, NULL); - - close(console_private_handle->fd_mapped.fd); - } + close(console_private_handle->fd); } static WapiFileType console_getfiletype(void) @@ -1245,12 +1132,6 @@ static gboolean console_read(gpointer handle, gpointer buffer, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up console handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (console_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -1261,16 +1142,14 @@ static gboolean console_read(gpointer handle, gpointer buffer, if(!(console_handle->fileaccess&GENERIC_READ) && !(console_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION": handle %p fd %d doesn't have GENERIC_READ access: %u", handle, console_private_handle->fd_mapped.fd, console_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION": handle %p fd %d doesn't have GENERIC_READ access: %u", handle, console_private_handle->fd, console_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } do { - ret=read(console_private_handle->fd_mapped.fd, buffer, - numbytes); + ret=read(console_private_handle->fd, buffer, numbytes); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); @@ -1278,11 +1157,9 @@ static gboolean console_read(gpointer handle, gpointer buffer, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": read of handle %p fd %d error: %s", handle, - console_private_handle->fd_mapped.fd, - strerror(errno)); + console_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } @@ -1308,12 +1185,6 @@ static gboolean console_write(gpointer handle, gconstpointer buffer, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up console handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (console_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -1324,16 +1195,14 @@ static gboolean console_write(gpointer handle, gconstpointer buffer, if(!(console_handle->fileaccess&GENERIC_WRITE) && !(console_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, console_private_handle->fd_mapped.fd, console_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, console_private_handle->fd, console_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } do { - ret=write(console_private_handle->fd_mapped.fd, buffer, - numbytes); + ret=write(console_private_handle->fd, buffer, numbytes); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); @@ -1341,11 +1210,9 @@ static gboolean console_write(gpointer handle, gconstpointer buffer, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": write of handle %p fd %d error: %s", handle, - console_private_handle->fd_mapped.fd, - strerror(errno)); + console_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } if(byteswritten!=NULL) { @@ -1365,7 +1232,6 @@ static void pipe_close_shared (gpointer handle) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up pipe handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); return; } @@ -1393,22 +1259,16 @@ static void pipe_close_private (gpointer handle) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up pipe handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); return; } - if (pipe_private_handle->fd_mapped.assigned == TRUE) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION - ": closing pipe handle %p with fd %d", handle, - pipe_private_handle->fd_mapped.fd); + g_message(G_GNUC_PRETTY_FUNCTION + ": closing pipe handle %p with fd %d", handle, + pipe_private_handle->fd); #endif - /* Blank out the mapping, to make catching errors easier */ - _wapi_handle_fd_offset_store (pipe_private_handle->fd_mapped.fd, NULL); - - close(pipe_private_handle->fd_mapped.fd); - } + close(pipe_private_handle->fd); } static WapiFileType pipe_getfiletype(void) @@ -1431,15 +1291,9 @@ static gboolean pipe_read (gpointer handle, gpointer buffer, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up pipe handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (pipe_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } - + if(bytesread!=NULL) { *bytesread=0; } @@ -1447,21 +1301,20 @@ static gboolean pipe_read (gpointer handle, gpointer buffer, if(!(pipe_handle->fileaccess&GENERIC_READ) && !(pipe_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION": handle %p fd %d doesn't have GENERIC_READ access: %u", handle, pipe_private_handle->fd_mapped.fd, pipe_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION": handle %p fd %d doesn't have GENERIC_READ access: %u", handle, pipe_private_handle->fd, pipe_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": reading up to %d bytes from pipe %p (fd %d)", numbytes, - handle, pipe_private_handle->fd_mapped.fd); + handle, pipe_private_handle->fd); #endif do { - ret=read(pipe_private_handle->fd_mapped.fd, buffer, numbytes); + ret=read(pipe_private_handle->fd, buffer, numbytes); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); @@ -1469,10 +1322,9 @@ static gboolean pipe_read (gpointer handle, gpointer buffer, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": read of handle %p fd %d error: %s", handle, - pipe_private_handle->fd_mapped.fd, strerror(errno)); + pipe_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } @@ -1502,12 +1354,6 @@ static gboolean pipe_write(gpointer handle, gconstpointer buffer, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up pipe handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - if (pipe_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -1518,21 +1364,20 @@ static gboolean pipe_write(gpointer handle, gconstpointer buffer, if(!(pipe_handle->fileaccess&GENERIC_WRITE) && !(pipe_handle->fileaccess&GENERIC_ALL)) { #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, pipe_private_handle->fd_mapped.fd, pipe_handle->fileaccess); + g_message(G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_WRITE access: %u", handle, pipe_private_handle->fd, pipe_handle->fileaccess); #endif - SetLastError (ERROR_ACCESS_DENIED); return(FALSE); } #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": writing up to %d bytes to pipe %p (fd %d)", numbytes, - handle, pipe_private_handle->fd_mapped.fd); + handle, pipe_private_handle->fd); #endif do { - ret=write(pipe_private_handle->fd_mapped.fd, buffer, numbytes); + ret=write(pipe_private_handle->fd, buffer, numbytes); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); @@ -1540,10 +1385,9 @@ static gboolean pipe_write(gpointer handle, gconstpointer buffer, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": write of handle %p fd %d error: %s", handle, - pipe_private_handle->fd_mapped.fd, strerror(errno)); + pipe_private_handle->fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(FALSE); } if(byteswritten!=NULL) { @@ -1698,7 +1542,6 @@ gpointer CreateFile(const gunichar2 *name, guint32 fileaccess, g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); #endif - SetLastError (ERROR_INVALID_NAME); return(INVALID_HANDLE_VALUE); } @@ -1709,7 +1552,6 @@ gpointer CreateFile(const gunichar2 *name, guint32 fileaccess, ": unicode conversion returned NULL"); #endif - SetLastError (ERROR_INVALID_NAME); return(INVALID_HANDLE_VALUE); } @@ -1744,19 +1586,6 @@ gpointer CreateFile(const gunichar2 *name, guint32 fileaccess, return(INVALID_HANDLE_VALUE); } - if (fd >= _wapi_fd_offset_table_size) { -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": File descriptor is too big"); -#endif - - SetLastError (ERROR_TOO_MANY_OPEN_FILES); - - close (fd); - g_free (filename); - - return(INVALID_HANDLE_VALUE); - } - ret = fstat (fd, &statbuf); if (ret == -1) { #ifdef DEBUG @@ -1826,7 +1655,6 @@ gpointer CreateFile(const gunichar2 *name, guint32 fileaccess, g_free (filename); close (fd); - SetLastError (ERROR_GEN_FAILURE); return(INVALID_HANDLE_VALUE); } @@ -1841,16 +1669,13 @@ gpointer CreateFile(const gunichar2 *name, guint32 fileaccess, if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up file handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); close (fd); goto cleanup; } + cf_ret = handle; - _wapi_handle_fd_offset_store (fd, handle); - cf_ret = GINT_TO_POINTER (fd); - - file_private_handle->fd_mapped.fd=fd; - file_private_handle->fd_mapped.assigned=TRUE; + file_private_handle->fd=fd; + file_private_handle->assigned=TRUE; file_private_handle->async = ((attrs & FILE_FLAG_OVERLAPPED) != 0); file_handle->filename=_wapi_handle_scratch_store (filename, strlen (filename)); @@ -1868,7 +1693,7 @@ gpointer CreateFile(const gunichar2 *name, guint32 fileaccess, #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": returning handle %p with fd %d", handle, - file_private_handle->fd_mapped.fd); + file_private_handle->fd); #endif cleanup: @@ -1900,7 +1725,6 @@ gboolean DeleteFile(const gunichar2 *name) g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); #endif - SetLastError (ERROR_INVALID_NAME); return(FALSE); } @@ -1911,7 +1735,6 @@ gboolean DeleteFile(const gunichar2 *name) ": unicode conversion returned NULL"); #endif - SetLastError (ERROR_INVALID_NAME); return(FALSE); } @@ -1942,15 +1765,6 @@ gboolean MoveFile (const gunichar2 *name, const gunichar2 *dest_name) { gchar *utf8_name, *utf8_dest_name; int result; - - if(name==NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } utf8_name = mono_unicode_to_external (name); if (utf8_name == NULL) { @@ -1958,19 +1772,8 @@ gboolean MoveFile (const gunichar2 *name, const gunichar2 *dest_name) g_message (G_GNUC_PRETTY_FUNCTION ": unicode conversion returned NULL"); #endif - SetLastError (ERROR_INVALID_NAME); return FALSE; } - - if(dest_name==NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - g_free (utf8_name); - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } utf8_dest_name = mono_unicode_to_external (dest_name); if (utf8_dest_name == NULL) { @@ -1979,7 +1782,6 @@ gboolean MoveFile (const gunichar2 *name, const gunichar2 *dest_name) #endif g_free (utf8_name); - SetLastError (ERROR_INVALID_NAME); return FALSE; } @@ -1990,7 +1792,6 @@ gboolean MoveFile (const gunichar2 *name, const gunichar2 *dest_name) if (result != 0 && errno == EXDEV) { /* Try a copy to the new location, and delete the source */ if (CopyFile (name, dest_name, TRUE)==FALSE) { - /* CopyFile will set the error */ return(FALSE); } @@ -2036,15 +1837,6 @@ gboolean CopyFile (const gunichar2 *name, const gunichar2 *dest_name, int remain, n; struct stat st; - if(name==NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } - utf8_src = mono_unicode_to_external (name); if (utf8_src == NULL) { #ifdef DEBUG @@ -2055,16 +1847,6 @@ gboolean CopyFile (const gunichar2 *name, const gunichar2 *dest_name, return(FALSE); } - if(dest_name==NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - g_free (utf8_src); - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } - utf8_dest = mono_unicode_to_external (dest_name); if (utf8_dest == NULL) { #ifdef DEBUG @@ -2176,16 +1958,16 @@ gboolean CopyFile (const gunichar2 *name, const gunichar2 *dest_name, } static mono_once_t stdhandle_once=MONO_ONCE_INIT; -static gpointer stdin_handle=INVALID_HANDLE_VALUE; -static gpointer stdout_handle=INVALID_HANDLE_VALUE; -static gpointer stderr_handle=INVALID_HANDLE_VALUE; +static gpointer stdin_handle=NULL; +static gpointer stdout_handle=NULL; +static gpointer stderr_handle=NULL; static gpointer stdhandle_create (int fd, const guchar *name) { struct _WapiHandle_file *file_handle; struct _WapiHandlePrivate_file *file_private_handle; gboolean ok; - gpointer handle, ret = INVALID_HANDLE_VALUE; + gpointer handle, ret = NULL; int flags; int thr_ret; @@ -2209,7 +1991,6 @@ static gpointer stdhandle_create (int fd, const guchar *name) fd, strerror(errno)); #endif - _wapi_set_last_error_from_errno (); return(INVALID_HANDLE_VALUE); } @@ -2217,8 +1998,7 @@ static gpointer stdhandle_create (int fd, const guchar *name) if(handle==_WAPI_HANDLE_INVALID) { g_warning (G_GNUC_PRETTY_FUNCTION ": error creating file handle"); - SetLastError (ERROR_GEN_FAILURE); - return(INVALID_HANDLE_VALUE); + return(NULL); } pthread_cleanup_push ((void(*)(void *))_wapi_handle_unlock_handle, @@ -2232,16 +2012,12 @@ static gpointer stdhandle_create (int fd, const guchar *name) if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up console handle %p", handle); - SetLastError (ERROR_INVALID_HANDLE); goto cleanup; } - - /* We know this is fd 0, 1 or 2 */ - _wapi_handle_fd_offset_store (fd, handle); - ret = GINT_TO_POINTER (fd); + ret = handle; - file_private_handle->fd_mapped.fd=fd; - file_private_handle->fd_mapped.assigned=TRUE; + file_private_handle->fd=fd; + file_private_handle->assigned=TRUE; file_handle->filename=_wapi_handle_scratch_store (name, strlen (name)); /* some default security attributes might be needed */ file_handle->security_attributes=0; @@ -2251,7 +2027,7 @@ static gpointer stdhandle_create (int fd, const guchar *name) #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": returning handle %p with fd %d", - handle, file_private_handle->fd_mapped.fd); + handle, file_private_handle->fd); #endif cleanup: @@ -2305,17 +2081,11 @@ gpointer GetStdHandle(WapiStdHandle stdhandle) ": unknown standard handle type"); #endif - SetLastError (ERROR_INVALID_PARAMETER); return(INVALID_HANDLE_VALUE); } - if (handle == INVALID_HANDLE_VALUE) { - SetLastError (ERROR_NO_MORE_FILES); - return(INVALID_HANDLE_VALUE); - } - /* Add a reference to this handle */ - _wapi_handle_ref (_wapi_handle_fd_offset_to_handle (handle)); + _wapi_handle_ref (handle); return(handle); } @@ -2347,21 +2117,12 @@ gpointer GetStdHandle(WapiStdHandle stdhandle) * read due to an attempt to read past the end of the file), %FALSE on * error. */ -gboolean ReadFile(gpointer fd_handle, gpointer buffer, guint32 numbytes, +gboolean ReadFile(gpointer handle, gpointer buffer, guint32 numbytes, guint32 *bytesread, WapiOverlapped *overlapped) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].readfile==NULL) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -2394,21 +2155,12 @@ gboolean ReadFile(gpointer fd_handle, gpointer buffer, guint32 numbytes, * * Return value: %TRUE if the write succeeds, %FALSE on error. */ -gboolean WriteFile(gpointer fd_handle, gconstpointer buffer, guint32 numbytes, +gboolean WriteFile(gpointer handle, gconstpointer buffer, guint32 numbytes, guint32 *byteswritten, WapiOverlapped *overlapped) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].writefile==NULL) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -2426,20 +2178,11 @@ gboolean WriteFile(gpointer fd_handle, gconstpointer buffer, guint32 numbytes, * * Return value: %TRUE on success, %FALSE otherwise. */ -gboolean FlushFileBuffers(gpointer fd_handle) +gboolean FlushFileBuffers(gpointer handle) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].flushfile==NULL) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -2456,20 +2199,11 @@ gboolean FlushFileBuffers(gpointer fd_handle) * * Return value: %TRUE on success, %FALSE otherwise. */ -gboolean SetEndOfFile(gpointer fd_handle) +gboolean SetEndOfFile(gpointer handle) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].setendoffile==NULL) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -2505,22 +2239,13 @@ gboolean SetEndOfFile(gpointer fd_handle) * If @highmovedistance is not %NULL, the high 32 bits of the new file * pointer are stored there. On failure, %INVALID_SET_FILE_POINTER. */ -guint32 SetFilePointer(gpointer fd_handle, gint32 movedistance, +guint32 SetFilePointer(gpointer handle, gint32 movedistance, gint32 *highmovedistance, WapiSeekMethod method) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(INVALID_SET_FILE_POINTER); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].seek==NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(INVALID_SET_FILE_POINTER); + return(FALSE); } return(io_ops[type].seek (handle, movedistance, highmovedistance, @@ -2538,20 +2263,11 @@ guint32 SetFilePointer(gpointer fd_handle, gint32 movedistance, * %FILE_TYPE_CHAR - @handle is a character device, such as a console. * %FILE_TYPE_PIPE - @handle is a named or anonymous pipe. */ -WapiFileType GetFileType(gpointer fd_handle) +WapiFileType GetFileType(gpointer handle) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FILE_TYPE_UNKNOWN); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].getfiletype==NULL) { - SetLastError (ERROR_INVALID_HANDLE); return(FILE_TYPE_UNKNOWN); } @@ -2574,21 +2290,12 @@ WapiFileType GetFileType(gpointer fd_handle) * @highsize is non-%NULL then the high 32 bits of the file size are * stored here. On failure %INVALID_FILE_SIZE is returned. */ -guint32 GetFileSize(gpointer fd_handle, guint32 *highsize) +guint32 GetFileSize(gpointer handle, guint32 *highsize) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(INVALID_FILE_SIZE); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].getfilesize==NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(INVALID_FILE_SIZE); + return(FALSE); } return(io_ops[type].getfilesize (handle, highsize)); @@ -2619,21 +2326,12 @@ guint32 GetFileSize(gpointer fd_handle, guint32 *highsize) * * Return value: %TRUE on success, %FALSE otherwise. */ -gboolean GetFileTime(gpointer fd_handle, WapiFileTime *create_time, +gboolean GetFileTime(gpointer handle, WapiFileTime *create_time, WapiFileTime *last_access, WapiFileTime *last_write) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].getfiletime==NULL) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -2664,22 +2362,13 @@ gboolean GetFileTime(gpointer fd_handle, WapiFileTime *create_time, * * Return value: %TRUE on success, %FALSE otherwise. */ -gboolean SetFileTime(gpointer fd_handle, const WapiFileTime *create_time, +gboolean SetFileTime(gpointer handle, const WapiFileTime *create_time, const WapiFileTime *last_access, const WapiFileTime *last_write) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - WapiHandleType type; - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - - type = _wapi_handle_type (handle); + WapiHandleType type=_wapi_handle_type (handle); if(io_ops[type].setfiletime==NULL) { - SetLastError (ERROR_INVALID_HANDLE); return(FALSE); } @@ -2726,7 +2415,6 @@ gboolean FileTimeToSystemTime(const WapiFileTime *file_time, g_message(G_GNUC_PRETTY_FUNCTION ": system_time NULL"); #endif - SetLastError (ERROR_INVALID_PARAMETER); return(FALSE); } @@ -2742,7 +2430,6 @@ gboolean FileTimeToSystemTime(const WapiFileTime *file_time, g_message(G_GNUC_PRETTY_FUNCTION ": file_time too big"); #endif - SetLastError (ERROR_INVALID_PARAMETER); return(FALSE); } @@ -3079,7 +2766,6 @@ gpointer FindFirstFile (const gunichar2 *pattern, WapiFindData *find_data) g_free (dir_part); g_free (entry_part); g_free (utf8_pattern); - SetLastError (ERROR_GEN_FAILURE); return(INVALID_HANDLE_VALUE); } @@ -3100,7 +2786,6 @@ gpointer FindFirstFile (const gunichar2 *pattern, WapiFindData *find_data) entry_part = NULL; g_free (utf8_pattern); utf8_pattern = NULL; - SetLastError (ERROR_INVALID_HANDLE); goto cleanup; } @@ -3369,22 +3054,12 @@ gboolean CreateDirectory (const gunichar2 *name, WapiSecurityAttributes *securit struct stat buf; guint32 attrs; - if (name == NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } - utf8_name = mono_unicode_to_external (name); if (utf8_name == NULL) { #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": unicode conversion returned NULL"); #endif - SetLastError (ERROR_INVALID_NAME); return FALSE; } @@ -3431,15 +3106,6 @@ gboolean RemoveDirectory (const gunichar2 *name) { gchar *utf8_name; int result; - - if (name == NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } utf8_name = mono_unicode_to_external (name); if (utf8_name == NULL) { @@ -3447,7 +3113,6 @@ gboolean RemoveDirectory (const gunichar2 *name) g_message (G_GNUC_PRETTY_FUNCTION ": unicode conversion returned NULL"); #endif - SetLastError (ERROR_INVALID_NAME); return FALSE; } @@ -3475,15 +3140,6 @@ guint32 GetFileAttributes (const gunichar2 *name) struct stat buf; int result; - if (name == NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } - utf8_name = mono_unicode_to_external (name); if (utf8_name == NULL) { #ifdef DEBUG @@ -3530,18 +3186,8 @@ gboolean GetFileAttributesEx (const gunichar2 *name, WapiGetFileExInfoLevels lev g_message (G_GNUC_PRETTY_FUNCTION ": info level %d not supported.", level); #endif - SetLastError (ERROR_INVALID_PARAMETER); return FALSE; } - - if (name == NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } utf8_name = mono_unicode_to_external (name); if (utf8_name == NULL) { @@ -3608,26 +3254,8 @@ extern gboolean SetFileAttributes (const gunichar2 *name, guint32 attrs) * Currently we only handle one *internal* case, with a value that is * not standard: 0x80000000, which means `set executable bit' */ - - if (name == NULL) { -#ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": name is NULL"); -#endif - - SetLastError (ERROR_INVALID_NAME); - return(FALSE); - } utf8_name = mono_unicode_to_external (name); - if (utf8_name == NULL) { -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": unicode conversion returned NULL"); -#endif - - SetLastError (ERROR_INVALID_NAME); - return FALSE; - } - result = stat (utf8_name, &buf); if (result != 0) { g_free (utf8_name); @@ -3739,14 +3367,10 @@ extern gboolean SetCurrentDirectory (const gunichar2 *path) return result; } -/* When we're confident there are no more bugs in the fd->handle - * mapping, this can be replaced as a no-op: GPOINTER_TO_INT(fd_handle) == fd - */ -int _wapi_file_handle_to_fd (gpointer fd_handle) +int _wapi_file_handle_to_fd (gpointer handle) { struct _WapiHandlePrivate_file *file_private_handle; gboolean ok; - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": looking up fd for %p", handle); @@ -3765,25 +3389,17 @@ int _wapi_file_handle_to_fd (gpointer fd_handle) g_message (G_GNUC_PRETTY_FUNCTION ": returning -1"); #endif - SetLastError (ERROR_INVALID_HANDLE); return(-1); } } } - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); - return(-1); - } - #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": returning %d", - file_private_handle->fd_mapped.fd); + file_private_handle->fd); #endif - g_assert (file_private_handle->fd_mapped.fd == GPOINTER_TO_INT (fd_handle)); - - return(file_private_handle->fd_mapped.fd); + return(file_private_handle->fd); } gboolean CreatePipe (gpointer *readpipe, gpointer *writepipe, @@ -3818,20 +3434,6 @@ gboolean CreatePipe (gpointer *readpipe, gpointer *writepipe, _wapi_set_last_error_from_errno (); return(FALSE); } - - if (filedes[0] >= _wapi_fd_offset_table_size || - filedes[1] >= _wapi_fd_offset_table_size) { -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": File descriptor is too big"); -#endif - - SetLastError (ERROR_TOO_MANY_OPEN_FILES); - - close (filedes[0]); - close (filedes[1]); - - return(FALSE); - } /* filedes[0] is open for reading, filedes[1] for writing */ @@ -3841,8 +3443,6 @@ gboolean CreatePipe (gpointer *readpipe, gpointer *writepipe, ": error creating pipe read handle"); close (filedes[0]); close (filedes[1]); - SetLastError (ERROR_GEN_FAILURE); - return(FALSE); } @@ -3858,7 +3458,6 @@ gboolean CreatePipe (gpointer *readpipe, gpointer *writepipe, g_warning (G_GNUC_PRETTY_FUNCTION ": error looking up pipe handle %p", read_handle); close (filedes[0]); close (filedes[1]); - SetLastError (ERROR_INVALID_HANDLE); goto cleanup; } @@ -3870,8 +3469,6 @@ gboolean CreatePipe (gpointer *readpipe, gpointer *writepipe, close (filedes[0]); close (filedes[1]); - SetLastError (ERROR_GEN_FAILURE); - goto cleanup; } @@ -3890,27 +3487,26 @@ gboolean CreatePipe (gpointer *readpipe, gpointer *writepipe, close (filedes[0]); close (filedes[1]); - SetLastError (ERROR_INVALID_HANDLE); goto write_cleanup; } cp_ret = TRUE; - pipe_read_private_handle->fd_mapped.fd=filedes[0]; - pipe_read_private_handle->fd_mapped.assigned=TRUE; + pipe_read_private_handle->fd=filedes[0]; + pipe_read_private_handle->assigned=TRUE; pipe_read_handle->fileaccess=GENERIC_READ; - _wapi_handle_fd_offset_store (filedes[0], read_handle); - *readpipe=GINT_TO_POINTER (filedes[0]); + *readpipe=read_handle; - pipe_write_private_handle->fd_mapped.fd=filedes[1]; - pipe_write_private_handle->fd_mapped.assigned=TRUE; + pipe_write_private_handle->fd=filedes[1]; + pipe_write_private_handle->assigned=TRUE; pipe_write_handle->fileaccess=GENERIC_WRITE; - _wapi_handle_fd_offset_store (filedes[1], write_handle); - *writepipe=GINT_TO_POINTER (filedes[1]); + *writepipe=write_handle; #ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": Returning pipe: read handle %p (fd %d), write handle %p (fd %d)", read_handle, filedes[0], write_handle, filedes[1]); + g_message (G_GNUC_PRETTY_FUNCTION + ": Returning pipe: read handle %p, write handle %p", + read_handle, write_handle); #endif write_cleanup: @@ -3983,7 +3579,7 @@ guint32 GetTempPath (guint32 len, gunichar2 *buf) } gboolean -_wapi_io_add_callback (gpointer fd_handle, +_wapi_io_add_callback (gpointer handle, WapiOverlappedCB callback, guint64 flags G_GNUC_UNUSED) { @@ -3992,12 +3588,6 @@ _wapi_io_add_callback (gpointer fd_handle, gboolean ok; int thr_ret; gboolean ret = FALSE; - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } ok = _wapi_lookup_handle (handle, WAPI_HANDLE_FILE, (gpointer *) &file_handle, @@ -4171,19 +3761,13 @@ static gboolean _wapi_unlock_file_region (int fd, off_t offset, off_t length) return(TRUE); } -gboolean LockFile (gpointer fd_handle, guint32 offset_low, guint32 offset_high, +gboolean LockFile (gpointer handle, guint32 offset_low, guint32 offset_high, guint32 length_low, guint32 length_high) { struct _WapiHandle_file *file_handle; struct _WapiHandlePrivate_file *file_private_handle; gboolean ok; off_t offset, length; - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } ok = _wapi_lookup_handle (handle, WAPI_HANDLE_FILE, (gpointer *)&file_handle, @@ -4195,16 +3779,11 @@ gboolean LockFile (gpointer fd_handle, guint32 offset_low, guint32 offset_high, return(FALSE); } - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - if (!(file_handle->fileaccess & GENERIC_READ) && !(file_handle->fileaccess & GENERIC_WRITE) && !(file_handle->fileaccess & GENERIC_ALL)) { #ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ or GENERIC_WRITE access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message (G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ or GENERIC_WRITE access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif SetLastError (ERROR_ACCESS_DENIED); return(FALSE); @@ -4217,7 +3796,7 @@ gboolean LockFile (gpointer fd_handle, guint32 offset_low, guint32 offset_high, #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": Locking handle %p fd %d, offset %lld, length %lld", - handle, file_private_handle->fd_mapped.fd, offset, length); + handle, file_private_handle->fd, offset, length); #endif #else offset = offset_low; @@ -4226,28 +3805,21 @@ gboolean LockFile (gpointer fd_handle, guint32 offset_low, guint32 offset_high, #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": Locking handle %p fd %d, offset %ld, length %ld", - handle, file_private_handle->fd_mapped.fd, offset, length); + handle, file_private_handle->fd, offset, length); #endif #endif - return(_wapi_lock_file_region (file_private_handle->fd_mapped.fd, - offset, length)); + return(_wapi_lock_file_region (file_private_handle->fd, offset, + length)); } -gboolean UnlockFile (gpointer fd_handle, guint32 offset_low, - guint32 offset_high, guint32 length_low, - guint32 length_high) +gboolean UnlockFile (gpointer handle, guint32 offset_low, guint32 offset_high, + guint32 length_low, guint32 length_high) { struct _WapiHandle_file *file_handle; struct _WapiHandlePrivate_file *file_private_handle; gboolean ok; off_t offset, length; - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - - if (handle == NULL) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } ok = _wapi_lookup_handle (handle, WAPI_HANDLE_FILE, (gpointer *)&file_handle, @@ -4259,16 +3831,11 @@ gboolean UnlockFile (gpointer fd_handle, guint32 offset_low, return(FALSE); } - if (file_private_handle->fd_mapped.assigned == FALSE) { - SetLastError (ERROR_INVALID_HANDLE); - return(FALSE); - } - if (!(file_handle->fileaccess & GENERIC_READ) && !(file_handle->fileaccess & GENERIC_WRITE) && !(file_handle->fileaccess & GENERIC_ALL)) { #ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ or GENERIC_WRITE access: %u", handle, file_private_handle->fd_mapped.fd, file_handle->fileaccess); + g_message (G_GNUC_PRETTY_FUNCTION ": handle %p fd %d doesn't have GENERIC_READ or GENERIC_WRITE access: %u", handle, file_private_handle->fd, file_handle->fileaccess); #endif SetLastError (ERROR_ACCESS_DENIED); return(FALSE); @@ -4281,7 +3848,7 @@ gboolean UnlockFile (gpointer fd_handle, guint32 offset_low, #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": Unlocking handle %p fd %d, offset %lld, length %lld", - handle, file_private_handle->fd_mapped.fd, offset, length); + handle, file_private_handle->fd, offset, length); #endif #else offset = offset_low; @@ -4290,10 +3857,10 @@ gboolean UnlockFile (gpointer fd_handle, guint32 offset_low, #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION ": Unlocking handle %p fd %d, offset %ld, length %ld", - handle, file_private_handle->fd_mapped.fd, offset, length); + handle, file_private_handle->fd, offset, length); #endif #endif - return(_wapi_unlock_file_region (file_private_handle->fd_mapped.fd, - offset, length)); + return(_wapi_unlock_file_region (file_private_handle->fd, offset, + length)); } diff --git a/mono/io-layer/mutexes.c b/mono/io-layer/mutexes.c index ee10921578a..ee736aac2c2 100644 --- a/mono/io-layer/mutexes.c +++ b/mono/io-layer/mutexes.c @@ -23,8 +23,9 @@ #undef DEBUG /* This is used to serialise mutex creation when names are given + * (FIXME: make it process-shared) */ -static mono_mutex_t named_mutex_mutex; +static mono_mutex_t named_mutex_mutex = MONO_MUTEX_INITIALIZER; static void mutex_close_shared (gpointer handle); static void mutex_signal(gpointer handle); @@ -43,23 +44,6 @@ static mono_once_t mutex_ops_once=MONO_ONCE_INIT; static void mutex_ops_init (void) { - int thr_ret; -#if defined(_POSIX_THREAD_PROCESS_SHARED) && _POSIX_THREAD_PROCESS_SHARED != -1 - pthread_mutexattr_t mutex_shared_attr; - - thr_ret = mono_mutexattr_init (&mutex_shared_attr); - g_assert (thr_ret == 0); - - thr_ret = mono_mutexattr_setpshared (&mutex_shared_attr, - PTHREAD_PROCESS_SHARED); - g_assert (thr_ret == 0); - - thr_ret = mono_mutex_init (&named_mutex_mutex, &mutex_shared_attr); - g_assert (thr_ret == 0); -#else - thr_ret = mono_mutex_init (&named_mutex_mutex, NULL); -#endif - _wapi_handle_register_capabilities (WAPI_HANDLE_MUTEX, WAPI_HANDLE_CAP_WAIT | WAPI_HANDLE_CAP_SIGNAL | diff --git a/mono/io-layer/socket-private.h b/mono/io-layer/socket-private.h index 4da7f58d8ad..47f14c1315f 100644 --- a/mono/io-layer/socket-private.h +++ b/mono/io-layer/socket-private.h @@ -22,7 +22,7 @@ struct _WapiHandle_socket struct _WapiHandlePrivate_socket { - WapiFDMapped fd_mapped; + int fd; }; #endif /* _WAPI_SOCKET_PRIVATE_H_ */ diff --git a/mono/io-layer/sockets.c b/mono/io-layer/sockets.c index df7ac8a25dc..3f48f02af8e 100644 --- a/mono/io-layer/sockets.c +++ b/mono/io-layer/sockets.c @@ -97,28 +97,21 @@ static void socket_close_private (gpointer handle) g_ptr_array_remove_fast(sockets, GUINT_TO_POINTER (handle)); - if (socket_private_handle->fd_mapped.assigned == TRUE) { - /* Blank out the mapping, to make catching errors easier */ - _wapi_handle_fd_offset_store (socket_private_handle->fd_mapped.fd, NULL); - - do { - ret=close(socket_private_handle->fd_mapped.fd); - } - while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); + do { + ret=close(socket_private_handle->fd); + } + while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); - if(ret==-1) { - gint errnum = errno; + if(ret==-1) { + gint errnum = errno; #ifdef DEBUG - g_message(G_GNUC_PRETTY_FUNCTION ": close error: %s", - strerror(errno)); + g_message(G_GNUC_PRETTY_FUNCTION ": close error: %s", + strerror(errno)); #endif - errnum = errno_to_WSA (errnum, G_GNUC_PRETTY_FUNCTION); - WSASetLastError (errnum); + errnum = errno_to_WSA (errnum, G_GNUC_PRETTY_FUNCTION); + WSASetLastError (errnum); - return; - } - } else { - WSASetLastError(WSAENOTSOCK); + return; } } @@ -212,27 +205,20 @@ int WSAGetLastError(void) return(err); } -int closesocket(guint32 fd_handle) +int closesocket(guint32 handle) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd_handle)); - - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { - WSASetLastError (WSAENOTSOCK); - return(0); - } - - _wapi_handle_unref (handle); + _wapi_handle_unref (GUINT_TO_POINTER (handle)); return(0); } -guint32 _wapi_accept(guint32 fd, struct sockaddr *addr, socklen_t *addrlen) +guint32 _wapi_accept(guint32 handle, struct sockaddr *addr, + socklen_t *addrlen) { + struct _WapiHandlePrivate_socket *socket_private_handle; struct _WapiHandlePrivate_socket *new_socket_private_handle; - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); gpointer new_handle; gboolean ok; - int new_fd; + int fd; int thr_ret; guint32 ret = INVALID_SOCKET; @@ -241,18 +227,21 @@ guint32 _wapi_accept(guint32 fd, struct sockaddr *addr, socklen_t *addrlen) return(INVALID_SOCKET); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(INVALID_SOCKET); } do { - new_fd=accept(fd, addr, addrlen); + fd=accept(socket_private_handle->fd, addr, addrlen); } - while (new_fd==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); + while (fd==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); - if(new_fd==-1) { + if(fd==-1) { gint errnum = errno; #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": accept error: %s", @@ -265,23 +254,10 @@ guint32 _wapi_accept(guint32 fd, struct sockaddr *addr, socklen_t *addrlen) return(INVALID_SOCKET); } - if (new_fd >= _wapi_fd_offset_table_size) { -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": File descriptor is too big"); -#endif - - WSASetLastError (WSASYSCALLFAILURE); - - close (new_fd); - - return(INVALID_SOCKET); - } - new_handle=_wapi_handle_new (WAPI_HANDLE_SOCKET); if(new_handle==_WAPI_HANDLE_INVALID) { g_warning (G_GNUC_PRETTY_FUNCTION ": error creating socket handle"); - WSASetLastError (ERROR_GEN_FAILURE); return(INVALID_SOCKET); } @@ -294,21 +270,17 @@ guint32 _wapi_accept(guint32 fd, struct sockaddr *addr, socklen_t *addrlen) (gpointer *)&new_socket_private_handle); if(ok==FALSE) { g_warning (G_GNUC_PRETTY_FUNCTION - ": error looking up new socket handle %p", - new_handle); + ": error looking up socket handle 0x%x", handle); goto cleanup; } - - _wapi_handle_fd_offset_store (new_fd, new_handle); - ret = new_fd; + ret = GPOINTER_TO_UINT (new_handle); - new_socket_private_handle->fd_mapped.fd = new_fd; - new_socket_private_handle->fd_mapped.assigned = TRUE; + new_socket_private_handle->fd=fd; #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": returning newly accepted socket handle %p with fd %d", - new_handle, new_socket_private_handle->fd_mapped.fd); + new_handle, new_socket_private_handle->fd); #endif cleanup: @@ -319,23 +291,27 @@ cleanup: return(ret); } -int _wapi_bind(guint32 fd, struct sockaddr *my_addr, socklen_t addrlen) +int _wapi_bind(guint32 handle, struct sockaddr *my_addr, socklen_t addrlen) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { WSASetLastError(WSANOTINITIALISED); return(SOCKET_ERROR); } - - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } - ret=bind(fd, my_addr, addrlen); + ret=bind(socket_private_handle->fd, my_addr, addrlen); if(ret==-1) { gint errnum = errno; #ifdef DEBUG @@ -350,10 +326,11 @@ int _wapi_bind(guint32 fd, struct sockaddr *my_addr, socklen_t addrlen) return(ret); } -int _wapi_connect(guint32 fd, const struct sockaddr *serv_addr, +int _wapi_connect(guint32 handle, const struct sockaddr *serv_addr, socklen_t addrlen) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; gint errnum; @@ -362,14 +339,17 @@ int _wapi_connect(guint32 fd, const struct sockaddr *serv_addr, return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } do { - ret=connect(fd, serv_addr, addrlen); + ret=connect(socket_private_handle->fd, serv_addr, addrlen); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); @@ -381,11 +361,11 @@ int _wapi_connect(guint32 fd, const struct sockaddr *serv_addr, errnum = errno; - ret=setsockopt (fd, SOL_SOCKET, SO_BROADCAST, &true, - sizeof(true)); + ret=setsockopt (socket_private_handle->fd, SOL_SOCKET, + SO_BROADCAST, &true, sizeof(true)); if(ret==0) { do { - ret=connect (fd, serv_addr, addrlen); + ret=connect (socket_private_handle->fd, serv_addr, addrlen); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); } @@ -406,9 +386,11 @@ int _wapi_connect(guint32 fd, const struct sockaddr *serv_addr, return(ret); } -int _wapi_getpeername(guint32 fd, struct sockaddr *name, socklen_t *namelen) +int _wapi_getpeername(guint32 handle, struct sockaddr *name, + socklen_t *namelen) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -416,13 +398,16 @@ int _wapi_getpeername(guint32 fd, struct sockaddr *name, socklen_t *namelen) return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } - ret=getpeername(fd, name, namelen); + ret=getpeername(socket_private_handle->fd, name, namelen); if(ret==-1) { gint errnum = errno; #ifdef DEBUG @@ -439,9 +424,11 @@ int _wapi_getpeername(guint32 fd, struct sockaddr *name, socklen_t *namelen) return(ret); } -int _wapi_getsockname(guint32 fd, struct sockaddr *name, socklen_t *namelen) +int _wapi_getsockname(guint32 handle, struct sockaddr *name, + socklen_t *namelen) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -449,13 +436,16 @@ int _wapi_getsockname(guint32 fd, struct sockaddr *name, socklen_t *namelen) return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } - ret=getsockname(fd, name, namelen); + ret=getsockname(socket_private_handle->fd, name, namelen); if(ret==-1) { gint errnum = errno; #ifdef DEBUG @@ -472,10 +462,11 @@ int _wapi_getsockname(guint32 fd, struct sockaddr *name, socklen_t *namelen) return(ret); } -int _wapi_getsockopt(guint32 fd, int level, int optname, void *optval, +int _wapi_getsockopt(guint32 handle, int level, int optname, void *optval, socklen_t *optlen) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -483,13 +474,17 @@ int _wapi_getsockopt(guint32 fd, int level, int optname, void *optval, return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } - ret=getsockopt(fd, level, optname, optval, optlen); + ret=getsockopt(socket_private_handle->fd, level, optname, optval, + optlen); if(ret==-1) { gint errnum = errno; #ifdef DEBUG @@ -506,9 +501,10 @@ int _wapi_getsockopt(guint32 fd, int level, int optname, void *optval, return(ret); } -int _wapi_listen(guint32 fd, int backlog) +int _wapi_listen(guint32 handle, int backlog) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -516,13 +512,16 @@ int _wapi_listen(guint32 fd, int backlog) return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } - ret=listen(fd, backlog); + ret=listen(socket_private_handle->fd, backlog); if(ret==-1) { gint errnum = errno; #ifdef DEBUG @@ -539,18 +538,19 @@ int _wapi_listen(guint32 fd, int backlog) return(0); } -int _wapi_recv(guint32 fd, void *buf, size_t len, int recv_flags) +int _wapi_recv(guint32 handle, void *buf, size_t len, int recv_flags) { - return(_wapi_recvfrom(fd, buf, len, recv_flags, NULL, 0)); + return(_wapi_recvfrom(handle, buf, len, recv_flags, NULL, 0)); } -int _wapi_recvfrom(guint32 fd, void *buf, size_t len, int recv_flags, +int _wapi_recvfrom(guint32 handle, void *buf, size_t len, int recv_flags, struct sockaddr *from, socklen_t *fromlen) { #ifndef HAVE_MSG_NOSIGNAL void (*old_sigpipe)(int); // old SIGPIPE handler #endif - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -558,22 +558,26 @@ int _wapi_recvfrom(guint32 fd, void *buf, size_t len, int recv_flags, return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } #ifdef HAVE_MSG_NOSIGNAL do { - ret=recvfrom(fd, buf, len, recv_flags | MSG_NOSIGNAL, from, + ret=recvfrom(socket_private_handle->fd, buf, len, recv_flags | MSG_NOSIGNAL, from, fromlen); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); #else old_sigpipe = signal(SIGPIPE, SIG_IGN); do { - ret=recvfrom(fd, buf, len, recv_flags, from, fromlen); + ret=recvfrom(socket_private_handle->fd, buf, len, recv_flags, from, + fromlen); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); signal(SIGPIPE, old_sigpipe); @@ -594,12 +598,13 @@ int _wapi_recvfrom(guint32 fd, void *buf, size_t len, int recv_flags, return(ret); } -int _wapi_send(guint32 fd, const void *msg, size_t len, int send_flags) +int _wapi_send(guint32 handle, const void *msg, size_t len, int send_flags) { #ifndef HAVE_MSG_NOSIGNAL void (*old_sigpipe)(int); // old SIGPIPE handler #endif - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -607,21 +612,24 @@ int _wapi_send(guint32 fd, const void *msg, size_t len, int send_flags) return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } #ifdef HAVE_MSG_NOSIGNAL do { - ret=send(fd, msg, len, send_flags | MSG_NOSIGNAL); + ret=send(socket_private_handle->fd, msg, len, send_flags | MSG_NOSIGNAL); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); #else old_sigpipe = signal(SIGPIPE, SIG_IGN); do { - ret=send(fd, msg, len, send_flags); + ret=send(socket_private_handle->fd, msg, len, send_flags); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); signal(SIGPIPE, old_sigpipe); @@ -641,13 +649,14 @@ int _wapi_send(guint32 fd, const void *msg, size_t len, int send_flags) return(ret); } -int _wapi_sendto(guint32 fd, const void *msg, size_t len, int send_flags, +int _wapi_sendto(guint32 handle, const void *msg, size_t len, int send_flags, const struct sockaddr *to, socklen_t tolen) { #ifndef HAVE_MSG_NOSIGNAL void (*old_sigpipe)(int); // old SIGPIPE handler #endif - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -655,21 +664,24 @@ int _wapi_sendto(guint32 fd, const void *msg, size_t len, int send_flags, return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } #ifdef HAVE_MSG_NOSIGNAL do { - ret=sendto(fd, msg, len, send_flags | MSG_NOSIGNAL, to, tolen); + ret=sendto(socket_private_handle->fd, msg, len, send_flags | MSG_NOSIGNAL, to, tolen); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); #else old_sigpipe = signal(SIGPIPE, SIG_IGN); do { - ret=sendto(fd, msg, len, send_flags, to, tolen); + ret=sendto(socket_private_handle->fd, msg, len, send_flags, to, tolen); } while (ret==-1 && errno==EINTR && !_wapi_thread_cur_apc_pending()); signal(SIGPIPE, old_sigpipe); @@ -689,10 +701,11 @@ int _wapi_sendto(guint32 fd, const void *msg, size_t len, int send_flags, return(ret); } -int _wapi_setsockopt(guint32 fd, int level, int optname, +int _wapi_setsockopt(guint32 handle, int level, int optname, const void *optval, socklen_t optlen) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -700,13 +713,17 @@ int _wapi_setsockopt(guint32 fd, int level, int optname, return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } - ret=setsockopt(fd, level, optname, optval, optlen); + ret=setsockopt(socket_private_handle->fd, level, optname, optval, + optlen); if(ret==-1) { gint errnum = errno; #ifdef DEBUG @@ -723,9 +740,10 @@ int _wapi_setsockopt(guint32 fd, int level, int optname, return(ret); } -int _wapi_shutdown(guint32 fd, int how) +int _wapi_shutdown(guint32 handle, int how) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -733,13 +751,16 @@ int _wapi_shutdown(guint32 fd, int how) return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } - ret=shutdown(fd, how); + ret=shutdown(socket_private_handle->fd, how); if(ret==-1) { gint errnum = errno; #ifdef DEBUG @@ -781,18 +802,6 @@ guint32 _wapi_socket(int domain, int type, int protocol, void *unused, guint32 u return(INVALID_SOCKET); } - - if (fd >= _wapi_fd_offset_table_size) { -#ifdef DEBUG - g_message (G_GNUC_PRETTY_FUNCTION ": File descriptor is too big"); -#endif - - WSASetLastError (WSASYSCALLFAILURE); - close (fd); - - return(INVALID_SOCKET); - } - mono_once (&socket_ops_once, socket_ops_init); @@ -815,17 +824,14 @@ guint32 _wapi_socket(int domain, int type, int protocol, void *unused, guint32 u ": error looking up socket handle %p", handle); goto cleanup; } - - _wapi_handle_fd_offset_store (fd, handle); - ret = fd; + ret = GPOINTER_TO_UINT (handle); - socket_private_handle->fd_mapped.fd = fd; - socket_private_handle->fd_mapped.assigned = TRUE; + socket_private_handle->fd=fd; #ifdef DEBUG g_message(G_GNUC_PRETTY_FUNCTION ": returning socket handle %p with fd %d", handle, - socket_private_handle->fd_mapped.fd); + socket_private_handle->fd); #endif cleanup: @@ -878,12 +884,13 @@ struct hostent *_wapi_gethostbyname(const char *hostname) } int -WSAIoctl (guint32 fd, gint32 command, - gchar *input, gint i_len, - gchar *output, gint o_len, glong *written, - void *unused1, void *unused2) +WSAIoctl (guint32 handle, gint32 command, + gchar *input, gint i_len, + gchar *output, gint o_len, glong *written, + void *unused1, void *unused2) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; gchar *buffer = NULL; @@ -892,8 +899,12 @@ WSAIoctl (guint32 fd, gint32 command, return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok = _wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + + if (ok == FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError (WSAENOTSOCK); return SOCKET_ERROR; } @@ -901,7 +912,7 @@ WSAIoctl (guint32 fd, gint32 command, if (i_len > 0) buffer = g_memdup (input, i_len); - ret = ioctl (fd, command, buffer); + ret = ioctl (socket_private_handle->fd, command, buffer); if (ret == -1) { gint errnum = errno; #ifdef DEBUG @@ -930,9 +941,10 @@ WSAIoctl (guint32 fd, gint32 command, return 0; } -int ioctlsocket(guint32 fd, gint32 command, gpointer arg) +int ioctlsocket(guint32 handle, gint32 command, gpointer arg) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; int ret; if(startup_count==0) { @@ -940,8 +952,11 @@ int ioctlsocket(guint32 fd, gint32 command, gpointer arg) return(SOCKET_ERROR); } - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(SOCKET_ERROR); } @@ -961,19 +976,19 @@ int ioctlsocket(guint32 fd, gint32 command, gpointer arg) * connect to return EINPROGRESS, but the ioctl doesn't seem to) */ if(command==FIONBIO) { - ret=fcntl(fd, F_GETFL, 0); + ret=fcntl(socket_private_handle->fd, F_GETFL, 0); if(ret!=-1) { if(*(gboolean *)arg) { ret &= ~O_NONBLOCK; } else { ret |= O_NONBLOCK; } - ret=fcntl(fd, F_SETFL, ret); + ret=fcntl(socket_private_handle->fd, F_SETFL, ret); } } else #endif /* O_NONBLOCK */ { - ret=ioctl(fd, command, arg); + ret=ioctl(socket_private_handle->fd, command, arg); } if(ret==-1) { gint errnum = errno; @@ -1021,43 +1036,55 @@ int _wapi_select(int nfds G_GNUC_UNUSED, fd_set *readfds, fd_set *writefds, return(ret); } -void _wapi_FD_CLR(guint32 fd, fd_set *set) +void _wapi_FD_CLR(guint32 handle, fd_set *set) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return; } - FD_CLR(fd, set); + FD_CLR(socket_private_handle->fd, set); } -int _wapi_FD_ISSET(guint32 fd, fd_set *set) +int _wapi_FD_ISSET(guint32 handle, fd_set *set) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return(0); } - return(FD_ISSET(fd, set)); + return(FD_ISSET(socket_private_handle->fd, set)); } -void _wapi_FD_SET(guint32 fd, fd_set *set) +void _wapi_FD_SET(guint32 handle, fd_set *set) { - gpointer handle = _wapi_handle_fd_offset_to_handle (GUINT_TO_POINTER (fd)); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if(ok==FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", handle); WSASetLastError(WSAENOTSOCK); return; } - FD_SET(fd, set); + FD_SET(socket_private_handle->fd, set); } #ifdef USE_AIO @@ -1092,23 +1119,29 @@ async_notifier (union sigval sig) } static gboolean -do_aio_call (gboolean is_read, gpointer fd_handle, gpointer buffer, +do_aio_call (gboolean is_read, gpointer handle, gpointer buffer, guint32 numbytes, guint32 *out_bytes, gpointer ares, SocketAsyncCB callback) { - gpointer handle = _wapi_handle_fd_offset_to_handle (fd_handle); - int fd = GPOINTER_TO_UINT (fd_handle); + struct _WapiHandlePrivate_socket *socket_private_handle; + gboolean ok; + int fd; struct aiocb *aio; int result; notifier_data_t *ndata; - if (handle == NULL || - _wapi_handle_type (handle) != WAPI_HANDLE_SOCKET) { + ok=_wapi_lookup_handle (GUINT_TO_POINTER (handle), WAPI_HANDLE_SOCKET, + NULL, (gpointer *)&socket_private_handle); + if (ok == FALSE) { + g_warning (G_GNUC_PRETTY_FUNCTION + ": error looking up socket handle 0x%x", (guint) handle); WSASetLastError (WSAENOTSOCK); return FALSE; } + fd = socket_private_handle->fd; + ndata = g_new0 (notifier_data_t, 1); aio = g_new0 (struct aiocb, 1); ndata->ares = ares; diff --git a/mono/io-layer/threads.c b/mono/io-layer/threads.c index 31c1176a12c..b9ddc6aa3dc 100644 --- a/mono/io-layer/threads.c +++ b/mono/io-layer/threads.c @@ -99,7 +99,9 @@ static void thread_close_private (gpointer handle) thread_handle->thread->id); #endif - thread_handle->thread=NULL; + if(thread_handle->thread!=NULL) { + _wapi_timed_thread_destroy (thread_handle->thread); + } } static void thread_own (gpointer handle) @@ -626,10 +628,6 @@ guint32 ResumeThread(gpointer handle) return(0xFFFFFFFF); } - if (thread_private_handle->thread == NULL) { - return(0xFFFFFFFF); - } - #ifdef WITH_INCLUDED_LIBGC if (thread_private_handle->thread->suspend_count <= 1) _wapi_timed_thread_resume (thread_private_handle->thread); @@ -672,10 +670,6 @@ guint32 SuspendThread(gpointer handle) return(0xFFFFFFFF); } - if (thread_private_handle->thread == NULL) { - return(0xFFFFFFFF); - } - if (!thread_private_handle->thread->suspend_count) { if (handle == current) _wapi_timed_thread_suspend (thread_private_handle->thread); diff --git a/mono/io-layer/timed-thread.c b/mono/io-layer/timed-thread.c index 6599e0660f3..c0d737862a2 100644 --- a/mono/io-layer/timed-thread.c +++ b/mono/io-layer/timed-thread.c @@ -254,8 +254,6 @@ int _wapi_timed_thread_join(TimedThread *thread, struct timespec *timeout, if(exitstatus!=NULL) { *exitstatus = thread->exitstatus; } - - _wapi_timed_thread_destroy (thread); } return(result); } diff --git a/mono/io-layer/wait.c b/mono/io-layer/wait.c index a236d17ed3e..e3d07b3a255 100644 --- a/mono/io-layer/wait.c +++ b/mono/io-layer/wait.c @@ -354,15 +354,9 @@ static gboolean test_and_own (guint32 numobjects, gpointer *handles, done = _wapi_handle_count_signalled_handles (numobjects, handles, waitall, count, lowest); if (done == TRUE) { - if (waitall == TRUE) { - for (i = 0; i < numobjects; i++) { - if (_wapi_handle_issignalled (handles[i])) { - _wapi_handle_ops_own (handles[i]); - } - } - } else { - if (_wapi_handle_issignalled (handles[*lowest])) { - _wapi_handle_ops_own (handles[*lowest]); + for (i = 0; i < numobjects; i++) { + if (_wapi_handle_issignalled (handles[i])) { + _wapi_handle_ops_own (handles[i]); } } } diff --git a/mono/io-layer/wapi-private.h b/mono/io-layer/wapi-private.h index 2a7203c6937..59ec8defe30 100644 --- a/mono/io-layer/wapi-private.h +++ b/mono/io-layer/wapi-private.h @@ -35,7 +35,7 @@ /* Increment this whenever an incompatible change is made to the * shared handle structure. */ -#define _WAPI_HANDLE_VERSION 3 +#define _WAPI_HANDLE_VERSION 1 typedef enum { WAPI_HANDLE_UNUSED=0, @@ -59,19 +59,6 @@ typedef struct guint32 name; } WapiSharedNamespace; -/* The boolean is for distinguishing between a zeroed struct being not - * as yet assigned, and one containing a valid fd 0. It's also used - * to signal that a previously-good fd has been reused behind our - * back, so we need to invalidate the handle that thought it owned the - * fd. - */ -typedef struct -{ - int fd; - gboolean assigned; -} WapiFDMapped; - - typedef enum { WAPI_HANDLE_CAP_WAIT=0x01, WAPI_HANDLE_CAP_SIGNAL=0x02, @@ -165,7 +152,6 @@ struct _WapiHandleShared_list { guchar daemon[MONO_SIZEOF_SUNPATH]; _wapi_daemon_status daemon_running; - guint32 fd_offset_table_size; #if defined(_POSIX_THREAD_PROCESS_SHARED) && _POSIX_THREAD_PROCESS_SHARED != -1 mono_mutex_t signal_mutex; diff --git a/mono/metadata/ChangeLog b/mono/metadata/ChangeLog index 1cb649a2b2e..03869d5b735 100644 --- a/mono/metadata/ChangeLog +++ b/mono/metadata/ChangeLog @@ -1,246 +1,3 @@ -2004-10-25 Zoltan Varga <vargaz@freemail.hu> - - * image.c: Avoid overwriting values in the loaded_images_hash when an - assembly is loaded multiple times. Fixes #61152. - - * metadata.c (mono_metadata_parse_type_full): Fix parsing of custom - modifiers. - - * appdomain.c (ves_icall_System_AppDomain_ExecuteAssembly): Fix - argument of mono_get_exception_file_not_found. - - * assembly.c (mono_assembly_names_equal): Compare the cultures as well, - so multiple satellite assemblies for the same name can be loaded. - Fixes #68259. - - * appdomain.c (mono_domain_assembly_preload): Actually return the loaded assembly, - not NULL. - - * icall.c (ves_icall_type_is_subtype_of): Fix this for byref types. - (ves_icall_type_is_assignable_from): Ditto. Fixes #68582. - - * gc.c (finalize_domain_objects): Call GC_invoke_finalizers () so - pending finalizers are not invoked after the appdomain has been - unloaded. Fixes #67862. - -2004-10-08 Zoltan Varga <vargaz@freemail.hu> - - * threads.c (abort_appdomain_thread): Fix unref errors. - -2004-10-07 Jackson Harper <jackson@ximian.com> - - * culture-info-tables.h: regenerate file. - -2004-10-07 Zoltan Varga <vargaz@freemail.hu> - - * loader.c (mono_lookup_pinvoke_call): Try the dllname prefixed with - 'lib' too. Fixes #63130. - -2004-10-02 Ben Maurer <bmaurer@ximian.com> - - * threadpool.c: the ares hashtable needs a critical section around it. - this prevents some nasty segfaults - -2004-09-30 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * threads.c: don't call mono_thread_detach() in start_wrapper(), - avoiding a possible hang in GetCurrentThreadId(0). Fixes bug #65379. - -2004-09-28 Zoltan Varga <vargaz@freemail.hu> - - * reflection.c (method_encode_code): Align method headers properly. - Fixes #66025. - -2004-09-25 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * threadpool.c: reuse allocated slots in the queue. - -2004-09-23 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * appdomain.c: - (mono_domain_set): allow setting a domain that is being unloaded. - (mono_domain_unload): invoke the DomainUnload callbacks in the domain - being unloaded. - -2004-09-18 Martin Baulig <martin@ximian.com> - - * mono-debug.c, debug-mono-symfile.c: Merged my locking changes - from HEAD. - -2004-09-17 Zoltan Varga <vargaz@freemail.hu> - - * loader.c (mono_lookup_pinvoke_call): Add support for stdcall name - mangling. - -2004-09-16 Lluis Sanchez Gual <lluis@novell.com> - - * locales.c: nullify the ICU_collator member of CompareInfo when it is - finalized. There where random SIGSEVs at program termination, when - an object being finalized was trying to do a string comparison and - the current culture was already finalized. - -2004-09-16 Zoltan Varga <vargaz@freemail.hu> - - * appdomain.c (ves_icall_System_AppDomain_createDomain): Load all - assemblies from the parent. Fixes #65665. - -2004-09-14 Lluis Sanchez Gual <lluis@novell.com> - - * object.c: Added a "done" flag to TypeInitializationLock. This avoids - false deadlock checks in class initialization. - -2004-09-09 Zoltan Varga <vargaz@freemail.hu> - - * reflection.h reflection.c loader.c: Allow dynamic construction of - pinvoke methods. Fixes #65571. - -2004-09-08 Lluis Sanchez Gual <lluis@novell.com> - - * object.c: In mono_message_invoke, fill the output parameter array after - calling the managed method (it was done before the call). This fixes - bug #59299. - -2004-09-08 Zoltan Varga <vargaz@freemail.hu> - - * image.c (mono_image_close): Applied patch from - vasantha.paulraj@honeywell.com (Vasantha selvi). Fix crash when an - assembly is loaded multiple times from data. - - * image.c (mono_image_open): Fix warning. - -2004-09-07 Zoltan Varga <vargaz@freemail.hu> - - * reflection.c (mono_reflection_create_runtime_class): Initialize - klass->nested_classes. Fixes #61224. - -2004-09-06 Zoltan Varga <vargaz@freemail.hu> - - * reflection.c (mono_param_get_objects): Initialize the default value - with DBNull.Value, not null. Fixes #62123. - -2004-09-01 Miguel de Icaza <miguel@ximian.com> - - * marshal.c (mono_marshal_get_managed_wrapper): Remove FIXME and - throw an exception with a cute explanation. - -2004-09-06 Dick Porter <dick@ximian.com> - - * process.c (ves_icall_System_Diagnostics_Process_Start_internal): - Close the new process's thread handle, as we don't use it. The - handle stays around forever otherwise. - -2004-09-05 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * assembly.c: provide more information when loading an assembly fails. - -2004-09-04 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * filewatcher.c: don't expect the development fam package to be - installed. If HAVE_KQUEUE return mode 3 to use the new kqueue - watcher. Patch by Geoff Norton. - -2004-09-02 Zoltan Varga <vargaz@freemail.hu> - - * marshal.c (mono_marshal_alloc): Return a valid pointer on size 0 - as well. - -2004-08-28 Ben Maurer <bmaurer@users.sourceforge.net> - - * gc.c: actually enable paolo's patch to make GC warnings - use the trace api. - -2004-08-23 Zoltan Varga <vargaz@freemail.hu> - - * metadata.c (mono_metadata_parse_type): Alloc pinned, byref and - custom modifiers to be in any order. Fixes #61990. - -Thu Aug 5 17:11:44 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * reflection.c: fix to deal with object[] arrays in custom ctors - (bug #62550). - -Tue Aug 3 17:54:17 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * gc.c: make GC warning messages use the trace API, they are just - noise to most of the users. - -Tue Aug 3 16:40:17 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * gc.c, object.h: mono_gc_handle_*() interface and - AddrOfPinnedObject fixes. GC handle support even without GC. - -Fri Jul 30 16:49:05 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * object.c: always create an object if null is passed - to Invoke() where a valuetype is expected. - -2004-07-29 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * appdomain.c: hack to build correctly the private bin path on windows. - Fixes bug #61991. - -2004-07-28 Dick Porter <dick@ximian.com> - - * socket-io.c - (ves_icall_System_Net_Sockets_Socket_RecvFrom_internal): Check - returned sockaddr size before creating the remote address object. - Patch by Nick Vaughan (dev@6wardlaw.freeserve.co.uk), fixes bug - 61608. - -2004-07-28 Dick Porter <dick@ximian.com> - - * locales.c (string_invariant_compare_char): Fix invariant char - compares between upper and lower cases. Fixes bug 61458. - -Tue Jul 27 15:58:19 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * debug-mono-symfile.c: fix one more endianess issue, from a patch - by Geoff Norton (<gnorton@customerdna.com>). - -Tue Jul 27 15:47:17 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * class.c: fix class loads for pointer types (typeof(int) != - typeof(int*)). - -2004-07-24 Martin Baulig <martin@ximian.com> - - * reflection.c (mono_image_get_type_info): Only write a class - layout entry if we actually have a size or a packing size. - -2004-07-13 Peter Williams <peter@newton.cx> - - * process.c (complete_path): Make sure we don't attempt to execute - directories. - -2004-07-11 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * debug-helpers.c: undo my previous patch and fixed the real issue in - ../mini/exceptions-x86.c - -2004-07-11 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * debug-helpers.c: prevent SIGSEGV. It happened running xsp on monodoc - when no HOME env. variable was set and a NullRef was thrown in a .cctor - called from other .cctors. - -2004-07-09 Dick Porter <dick@ximian.com> - - * locales.c (ves_icall_System_String_InternalReplace_Str_Comp): - Don't do any more processing if the matched length was 0. It was - increasing the size of the string before. Fixes bug 61167. - -2004-07-09 Dick Porter <dick@ximian.com> - - * socket-io.h: - * socket-io.c - (ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal): - Add support for SO_PEERCRED if its available. - -2004-07-03 Zoltan Varga <vargaz@freemail.hu> - - * marshal.c: Fix managed->native stringbuilder marshalling. Implement - marshalling of stringbuilder arrays. Fixes #59900. - 2004-06-29 Martin Baulig <martin@ximian.com> * mono-debug.c (mono_debug_add_method): Protect the whole function @@ -11156,3 +10913,4 @@ Tue Jul 3 18:33:32 CEST 2001 Paolo Molaro <lupus@ximian.com> Beta2. * mono/metadata/assembly.c (load_metadata_ptrs): Fix for Beta2 + diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c index 876129c7d92..a917a9ecd19 100644 --- a/mono/metadata/appdomain.c +++ b/mono/metadata/appdomain.c @@ -44,9 +44,6 @@ mono_domain_assembly_preload (MonoAssemblyName *aname, static void mono_domain_fire_assembly_load (MonoAssembly *assembly, gpointer user_data); -static void -add_assemblies_to_domain (MonoDomain *domain, MonoAssembly *ass); - static MonoMethod * look_for_method_by_name (MonoClass *klass, const gchar *name); @@ -252,12 +249,12 @@ mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *tb) * if it is being unloaded. * Returns: * - TRUE on success - * - FALSE if the domain is unloaded + * - FALSE if the domain is being unloaded */ gboolean mono_domain_set (MonoDomain *domain, gboolean force) { - if (!force && domain->state == MONO_APPDOMAIN_UNLOADED) + if (!force && (domain->state == MONO_APPDOMAIN_UNLOADING || domain->state == MONO_APPDOMAIN_UNLOADED)) return FALSE; mono_domain_set_internal (domain); @@ -360,16 +357,10 @@ ves_icall_System_AppDomain_getCurDomain () return add->domain; } -static void -add_assembly_to_domain (gpointer key, gpointer value, gpointer user_data) -{ - add_assemblies_to_domain ((MonoDomain*)user_data, (MonoAssembly*)value); -} - MonoAppDomain * ves_icall_System_AppDomain_createDomain (MonoString *friendly_name, MonoAppDomainSetup *setup) { - MonoDomain *domain = mono_domain_get (); + /*MonoDomain *domain = mono_domain_get (); */ MonoClass *adclass; MonoAppDomain *ad; MonoDomain *data; @@ -390,10 +381,7 @@ ves_icall_System_AppDomain_createDomain (MonoString *friendly_name, MonoAppDomai mono_context_init (data); - /* The new appdomain should have all assemblies loaded */ - mono_domain_lock (domain); - g_hash_table_foreach (domain->assemblies, add_assembly_to_domain, data); - mono_domain_unlock (domain); + /* FIXME: what to do next ? */ return ad; } @@ -559,17 +547,9 @@ reduce_path (const gchar *dirname) for (tmp = list; tmp; tmp = tmp->next) { gchar *data = (gchar *) tmp->data; - if (data && *data) { -#ifdef PLATFORM_WIN32 - if (result->len == 0) - g_string_append_printf (result, "%s\\", data); - else if (result->str [result->len - 1] == '\\') - g_string_append_printf (result, "%s", data); - else -#endif - g_string_append_printf (result, "%c%s", - G_DIR_SEPARATOR, data); - } + if (data && *data) + g_string_append_printf (result, "%c%s", G_DIR_SEPARATOR, + (char *) tmp->data); } res = result->str; @@ -776,7 +756,7 @@ mono_domain_assembly_preload (MonoAssemblyName *aname, result = real_load (assemblies_path, aname->culture, aname->name); } - return result; + return NULL; } MonoReflectionAssembly * @@ -1020,8 +1000,10 @@ ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomain *ad, MonoString *file, assembly = mono_assembly_open (filename, NULL); g_free (filename); - if (!assembly) - mono_raise_exception (mono_get_exception_file_not_found (file)); + if (!assembly) { + mono_raise_exception ((MonoException *)mono_exception_from_name ( + mono_defaults.corlib, "System.IO", "FileNotFoundException")); + } image = assembly->image; @@ -1130,7 +1112,7 @@ ves_icall_System_AppDomain_InternalSetContext (MonoAppContext *mc) MONO_ARCH_SAVE_REGS; mono_context_set (mc); - + return old_context; } @@ -1233,7 +1215,6 @@ mono_domain_unload (MonoDomain *domain) MonoMethod *method; MonoObject *exc; unload_data thread_data; - MonoDomain *caller_domain = mono_domain_get (); /* printf ("UNLOAD STARTING FOR %s.\n", domain->friendly_name); */ @@ -1251,7 +1232,6 @@ mono_domain_unload (MonoDomain *domain) g_assert_not_reached (); } - mono_domain_set (domain, FALSE); /* Notify OnDomainUnload listeners */ method = look_for_method_by_name (domain->domain->mbr.obj.vtable->klass, "DoDomainUnload"); g_assert (method); @@ -1261,7 +1241,6 @@ mono_domain_unload (MonoDomain *domain) if (exc) { /* Roll back the state change */ domain->state = MONO_APPDOMAIN_CREATED; - mono_domain_set (caller_domain, FALSE); mono_raise_exception ((MonoException*)exc); } @@ -1288,7 +1267,6 @@ mono_domain_unload (MonoDomain *domain) ; /* wait for the thread */ - mono_domain_set (caller_domain, FALSE); if (thread_data.failure_reason) { MonoException *ex; diff --git a/mono/metadata/assembly.c b/mono/metadata/assembly.c index ff545ab42b8..2ae0d0eef7b 100644 --- a/mono/metadata/assembly.c +++ b/mono/metadata/assembly.c @@ -128,9 +128,6 @@ mono_assembly_names_equal (MonoAssemblyName *l, MonoAssemblyName *r) if (strcmp (l->name, r->name)) return FALSE; - if ((l->culture && !r->culture) || (!l->culture && r->culture) || strcmp (l->culture, r->culture)) - return FALSE; - /* * simply compare names until some other issues are resolved * (version info not getting set correctly for custom @@ -391,15 +388,6 @@ mono_assembly_load_references (MonoImage *image, MonoImageOpenStatus *status) image->name, aname.name); } else { - char *extra_msg = g_strdup (""); - - if (*status == MONO_IMAGE_ERROR_ERRNO) { - extra_msg = g_strdup_printf ("System error: %s\n", strerror (errno)); - } else if (*status == MONO_IMAGE_MISSING_ASSEMBLYREF) { - extra_msg = g_strdup ("Cannot find an assembly referenced from this one.\n"); - } else if (*status == MONO_IMAGE_IMAGE_INVALID) { - extra_msg = g_strdup ("The file exists but is not a valid assembly.\n"); - } for (j = 0; j < i; j++) mono_assembly_close (references [j]); @@ -408,12 +396,11 @@ mono_assembly_load_references (MonoImage *image, MonoImageOpenStatus *status) g_warning ("Could not find assembly %s, references from %s (assemblyref_index=%d)\n" " Major/Minor: %d,%d\n" " Build: %d,%d\n" - " Token: %s\n%s", + " Token: %s\n", aname.name, image->name, i, aname.major, aname.minor, aname.build, aname.revision, - aname.public_key_token, extra_msg); + aname.public_key_token); *status = MONO_IMAGE_MISSING_ASSEMBLYREF; - g_free (extra_msg); return; } } diff --git a/mono/metadata/class.c b/mono/metadata/class.c index 2814e47d255..7f434b5c734 100644 --- a/mono/metadata/class.c +++ b/mono/metadata/class.c @@ -2124,7 +2124,7 @@ mono_class_create_from_typespec (MonoImage *image, guint32 type_spec, class = mono_array_class_get (type->data.klass, 1); break; case MONO_TYPE_PTR: - class = mono_ptr_class_get (type->data.type); + class = mono_class_from_mono_type (type->data.type); break; case MONO_TYPE_GENERICINST: g_assert (type->data.generic_inst->klass); diff --git a/mono/metadata/culture-info-tables.h b/mono/metadata/culture-info-tables.h index bf0699633fe..08698a4cb1e 100644 --- a/mono/metadata/culture-info-tables.h +++ b/mono/metadata/culture-info-tables.h @@ -1,13 +1,12 @@ +
+#ifndef MONO_METADATA_CULTURE_INFO_TABLES
+#define MONO_METADATA_CULTURE_INFO_TABLES 1
-#ifndef MONO_METADATA_CULTURE_INFO_TABLES -#define MONO_METADATA_CULTURE_INFO_TABLES 1 +
+#define NUM_CULTURE_ENTRIES 154
- -#define NUM_CULTURE_ENTRIES 155 - - -static const DateTimeFormatEntry datetime_format_entries [] = { - {"d MMMM, yyyy h:mm:ss t", "d MMMM, yyyy", "d/M/yyyy", "h:mm:ss t", "h:mm t", "MMMM, yyyy", "d MMMM", "\xd8\xb5", "\xd9\x85", {"\xd8\xa7\xd9\x84\xd8\xa3\xd8\xad\xd8\xaf", "\xd8\xa7\xd9\x84\xd8\xa7\xd8\xab\xd9\x86\xd9\x8a\xd9\x86", "\xd8\xa7\xd9\x84\xd8\xab\xd9\x84\xd8\xa7\xd8\xab\xd8\xa7\xd8\xa1", "\xd8\xa7\xd9\x84\xd8\xa3\xd8\xb1\xd8\xa8\xd8\xb9\xd8\xa7\xd8\xa1", "\xd8\xa7\xd9\x84\xd8\xae\xd9\x85\xd9\x8a\xd8\xb3", "\xd8\xa7\xd9\x84\xd8\xac\xd9\x85\xd8\xb9\xd8\xa9", "\xd8\xa7\xd9\x84\xd8\xb3\xd8\xa8\xd8\xaa"}, {"\xd8\xa7\xd9\x84\xd8\xa3\xd8\xad\xd8\xaf", "\xd8\xa7\xd9\x84\xd8\xa7\xd8\xab\xd9\x86\xd9\x8a\xd9\x86", "\xd8\xa7\xd9\x84\xd8\xab\xd9\x84\xd8\xa7\xd8\xab\xd8\xa7\xd8\xa1", "\xd8\xa7\xd9\x84\xd8\xa3\xd8\xb1\xd8\xa8\xd8\xb9\xd8\xa7\xd8\xa1", "\xd8\xa7\xd9\x84\xd8\xae\xd9\x85\xd9\x8a\xd8\xb3", "\xd8\xa7\xd9\x84\xd8\xac\xd9\x85\xd8\xb9\xd8\xa9", "\xd8\xa7\xd9\x84\xd8\xb3\xd8\xa8\xd8\xaa"}, {"\xd9\x8a\xd9\x86\xd8\xa7\xd9\x8a\xd8\xb1", "\xd9\x81\xd8\xa8\xd8\xb1\xd8\xa7\xd9\x8a\xd8\xb1", "\xd9\x85\xd8\xa7\xd8\xb1\xd8\xb3", "\xd8\xa3\xd8\xa8\xd8\xb1\xd9\x8a\xd9\x84", "\xd9\x85\xd8\xa7\xd9\x8a\xd9\x88", "\xd9\x8a\xd9\x88\xd9\x86\xd9\x8a\xd9\x88", "\xd9\x8a\xd9\x88\xd9\x84\xd9\x8a\xd9\x88", "\xd8\xa3\xd8\xba\xd8\xb3\xd8\xb7\xd8\xb3", "\xd8\xb3\xd8\xa8\xd8\xaa\xd9\x85\xd8\xa8\xd8\xb1", "\xd8\xa3\xd9\x83\xd8\xaa\xd9\x88\xd8\xa8\xd8\xb1", "\xd9\x86\xd9\x88\xd9\x81\xd9\x85\xd8\xa8\xd8\xb1", "\xd8\xaf\xd9\x8a\xd8\xb3\xd9\x85\xd8\xa8\xd8\xb1"}, {"\xd9\x8a\xd9\x86\xd8\xa7\xd9\x8a\xd8\xb1", "\xd9\x81\xd8\xa8\xd8\xb1\xd8\xa7\xd9\x8a\xd8\xb1", "\xd9\x85\xd8\xa7\xd8\xb1\xd8\xb3", "\xd8\xa3\xd8\xa8\xd8\xb1\xd9\x8a\xd9\x84", "\xd9\x85\xd8\xa7\xd9\x8a\xd9\x88", "\xd9\x8a\xd9\x88\xd9\x86\xd9\x8a\xd9\x88", "\xd9\x8a\xd9\x88\xd9\x84\xd9\x8a\xd9\x88", "\xd8\xa3\xd8\xba\xd8\xb3\xd8\xb7\xd8\xb3", "\xd8\xb3\xd8\xa8\xd8\xaa\xd9\x85\xd8\xa8\xd8\xb1", "\xd8\xa3\xd9\x83\xd8\xaa\xd9\x88\xd8\xa8\xd8\xb1", "\xd9\x86\xd9\x88\xd9\x81\xd9\x85\xd8\xa8\xd8\xb1", "\xd8\xaf\xd9\x8a\xd8\xb3\xd9\x85\xd8\xa8\xd8\xb1", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, +
+static const DateTimeFormatEntry datetime_format_entries [] = {
{"dd MMMM yyyy HH:mm:ss", "dd MMMM yyyy", "dd.M.yyyy '\xd0\xb3.'", "HH:mm:ss", "HH:mm", "MMMM yyyy", "dd MMMM", "AM", "PM", {"\xd0\xbd\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbb\xd1\x8f", "\xd0\xbf\xd0\xbe\xd0\xbd\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xbd\xd0\xb8\xd0\xba", "\xd0\xb2\xd1\x82\xd0\xbe\xd1\x80\xd0\xbd\xd0\xb8\xd0\xba", "\xd1\x81\xd1\x80\xd1\x8f\xd0\xb4\xd0\xb0", "\xd1\x87\xd0\xb5\xd1\x82\xd0\xb2\xd1\x8a\xd1\x80\xd1\x82\xd1\x8a\xd0\xba", "\xd0\xbf\xd0\xb5\xd1\x82\xd1\x8a\xd0\xba", "\xd1\x81\xd1\x8a\xd0\xb1\xd0\xbe\xd1\x82\xd0\xb0"}, {"\xd0\xbd\xd0\xb5\xd0\xb4.", "\xd0\xbf\xd0\xbe\xd0\xbd.", "\xd0\xb2\xd1\x82.", "\xd1\x81\xd1\x80.", "\xd1\x87\xd0\xb5\xd1\x82\xd0\xb2.", "\xd0\xbf\xd0\xb5\xd1\x82.", "\xd1\x81\xd1\x8a\xd0\xb1."}, {"\xd1\x8f\xd0\xbd\xd1\x83\xd0\xb0\xd1\x80\xd0\xb8", "\xd1\x84\xd0\xb5\xd0\xb2\xd1\x80\xd1\x83\xd0\xb0\xd1\x80\xd0\xb8", "\xd0\xbc\xd0\xb0\xd1\x80\xd1\x82", "\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb8\xd0\xbb", "\xd0\xbc\xd0\xb0\xd0\xb9", "\xd1\x8e\xd0\xbd\xd0\xb8", "\xd1\x8e\xd0\xbb\xd0\xb8", "\xd0\xb0\xd0\xb2\xd0\xb3\xd1\x83\xd1\x81\xd1\x82", "\xd1\x81\xd0\xb5\xd0\xbf\xd1\x82\xd0\xb5\xd0\xbc\xd0\xb2\xd1\x80\xd0\xb8", "\xd0\xbe\xd0\xba\xd1\x82\xd0\xbe\xd0\xbc\xd0\xb2\xd1\x80\xd0\xb8", "\xd0\xbd\xd0\xbe\xd0\xb5\xd0\xbc\xd0\xb2\xd1\x80\xd0\xb8", "\xd0\xb4\xd0\xb5\xd0\xba\xd0\xb5\xd0\xbc\xd0\xb2\xd1\x80\xd0\xb8"}, {"\xd1\x8f\xd0\xbd.", "\xd1\x84\xd0\xb5\xd0\xb2.", "\xd0\xbc\xd0\xb0\xd1\x80\xd1\x82", "\xd0\xb0\xd0\xbf\xd1\x80.", "\xd0\xbc\xd0\xb0\xd0\xb9", "\xd1\x8e\xd0\xbd\xd0\xb8", "\xd1\x8e\xd0\xbb\xd0\xb8", "\xd0\xb0\xd0\xb2\xd0\xb3.", "\xd1\x81\xd0\xb5\xd0\xbf.", "\xd0\xbe\xd0\xba\xd1\x82.", "\xd0\xbd\xd0\xbe\xd0\xb5\xd0\xbc.", "\xd0\xb4\xd0\xb5\xd0\xba.", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, {"d MMMM yyyy HH:mm:ss z", "d MMMM yyyy", "dd/MM/yyyy", "HH:mm:ss", "HH:mm", "MMMM yyyy", "dd MMMM", "AM", "PM", {"diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte"}, {"dg.", "dl.", "dt.", "dc.", "dj.", "dv.", "ds."}, {"gener", "febrer", "mar\xc3\xa7", "abril", "maig", "juny", "juliol", "agost", "setembre", "octubre", "novembre", "desembre"}, {"gen.", "feb.", "mar\xc3\xa7", "abr.", "maig", "juny", "jul.", "ag.", "set.", "oct.", "nov.", "des.", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, {"d. MMMM yyyy H:mm:ss z", "d. MMMM yyyy", "d.M.yyyy", "H:mm:ss", "H:mm", "MMMM yyyy", "d. MMMM", "dop.", "odp.", {"ned\xc4\x9ble", "pond\xc4\x9bl\xc3\xad", "\xc3\xbater\xc3\xbd", "st\xc5\x99\x65\x64\x61", "\xc4\x8dtvrtek", "p\xc3\xa1tek", "sobota"}, {"ne", "po", "\xc3\xbat", "st", "\xc4\x8dt", "p\xc3\xa1", "so"}, {"leden", "\xc3\xbanor", "b\xc5\x99\x65zen", "duben", "kv\xc4\x9bten", "\xc4\x8d\x65rven", "\xc4\x8d\x65rvenec", "srpen", "z\xc3\xa1\xc5\x99\xc3\xad", "\xc5\x99\xc3\xadjen", "listopad", "prosinec"}, {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, @@ -21,10 +20,10 @@ static const DateTimeFormatEntry datetime_format_entries [] = { {"yyyy. MMMM d. H:mm:ss z", "yyyy. MMMM d.", "yyyy. MM. dd.", "H:mm:ss", "H:mm", "yyyy. MMMM", "MMMM d", "DE", "DU", {"vas\xc3\xa1rnap", "h\xc3\xa9tf\xc5\x91", "kedd", "szerda", "cs\xc3\xbct\xc3\xb6rt\xc3\xb6k", "p\xc3\xa9ntek", "szombat"}, {"V", "H", "K", "Sze", "Cs", "P", "Szo"}, {"janu\xc3\xa1r", "febru\xc3\xa1r", "m\xc3\xa1rcius", "\xc3\xa1prilis", "m\xc3\xa1jus", "j\xc3\xbanius", "j\xc3\xbalius", "augusztus", "szeptember", "okt\xc3\xb3\x62\x65r", "november", "december"}, {"jan.", "febr.", "m\xc3\xa1rc.", "\xc3\xa1pr.", "m\xc3\xa1j.", "j\xc3\xban.", "j\xc3\xbal.", "aug.", "szept.", "okt.", "nov.", "dec.", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, {"d. MMMM yyyy HH:mm:ss z", "d. MMMM yyyy", "d.M.yyyy", "HH:mm:ss", "HH:mm", "MMMM yyyy", "d. MMMM", "AM", "PM", {"sunnudagur", "m\xc3\xa1nudagur", "\xc3\xberi\xc3\xb0judagur", "mi\xc3\xb0vikudagur", "fimmtudagur", "f\xc3\xb6studagur", "laugardagur"}, {"sun", "m\xc3\xa1n", "\xc3\xberi", "mi\xc3\xb0", "fim", "f\xc3\xb6s", "lau"}, {"jan\xc3\xba\x61r", "febr\xc3\xba\x61r", "mars", "apr\xc3\xadl", "ma\xc3\xad", "j\xc3\xban\xc3\xad", "j\xc3\xbal\xc3\xad", "\xc3\xa1g\xc3\xbast", "september", "okt\xc3\xb3\x62\x65r", "n\xc3\xb3vember", "desember"}, {"jan", "feb", "mar", "apr", "ma\xc3\xad", "j\xc3\xban", "j\xc3\xbal", "\xc3\xa1g\xc3\xba", "sep", "okt", "n\xc3\xb3v", "des", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, {"dd MMMM yyyy H:mm:ss z", "dd MMMM yyyy", "dd/MM/yyyy", "H.mm.ss", "HH:mm", "MMMM yyyy", "d MMMM", "m.", "p.", {"domenica", "luned\xc3\xac", "marted\xc3\xac", "mercoled\xc3\xac", "gioved\xc3\xac", "venerd\xc3\xac", "sabato"}, {"dom", "lun", "mar", "mer", "gio", "ven", "sab"}, {"gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"}, {"gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, - {"yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5' H:mm:ss:z", "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'", "yyyy/MM/dd", "H:mm:ss:z", "H:mm", "yyyy'\xe5\xb9\xb4'M", "M'\xe6\x9c\x88'd", "\xe5\x8d\x88\xe5\x89\x8d", "\xe5\x8d\x88\xe5\xbe\x8c", {"\xe6\x97\xa5\xe6\x9b\x9c\xe6\x97\xa5", "\xe6\x9c\x88\xe6\x9b\x9c\xe6\x97\xa5", "\xe7\x81\xab\xe6\x9b\x9c\xe6\x97\xa5", "\xe6\xb0\xb4\xe6\x9b\x9c\xe6\x97\xa5", "\xe6\x9c\xa8\xe6\x9b\x9c\xe6\x97\xa5", "\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5", "\xe5\x9c\x9f\xe6\x9b\x9c\xe6\x97\xa5"}, {"\xe6\x97\xa5", "\xe6\x9c\x88", "\xe7\x81\xab", "\xe6\xb0\xb4", "\xe6\x9c\xa8", "\xe9\x87\x91", "\xe5\x9c\x9f"}, {"1\xe6\x9c\x88", "2\xe6\x9c\x88", "3\xe6\x9c\x88", "4\xe6\x9c\x88", "5\xe6\x9c\x88", "6\xe6\x9c\x88", "7\xe6\x9c\x88", "8\xe6\x9c\x88", "9\xe6\x9c\x88", "10\xe6\x9c\x88", "11\xe6\x9c\x88", "12\xe6\x9c\x88"}, {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", ""}, 0, 0, "/", ":", {"yyyy/MM/dd","yy/MM/dd","yy/M/d","yyyy/M/d","yy/MM/dd' ('ddd')'","yy/M/d' ('ddd')'","yyyy/M/d' ('ddd')'"},{"yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'","yyyy'\xe5\xb9\xb4'MM'\xe6\x9c\x88'dd'\xe6\x97\xa5'","yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5' dddd","yyyy'\xe5\xb9\xb4'MM'\xe6\x9c\x88'dd'\xe6\x97\xa5' dddd"},{"H:mm","HH:mm","tt h:mm","tt hh:mm"},{"H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss"}}, + {"yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5' H:mm:ss", "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'", "yyyy/MM/dd", "H:mm:ss", "H:mm", "yyyy'\xe5\xb9\xb4'M", "M'\xe6\x9c\x88'd", "\xe5\x8d\x88\xe5\x89\x8d", "\xe5\x8d\x88\xe5\xbe\x8c", {"\xe6\x97\xa5\xe6\x9b\x9c\xe6\x97\xa5", "\xe6\x9c\x88\xe6\x9b\x9c\xe6\x97\xa5", "\xe7\x81\xab\xe6\x9b\x9c\xe6\x97\xa5", "\xe6\xb0\xb4\xe6\x9b\x9c\xe6\x97\xa5", "\xe6\x9c\xa8\xe6\x9b\x9c\xe6\x97\xa5", "\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5", "\xe5\x9c\x9f\xe6\x9b\x9c\xe6\x97\xa5"}, {"\xe6\x97\xa5", "\xe6\x9c\x88", "\xe7\x81\xab", "\xe6\xb0\xb4", "\xe6\x9c\xa8", "\xe9\x87\x91", "\xe5\x9c\x9f"}, {"1\xe6\x9c\x88", "2\xe6\x9c\x88", "3\xe6\x9c\x88", "4\xe6\x9c\x88", "5\xe6\x9c\x88", "6\xe6\x9c\x88", "7\xe6\x9c\x88", "8\xe6\x9c\x88", "9\xe6\x9c\x88", "10\xe6\x9c\x88", "11\xe6\x9c\x88", "12\xe6\x9c\x88"}, {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", ""}, 0, 0, "/", ":", {"yyyy/MM/dd","yy/MM/dd","yy/M/d","yyyy/M/d","yy/MM/dd' ('ddd')'","yy/M/d' ('ddd')'","yyyy/M/d' ('ddd')'"},{"yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'","yyyy'\xe5\xb9\xb4'MM'\xe6\x9c\x88'dd'\xe6\x97\xa5'","yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5' dddd","yyyy'\xe5\xb9\xb4'MM'\xe6\x9c\x88'dd'\xe6\x97\xa5' dddd"},{"H:mm","HH:mm","tt h:mm","tt hh:mm"},{"H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss"}}, {"yyyy'\xeb\x85\x84' M'\xec\x9b\x94' d'\xec\x9d\xbc' t hh'\xec\x8b\x9c' mm'\xeb\xb6\x84' ss'\xec\xb4\x88'", "yyyy'\xeb\x85\x84' M'\xec\x9b\x94' d'\xec\x9d\xbc'", "yyyy-MM-dd tt", "h:mm:ss", "t h:mm", "yyyy'\xeb\x85\x84' M", "M'\xec\x9b\x94' d", "\xec\x98\xa4\xec\xa0\x84", "\xec\x98\xa4\xed\x9b\x84", {"\xec\x9d\xbc\xec\x9a\x94\xec\x9d\xbc", "\xec\x9b\x94\xec\x9a\x94\xec\x9d\xbc", "\xed\x99\x94\xec\x9a\x94\xec\x9d\xbc", "\xec\x88\x98\xec\x9a\x94\xec\x9d\xbc", "\xeb\xaa\xa9\xec\x9a\x94\xec\x9d\xbc", "\xea\xb8\x88\xec\x9a\x94\xec\x9d\xbc", "\xed\x86\xa0\xec\x9a\x94\xec\x9d\xbc"}, {"\xec\x9d\xbc", "\xec\x9b\x94", "\xed\x99\x94", "\xec\x88\x98", "\xeb\xaa\xa9", "\xea\xb8\x88", "\xed\x86\xa0"}, {"1\xec\x9b\x94", "2\xec\x9b\x94", "3\xec\x9b\x94", "4\xec\x9b\x94", "5\xec\x9b\x94", "6\xec\x9b\x94", "7\xec\x9b\x94", "8\xec\x9b\x94", "9\xec\x9b\x94", "10\xec\x9b\x94", "11\xec\x9b\x94", "12\xec\x9b\x94"}, {"1\xec\x9b\x94", "2\xec\x9b\x94", "3\xec\x9b\x94", "4\xec\x9b\x94", "5\xec\x9b\x94", "6\xec\x9b\x94", "7\xec\x9b\x94", "8\xec\x9b\x94", "9\xec\x9b\x94", "10\xec\x9b\x94", "11\xec\x9b\x94", "12\xec\x9b\x94", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, {"d MMMM yyyy H:mm:ss z", "d MMMM yyyy", "d-M-yyyy", "H:mm:ss", "H:mm", "MMMM yyyy", "d MMMM", "AM", "PM", {"zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"}, {"zo", "ma", "di", "wo", "do", "vr", "za"}, {"januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"}, {"jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, - {"d MMMM yyyy HH:mm:ss z", "d MMMM yyyy", "yyyy-MM-dd", "HH:mm:ss", "HH:mm", "MMMM yyyy", "d MMMM", "AM", "PM", {"niedziela", "poniedzia\xc5\x82\x65k", "wtorek", "\xc5\x9broda", "czwartek", "pi\xc4\x85tek", "sobota"}, {"N", "Pn", "Wt", "\xc5\x9ar", "Cz", "Pt", "So"}, {"stycze\xc5\x84", "luty", "marzec", "kwiecie\xc5\x84", "maj", "czerwiec", "lipiec", "sierpie\xc5\x84", "wrzesie\xc5\x84", "pa\xc5\xba\x64ziernik", "listopad", "grudzie\xc5\x84"}, {"sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "pa\xc5\xba", "lis", "gru", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, + {"d MMMM yyyy HH:mm:ss z", "d MMMM yyyy", "yyyy-MM-dd", "HH:mm:ss", "HH:mm", "MMMM yyyy", "d MMMM", "AM", "PM", {"niedziela", "poniedzia?ek", "wtorek", "?roda", "czwartek", "pi?tek", "sobota"}, {"N", "Pn", "Wt", "?r", "Cz", "Pt", "So"}, {"stycze?", "luty", "marzec", "kwiecie?", "maj", "czerwiec", "lipiec", "sierpie?", "wrzesie?", "pa?dziernik", "listopad", "grudzie?"}, {"sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "pa?", "lis", "gru", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, {"d' de 'MMMM' de 'yyyy H'h'm'min's's' z", "d' de 'MMMM' de 'yyyy", "d/M/yyyy", "HH:mm:ss", "HH:mm", "MMMM' de 'yyyy", "d' de 'MMMM", "AM", "PM", {"domingo", "segunda-feira", "ter\xc3\xa7\x61-feira", "quarta-feira", "quinta-feira", "sexta-feira", "s\xc3\xa1\x62\x61\x64o"}, {"dom", "seg", "ter", "qua", "qui", "sex", "s\xc3\xa1\x62"}, {"janeiro", "fevereiro", "mar\xc3\xa7o", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"}, {"jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, {"d MMMM yyyy HH:mm:ss z", "d MMMM yyyy", "dd.MM.yyyy", "HH:mm:ss", "HH:mm", "MMMM yyyy", "d MMMM", "AM", "PM", {"duminic\xc4\x83", "luni", "mar\xc5\xa3i", "miercuri", "joi", "vineri", "s\xc3\xaemb\xc4\x83t\xc4\x83"}, {"D", "L", "Ma", "Mi", "J", "V", "S"}, {"ianuarie", "februarie", "martie", "aprilie", "mai", "iunie", "iulie", "august", "septembrie", "octombrie", "noiembrie", "decembrie"}, {"Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, {"d MMMM yyyy '\xd0\xb3.' H:mm:ss z", "d MMMM yyyy '\xd0\xb3.'", "dd.MM.yyyy", "H:mm:ss", "H:mm", "MMMM yyyy", "d MMMM", "AM", "PM", {"\xd0\xb2\xd0\xbe\xd1\x81\xd0\xba\xd1\x80\xd0\xb5\xd1\x81\xd0\xb5\xd0\xbd\xd1\x8c\xd0\xb5", "\xd0\xbf\xd0\xbe\xd0\xbd\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xb8\xd0\xba", "\xd0\xb2\xd1\x82\xd0\xbe\xd1\x80\xd0\xbd\xd0\xb8\xd0\xba", "\xd1\x81\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb0", "\xd1\x87\xd0\xb5\xd1\x82\xd0\xb2\xd0\xb5\xd1\x80\xd0\xb3", "\xd0\xbf\xd1\x8f\xd1\x82\xd0\xbd\xd0\xb8\xd1\x86\xd0\xb0", "\xd1\x81\xd1\x83\xd0\xb1\xd0\xb1\xd0\xbe\xd1\x82\xd0\xb0"}, {"\xd0\x92\xd1\x81", "\xd0\x9f\xd0\xbd", "\xd0\x92\xd1\x82", "\xd0\xa1\xd1\x80", "\xd0\xa7\xd1\x82", "\xd0\x9f\xd1\x82", "\xd0\xa1\xd0\xb1"}, {"\xd0\xaf\xd0\xbd\xd0\xb2\xd0\xb0\xd1\x80\xd1\x8c", "\xd0\xa4\xd0\xb5\xd0\xb2\xd1\x80\xd0\xb0\xd0\xbb\xd1\x8c", "\xd0\x9c\xd0\xb0\xd1\x80\xd1\x82", "\xd0\x90\xd0\xbf\xd1\x80\xd0\xb5\xd0\xbb\xd1\x8c", "\xd0\x9c\xd0\xb0\xd0\xb9", "\xd0\x98\xd1\x8e\xd0\xbd\xd1\x8c", "\xd0\x98\xd1\x8e\xd0\xbb\xd1\x8c", "\xd0\x90\xd0\xb2\xd0\xb3\xd1\x83\xd1\x81\xd1\x82", "\xd0\xa1\xd0\xb5\xd0\xbd\xd1\x82\xd1\x8f\xd0\xb1\xd1\x80\xd1\x8c", "\xd0\x9e\xd0\xba\xd1\x82\xd1\x8f\xd0\xb1\xd1\x80\xd1\x8c", "\xd0\x9d\xd0\xbe\xd1\x8f\xd0\xb1\xd1\x80\xd1\x8c", "\xd0\x94\xd0\xb5\xd0\xba\xd0\xb0\xd0\xb1\xd1\x80\xd1\x8c"}, {"\xd1\x8f\xd0\xbd\xd0\xb2", "\xd1\x84\xd0\xb5\xd0\xb2", "\xd0\xbc\xd0\xb0\xd1\x80", "\xd0\xb0\xd0\xbf\xd1\x80", "\xd0\xbc\xd0\xb0\xd0\xb9", "\xd0\xb8\xd1\x8e\xd0\xbd", "\xd0\xb8\xd1\x8e\xd0\xbb", "\xd0\xb0\xd0\xb2\xd0\xb3", "\xd1\x81\xd0\xb5\xd0\xbd", "\xd0\xbe\xd0\xba\xd1\x82", "\xd0\xbd\xd0\xbe\xd1\x8f", "\xd0\xb4\xd0\xb5\xd0\xba", ""}, 0, 0, "/", ":", {0},{0},{0},{0}}, @@ -113,9 +112,8 @@ static const DateTimeFormatEntry datetime_format_entries [] = { {"d' de 'MMMM' de 'yyyy hh:mm:ss t z", "d' de 'MMMM' de 'yyyy", "dd/MM/yyyy", "hh:mm:ss tt", "hh:mm t", "MMMM' de 'yyyy", "d' de 'MMMM", "a.m.", "p.m.", {"domingo", "lunes", "martes", "mi\xc3\xa9rcoles", "jueves", "viernes", "s\xc3\xa1\x62\x61\x64o"}, {"dom", "lun", "mar", "mi\xc3\xa9", "jue", "vie", "s\xc3\xa1\x62"}, {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"}, {"ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic", ""}, 0, 0, "/", ":", {0},{0},{0},{0}} }; - -static const NumberFormatEntry number_format_entries [] = { - {"\xd9\xab", "\xd9\xac", "\xd9\xab", "\xd9\xac", "\xd9\xab", "\xd9\xac", "\xd8\xb1.\xd8\xb3.\xe2\x80\x8f", "\xd9\xaa", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, +
+static const NumberFormatEntry number_format_entries [] = {
{",", "\xc2\xa0", ",", "\xc2\xa0", ",", "\xc2\xa0", "\xd0\xbb\xd0\xb2.", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, {",", ".", ",", ".", ",", ".", "\xe2\x82\xac", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, {",", "\xc2\xa0", ",", "\xc2\xa0", ",", "\xc2\xa0", "K\xc4\x8d", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, @@ -132,8 +130,8 @@ static const NumberFormatEntry number_format_entries [] = { {".", ",", ".", ",", ".", ",", "\\", "%", "NaN", "\xe2\x80\xb0", "-Infinity", "Infinity", "-", "+", 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, {".", ",", ".", ",", ".", ",", "\xef\xbf\xa6", "%", "NaN", "\xe2\x80\xb0", "-Infinity", "Infinity", "-", "+", 0, 0, 0, 0, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, {",", ".", ",", ".", ",", ".", "\xe2\x82\xac", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 11, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, - {",", "\xc2\xa0", ",", "\xc2\xa0", ",", "\xc2\xa0", "z\xc5\x82", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, - {",", ".", ",", ".", ",", ".", "R$ ", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, + {",", "?", ",", "?", ",", "?", "z?", "%", "?", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, + {",", ".", ",", ".", ",", ".", "R$", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 0, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, {",", ".", ",", ".", ",", ".", "lei", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, {",", "\xc2\xa0", ",", "\xc2\xa0", ",", "\xc2\xa0", "\xd1\x80.", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 5, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, {",", ".", ",", ".", ",", ".", "Kn", "%", "\xef\xbf\xbd", "\xe2\x80\xb0", "-\xe2\x88\x9e", "\xe2\x88\x9e", "-", "+", 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}, @@ -221,8 +219,8 @@ static const NumberFormatEntry number_format_entries [] = { {".", ",", ".", ",", ".", ",", "$", "%", "NaN", "\xe2\x80\xb0", "-Infinity", "Infinity", "-", "+", 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}} }; - -static const CultureInfoEntry culture_entries [] = { +
+static const CultureInfoEntry culture_entries [] = {
{0x0001, 0x007F, 0x0401, "ar", "Arabic", "Arabic", "Arabic", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9", "ARA", "ara", "ar", {0, 0, 0, 0, 0}, -1, -1}, {0x0002, 0x007F, 0x0402, "bg", "Bulgarian", "Bulgarian", "Bulgarian", "\xd0\x91\xd1\x8a\xd0\xbb\xd0\xb3\xd0\xb0\xd1\x80\xd1\x81\xd0\xba\xd0\xb8", "BGR", "bul", "bg", {0, 0, 0, 0, 0}, -1, -1}, {0x0003, 0x007F, 0x0403, "ca", "Catalan", "Catalan", "Catalan", "catal\xc3\xa0", "CAT", "cat", "ca", {0, 0, 0, 0, 0}, -1, -1}, @@ -274,271 +272,269 @@ static const CultureInfoEntry culture_entries [] = { {0x004E, 0x007F, 0x044E, "mr", "Marathi", "Marathi", "Marathi", "\xe0\xa4\xae\xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\xa0\xe0\xa5\x80", "MAR", "mar", "mr", {0, 0, 0, 0, 0}, -1, -1}, {0x0056, 0x007F, 0x0456, "gl", "Gallegan", "Gallegan", "Gallegan", "galego", "GLC", "glg", "gl", {0, 0, 0, 0, 0}, -1, -1}, {0x0057, 0x007F, 0x0457, "kok", "Konkani", "Konkani", "Konkani", "\xe0\xa4\x95\xe0\xa5\x8b\xe0\xa4\x82\xe0\xa4\x95\xe0\xa4\xa3\xe0\xa5\x80", "KNK", "kok", "hi", {0, 0, 0, 0, 0}, -1, -1}, - {0x0401, 0x0001, 0x0401, "ar-SA", "Arabic (Saudi Arabia)", "Arabic (Saudi Arabia)", "Arabic (Saudi Arabia)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 \xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9)", "ARA", "ara", "ar", {16777216, 0, 0, 0, 0}, 0, 0}, - {0x0402, 0x0002, 0x0402, "bg-BG", "Bulgarian (Bulgaria)", "Bulgarian (Bulgaria)", "Bulgarian (Bulgaria)", "\xd0\x91\xd1\x8a\xd0\xbb\xd0\xb3\xd0\xb0\xd1\x80\xd1\x81\xd0\xba\xd0\xb8 (\xd0\x91\xd1\x8a\xd0\xbb\xd0\xb3\xd0\xb0\xd1\x80\xd0\xb8\xd1\x8f)", "BGR", "bul", "bg", {0, 0, 0, 0, 0}, 1, 1}, - {0x0403, 0x0003, 0x0403, "ca-ES", "Catalan (Spain)", "Catalan (Spain)", "Catalan (Spain)", "catal\xc3\xa0 (Espanya)", "CAT", "cat", "ca", {0, 0, 0, 0, 0}, 2, 2}, - {0x0405, 0x0005, 0x0405, "cs-CZ", "Czech (Czech Republic)", "Czech (Czech Republic)", "Czech (Czech Republic)", "\xc4\x8c\x65\xc5\xa1tina (\xc4\x8c\x65sk\xc3\xa1 republika)", "CSY", "ces", "cs", {0, 0, 0, 0, 0}, 3, 3}, - {0x0406, 0x0006, 0x0406, "da-DK", "Danish (Denmark)", "Danish (Denmark)", "Danish (Denmark)", "Dansk (Danmark)", "DAN", "dan", "da", {0, 0, 0, 0, 0}, 4, 4}, - {0x0407, 0x0007, 0x0407, "de-DE", "German (Germany)", "German (Germany)", "German (Germany)", "Deutsch (Deutschland)", "DEU", "deu", "de", {0, 0, 0, 0, 0}, 5, 5}, - {0x0408, 0x0008, 0x0408, "el-GR", "Greek (Greece)", "Greek (Greece)", "Greek (Greece)", "\xce\x95\xce\xbb\xce\xbb\xce\xb7\xce\xbd\xce\xb9\xce\xba\xce\xac (\xce\x95\xce\xbb\xce\xbb\xce\xac\xce\xb4\xce\xb1)", "ELL", "ell", "el", {0, 0, 0, 0, 0}, 6, 6}, - {0x0409, 0x0009, 0x0409, "en-US", "English (United States)", "English (United States)", "English (United States)", "English (United States)", "ENU", "eng", "en", {0, 0, 0, 0, 0}, 7, 7}, - {0x040B, 0x000B, 0x040B, "fi-FI", "Finnish (Finland)", "Finnish (Finland)", "Finnish (Finland)", "suomi (Suomi)", "FIN", "fin", "fi", {0, 0, 0, 0, 0}, 8, 8}, - {0x040C, 0x000C, 0x040C, "fr-FR", "French (France)", "French (France)", "French (France)", "fran\xc3\xa7\x61is (France)", "FRA", "fra", "fr", {0, 0, 0, 0, 0}, 9, 9}, - {0x040D, 0x000D, 0x040D, "he-IL", "Hebrew (Israel)", "Hebrew (Israel)", "Hebrew (Israel)", "\xd7\xa2\xd7\x91\xd7\xa8\xd7\x99\xd7\xaa (\xd7\x99\xd7\xa9\xd7\xa8\xd7\x90\xd7\x9c)", "HEB", "heb", "he", {0, 0, 0, 0, 0}, 10, 10}, - {0x040E, 0x000E, 0x040E, "hu-HU", "Hungarian (Hungary)", "Hungarian (Hungary)", "Hungarian (Hungary)", "magyar (Magyarorsz\xc3\xa1g)", "HUN", "hun", "hu", {0, 0, 0, 0, 0}, 11, 11}, - {0x040F, 0x000F, 0x040F, "is-IS", "Icelandic (Iceland)", "Icelandic (Iceland)", "Icelandic (Iceland)", "\xc3\xadslenska (\xc3\x8dsland)", "ISL", "isl", "is", {0, 0, 0, 0, 0}, 12, 12}, - {0x0410, 0x0010, 0x0410, "it-IT", "Italian (Italy)", "Italian (Italy)", "Italian (Italy)", "italiano (Italia)", "ITA", "ita", "it", {0, 0, 0, 0, 0}, 13, 13}, - {0x0411, 0x0011, 0x0411, "ja-JP", "Japanese (Japan)", "Japanese (Japan)", "Japanese (Japan)", "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (\xe6\x97\xa5\xe6\x9c\xac)", "JPN", "jpn", "ja", {0, 0, 0, 0, 0}, 14, 14}, - {0x0412, 0x0012, 0x0412, "ko-KR", "Korean (South Korea)", "Korean (South Korea)", "Korean (South Korea)", "\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4 (\xeb\x8c\x80\xed\x95\x9c\xeb\xaf\xbc\xea\xb5\xad)", "KOR", "kor", "ko", {0, 0, 0, 0, 0}, 15, 15}, - {0x0413, 0x0013, 0x0413, "nl-NL", "Dutch (Netherlands)", "Dutch (Netherlands)", "Dutch (Netherlands)", "Nederlands (Nederland)", "NLD", "nld", "nl", {0, 0, 0, 0, 0}, 16, 16}, - {0x0415, 0x0015, 0x0415, "pl-PL", "Polish (Poland)", "Polish (Poland)", "Polish (Poland)", "polski (Polska)", "PLK", "pol", "pl", {0, 0, 0, 0, 0}, 17, 17}, - {0x0416, 0x0016, 0x0416, "pt-BR", "Portuguese (Brazil)", "Portuguese (Brazil)", "Portuguese (Brazil)", "portugu\xc3\xaas (Brasil)", "PTB", "por", "pt", {0, 0, 0, 0, 0}, 18, 18}, - {0x0418, 0x0018, 0x0418, "ro-RO", "Romanian (Romania)", "Romanian (Romania)", "Romanian (Romania)", "Rom\xc3\xa2n\xc4\x83 (Rom\xc3\xa2nia)", "ROM", "ron", "ro", {0, 0, 0, 0, 0}, 19, 19}, - {0x0419, 0x0019, 0x0419, "ru-RU", "Russian (Russia)", "Russian (Russia)", "Russian (Russia)", "\xd0\xa0\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9 (\xd0\xa0\xd0\xbe\xd1\x81\xd1\x81\xd0\xb8\xd1\x8f)", "RUS", "rus", "ru", {0, 0, 0, 0, 0}, 20, 20}, - {0x041A, 0x001A, 0x041A, "hr-HR", "Croatian (Croatia)", "Croatian (Croatia)", "Croatian (Croatia)", "hrvatski (Hrvatska)", "HRV", "hrv", "hr", {0, 0, 0, 0, 0}, 21, 21}, - {0x041B, 0x001B, 0x041B, "sk-SK", "Slovak (Slovakia)", "Slovak (Slovakia)", "Slovak (Slovakia)", "slovensk\xc3\xbd (Slovensk\xc3\xa1 republika)", "SKY", "slk", "sk", {0, 0, 0, 0, 0}, 22, 22}, - {0x041C, 0x001C, 0x041C, "sq-AL", "Albanian (Albania)", "Albanian (Albania)", "Albanian (Albania)", "shqipe (Shqip\xc3\xabria)", "SQI", "sqi", "sq", {0, 0, 0, 0, 0}, 23, 23}, - {0x041D, 0x001D, 0x041D, "sv-SE", "Swedish (Sweden)", "Swedish (Sweden)", "Swedish (Sweden)", "svenska (Sverige)", "SVE", "swe", "sv", {0, 0, 0, 0, 0}, 24, 24}, - {0x041E, 0x001E, 0x041E, "th-TH", "Thai (Thailand)", "Thai (Thailand)", "Thai (Thailand)", "\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2 (\xe0\xb8\x9b\xe0\xb8\xa3\xe0\xb8\xb0\xe0\xb9\x80\xe0\xb8\x97\xe0\xb8\xa8\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2)", "THA", "tha", "th", {0, 0, 0, 0, 0}, 25, 25}, - {0x041F, 0x001F, 0x041F, "tr-TR", "Turkish (Turkey)", "Turkish (Turkey)", "Turkish (Turkey)", "T\xc3\xbcrk\xc3\xa7\x65 (T\xc3\xbcrkiye)", "TRK", "tur", "tr", {0, 0, 0, 0, 0}, 26, 26}, - {0x0421, 0x0021, 0x0421, "id-ID", "Indonesian (Indonesia)", "Indonesian (Indonesia)", "Indonesian (Indonesia)", "Bahasa Indonesia (Indonesia)", "IND", "ind", "id", {0, 0, 0, 0, 0}, 27, 27}, - {0x0422, 0x0022, 0x0422, "uk-UA", "Ukrainian (Ukraine)", "Ukrainian (Ukraine)", "Ukrainian (Ukraine)", "\xd0\xa3\xd0\xba\xd1\x80\xd0\xb0\xd1\x97\xd0\xbd\xd1\x81\xd1\x8c\xd0\xba\xd0\xb0 (\xd0\xa3\xd0\xba\xd1\x80\xd0\xb0\xd1\x97\xd0\xbd\xd0\xb0)", "UKR", "ukr", "uk", {0, 0, 0, 0, 0}, 28, 28}, - {0x0423, 0x0023, 0x0423, "be-BY", "Belarusian (Belarus)", "Belarusian (Belarus)", "Belarusian (Belarus)", "\xd0\x91\xd0\xb5\xd0\xbb\xd0\xb0\xd1\x80\xd1\x83\xd1\x81\xd0\xba\xd1\x96 (\xd0\x91\xd0\xb5\xd0\xbb\xd0\xb0\xd1\x80\xd1\x83\xd1\x81\xd1\x8c)", "BEL", "bel", "be", {0, 0, 0, 0, 0}, 29, 29}, - {0x0424, 0x0024, 0x0424, "sl-SI", "Slovenian (Slovenia)", "Slovenian (Slovenia)", "Slovenian (Slovenia)", "Sloven\xc5\xa1\xc4\x8dina (Slovenija)", "SLV", "slv", "sl", {0, 0, 0, 0, 0}, 30, 30}, - {0x0425, 0x0025, 0x0425, "et-EE", "Estonian (Estonia)", "Estonian (Estonia)", "Estonian (Estonia)", "Eesti (Eesti)", "ETI", "est", "et", {0, 0, 0, 0, 0}, 31, 31}, - {0x0426, 0x0026, 0x0426, "lv-LV", "Latvian (Latvia)", "Latvian (Latvia)", "Latvian (Latvia)", "latvie\xc5\xa1u (Latvija)", "LVI", "lav", "lv", {0, 0, 0, 0, 0}, 32, 32}, - {0x0427, 0x0027, 0x0427, "lt-LT", "Lithuanian (Lithuania)", "Lithuanian (Lithuania)", "Lithuanian (Lithuania)", "Lietuvi\xc5\xb3 (Lietuva)", "LTH", "lit", "lt", {0, 0, 0, 0, 0}, 33, 33}, - {0x0429, 0x0029, 0x0429, "fa-IR", "Persian (Iran)", "Persian (Iran)", "Persian (Iran)", "\xd9\x81\xd8\xa7\xd8\xb1\xd8\xb3\xdb\x8c (\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86)", "FAR", "fas", "fa", {0, 0, 0, 0, 0}, 34, 34}, - {0x042A, 0x002A, 0x042A, "vi-VN", "Vietnamese (Vietnam)", "Vietnamese (Vietnam)", "Vietnamese (Vietnam)", "Ti\xe1\xba\xbfng Vi\xe1\xbb\x87t (Vi\xe1\xbb\x87t Nam)", "VIT", "vie", "vi", {0, 0, 0, 0, 0}, 35, 35}, + {0x0402, 0x0002, 0x0402, "bg-BG", "Bulgarian (Bulgaria)", "Bulgarian (Bulgaria)", "Bulgarian (Bulgaria)", "\xd0\x91\xd1\x8a\xd0\xbb\xd0\xb3\xd0\xb0\xd1\x80\xd1\x81\xd0\xba\xd0\xb8 (\xd0\x91\xd1\x8a\xd0\xbb\xd0\xb3\xd0\xb0\xd1\x80\xd0\xb8\xd1\x8f)", "BGR", "bul", "bg", {0, 0, 0, 0, 0}, 0, 0}, + {0x0403, 0x0003, 0x0403, "ca-ES", "Catalan (Spain)", "Catalan (Spain)", "Catalan (Spain)", "catal\xc3\xa0 (Espanya)", "CAT", "cat", "ca", {0, 0, 0, 0, 0}, 1, 1}, + {0x0405, 0x0005, 0x0405, "cs-CZ", "Czech (Czech Republic)", "Czech (Czech Republic)", "Czech (Czech Republic)", "\xc4\x8c\x65\xc5\xa1tina (\xc4\x8c\x65sk\xc3\xa1 republika)", "CSY", "ces", "cs", {0, 0, 0, 0, 0}, 2, 2}, + {0x0406, 0x0006, 0x0406, "da-DK", "Danish (Denmark)", "Danish (Denmark)", "Danish (Denmark)", "Dansk (Danmark)", "DAN", "dan", "da", {0, 0, 0, 0, 0}, 3, 3}, + {0x0407, 0x0007, 0x0407, "de-DE", "German (Germany)", "German (Germany)", "German (Germany)", "Deutsch (Deutschland)", "DEU", "deu", "de", {0, 0, 0, 0, 0}, 4, 4}, + {0x0408, 0x0008, 0x0408, "el-GR", "Greek (Greece)", "Greek (Greece)", "Greek (Greece)", "\xce\x95\xce\xbb\xce\xbb\xce\xb7\xce\xbd\xce\xb9\xce\xba\xce\xac (\xce\x95\xce\xbb\xce\xbb\xce\xac\xce\xb4\xce\xb1)", "ELL", "ell", "el", {0, 0, 0, 0, 0}, 5, 5}, + {0x0409, 0x0009, 0x0409, "en-US", "English (United States)", "English (United States)", "English (United States)", "English (United States)", "ENU", "eng", "en", {0, 0, 0, 0, 0}, 6, 6}, + {0x040B, 0x000B, 0x040B, "fi-FI", "Finnish (Finland)", "Finnish (Finland)", "Finnish (Finland)", "suomi (Suomi)", "FIN", "fin", "fi", {0, 0, 0, 0, 0}, 7, 7}, + {0x040C, 0x000C, 0x040C, "fr-FR", "French (France)", "French (France)", "French (France)", "fran\xc3\xa7\x61is (France)", "FRA", "fra", "fr", {0, 0, 0, 0, 0}, 8, 8}, + {0x040D, 0x000D, 0x040D, "he-IL", "Hebrew (Israel)", "Hebrew (Israel)", "Hebrew (Israel)", "\xd7\xa2\xd7\x91\xd7\xa8\xd7\x99\xd7\xaa (\xd7\x99\xd7\xa9\xd7\xa8\xd7\x90\xd7\x9c)", "HEB", "heb", "he", {0, 0, 0, 0, 0}, 9, 9}, + {0x040E, 0x000E, 0x040E, "hu-HU", "Hungarian (Hungary)", "Hungarian (Hungary)", "Hungarian (Hungary)", "magyar (Magyarorsz\xc3\xa1g)", "HUN", "hun", "hu", {0, 0, 0, 0, 0}, 10, 10}, + {0x040F, 0x000F, 0x040F, "is-IS", "Icelandic (Iceland)", "Icelandic (Iceland)", "Icelandic (Iceland)", "\xc3\xadslenska (\xc3\x8dsland)", "ISL", "isl", "is", {0, 0, 0, 0, 0}, 11, 11}, + {0x0410, 0x0010, 0x0410, "it-IT", "Italian (Italy)", "Italian (Italy)", "Italian (Italy)", "italiano (Italia)", "ITA", "ita", "it", {0, 0, 0, 0, 0}, 12, 12}, + {0x0411, 0x0011, 0x0411, "ja-JP", "Japanese (Japan)", "Japanese (Japan)", "Japanese (Japan)", "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (\xe6\x97\xa5\xe6\x9c\xac)", "JPN", "jpn", "ja", {0, 0, 0, 0, 0}, 13, 13}, + {0x0412, 0x0012, 0x0412, "ko-KR", "Korean (South Korea)", "Korean (South Korea)", "Korean (South Korea)", "\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4 (\xeb\x8c\x80\xed\x95\x9c\xeb\xaf\xbc\xea\xb5\xad)", "KOR", "kor", "ko", {0, 0, 0, 0, 0}, 14, 14}, + {0x0413, 0x0013, 0x0413, "nl-NL", "Dutch (Netherlands)", "Dutch (Netherlands)", "Dutch (Netherlands)", "Nederlands (Nederland)", "NLD", "nld", "nl", {0, 0, 0, 0, 0}, 15, 15}, + {0x0415, 0x0015, 0x0415, "pl-PL", "Polish (Poland)", "Polish (Poland)", "Polish (Poland)", "polski (Polska)", "PLK", "pol", "pl", {0, 0, 0, 0, 0}, 16, 16}, + {0x0416, 0x0016, 0x0416, "pt-BR", "Portuguese (Brazil)", "Portuguese (Brazil)", "Portuguese (Brazil)", "portugu\xc3\xaas (Brasil)", "PTB", "por", "pt", {0, 0, 0, 0, 0}, 17, 17}, + {0x0418, 0x0018, 0x0418, "ro-RO", "Romanian (Romania)", "Romanian (Romania)", "Romanian (Romania)", "Rom\xc3\xa2n\xc4\x83 (Rom\xc3\xa2nia)", "ROM", "ron", "ro", {0, 0, 0, 0, 0}, 18, 18}, + {0x0419, 0x0019, 0x0419, "ru-RU", "Russian (Russia)", "Russian (Russia)", "Russian (Russia)", "\xd0\xa0\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9 (\xd0\xa0\xd0\xbe\xd1\x81\xd1\x81\xd0\xb8\xd1\x8f)", "RUS", "rus", "ru", {0, 0, 0, 0, 0}, 19, 19}, + {0x041A, 0x001A, 0x041A, "hr-HR", "Croatian (Croatia)", "Croatian (Croatia)", "Croatian (Croatia)", "hrvatski (Hrvatska)", "HRV", "hrv", "hr", {0, 0, 0, 0, 0}, 20, 20}, + {0x041B, 0x001B, 0x041B, "sk-SK", "Slovak (Slovakia)", "Slovak (Slovakia)", "Slovak (Slovakia)", "slovensk\xc3\xbd (Slovensk\xc3\xa1 republika)", "SKY", "slk", "sk", {0, 0, 0, 0, 0}, 21, 21}, + {0x041C, 0x001C, 0x041C, "sq-AL", "Albanian (Albania)", "Albanian (Albania)", "Albanian (Albania)", "shqipe (Shqip\xc3\xabria)", "SQI", "sqi", "sq", {0, 0, 0, 0, 0}, 22, 22}, + {0x041D, 0x001D, 0x041D, "sv-SE", "Swedish (Sweden)", "Swedish (Sweden)", "Swedish (Sweden)", "svenska (Sverige)", "SVE", "swe", "sv", {0, 0, 0, 0, 0}, 23, 23}, + {0x041E, 0x001E, 0x041E, "th-TH", "Thai (Thailand)", "Thai (Thailand)", "Thai (Thailand)", "\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2 (\xe0\xb8\x9b\xe0\xb8\xa3\xe0\xb8\xb0\xe0\xb9\x80\xe0\xb8\x97\xe0\xb8\xa8\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2)", "THA", "tha", "th", {0, 0, 0, 0, 0}, 24, 24}, + {0x041F, 0x001F, 0x041F, "tr-TR", "Turkish (Turkey)", "Turkish (Turkey)", "Turkish (Turkey)", "T\xc3\xbcrk\xc3\xa7\x65 (T\xc3\xbcrkiye)", "TRK", "tur", "tr", {0, 0, 0, 0, 0}, 25, 25}, + {0x0421, 0x0021, 0x0421, "id-ID", "Indonesian (Indonesia)", "Indonesian (Indonesia)", "Indonesian (Indonesia)", "Bahasa Indonesia (Indonesia)", "IND", "ind", "id", {0, 0, 0, 0, 0}, 26, 26}, + {0x0422, 0x0022, 0x0422, "uk-UA", "Ukrainian (Ukraine)", "Ukrainian (Ukraine)", "Ukrainian (Ukraine)", "\xd0\xa3\xd0\xba\xd1\x80\xd0\xb0\xd1\x97\xd0\xbd\xd1\x81\xd1\x8c\xd0\xba\xd0\xb0 (\xd0\xa3\xd0\xba\xd1\x80\xd0\xb0\xd1\x97\xd0\xbd\xd0\xb0)", "UKR", "ukr", "uk", {0, 0, 0, 0, 0}, 27, 27}, + {0x0423, 0x0023, 0x0423, "be-BY", "Belarusian (Belarus)", "Belarusian (Belarus)", "Belarusian (Belarus)", "\xd0\x91\xd0\xb5\xd0\xbb\xd0\xb0\xd1\x80\xd1\x83\xd1\x81\xd0\xba\xd1\x96 (\xd0\x91\xd0\xb5\xd0\xbb\xd0\xb0\xd1\x80\xd1\x83\xd1\x81\xd1\x8c)", "BEL", "bel", "be", {0, 0, 0, 0, 0}, 28, 28}, + {0x0424, 0x0024, 0x0424, "sl-SI", "Slovenian (Slovenia)", "Slovenian (Slovenia)", "Slovenian (Slovenia)", "Sloven\xc5\xa1\xc4\x8dina (Slovenija)", "SLV", "slv", "sl", {0, 0, 0, 0, 0}, 29, 29}, + {0x0425, 0x0025, 0x0425, "et-EE", "Estonian (Estonia)", "Estonian (Estonia)", "Estonian (Estonia)", "Eesti (Eesti)", "ETI", "est", "et", {0, 0, 0, 0, 0}, 30, 30}, + {0x0426, 0x0026, 0x0426, "lv-LV", "Latvian (Latvia)", "Latvian (Latvia)", "Latvian (Latvia)", "latvie\xc5\xa1u (Latvija)", "LVI", "lav", "lv", {0, 0, 0, 0, 0}, 31, 31}, + {0x0427, 0x0027, 0x0427, "lt-LT", "Lithuanian (Lithuania)", "Lithuanian (Lithuania)", "Lithuanian (Lithuania)", "Lietuvi\xc5\xb3 (Lietuva)", "LTH", "lit", "lt", {0, 0, 0, 0, 0}, 32, 32}, + {0x0429, 0x0029, 0x0429, "fa-IR", "Persian (Iran)", "Persian (Iran)", "Persian (Iran)", "\xd9\x81\xd8\xa7\xd8\xb1\xd8\xb3\xdb\x8c (\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86)", "FAR", "fas", "fa", {0, 0, 0, 0, 0}, 33, 33}, + {0x042A, 0x002A, 0x042A, "vi-VN", "Vietnamese (Vietnam)", "Vietnamese (Vietnam)", "Vietnamese (Vietnam)", "Ti\xe1\xba\xbfng Vi\xe1\xbb\x87t (Vi\xe1\xbb\x87t Nam)", "VIT", "vie", "vi", {0, 0, 0, 0, 0}, 34, 34}, + {0x042B, 0x002B, 0x042B, "hy-AM", "Armenian (Armenia)", "Armenian (Armenia)", "Armenian (Armenia)", "\xd5\x80\xd5\xa1\xd5\xb5\xd5\xa5\xd6\x80\xd5\xa7\xd5\xb6 (\xd5\x80\xd5\xa1\xd5\xb5\xd5\xa1\xd5\xbd\xd5\xbf\xd5\xa1\xd5\xb6\xd5\xab \xd5\x80\xd5\xa1\xd5\xb6\xd6\x80\xd5\xa1\xd5\xba\xd5\xa5\xd5\xbf\xd5\xb8\xd6\x82\xd5\xa9\xd5\xab\xd6\x82\xd5\xb6)", "HYE", "hye", "hy", {0, 0, 0, 0, 0}, 35, 35}, {0x042B, 0x002B, 0x042B, "hy-AM", "Armenian (Armenia)", "Armenian (Armenia)", "Armenian (Armenia)", "\xd5\x80\xd5\xa1\xd5\xb5\xd5\xa5\xd6\x80\xd5\xa7\xd5\xb6 (\xd5\x80\xd5\xa1\xd5\xb5\xd5\xa1\xd5\xbd\xd5\xbf\xd5\xa1\xd5\xb6\xd5\xab \xd5\x80\xd5\xa1\xd5\xb6\xd6\x80\xd5\xa1\xd5\xba\xd5\xa5\xd5\xbf\xd5\xb8\xd6\x82\xd5\xa9\xd5\xab\xd6\x82\xd5\xb6)", "HYE", "hye", "hy", {0, 0, 0, 0, 0}, 36, 36}, - {0x042B, 0x002B, 0x042B, "hy-AM", "Armenian (Armenia)", "Armenian (Armenia)", "Armenian (Armenia)", "\xd5\x80\xd5\xa1\xd5\xb5\xd5\xa5\xd6\x80\xd5\xa7\xd5\xb6 (\xd5\x80\xd5\xa1\xd5\xb5\xd5\xa1\xd5\xbd\xd5\xbf\xd5\xa1\xd5\xb6\xd5\xab \xd5\x80\xd5\xa1\xd5\xb6\xd6\x80\xd5\xa1\xd5\xba\xd5\xa5\xd5\xbf\xd5\xb8\xd6\x82\xd5\xa9\xd5\xab\xd6\x82\xd5\xb6)", "HYE", "hye", "hy", {0, 0, 0, 0, 0}, 37, 37}, - {0x042D, 0x002D, 0x042D, "eu-ES", "Basque (Spain)", "Basque (Spain)", "Basque (Spain)", "euskara (Espainia)", "EUQ", "eus", "eu", {0, 0, 0, 0, 0}, 38, 38}, - {0x042F, 0x002F, 0x042F, "mk-MK", "Macedonian (Macedonia)", "Macedonian (Macedonia)", "Macedonian (Macedonia)", "\xd0\xbc\xd0\xb0\xd0\xba\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbd\xd1\x81\xd0\xba\xd0\xb8 (\xd0\x9c\xd0\xb0\xd0\xba\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbd\xd0\xb8\xd1\x98\xd0\xb0)", "MKI", "mkd", "mk", {0, 0, 0, 0, 0}, 39, 39}, - {0x0436, 0x0036, 0x0436, "af-ZA", "Afrikaans (South Africa)", "Afrikaans (South Africa)", "Afrikaans (South Africa)", "Afrikaanse (Suid-Afrika)", "AFK", "afr", "af", {0, 0, 0, 0, 0}, 40, 40}, - {0x0438, 0x0038, 0x0438, "fo-FO", "Faroese (Faroe Islands)", "Faroese (Faroe Islands)", "Faroese (Faroe Islands)", "f\xc3\xb8royskt (F\xc3\xb8royar)", "FOS", "fao", "fo", {0, 0, 0, 0, 0}, 41, 41}, - {0x0439, 0x0039, 0x0439, "hi-IN", "Hindi (India)", "Hindi (India)", "Hindi (India)", "\xe0\xa4\xb9\xe0\xa4\xbf\xe0\xa4\x82\xe0\xa4\xa6\xe0\xa5\x80 (\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4)", "HIN", "hin", "hi", {0, 0, 0, 0, 0}, 42, 42}, - {0x0441, 0x0041, 0x0441, "sw-KE", "Swahili (Kenya)", "Swahili (Kenya)", "Swahili (Kenya)", "Kiswahili (Kenya)", "SWK", "swa", "sw", {0, 0, 0, 0, 0}, 43, 43}, - {0x0447, 0x0047, 0x0447, "gu-IN", "Gujarati (India)", "Gujarati (India)", "Gujarati (India)", "\xe0\xaa\x97\xe0\xab\x81\xe0\xaa\x9c\xe0\xaa\xb0\xe0\xaa\xbe\xe0\xaa\xa4\xe0\xab\x80 (\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4)", "GUJ", "guj", "gu", {0, 0, 0, 0, 0}, 44, 44}, - {0x0449, 0x0049, 0x0449, "ta-IN", "Tamil (India)", "Tamil (India)", "Tamil (India)", "\xe0\xae\xa4\xe0\xae\xae\xe0\xae\xbf\xe0\xae\xb4\xe0\xaf\x8d (\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe)", "TAM", "tam", "ta", {0, 0, 0, 0, 0}, 45, 45}, - {0x044A, 0x004A, 0x044A, "te-IN", "Telugu (India)", "Telugu (India)", "Telugu (India)", "\xe0\xb0\xa4\xe0\xb1\x86\xe0\xb0\xb2\xe0\xb1\x81\xe0\xb0\x97\xe0\xb1\x81 (\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4 \xe0\xb0\xa6\xe0\xb1\x87\xe0\xb0\xb3\xe0\xb1\xa6)", "TEL", "tel", "te", {0, 0, 0, 0, 0}, 46, 46}, - {0x044B, 0x004B, 0x044B, "kn-IN", "Kannada (India)", "Kannada (India)", "Kannada (India)", "\xe0\xb2\x95\xe0\xb2\xa8\xe0\xb3\x8d\xe0\xb2\xa8\xe0\xb2\xa1 (\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4)", "KAN", "kan", "kn", {0, 0, 0, 0, 0}, 47, 47}, - {0x044E, 0x004E, 0x044E, "mr-IN", "Marathi (India)", "Marathi (India)", "Marathi (India)", "\xe0\xa4\xae\xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\xa0\xe0\xa5\x80 (\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4)", "MAR", "mar", "mr", {0, 0, 0, 0, 0}, 48, 48}, - {0x0456, 0x0056, 0x0456, "gl-ES", "Gallegan (Spain)", "Gallegan (Spain)", "Gallegan (Spain)", "galego (Espa\xc3\xb1\x61)", "GLC", "glg", "gl", {0, 0, 0, 0, 0}, 49, 49}, - {0x0457, 0x0057, 0x0457, "kok-IN", "Konkani (India)", "Konkani (India)", "Konkani (India)", "\xe0\xa4\x95\xe0\xa5\x8b\xe0\xa4\x82\xe0\xa4\x95\xe0\xa4\xa3\xe0\xa5\x80 (\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4)", "KNK", "kok", "kok", {0, 0, 0, 0, 0}, 50, 50}, - {0x0801, 0x0001, 0x0801, "ar-IQ", "Arabic (Iraq)", "Arabic (Iraq)", "Arabic (Iraq)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82)", "ARI", "ara", "ar", {2, 1, 0, 0, 0}, 51, 51}, - {0x0807, 0x0007, 0x0807, "de-CH", "German (Switzerland)", "German (Switzerland)", "German (Switzerland)", "Deutsch (Schweiz)", "DES", "deu", "de", {0, 0, 0, 0, 0}, 52, 52}, - {0x0809, 0x0009, 0x0809, "en-GB", "English (United Kingdom)", "English (United Kingdom)", "English (United Kingdom)", "English (United Kingdom)", "ENG", "eng", "en", {0, 0, 0, 0, 0}, 53, 53}, - {0x080A, 0x000A, 0x080A, "es-MX", "Spanish (Mexico)", "Spanish (Mexico)", "Spanish (Mexico)", "espa\xc3\xb1ol (M\xc3\xa9xico)", "ESM", "spa", "es", {0, 0, 0, 0, 0}, 54, 54}, - {0x080C, 0x000C, 0x080C, "fr-BE", "French (Belgium)", "French (Belgium)", "French (Belgium)", "fran\xc3\xa7\x61is (Belgique)", "FRB", "fra", "fr", {0, 0, 0, 0, 0}, 55, 55}, - {0x0810, 0x0010, 0x0810, "it-CH", "Italian (Switzerland)", "Italian (Switzerland)", "Italian (Switzerland)", "italiano (Svizzera)", "ITS", "ita", "it", {0, 0, 0, 0, 0}, 56, 56}, - {0x0813, 0x0013, 0x0813, "nl-BE", "Dutch (Belgium)", "Dutch (Belgium)", "Dutch (Belgium)", "Nederlands (Belgi\xc3\xab)", "NLB", "nld", "nl", {0, 0, 0, 0, 0}, 57, 57}, - {0x0816, 0x0016, 0x0816, "pt-PT", "Portuguese (Portugal)", "Portuguese (Portugal)", "Portuguese (Portugal)", "portugu\xc3\xaas (Portugal)", "PTG", "por", "pt", {0, 0, 0, 0, 0}, 58, 58}, - {0x081D, 0x001D, 0x081D, "sv-FI", "Swedish (Finland)", "Swedish (Finland)", "Swedish (Finland)", "svenska (Finland)", "SVF", "swe", "sv", {0, 0, 0, 0, 0}, 59, 59}, - {0x0C01, 0x0001, 0x0C01, "ar-EG", "Arabic (Egypt)", "Arabic (Egypt)", "Arabic (Egypt)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd9\x85\xd8\xb5\xd8\xb1)", "ARE", "ara", "ar", {16777216, 0, 0, 0, 0}, 60, 60}, - {0x0C07, 0x0007, 0x0C07, "de-AT", "German (Austria)", "German (Austria)", "German (Austria)", "Deutsch (\xc3\x96sterreich)", "DEA", "deu", "de", {0, 0, 0, 0, 0}, 61, 61}, - {0x0C09, 0x0009, 0x0C09, "en-AU", "English (Australia)", "English (Australia)", "English (Australia)", "English (Australia)", "ENA", "eng", "en", {0, 0, 0, 0, 0}, 62, 62}, - {0x0C0A, 0x000A, 0x0C0A, "es-ES", "Spanish (Spain)", "Spanish (Spain)", "Spanish (Spain)", "espa\xc3\xb1ol (Espa\xc3\xb1\x61)", "ESN", "spa", "es", {0, 0, 0, 0, 0}, 63, 63}, - {0x0C0C, 0x000C, 0x0C0C, "fr-CA", "French (Canada)", "French (Canada)", "French (Canada)", "fran\xc3\xa7\x61is (Canada)", "FRC", "fra", "fr", {0, 0, 0, 0, 0}, 64, 64}, - {0x1001, 0x0001, 0x1001, "ar-LY", "Arabic (Libya)", "Arabic (Libya)", "Arabic (Libya)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd9\x84\xd9\x8a\xd8\xa8\xd9\x8a\xd8\xa7)", "ARL", "ara", "ar", {16777216, 0, 0, 0, 0}, 65, 65}, - {0x1007, 0x0007, 0x1007, "de-LU", "German (Luxembourg)", "German (Luxembourg)", "German (Luxembourg)", "Deutsch (Luxemburg)", "DEL", "deu", "de", {0, 0, 0, 0, 0}, 66, 66}, - {0x1009, 0x0009, 0x1009, "en-CA", "English (Canada)", "English (Canada)", "English (Canada)", "English (Canada)", "ENC", "eng", "en", {0, 0, 0, 0, 0}, 67, 67}, - {0x100A, 0x000A, 0x100A, "es-GT", "Spanish (Guatemala)", "Spanish (Guatemala)", "Spanish (Guatemala)", "espa\xc3\xb1ol (Guatemala)", "ESG", "spa", "es", {0, 0, 0, 0, 0}, 68, 68}, - {0x100C, 0x000C, 0x100C, "fr-CH", "French (Switzerland)", "French (Switzerland)", "French (Switzerland)", "fran\xc3\xa7\x61is (Suisse)", "FRS", "fra", "fr", {0, 0, 0, 0, 0}, 69, 69}, - {0x1401, 0x0001, 0x1401, "ar-DZ", "Arabic (Algeria)", "Arabic (Algeria)", "Arabic (Algeria)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1)", "ARG", "ara", "ar", {16777216, 0, 0, 0, 0}, 70, 70}, - {0x1409, 0x0009, 0x1409, "en-NZ", "English (New Zealand)", "English (New Zealand)", "English (New Zealand)", "English (New Zealand)", "ENZ", "eng", "en", {0, 0, 0, 0, 0}, 71, 71}, - {0x140A, 0x000A, 0x140A, "es-CR", "Spanish (Costa Rica)", "Spanish (Costa Rica)", "Spanish (Costa Rica)", "espa\xc3\xb1ol (Costa Rica)", "ESC", "spa", "es", {0, 0, 0, 0, 0}, 72, 72}, - {0x140C, 0x000C, 0x140C, "fr-LU", "French (Luxembourg)", "French (Luxembourg)", "French (Luxembourg)", "fran\xc3\xa7\x61is (Luxembourg)", "FRL", "fra", "fr", {0, 0, 0, 0, 0}, 73, 73}, - {0x1801, 0x0001, 0x1801, "ar-MA", "Arabic (Morocco)", "Arabic (Morocco)", "Arabic (Morocco)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8)", "ARM", "ara", "ar", {16777216, 0, 0, 0, 0}, 74, 74}, - {0x1809, 0x0009, 0x1809, "en-IE", "English (Ireland)", "English (Ireland)", "English (Ireland)", "English (Ireland)", "ENI", "eng", "en", {0, 0, 0, 0, 0}, 75, 75}, - {0x180A, 0x000A, 0x180A, "es-PA", "Spanish (Panama)", "Spanish (Panama)", "Spanish (Panama)", "espa\xc3\xb1ol (Panam\xc3\xa1)", "ESA", "spa", "es", {0, 0, 0, 0, 0}, 76, 76}, - {0x1C01, 0x0001, 0x1C01, "ar-TN", "Arabic (Tunisia)", "Arabic (Tunisia)", "Arabic (Tunisia)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3)", "ART", "ara", "ar", {16777216, 0, 0, 0, 0}, 77, 77}, - {0x1C09, 0x0009, 0x1C09, "en-ZA", "English (South Africa)", "English (South Africa)", "English (South Africa)", "English (South Africa)", "ENS", "eng", "en", {0, 0, 0, 0, 0}, 78, 78}, - {0x1C0A, 0x000A, 0x1C0A, "es-DO", "Spanish (Dominican Republic)", "Spanish (Dominican Republic)", "Spanish (Dominican Republic)", "espa\xc3\xb1ol (Rep\xc3\xba\x62lica Dominicana)", "ESD", "spa", "es", {0, 0, 0, 0, 0}, 79, 79}, - {0x2001, 0x0001, 0x2001, "ar-OM", "Arabic (Oman)", "Arabic (Oman)", "Arabic (Oman)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86)", "ARO", "ara", "ar", {16777216, 0, 0, 0, 0}, 80, 80}, - {0x200A, 0x000A, 0x200A, "es-VE", "Spanish (Venezuela)", "Spanish (Venezuela)", "Spanish (Venezuela)", "espa\xc3\xb1ol (Venezuela)", "ESV", "spa", "es", {0, 0, 0, 0, 0}, 81, 81}, - {0x2401, 0x0001, 0x2401, "ar-YE", "Arabic (Yemen)", "Arabic (Yemen)", "Arabic (Yemen)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86)", "ARY", "ara", "ar", {16777216, 0, 0, 0, 0}, 82, 82}, - {0x240A, 0x000A, 0x240A, "es-CO", "Spanish (Colombia)", "Spanish (Colombia)", "Spanish (Colombia)", "espa\xc3\xb1ol (Colombia)", "ESO", "spa", "es", {0, 0, 0, 0, 0}, 83, 83}, - {0x2801, 0x0001, 0x2801, "ar-SY", "Arabic (Syria)", "Arabic (Syria)", "Arabic (Syria)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9)", "ARS", "ara", "ar", {16777216, 0, 0, 0, 0}, 84, 84}, - {0x280A, 0x000A, 0x280A, "es-PE", "Spanish (Peru)", "Spanish (Peru)", "Spanish (Peru)", "espa\xc3\xb1ol (Per\xc3\xba)", "ESR", "spa", "es", {0, 0, 0, 0, 0}, 85, 85}, - {0x2C01, 0x0001, 0x2C01, "ar-JO", "Arabic (Jordan)", "Arabic (Jordan)", "Arabic (Jordan)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86)", "ARJ", "ara", "ar", {16777216, 0, 0, 0, 0}, 86, 86}, - {0x2C0A, 0x000A, 0x2C0A, "es-AR", "Spanish (Argentina)", "Spanish (Argentina)", "Spanish (Argentina)", "espa\xc3\xb1ol (Argentina)", "ESS", "spa", "es", {0, 0, 0, 0, 0}, 87, 87}, - {0x3001, 0x0001, 0x3001, "ar-LB", "Arabic (Lebanon)", "Arabic (Lebanon)", "Arabic (Lebanon)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd9\x84\xd8\xa8\xd9\x86\xd8\xa7\xd9\x86)", "ARB", "ara", "ar", {16777216, 0, 0, 0, 0}, 88, 88}, - {0x3009, 0x0009, 0x3009, "en-ZW", "English (Zimbabwe)", "English (Zimbabwe)", "English (Zimbabwe)", "English (Zimbabwe)", "ENW", "eng", "en", {0, 0, 0, 0, 0}, 89, 89}, - {0x300A, 0x000A, 0x300A, "es-EC", "Spanish (Ecuador)", "Spanish (Ecuador)", "Spanish (Ecuador)", "espa\xc3\xb1ol (Ecuador)", "ESF", "spa", "es", {0, 0, 0, 0, 0}, 90, 90}, - {0x3401, 0x0001, 0x3401, "ar-KW", "Arabic (Kuwait)", "Arabic (Kuwait)", "Arabic (Kuwait)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd9\x83\xd9\x88\xd9\x8a\xd8\xaa)", "ARK", "ara", "ar", {16777216, 0, 0, 0, 0}, 91, 91}, - {0x3409, 0x0009, 0x3409, "en-PH", "English (Philippines)", "English (Philippines)", "English (Philippines)", "English (Philippines)", "ENP", "eng", "en", {0, 0, 0, 0, 0}, 92, 92}, - {0x340A, 0x000A, 0x340A, "es-CL", "Spanish (Chile)", "Spanish (Chile)", "Spanish (Chile)", "espa\xc3\xb1ol (Chile)", "ESL", "spa", "es", {0, 0, 0, 0, 0}, 93, 93}, - {0x3801, 0x0001, 0x3801, "ar-AE", "Arabic (United Arab Emirates)", "Arabic (United Arab Emirates)", "Arabic (United Arab Emirates)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa \xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 \xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xad\xd8\xaf\xd8\xa9)", "ARU", "ara", "ar", {16777216, 0, 0, 0, 0}, 94, 94}, - {0x380A, 0x000A, 0x380A, "es-UY", "Spanish (Uruguay)", "Spanish (Uruguay)", "Spanish (Uruguay)", "espa\xc3\xb1ol (Uruguay)", "ESY", "spa", "es", {0, 0, 0, 0, 0}, 95, 95}, - {0x3C01, 0x0001, 0x3C01, "ar-BH", "Arabic (Bahrain)", "Arabic (Bahrain)", "Arabic (Bahrain)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xa8\xd8\xad\xd8\xb1\xd9\x8a\xd9\x86)", "ARH", "ara", "ar", {16777216, 0, 0, 0, 0}, 96, 96}, - {0x3C0A, 0x000A, 0x3C0A, "es-PY", "Spanish (Paraguay)", "Spanish (Paraguay)", "Spanish (Paraguay)", "espa\xc3\xb1ol (Paraguay)", "ESZ", "spa", "es", {0, 0, 0, 0, 0}, 97, 97}, - {0x4001, 0x0001, 0x4001, "ar-QA", "Arabic (Qatar)", "Arabic (Qatar)", "Arabic (Qatar)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd9\x82\xd8\xb7\xd8\xb1)", "ARQ", "ara", "ar", {16777216, 0, 0, 0, 0}, 98, 98}, - {0x400A, 0x000A, 0x400A, "es-BO", "Spanish (Bolivia)", "Spanish (Bolivia)", "Spanish (Bolivia)", "espa\xc3\xb1ol (Bolivia)", "ESB", "spa", "es", {0, 0, 0, 0, 0}, 99, 99}, - {0x440A, 0x000A, 0x440A, "es-SV", "Spanish (El Salvador)", "Spanish (El Salvador)", "Spanish (El Salvador)", "espa\xc3\xb1ol (El Salvador)", "ESE", "spa", "es", {0, 0, 0, 0, 0}, 100, 100}, - {0x480A, 0x000A, 0x480A, "es-HN", "Spanish (Honduras)", "Spanish (Honduras)", "Spanish (Honduras)", "espa\xc3\xb1ol (Honduras)", "ESH", "spa", "es", {0, 0, 0, 0, 0}, 101, 101}, - {0x4C0A, 0x000A, 0x4C0A, "es-NI", "Spanish (Nicaragua)", "Spanish (Nicaragua)", "Spanish (Nicaragua)", "espa\xc3\xb1ol (Nicaragua)", "ESI", "spa", "es", {0, 0, 0, 0, 0}, 102, 102}, - {0x500A, 0x000A, 0x500A, "es-PR", "Spanish (Puerto Rico)", "Spanish (Puerto Rico)", "Spanish (Puerto Rico)", "espa\xc3\xb1ol (Puerto Rico)", "ESU", "spa", "es", {0, 0, 0, 0, 0}, 103, 103} + {0x042D, 0x002D, 0x042D, "eu-ES", "Basque (Spain)", "Basque (Spain)", "Basque (Spain)", "euskara (Espainia)", "EUQ", "eus", "eu", {0, 0, 0, 0, 0}, 37, 37}, + {0x042F, 0x002F, 0x042F, "mk-MK", "Macedonian (Macedonia)", "Macedonian (Macedonia)", "Macedonian (Macedonia)", "\xd0\xbc\xd0\xb0\xd0\xba\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbd\xd1\x81\xd0\xba\xd0\xb8 (\xd0\x9c\xd0\xb0\xd0\xba\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbd\xd0\xb8\xd1\x98\xd0\xb0)", "MKI", "mkd", "mk", {0, 0, 0, 0, 0}, 38, 38}, + {0x0436, 0x0036, 0x0436, "af-ZA", "Afrikaans (South Africa)", "Afrikaans (South Africa)", "Afrikaans (South Africa)", "Afrikaanse (Suid-Afrika)", "AFK", "afr", "af", {0, 0, 0, 0, 0}, 39, 39}, + {0x0438, 0x0038, 0x0438, "fo-FO", "Faroese (Faroe Islands)", "Faroese (Faroe Islands)", "Faroese (Faroe Islands)", "f\xc3\xb8royskt (F\xc3\xb8royar)", "FOS", "fao", "fo", {0, 0, 0, 0, 0}, 40, 40}, + {0x0439, 0x0039, 0x0439, "hi-IN", "Hindi (India)", "Hindi (India)", "Hindi (India)", "\xe0\xa4\xb9\xe0\xa4\xbf\xe0\xa4\x82\xe0\xa4\xa6\xe0\xa5\x80 (\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4)", "HIN", "hin", "hi", {0, 0, 0, 0, 0}, 41, 41}, + {0x0441, 0x0041, 0x0441, "sw-KE", "Swahili (Kenya)", "Swahili (Kenya)", "Swahili (Kenya)", "Kiswahili (Kenya)", "SWK", "swa", "sw", {0, 0, 0, 0, 0}, 42, 42}, + {0x0447, 0x0047, 0x0447, "gu-IN", "Gujarati (India)", "Gujarati (India)", "Gujarati (India)", "\xe0\xaa\x97\xe0\xab\x81\xe0\xaa\x9c\xe0\xaa\xb0\xe0\xaa\xbe\xe0\xaa\xa4\xe0\xab\x80 (\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4)", "GUJ", "guj", "gu", {0, 0, 0, 0, 0}, 43, 43}, + {0x0449, 0x0049, 0x0449, "ta-IN", "Tamil (India)", "Tamil (India)", "Tamil (India)", "\xe0\xae\xa4\xe0\xae\xae\xe0\xae\xbf\xe0\xae\xb4\xe0\xaf\x8d (\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe)", "TAM", "tam", "ta", {0, 0, 0, 0, 0}, 44, 44}, + {0x044A, 0x004A, 0x044A, "te-IN", "Telugu (India)", "Telugu (India)", "Telugu (India)", "\xe0\xb0\xa4\xe0\xb1\x86\xe0\xb0\xb2\xe0\xb1\x81\xe0\xb0\x97\xe0\xb1\x81 (\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4 \xe0\xb0\xa6\xe0\xb1\x87\xe0\xb0\xb3\xe0\xb1\xa6)", "TEL", "tel", "te", {0, 0, 0, 0, 0}, 45, 45}, + {0x044B, 0x004B, 0x044B, "kn-IN", "Kannada (India)", "Kannada (India)", "Kannada (India)", "\xe0\xb2\x95\xe0\xb2\xa8\xe0\xb3\x8d\xe0\xb2\xa8\xe0\xb2\xa1 (\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4)", "KAN", "kan", "kn", {0, 0, 0, 0, 0}, 46, 46}, + {0x044E, 0x004E, 0x044E, "mr-IN", "Marathi (India)", "Marathi (India)", "Marathi (India)", "\xe0\xa4\xae\xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\xa0\xe0\xa5\x80 (\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4)", "MAR", "mar", "mr", {0, 0, 0, 0, 0}, 47, 47}, + {0x0456, 0x0056, 0x0456, "gl-ES", "Gallegan (Spain)", "Gallegan (Spain)", "Gallegan (Spain)", "galego (Espa\xc3\xb1\x61)", "GLC", "glg", "gl", {0, 0, 0, 0, 0}, 48, 48}, + {0x0457, 0x0057, 0x0457, "kok-IN", "Konkani (India)", "Konkani (India)", "Konkani (India)", "\xe0\xa4\x95\xe0\xa5\x8b\xe0\xa4\x82\xe0\xa4\x95\xe0\xa4\xa3\xe0\xa5\x80 (\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4)", "KNK", "kok", "kok", {0, 0, 0, 0, 0}, 49, 49}, + {0x0801, 0x0001, 0x0801, "ar-IQ", "Arabic (Iraq)", "Arabic (Iraq)", "Arabic (Iraq)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82)", "ARI", "ara", "ar", {2, 1, 0, 0, 0}, 50, 50}, + {0x0807, 0x0007, 0x0807, "de-CH", "German (Switzerland)", "German (Switzerland)", "German (Switzerland)", "Deutsch (Schweiz)", "DES", "deu", "de", {0, 0, 0, 0, 0}, 51, 51}, + {0x0809, 0x0009, 0x0809, "en-GB", "English (United Kingdom)", "English (United Kingdom)", "English (United Kingdom)", "English (United Kingdom)", "ENG", "eng", "en", {0, 0, 0, 0, 0}, 52, 52}, + {0x080A, 0x000A, 0x080A, "es-MX", "Spanish (Mexico)", "Spanish (Mexico)", "Spanish (Mexico)", "espa\xc3\xb1ol (M\xc3\xa9xico)", "ESM", "spa", "es", {0, 0, 0, 0, 0}, 53, 53}, + {0x080C, 0x000C, 0x080C, "fr-BE", "French (Belgium)", "French (Belgium)", "French (Belgium)", "fran\xc3\xa7\x61is (Belgique)", "FRB", "fra", "fr", {0, 0, 0, 0, 0}, 54, 54}, + {0x0810, 0x0010, 0x0810, "it-CH", "Italian (Switzerland)", "Italian (Switzerland)", "Italian (Switzerland)", "italiano (Svizzera)", "ITS", "ita", "it", {0, 0, 0, 0, 0}, 55, 55}, + {0x0813, 0x0013, 0x0813, "nl-BE", "Dutch (Belgium)", "Dutch (Belgium)", "Dutch (Belgium)", "Nederlands (Belgi\xc3\xab)", "NLB", "nld", "nl", {0, 0, 0, 0, 0}, 56, 56}, + {0x0816, 0x0016, 0x0816, "pt-PT", "Portuguese (Portugal)", "Portuguese (Portugal)", "Portuguese (Portugal)", "portugu\xc3\xaas (Portugal)", "PTG", "por", "pt", {0, 0, 0, 0, 0}, 57, 57}, + {0x081D, 0x001D, 0x081D, "sv-FI", "Swedish (Finland)", "Swedish (Finland)", "Swedish (Finland)", "svenska (Finland)", "SVF", "swe", "sv", {0, 0, 0, 0, 0}, 58, 58}, + {0x0C01, 0x0001, 0x0C01, "ar-EG", "Arabic (Egypt)", "Arabic (Egypt)", "Arabic (Egypt)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd9\x85\xd8\xb5\xd8\xb1)", "ARE", "ara", "ar", {16777216, 0, 0, 0, 0}, 59, 59}, + {0x0C07, 0x0007, 0x0C07, "de-AT", "German (Austria)", "German (Austria)", "German (Austria)", "Deutsch (\xc3\x96sterreich)", "DEA", "deu", "de", {0, 0, 0, 0, 0}, 60, 60}, + {0x0C09, 0x0009, 0x0C09, "en-AU", "English (Australia)", "English (Australia)", "English (Australia)", "English (Australia)", "ENA", "eng", "en", {0, 0, 0, 0, 0}, 61, 61}, + {0x0C0A, 0x000A, 0x0C0A, "es-ES", "Spanish (Spain)", "Spanish (Spain)", "Spanish (Spain)", "espa\xc3\xb1ol (Espa\xc3\xb1\x61)", "ESN", "spa", "es", {0, 0, 0, 0, 0}, 62, 62}, + {0x0C0C, 0x000C, 0x0C0C, "fr-CA", "French (Canada)", "French (Canada)", "French (Canada)", "fran\xc3\xa7\x61is (Canada)", "FRC", "fra", "fr", {0, 0, 0, 0, 0}, 63, 63}, + {0x1001, 0x0001, 0x1001, "ar-LY", "Arabic (Libya)", "Arabic (Libya)", "Arabic (Libya)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd9\x84\xd9\x8a\xd8\xa8\xd9\x8a\xd8\xa7)", "ARL", "ara", "ar", {16777216, 0, 0, 0, 0}, 64, 64}, + {0x1007, 0x0007, 0x1007, "de-LU", "German (Luxembourg)", "German (Luxembourg)", "German (Luxembourg)", "Deutsch (Luxemburg)", "DEL", "deu", "de", {0, 0, 0, 0, 0}, 65, 65}, + {0x1009, 0x0009, 0x1009, "en-CA", "English (Canada)", "English (Canada)", "English (Canada)", "English (Canada)", "ENC", "eng", "en", {0, 0, 0, 0, 0}, 66, 66}, + {0x100A, 0x000A, 0x100A, "es-GT", "Spanish (Guatemala)", "Spanish (Guatemala)", "Spanish (Guatemala)", "espa\xc3\xb1ol (Guatemala)", "ESG", "spa", "es", {0, 0, 0, 0, 0}, 67, 67}, + {0x100C, 0x000C, 0x100C, "fr-CH", "French (Switzerland)", "French (Switzerland)", "French (Switzerland)", "fran\xc3\xa7\x61is (Suisse)", "FRS", "fra", "fr", {0, 0, 0, 0, 0}, 68, 68}, + {0x1401, 0x0001, 0x1401, "ar-DZ", "Arabic (Algeria)", "Arabic (Algeria)", "Arabic (Algeria)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1)", "ARG", "ara", "ar", {16777216, 0, 0, 0, 0}, 69, 69}, + {0x1409, 0x0009, 0x1409, "en-NZ", "English (New Zealand)", "English (New Zealand)", "English (New Zealand)", "English (New Zealand)", "ENZ", "eng", "en", {0, 0, 0, 0, 0}, 70, 70}, + {0x140A, 0x000A, 0x140A, "es-CR", "Spanish (Costa Rica)", "Spanish (Costa Rica)", "Spanish (Costa Rica)", "espa\xc3\xb1ol (Costa Rica)", "ESC", "spa", "es", {0, 0, 0, 0, 0}, 71, 71}, + {0x140C, 0x000C, 0x140C, "fr-LU", "French (Luxembourg)", "French (Luxembourg)", "French (Luxembourg)", "fran\xc3\xa7\x61is (Luxembourg)", "FRL", "fra", "fr", {0, 0, 0, 0, 0}, 72, 72}, + {0x1801, 0x0001, 0x1801, "ar-MA", "Arabic (Morocco)", "Arabic (Morocco)", "Arabic (Morocco)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8)", "ARM", "ara", "ar", {16777216, 0, 0, 0, 0}, 73, 73}, + {0x1809, 0x0009, 0x1809, "en-IE", "English (Ireland)", "English (Ireland)", "English (Ireland)", "English (Ireland)", "ENI", "eng", "en", {0, 0, 0, 0, 0}, 74, 74}, + {0x180A, 0x000A, 0x180A, "es-PA", "Spanish (Panama)", "Spanish (Panama)", "Spanish (Panama)", "espa\xc3\xb1ol (Panam\xc3\xa1)", "ESA", "spa", "es", {0, 0, 0, 0, 0}, 75, 75}, + {0x1C01, 0x0001, 0x1C01, "ar-TN", "Arabic (Tunisia)", "Arabic (Tunisia)", "Arabic (Tunisia)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3)", "ART", "ara", "ar", {16777216, 0, 0, 0, 0}, 76, 76}, + {0x1C09, 0x0009, 0x1C09, "en-ZA", "English (South Africa)", "English (South Africa)", "English (South Africa)", "English (South Africa)", "ENS", "eng", "en", {0, 0, 0, 0, 0}, 77, 77}, + {0x1C0A, 0x000A, 0x1C0A, "es-DO", "Spanish (Dominican Republic)", "Spanish (Dominican Republic)", "Spanish (Dominican Republic)", "espa\xc3\xb1ol (Rep\xc3\xba\x62lica Dominicana)", "ESD", "spa", "es", {0, 0, 0, 0, 0}, 78, 78}, + {0x2001, 0x0001, 0x2001, "ar-OM", "Arabic (Oman)", "Arabic (Oman)", "Arabic (Oman)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86)", "ARO", "ara", "ar", {16777216, 0, 0, 0, 0}, 79, 79}, + {0x200A, 0x000A, 0x200A, "es-VE", "Spanish (Venezuela)", "Spanish (Venezuela)", "Spanish (Venezuela)", "espa\xc3\xb1ol (Venezuela)", "ESV", "spa", "es", {0, 0, 0, 0, 0}, 80, 80}, + {0x2401, 0x0001, 0x2401, "ar-YE", "Arabic (Yemen)", "Arabic (Yemen)", "Arabic (Yemen)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86)", "ARY", "ara", "ar", {16777216, 0, 0, 0, 0}, 81, 81}, + {0x240A, 0x000A, 0x240A, "es-CO", "Spanish (Colombia)", "Spanish (Colombia)", "Spanish (Colombia)", "espa\xc3\xb1ol (Colombia)", "ESO", "spa", "es", {0, 0, 0, 0, 0}, 82, 82}, + {0x2801, 0x0001, 0x2801, "ar-SY", "Arabic (Syria)", "Arabic (Syria)", "Arabic (Syria)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9)", "ARS", "ara", "ar", {16777216, 0, 0, 0, 0}, 83, 83}, + {0x280A, 0x000A, 0x280A, "es-PE", "Spanish (Peru)", "Spanish (Peru)", "Spanish (Peru)", "espa\xc3\xb1ol (Per\xc3\xba)", "ESR", "spa", "es", {0, 0, 0, 0, 0}, 84, 84}, + {0x2C01, 0x0001, 0x2C01, "ar-JO", "Arabic (Jordan)", "Arabic (Jordan)", "Arabic (Jordan)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86)", "ARJ", "ara", "ar", {16777216, 0, 0, 0, 0}, 85, 85}, + {0x2C0A, 0x000A, 0x2C0A, "es-AR", "Spanish (Argentina)", "Spanish (Argentina)", "Spanish (Argentina)", "espa\xc3\xb1ol (Argentina)", "ESS", "spa", "es", {0, 0, 0, 0, 0}, 86, 86}, + {0x3001, 0x0001, 0x3001, "ar-LB", "Arabic (Lebanon)", "Arabic (Lebanon)", "Arabic (Lebanon)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd9\x84\xd8\xa8\xd9\x86\xd8\xa7\xd9\x86)", "ARB", "ara", "ar", {16777216, 0, 0, 0, 0}, 87, 87}, + {0x3009, 0x0009, 0x3009, "en-ZW", "English (Zimbabwe)", "English (Zimbabwe)", "English (Zimbabwe)", "English (Zimbabwe)", "ENW", "eng", "en", {0, 0, 0, 0, 0}, 88, 88}, + {0x300A, 0x000A, 0x300A, "es-EC", "Spanish (Ecuador)", "Spanish (Ecuador)", "Spanish (Ecuador)", "espa\xc3\xb1ol (Ecuador)", "ESF", "spa", "es", {0, 0, 0, 0, 0}, 89, 89}, + {0x3401, 0x0001, 0x3401, "ar-KW", "Arabic (Kuwait)", "Arabic (Kuwait)", "Arabic (Kuwait)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd9\x83\xd9\x88\xd9\x8a\xd8\xaa)", "ARK", "ara", "ar", {16777216, 0, 0, 0, 0}, 90, 90}, + {0x3409, 0x0009, 0x3409, "en-PH", "English (Philippines)", "English (Philippines)", "English (Philippines)", "English (Philippines)", "ENP", "eng", "en", {0, 0, 0, 0, 0}, 91, 91}, + {0x340A, 0x000A, 0x340A, "es-CL", "Spanish (Chile)", "Spanish (Chile)", "Spanish (Chile)", "espa\xc3\xb1ol (Chile)", "ESL", "spa", "es", {0, 0, 0, 0, 0}, 92, 92}, + {0x3801, 0x0001, 0x3801, "ar-AE", "Arabic (United Arab Emirates)", "Arabic (United Arab Emirates)", "Arabic (United Arab Emirates)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa \xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 \xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xad\xd8\xaf\xd8\xa9)", "ARU", "ara", "ar", {16777216, 0, 0, 0, 0}, 93, 93}, + {0x380A, 0x000A, 0x380A, "es-UY", "Spanish (Uruguay)", "Spanish (Uruguay)", "Spanish (Uruguay)", "espa\xc3\xb1ol (Uruguay)", "ESY", "spa", "es", {0, 0, 0, 0, 0}, 94, 94}, + {0x3C01, 0x0001, 0x3C01, "ar-BH", "Arabic (Bahrain)", "Arabic (Bahrain)", "Arabic (Bahrain)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd8\xa7\xd9\x84\xd8\xa8\xd8\xad\xd8\xb1\xd9\x8a\xd9\x86)", "ARH", "ara", "ar", {16777216, 0, 0, 0, 0}, 95, 95}, + {0x3C0A, 0x000A, 0x3C0A, "es-PY", "Spanish (Paraguay)", "Spanish (Paraguay)", "Spanish (Paraguay)", "espa\xc3\xb1ol (Paraguay)", "ESZ", "spa", "es", {0, 0, 0, 0, 0}, 96, 96}, + {0x4001, 0x0001, 0x4001, "ar-QA", "Arabic (Qatar)", "Arabic (Qatar)", "Arabic (Qatar)", "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9 (\xd9\x82\xd8\xb7\xd8\xb1)", "ARQ", "ara", "ar", {16777216, 0, 0, 0, 0}, 97, 97}, + {0x400A, 0x000A, 0x400A, "es-BO", "Spanish (Bolivia)", "Spanish (Bolivia)", "Spanish (Bolivia)", "espa\xc3\xb1ol (Bolivia)", "ESB", "spa", "es", {0, 0, 0, 0, 0}, 98, 98}, + {0x440A, 0x000A, 0x440A, "es-SV", "Spanish (El Salvador)", "Spanish (El Salvador)", "Spanish (El Salvador)", "espa\xc3\xb1ol (El Salvador)", "ESE", "spa", "es", {0, 0, 0, 0, 0}, 99, 99}, + {0x480A, 0x000A, 0x480A, "es-HN", "Spanish (Honduras)", "Spanish (Honduras)", "Spanish (Honduras)", "espa\xc3\xb1ol (Honduras)", "ESH", "spa", "es", {0, 0, 0, 0, 0}, 100, 100}, + {0x4C0A, 0x000A, 0x4C0A, "es-NI", "Spanish (Nicaragua)", "Spanish (Nicaragua)", "Spanish (Nicaragua)", "espa\xc3\xb1ol (Nicaragua)", "ESI", "spa", "es", {0, 0, 0, 0, 0}, 101, 101}, + {0x500A, 0x000A, 0x500A, "es-PR", "Spanish (Puerto Rico)", "Spanish (Puerto Rico)", "Spanish (Puerto Rico)", "espa\xc3\xb1ol (Puerto Rico)", "ESU", "spa", "es", {0, 0, 0, 0, 0}, 102, 102} }; - -static const CultureInfoNameEntry culture_name_entries [] = { +
+static const CultureInfoNameEntry culture_name_entries [] = {
{"af", 40}, - {"af-za", 91}, + {"af-za", 90}, {"ar", 0}, - {"ar-ae", 145}, - {"ar-bh", 147}, - {"ar-dz", 121}, - {"ar-eg", 111}, - {"ar-iq", 102}, - {"ar-jo", 137}, - {"ar-kw", 142}, - {"ar-lb", 139}, - {"ar-ly", 116}, - {"ar-ma", 125}, - {"ar-om", 131}, - {"ar-qa", 149}, - {"ar-sa", 51}, - {"ar-sy", 135}, - {"ar-tn", 128}, - {"ar-ye", 133}, + {"ar-ae", 144}, + {"ar-bh", 146}, + {"ar-dz", 120}, + {"ar-eg", 110}, + {"ar-iq", 101}, + {"ar-jo", 136}, + {"ar-kw", 141}, + {"ar-lb", 138}, + {"ar-ly", 115}, + {"ar-ma", 124}, + {"ar-om", 130}, + {"ar-qa", 148}, + {"ar-sy", 134}, + {"ar-tn", 127}, + {"ar-ye", 132}, {"be", 30}, - {"be-by", 80}, + {"be-by", 79}, {"bg", 1}, - {"bg-bg", 52}, + {"bg-bg", 51}, {"ca", 2}, - {"ca-es", 53}, + {"ca-es", 52}, {"cs", 3}, - {"cs-cz", 54}, + {"cs-cz", 53}, {"da", 4}, - {"da-dk", 55}, + {"da-dk", 54}, {"de", 5}, - {"de-at", 112}, - {"de-ch", 103}, - {"de-de", 56}, - {"de-lu", 117}, + {"de-at", 111}, + {"de-ch", 102}, + {"de-de", 55}, + {"de-lu", 116}, {"el", 6}, - {"el-gr", 57}, + {"el-gr", 56}, {"en", 7}, - {"en-au", 113}, - {"en-ca", 118}, - {"en-gb", 104}, - {"en-ie", 126}, - {"en-nz", 122}, - {"en-ph", 143}, - {"en-us", 58}, - {"en-za", 129}, - {"en-zw", 140}, + {"en-au", 112}, + {"en-ca", 117}, + {"en-gb", 103}, + {"en-ie", 125}, + {"en-nz", 121}, + {"en-ph", 142}, + {"en-us", 57}, + {"en-za", 128}, + {"en-zw", 139}, {"es", 8}, - {"es-ar", 138}, - {"es-bo", 150}, - {"es-cl", 144}, - {"es-co", 134}, - {"es-cr", 123}, - {"es-do", 130}, - {"es-ec", 141}, - {"es-es", 114}, - {"es-gt", 119}, - {"es-hn", 152}, - {"es-mx", 105}, - {"es-ni", 153}, - {"es-pa", 127}, - {"es-pe", 136}, - {"es-pr", 154}, - {"es-py", 148}, - {"es-sv", 151}, - {"es-uy", 146}, - {"es-ve", 132}, + {"es-ar", 137}, + {"es-bo", 149}, + {"es-cl", 143}, + {"es-co", 133}, + {"es-cr", 122}, + {"es-do", 129}, + {"es-ec", 140}, + {"es-es", 113}, + {"es-gt", 118}, + {"es-hn", 151}, + {"es-mx", 104}, + {"es-ni", 152}, + {"es-pa", 126}, + {"es-pe", 135}, + {"es-pr", 153}, + {"es-py", 147}, + {"es-sv", 150}, + {"es-uy", 145}, + {"es-ve", 131}, {"et", 32}, - {"et-ee", 82}, + {"et-ee", 81}, {"eu", 38}, - {"eu-es", 89}, + {"eu-es", 88}, {"fa", 35}, - {"fa-ir", 85}, + {"fa-ir", 84}, {"fi", 9}, - {"fi-fi", 59}, + {"fi-fi", 58}, {"fo", 41}, - {"fo-fo", 92}, + {"fo-fo", 91}, {"fr", 10}, - {"fr-be", 106}, - {"fr-ca", 115}, - {"fr-ch", 120}, - {"fr-fr", 60}, - {"fr-lu", 124}, + {"fr-be", 105}, + {"fr-ca", 114}, + {"fr-ch", 119}, + {"fr-fr", 59}, + {"fr-lu", 123}, {"gl", 49}, - {"gl-es", 100}, + {"gl-es", 99}, {"gu", 44}, - {"gu-in", 95}, + {"gu-in", 94}, {"he", 11}, - {"he-il", 61}, + {"he-il", 60}, {"hi", 42}, - {"hi-in", 93}, + {"hi-in", 92}, {"hr", 22}, - {"hr-hr", 72}, + {"hr-hr", 71}, {"hu", 12}, - {"hu-hu", 62}, + {"hu-hu", 61}, {"hy", 37}, + {"hy-am", 86}, {"hy-am", 87}, - {"hy-am", 88}, {"id", 28}, - {"id-id", 78}, + {"id-id", 77}, {"is", 13}, - {"is-is", 63}, + {"is-is", 62}, {"it", 14}, - {"it-ch", 107}, - {"it-it", 64}, + {"it-ch", 106}, + {"it-it", 63}, {"ja", 15}, - {"ja-jp", 65}, + {"ja-jp", 64}, {"kn", 47}, - {"kn-in", 98}, + {"kn-in", 97}, {"ko", 16}, - {"ko-kr", 66}, {"kok", 50}, - {"kok-in", 101}, + {"kok-in", 100}, + {"ko-kr", 65}, {"lt", 34}, - {"lt-lt", 84}, + {"lt-lt", 83}, {"lv", 33}, - {"lv-lv", 83}, + {"lv-lv", 82}, {"mk", 39}, - {"mk-mk", 90}, + {"mk-mk", 89}, {"mr", 48}, - {"mr-in", 99}, + {"mr-in", 98}, {"nl", 17}, - {"nl-be", 108}, - {"nl-nl", 67}, + {"nl-be", 107}, + {"nl-nl", 66}, {"pl", 18}, - {"pl-pl", 68}, + {"pl-pl", 67}, {"pt", 19}, - {"pt-br", 69}, - {"pt-pt", 109}, + {"pt-br", 68}, + {"pt-pt", 108}, {"ro", 20}, - {"ro-ro", 70}, + {"ro-ro", 69}, {"ru", 21}, - {"ru-ru", 71}, + {"ru-ru", 70}, {"sk", 23}, - {"sk-sk", 73}, + {"sk-sk", 72}, {"sl", 31}, - {"sl-si", 81}, + {"sl-si", 80}, {"sq", 24}, - {"sq-al", 74}, + {"sq-al", 73}, {"sv", 25}, - {"sv-fi", 110}, - {"sv-se", 75}, + {"sv-fi", 109}, + {"sv-se", 74}, {"sw", 43}, - {"sw-ke", 94}, + {"sw-ke", 93}, {"ta", 45}, - {"ta-in", 96}, + {"ta-in", 95}, {"te", 46}, - {"te-in", 97}, + {"te-in", 96}, {"th", 26}, - {"th-th", 76}, + {"th-th", 75}, {"tr", 27}, - {"tr-tr", 77}, + {"tr-tr", 76}, {"uk", 29}, - {"uk-ua", 79}, + {"uk-ua", 78}, {"vi", 36}, - {"vi-vn", 86} + {"vi-vn", 85} }; - +
#endif - +
diff --git a/mono/metadata/debug-mono-symfile.c b/mono/metadata/debug-mono-symfile.c index a44c2748e18..4f39e6827f1 100644 --- a/mono/metadata/debug-mono-symfile.c +++ b/mono/metadata/debug-mono-symfile.c @@ -107,21 +107,17 @@ mono_debug_open_mono_symbol_file (MonoDebugHandle *handle, gboolean create_symfi { MonoSymbolFile *symfile; - mono_loader_lock (); symfile = g_new0 (MonoSymbolFile, 1); symfile->raw_contents = open_symfile (handle->image, &symfile->raw_contents_size); - if (load_symfile (handle, symfile)) { - mono_loader_unlock (); + if (load_symfile (handle, symfile)) return symfile; - } else if (!create_symfile) { + else if (!create_symfile) { mono_debug_close_mono_symbol_file (symfile); - mono_loader_unlock (); return NULL; } - mono_loader_unlock (); return symfile; } @@ -131,18 +127,16 @@ mono_debug_close_mono_symbol_file (MonoSymbolFile *symfile) if (!symfile) return; - mono_loader_lock (); if (symfile->method_hash) g_hash_table_destroy (symfile->method_hash); g_free (symfile); - mono_loader_unlock (); } static gchar * read_string (const char *ptr) { - int len = read32 (ptr); + int len = *((guint32 *) ptr); ptr += sizeof(guint32); return g_filename_from_utf8 (ptr, len, NULL, NULL, NULL); } @@ -157,17 +151,12 @@ mono_debug_find_source_location (MonoSymbolFile *symfile, MonoMethod *method, gu const char *ptr; int i; - mono_loader_lock (); - if (!symfile->method_hash) { - mono_loader_unlock (); + if (!symfile->method_hash) return NULL; - } minfo = g_hash_table_lookup (symfile->method_hash, method); - if (!minfo) { - mono_loader_unlock (); + if (!minfo) return NULL; - } if (read32(&(minfo->entry->_source_index))) { int offset = read32(&(symfile->offset_table->_source_table_offset)) + @@ -187,7 +176,6 @@ mono_debug_find_source_location (MonoSymbolFile *symfile, MonoMethod *method, gu if (line_number) { *line_number = read32(&(lne->_row)); - mono_loader_unlock (); if (source_file) return source_file; else @@ -195,16 +183,11 @@ mono_debug_find_source_location (MonoSymbolFile *symfile, MonoMethod *method, gu } else if (source_file) { gchar *retval = g_strdup_printf ("%s:%d", source_file, read32(&(lne->_row))); g_free (source_file); - mono_loader_unlock (); return retval; - } else { - gchar* retval = g_strdup_printf ("%d", read32(&(lne->_row))); - mono_loader_unlock (); - return retval; - } + } else + return g_strdup_printf ("%d", read32(&(lne->_row))); } - mono_loader_unlock (); return NULL; } @@ -250,7 +233,6 @@ mono_debug_find_method (MonoDebugHandle *handle, MonoMethod *method) if (handle->image != mono_class_get_image (mono_method_get_class (method))) return NULL; - mono_loader_lock (); first_ie = (MonoSymbolFileMethodIndexEntry *) (symfile->raw_contents + read32(&(symfile->offset_table->_method_table_offset))); @@ -258,10 +240,8 @@ mono_debug_find_method (MonoDebugHandle *handle, MonoMethod *method) read32(&(symfile->offset_table->_method_count)), sizeof (MonoSymbolFileMethodIndexEntry), compare_method); - if (!ie) { - mono_loader_unlock (); + if (!ie) return NULL; - } me = (MonoSymbolFileMethodEntry *) (symfile->raw_contents + read32(&(ie->_file_offset))); @@ -276,6 +256,5 @@ mono_debug_find_method (MonoDebugHandle *handle, MonoMethod *method) g_hash_table_insert (symfile->method_hash, method, minfo); - mono_loader_unlock (); return minfo; } diff --git a/mono/metadata/filewatcher.c b/mono/metadata/filewatcher.c index 731eb3a1ad2..6210dc6b1f8 100644 --- a/mono/metadata/filewatcher.c +++ b/mono/metadata/filewatcher.c @@ -89,26 +89,21 @@ static int (*FAMNextEvent) (gpointer, gpointer); gint ves_icall_System_IO_FSW_SupportsFSW (void) { -#if HAVE_KQUEUE - return 3; -#else GModule *fam_module; - gchar *filename; MONO_ARCH_SAVE_REGS; - filename = g_module_build_path (NULL, "libfam.so.0"); - fam_module = g_module_open (filename, G_MODULE_BIND_LAZY); - g_free (filename); - if (fam_module == NULL) + fam_module = g_module_open ("libfam", G_MODULE_BIND_LAZY); + if (fam_module == NULL) { return 0; + } + g_module_symbol (fam_module, "FAMNextEvent", (gpointer *) &FAMNextEvent); if (FAMNextEvent == NULL) return 0; return 2; -#endif } gpointer diff --git a/mono/metadata/gc.c b/mono/metadata/gc.c index 9bfc8d8184d..4695c8c1a2a 100644 --- a/mono/metadata/gc.c +++ b/mono/metadata/gc.c @@ -16,7 +16,6 @@ #include <mono/metadata/exception.h> #include <mono/metadata/domain-internals.h> #include <mono/metadata/class-internals.h> -#include <mono/utils/mono-logger.h> #define GC_I_HIDE_POINTERS #include <mono/os/gc_wrapper.h> @@ -348,17 +347,13 @@ ves_icall_System_GCHandle_GetTargetHandle (MonoObject *obj, guint32 handle, gint /* Indexes start from 1 since 0 means the handle is not allocated */ idx = ++next_handle; if (idx >= array_size) { +#if HAVE_BOEHM_GC gpointer *new_array; guint8 *new_type_array; if (!array_size) array_size = 16; -#if HAVE_BOEHM_GC new_array = GC_MALLOC (sizeof (gpointer) * (array_size * 2)); new_type_array = GC_MALLOC (sizeof (guint8) * (array_size * 2)); -#else - new_array = g_malloc0 (sizeof (gpointer) * (array_size * 2)); - new_type_array = g_malloc0 (sizeof (guint8) * (array_size * 2)); -#endif if (gc_handles) { int i; memcpy (new_array, gc_handles, sizeof (gpointer) * array_size); @@ -375,22 +370,20 @@ ves_icall_System_GCHandle_GetTargetHandle (MonoObject *obj, guint32 handle, gint #else if (((gulong)new_array [i]) & 0x1) { #endif -#if HAVE_BOEHM_GC if (gc_handles [i] != (gpointer)-1) GC_unregister_disappearing_link (&(gc_handles [i])); if (new_array [i] != (gpointer)-1) GC_GENERAL_REGISTER_DISAPPEARING_LINK (&(new_array [i]), REVEAL_POINTER (new_array [i])); -#endif } } } array_size *= 2; -#ifndef HAVE_BOEHM_GC - g_free (gc_handles); - g_free (gc_handle_types); -#endif gc_handles = new_array; gc_handle_types = new_type_array; +#else + LeaveCriticalSection (&handle_section); + mono_raise_exception (mono_get_exception_execution_engine ("No GCHandle support built-in")); +#endif } /* resuse the type from the old target */ @@ -406,6 +399,9 @@ ves_icall_System_GCHandle_GetTargetHandle (MonoObject *obj, guint32 handle, gint #if HAVE_BOEHM_GC if (gc_handles [idx] != (gpointer)-1) GC_GENERAL_REGISTER_DISAPPEARING_LINK (&(gc_handles [idx]), obj); +#else + LeaveCriticalSection (&handle_section); + mono_raise_exception (mono_get_exception_execution_engine ("No weakref support")); #endif break; default: @@ -433,6 +429,9 @@ ves_icall_System_GCHandle_FreeHandle (guint32 handle) if (gc_handles [idx] != (gpointer)-1) GC_unregister_disappearing_link (&(gc_handles [idx])); } +#else + LeaveCriticalSection (&handle_section); + mono_raise_exception (mono_get_exception_execution_engine ("No GCHandle support")); #endif gc_handles [idx] = (gpointer)-1; @@ -458,50 +457,11 @@ ves_icall_System_GCHandle_GetAddrOfPinnedObject (guint32 handle) if (obj == (MonoObject *) -1) return NULL; } - if (obj) { - MonoClass *klass = mono_object_class (obj); - if (klass == mono_defaults.string_class) { - return mono_string_chars ((MonoString*)obj); - } else if (klass->rank) { - return mono_array_addr ((MonoArray*)obj, char, 0); - } else { - /* the C# code will check and throw the exception */ - /* FIXME: missing !klass->blittable test, see bug #61134, - * disabled in 1.0 untill the blittable-using code is audited. - if ((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_AUTO_LAYOUT) - return (gpointer)-1; */ - return (char*)obj + sizeof (MonoObject); - } - } + return obj; } return NULL; } -guint32 -mono_gchandle_new (MonoObject *obj, gboolean pinned) -{ - return ves_icall_System_GCHandle_GetTargetHandle (obj, 0, pinned? HANDLE_PINNED: HANDLE_NORMAL); -} - -guint32 -mono_gchandle_new_weakref (MonoObject *obj, gboolean track_resurrection) -{ - return ves_icall_System_GCHandle_GetTargetHandle (obj, 0, track_resurrection? HANDLE_WEAK_TRACK: HANDLE_WEAK); -} - -/* This will return NULL for a collected object if using a weakref handle */ -MonoObject* -mono_gchandle_get_target (guint32 gchandle) -{ - return ves_icall_System_GCHandle_GetTarget (gchandle); -} - -void -mono_gchandle_free (guint32 gchandle) -{ - ves_icall_System_GCHandle_FreeHandle (gchandle); -} - #if HAVE_BOEHM_GC static HANDLE finalizer_event; @@ -555,9 +515,6 @@ finalize_domain_objects (DomainFinalizationReq *req) g_ptr_array_free (objs, TRUE); } - /* Process finalizers which are already in the queue */ - GC_invoke_finalizers (); - /* printf ("DONE.\n"); */ SetEvent (req->done_event); @@ -649,12 +606,6 @@ static GCThreadFunctions mono_gc_thread_vtable = { }; #endif /* WITH_INCLUDED_LIBGC */ -static void -mono_gc_warning (char *msg, GC_word arg) -{ - mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_GC, msg, (unsigned long)arg); -} - void mono_gc_init (void) { InitializeCriticalSection (&handle_section); @@ -666,8 +617,6 @@ void mono_gc_init (void) gc_thread_vtable = &mono_gc_thread_vtable; #endif - GC_set_warn_proc (mono_gc_warning); - #ifdef ENABLE_FINALIZER_THREAD if (g_getenv ("GC_DONT_GC")) { diff --git a/mono/metadata/icall.c b/mono/metadata/icall.c index 0c2064d4b94..7e76bf279d4 100644 --- a/mono/metadata/icall.c +++ b/mono/metadata/icall.c @@ -1153,9 +1153,6 @@ ves_icall_type_is_subtype_of (MonoReflectionType *type, MonoReflectionType *c, M klass = mono_class_from_mono_type (type->type); klassc = mono_class_from_mono_type (c->type); - if (type->type->byref) - return klassc == mono_defaults.object_class; - return mono_class_is_subclass_of (klass, klassc, check_interfaces); } @@ -1175,9 +1172,6 @@ ves_icall_type_is_assignable_from (MonoReflectionType *type, MonoReflectionType klass = mono_class_from_mono_type (type->type); klassc = mono_class_from_mono_type (c->type); - if (type->type->byref && !c->type->byref) - return FALSE; - return mono_class_is_assignable_from (klass, klassc); } diff --git a/mono/metadata/image.c b/mono/metadata/image.c index 043252a0919..8b0473429ed 100644 --- a/mono/metadata/image.c +++ b/mono/metadata/image.c @@ -849,12 +849,12 @@ MonoImage * mono_image_open (const char *fname, MonoImageOpenStatus *status) { MonoImage *image, *image2; - char *absfname; + const char *absfname; g_return_val_if_fail (fname != NULL, NULL); if (g_path_is_absolute (fname)) - absfname = (char*)fname; + absfname = fname; else { gchar *path = g_get_current_dir (); absfname = g_build_filename (path, fname, NULL); @@ -895,7 +895,7 @@ mono_image_open (const char *fname, MonoImageOpenStatus *status) return image2; } g_hash_table_insert (loaded_images_hash, image->name, image); - if (image->assembly_name && (g_hash_table_lookup (loaded_images_hash, image->assembly_name) == NULL)) + if (image->assembly_name) g_hash_table_insert (loaded_images_hash, (char *) image->assembly_name, image); g_hash_table_insert (loaded_images_guid_hash, image->guid, image); LeaveCriticalSection (&images_mutex); @@ -950,32 +950,19 @@ mono_image_close (MonoImage *image) if (image == image2) { /* This is not true if we are called from mono_image_open () */ g_hash_table_remove (loaded_images_hash, image->name); + if (image->assembly_name) + g_hash_table_remove (loaded_images_hash, (char *) image->assembly_name); g_hash_table_remove (loaded_images_guid_hash, image->guid); /* Multiple images might have the same guid */ build_guid_table (); - } - if (image->assembly_name && (g_hash_table_lookup (loaded_images_hash, image->assembly_name) == image)) - g_hash_table_remove (loaded_images_hash, (char *) image->assembly_name); + } LeaveCriticalSection (&images_mutex); if (image->f) fclose (image->f); - if (image->raw_data_allocated) { - /* image->raw_metadata and cli_sections might lie inside image->raw_data */ - MonoCLIImageInfo *ii = image->image_info; - int i; - - if ((image->raw_metadata > image->raw_data) && - (image->raw_metadata <= (image->raw_data + image->raw_data_len))) - image->raw_metadata = NULL; - - for (i = 0; i < ii->cli_section_count; i++) - if (((char*)(ii->cli_sections [i]) > image->raw_data) && - ((char*)(ii->cli_sections [i]) <= ((char*)image->raw_data + image->raw_data_len))) - ii->cli_sections [i] = NULL; - + if (image->raw_data_allocated) g_free (image->raw_data); - } + g_free (image->name); g_free (image->files); diff --git a/mono/metadata/loader.c b/mono/metadata/loader.c index f9fac307bd3..81f2af3fa7c 100644 --- a/mono/metadata/loader.c +++ b/mono/metadata/loader.c @@ -580,41 +580,28 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char g_assert (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL); - if (method->addr) - return method->addr; - - if (method->klass->image->dynamic) { - MonoReflectionMethodAux *method_aux = - mono_g_hash_table_lookup ( - ((MonoDynamicImage*)method->klass->image)->method_aux_hash, method); - if (!method_aux) - return NULL; - - import = method_aux->dllentry; - orig_scope = method_aux->dll; + if (exc_class) { + *exc_class = NULL; + *exc_arg = NULL; } - else { - if (!piinfo->implmap_idx) - return NULL; - mono_metadata_decode_row (im, piinfo->implmap_idx - 1, im_cols, MONO_IMPLMAP_SIZE); + if (method->addr) + return method->addr; + if (!piinfo->implmap_idx) + return NULL; + + mono_metadata_decode_row (im, piinfo->implmap_idx - 1, im_cols, MONO_IMPLMAP_SIZE); - piinfo->piflags = im_cols [MONO_IMPLMAP_FLAGS]; - import = mono_metadata_string_heap (image, im_cols [MONO_IMPLMAP_NAME]); - scope_token = mono_metadata_decode_row_col (mr, im_cols [MONO_IMPLMAP_SCOPE] - 1, MONO_MODULEREF_NAME); - orig_scope = mono_metadata_string_heap (image, scope_token); - } + piinfo->piflags = im_cols [MONO_IMPLMAP_FLAGS]; + import = mono_metadata_string_heap (image, im_cols [MONO_IMPLMAP_NAME]); + scope_token = mono_metadata_decode_row_col (mr, im_cols [MONO_IMPLMAP_SCOPE] - 1, MONO_MODULEREF_NAME); + orig_scope = mono_metadata_string_heap (image, scope_token); mono_dllmap_lookup (image, orig_scope, import, &new_scope, &import); mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_DLLIMPORT, "DllImport attempting to load: '%s'.", new_scope); - if (exc_class) { - *exc_class = NULL; - *exc_arg = NULL; - } - #ifndef PLATFORM_WIN32 /* * If we are P/Invoking a library from System.Windows.Forms, load Wine @@ -629,27 +616,17 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char * Try loading the module using a variety of names */ for (i = 0; i < 2; ++i) { - switch (i) { - case 0: + if (i == 0) /* Try the original name */ file_name = g_strdup (new_scope); - break; - case 1: + else { /* Try trimming the .dll extension */ if (strstr (new_scope, ".dll") == (new_scope + strlen (new_scope) - 4)) { file_name = g_strdup (new_scope); file_name [strlen (new_scope) - 4] = '\0'; } else - continue; - break; - default: - if (strstr (new_scope, "lib") != new_scope) { - file_name = g_strdup_printf ("lib%s", new_scope); - } - else - continue; - break; + break; } if (!gmodule) { @@ -735,21 +712,6 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char break; } - -#ifdef PLATFORM_WIN32 - /* Try the stdcall mangled name */ - if (!method->addr) { - /* FIX: Compute this correctly */ - mangled_name = g_strdup_printf ("%s@%d", import, method->signature->param_count * sizeof (gpointer)); - g_module_symbol (gmodule, mangled_name, &method->addr); - g_free (mangled_name); - } - if (!method->addr) { - mangled_name = g_strdup_printf ("_%s@%d", import, method->signature->param_count * sizeof (gpointer)); - g_module_symbol (gmodule, mangled_name, &method->addr); - g_free (mangled_name); - } -#endif } if (!method->addr) { diff --git a/mono/metadata/locales.c b/mono/metadata/locales.c index 256598e14c0..7c10529f3f3 100644 --- a/mono/metadata/locales.c +++ b/mono/metadata/locales.c @@ -25,7 +25,7 @@ #include <locale.h> -#undef DEBUG +//#undef DEBUG static gint32 string_invariant_compare_char (gunichar2 c1, gunichar2 c2, gint32 options); @@ -1041,7 +1041,6 @@ void ves_icall_System_Globalization_CompareInfo_free_internal_collator (MonoComp coll=this->ICU_collator; if(coll!=NULL) { - this->ICU_collator = NULL; ucol_close (coll); } } @@ -1432,11 +1431,6 @@ MonoString *ves_icall_System_String_InternalReplace_Str_Comp (MonoString *this, * does match properly... */ match_len = usearch_getMatchedLength (search); - - if(match_len == 0) { - continue; - } - match=(UChar *)g_malloc0 (sizeof(UChar) * (match_len + 1)); usearch_getMatchedText (search, match, match_len, &ec); @@ -1473,11 +1467,6 @@ MonoString *ves_icall_System_String_InternalReplace_Str_Comp (MonoString *this, pos!=USEARCH_DONE; pos=usearch_next (search, &ec)) { match_len = usearch_getMatchedLength (search); - - if (match_len == 0) { - continue; - } - match=(UChar *)g_malloc0 (sizeof(UChar) * (match_len + 1)); usearch_getMatchedText (search, match, match_len, &ec); @@ -1876,6 +1865,15 @@ static gint32 string_invariant_compare_char (gunichar2 c1, gunichar2 c2, /* No options. Kana, symbol and spacing options don't * apply to the invariant culture. */ + if (c1type == G_UNICODE_UPPERCASE_LETTER && + c2type == G_UNICODE_LOWERCASE_LETTER) { + return(1); + } + + if (c1type == G_UNICODE_LOWERCASE_LETTER && + c2type == G_UNICODE_UPPERCASE_LETTER) { + return(-1); + } result = (gint32) c1 - c2; } diff --git a/mono/metadata/marshal.c b/mono/metadata/marshal.c index 97a71e3a56a..e2f384734b9 100644 --- a/mono/metadata/marshal.c +++ b/mono/metadata/marshal.c @@ -45,6 +45,9 @@ struct _MonoMethodBuilder { static void emit_struct_conv (MonoMethodBuilder *mb, MonoClass *klass, gboolean to_object); +static gint +mono_marshal_runtime_glist_find_klass (gconstpointer a, gconstpointer b); + static MonoMethod * mono_find_method_by_name (MonoClass *klass, const char *name, int param_count) { @@ -221,20 +224,17 @@ mono_string_builder_to_utf8 (MonoStringBuilder *sb) { GError *error = NULL; glong *res; - gchar *tmp; if (!sb) return NULL; res = g_malloc0 (mono_stringbuilder_capacity (sb) + 1); - tmp = g_utf16_to_utf8 (mono_string_chars (sb->str), sb->length, NULL, res, &error); + g_utf16_to_utf8 (mono_string_chars (sb->str), sb->length, NULL, res, &error); if (error) { g_error_free (error); mono_raise_exception (mono_get_exception_execution_engine ("Failed to convert StringBuilder from utf16 to utf8")); } - else - memcpy (res, tmp, sb->length + 1); return res; } @@ -1270,52 +1270,6 @@ mono_marshal_get_string_encoding (MonoMethodPInvoke *piinfo, MonoMarshalSpec *sp } } -static MonoMarshalNative -mono_marshal_get_stringbuilder_to_ptr_encoding (MonoMethodPInvoke *piinfo, MonoMarshalSpec *spec) -{ - MonoMarshalNative encoding = mono_marshal_get_string_encoding (piinfo, spec); - - switch (encoding) { - case MONO_NATIVE_LPWSTR: - return MONO_MARSHAL_CONV_SB_LPWSTR; - break; - case MONO_NATIVE_LPSTR: - return MONO_MARSHAL_CONV_SB_LPSTR; - break; - case MONO_NATIVE_LPTSTR: - return MONO_MARSHAL_CONV_SB_LPTSTR; - break; - default: - return -1; - } -} - -static MonoMarshalNative -mono_marshal_get_ptr_to_stringbuilder_encoding (MonoMethodPInvoke *piinfo, MonoMarshalSpec *spec, gboolean *need_free) -{ - MonoMarshalNative encoding = mono_marshal_get_string_encoding (piinfo, spec); - - *need_free = TRUE; - - switch (encoding) { - case MONO_NATIVE_LPWSTR: - /* - * mono_string_builder_to_utf16 does not allocate a - * new buffer, so no need to free it. - */ - *need_free = FALSE; - return MONO_MARSHAL_CONV_LPWSTR_SB; - case MONO_NATIVE_LPSTR: - return MONO_MARSHAL_CONV_LPSTR_SB; - break; - case MONO_NATIVE_LPTSTR: - return MONO_MARSHAL_CONV_LPTSTR_SB; - break; - default: - return -1; - } -} - static inline MonoMethod* mono_marshal_find_in_cache (GHashTable *cache, gpointer key) { @@ -1665,7 +1619,7 @@ mono_remoting_wrapper (MonoMethod *method, gpointer *params) } } - return mono_runtime_invoke (method, method->klass->valuetype? mono_object_unbox ((MonoObject*)this): this, mparams, NULL); + return mono_runtime_invoke (method, method->klass->valuetype? mono_object_unbox (this): this, mparams, NULL); } msg = mono_method_call_message_new (method, params, NULL, NULL, NULL); @@ -2198,19 +2152,6 @@ handle_enum: return res; } -static void -raise_auto_layout_exception (MonoClass *klass) -{ - char *msg = g_strdup_printf ("The type `%s.%s' layout needs to be Sequential or Explicit", - klass->name_space, klass->name, NULL); - - MonoException *e = mono_exception_from_name_msg ( - mono_get_corlib (), "System.Runtime.InteropServices", - "MarshalDirectiveException", msg); - g_free (msg); - mono_raise_exception (e); -} - /* * generates IL code to call managed methods from unmanaged code */ @@ -2372,9 +2313,8 @@ mono_marshal_get_managed_wrapper (MonoMethod *method, MonoObject *this, MonoMars break; } - /* The class can not have an automatic layout */ - if ((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_AUTO_LAYOUT) - raise_auto_layout_exception (klass); + /* FIXME: Raise a MarshalDirectiveException here */ + g_assert ((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) != TYPE_ATTRIBUTE_AUTO_LAYOUT); if (t->attrs & PARAM_ATTRIBUTE_OUT) { mono_mb_emit_byte (mb, CEE_LDNULL); @@ -2636,17 +2576,8 @@ mono_marshal_get_managed_wrapper (MonoMethod *method, MonoObject *this, MonoMars klass = sig->ret->data.klass; - if (klass->delegate) { - mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX); - mono_mb_emit_byte (mb, CEE_MONO_FUNC1); - mono_mb_emit_byte (mb, MONO_MARSHAL_CONV_DEL_FTN); - mono_mb_emit_byte (mb, CEE_STLOC_3); - break; - } - - /* The class can not have an automatic layout */ - if ((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_AUTO_LAYOUT) - raise_auto_layout_exception (klass); + /* FIXME: Raise a MarshalDirectiveException here */ + g_assert ((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) != TYPE_ATTRIBUTE_AUTO_LAYOUT); mono_mb_emit_byte (mb, CEE_STLOC_0); /* Check for null */ @@ -3453,22 +3384,31 @@ mono_marshal_get_native_wrapper (MonoMethod *method) mono_mb_emit_byte (mb, MONO_MARSHAL_CONV_DEL_FTN); mono_mb_emit_stloc (mb, tmp_locals [i]); } else if (klass == mono_defaults.stringbuilder_class) { - MonoMarshalNative encoding = mono_marshal_get_stringbuilder_to_ptr_encoding (piinfo, spec); + MonoMarshalNative encoding = mono_marshal_get_string_encoding (piinfo, spec); g_assert (!t->byref); mono_mb_emit_ldarg (mb, argnum); mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX); mono_mb_emit_byte (mb, CEE_MONO_FUNC1); - if (encoding != -1) - mono_mb_emit_byte (mb, encoding); - else { + switch (encoding) { + case MONO_NATIVE_LPWSTR: + mono_mb_emit_byte (mb, MONO_MARSHAL_CONV_SB_LPWSTR); + break; + case MONO_NATIVE_LPSTR: + mono_mb_emit_byte (mb, MONO_MARSHAL_CONV_SB_LPSTR); + break; + case MONO_NATIVE_LPTSTR: + mono_mb_emit_byte (mb, MONO_MARSHAL_CONV_SB_LPTSTR); + break; + default: { char *msg = g_strdup_printf ("stringbuilder marshalling conversion %d not implemented", encoding); MonoException *exc = mono_get_exception_not_implemented (msg); g_warning (msg); g_free (msg); mono_raise_exception (exc); } + } mono_mb_emit_stloc (mb, tmp_locals [i]); } else { @@ -3564,13 +3504,10 @@ mono_marshal_get_native_wrapper (MonoMethod *method) else { MonoClass *eklass; guint32 label1, label2, label3; - int index_var, dest_ptr, esize; - MonoMarshalNative encoding = mono_marshal_get_stringbuilder_to_ptr_encoding (piinfo, spec); + int index_var, dest_ptr; dest_ptr = mono_mb_add_local (mb, &mono_defaults.int_class->byval_arg); - eklass = klass->element_class; - /* Check null */ mono_mb_emit_ldarg (mb, argnum); mono_mb_emit_stloc (mb, tmp_locals [i]); @@ -3579,23 +3516,9 @@ mono_marshal_get_native_wrapper (MonoMethod *method) label1 = mb->pos; mono_mb_emit_i4 (mb, 0); - if (eklass == mono_defaults.stringbuilder_class) { - if (encoding == -1) { - char *msg = g_strdup_printf ("stringbuilder marshalling conversion %d not implemented", encoding); - MonoException *exc = mono_get_exception_not_implemented (msg); - g_warning (msg); - g_free (msg); - mono_raise_exception (exc); - } - } - - if (eklass == mono_defaults.stringbuilder_class) - esize = sizeof (gpointer); - else - esize = mono_class_native_size (eklass, NULL); - /* allocate space for the native struct and store the address */ - mono_mb_emit_icon (mb, esize); + eklass = klass->element_class; + mono_mb_emit_icon (mb, mono_class_native_size (eklass, NULL)); mono_mb_emit_ldarg (mb, argnum); mono_mb_emit_byte (mb, CEE_LDLEN); mono_mb_emit_byte (mb, CEE_MUL); @@ -3620,34 +3543,22 @@ mono_marshal_get_native_wrapper (MonoMethod *method) /* Emit marshalling code */ - if (eklass == mono_defaults.stringbuilder_class) { - mono_mb_emit_ldloc (mb, dest_ptr); - mono_mb_emit_ldarg (mb, argnum); - mono_mb_emit_ldloc (mb, index_var); - mono_mb_emit_byte (mb, CEE_LDELEM_REF); - mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX); - mono_mb_emit_byte (mb, CEE_MONO_FUNC1); - mono_mb_emit_byte (mb, encoding); - mono_mb_emit_byte (mb, CEE_STIND_I); - } - else { - /* set the src_ptr */ - mono_mb_emit_ldarg (mb, argnum); - mono_mb_emit_ldloc (mb, index_var); - mono_mb_emit_byte (mb, CEE_LDELEMA); - mono_mb_emit_i4 (mb, mono_mb_add_data (mb, eklass)); - mono_mb_emit_byte (mb, CEE_STLOC_0); + /* set the src_ptr */ + mono_mb_emit_ldarg (mb, argnum); + mono_mb_emit_ldloc (mb, index_var); + mono_mb_emit_byte (mb, CEE_LDELEMA); + mono_mb_emit_i4 (mb, mono_mb_add_data (mb, eklass)); + mono_mb_emit_byte (mb, CEE_STLOC_0); - /* set dst_ptr */ - mono_mb_emit_ldloc (mb, dest_ptr); - mono_mb_emit_byte (mb, CEE_STLOC_1); + /* set dst_ptr */ + mono_mb_emit_ldloc (mb, dest_ptr); + mono_mb_emit_byte (mb, CEE_STLOC_1); - /* emit valuetype conversion code */ - emit_struct_conv (mb, eklass, FALSE); - } + /* emit valuetype conversion code */ + emit_struct_conv (mb, eklass, FALSE); mono_mb_emit_add_to_local (mb, index_var, 1); - mono_mb_emit_add_to_local (mb, dest_ptr, esize); + mono_mb_emit_add_to_local (mb, dest_ptr, mono_class_native_size (eklass, NULL)); mono_mb_emit_byte (mb, CEE_BR); mono_mb_emit_i4 (mb, label2 - (mb->pos + 4)); @@ -4074,20 +3985,33 @@ mono_marshal_get_native_wrapper (MonoMethod *method) case MONO_TYPE_CLASS: case MONO_TYPE_OBJECT: if (t->data.klass == mono_defaults.stringbuilder_class) { - gboolean need_free; - MonoMarshalNative encoding; - - encoding = mono_marshal_get_ptr_to_stringbuilder_encoding (piinfo, spec, &need_free); + MonoMarshalNative encoding = mono_marshal_get_string_encoding (piinfo, spec); + gboolean need_free = TRUE; g_assert (!t->byref); - g_assert (encoding != -1); - mono_mb_emit_ldarg (mb, argnum); mono_mb_emit_ldloc (mb, tmp_locals [i]); mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX); mono_mb_emit_byte (mb, CEE_MONO_PROC2); - mono_mb_emit_byte (mb, encoding); + switch (encoding) { + case MONO_NATIVE_LPWSTR: + mono_mb_emit_byte (mb, MONO_MARSHAL_CONV_LPWSTR_SB); + /* + * mono_string_builder_to_utf16 does not allocate a + * new buffer, so no need to free it. + */ + need_free = FALSE; + break; + case MONO_NATIVE_LPSTR: + mono_mb_emit_byte (mb, MONO_MARSHAL_CONV_LPSTR_SB); + break; + case MONO_NATIVE_LPTSTR: + mono_mb_emit_byte (mb, MONO_MARSHAL_CONV_LPTSTR_SB); + break; + default: + g_assert_not_reached (); + } if (need_free) { mono_mb_emit_ldloc (mb, tmp_locals [i]); @@ -4202,17 +4126,13 @@ mono_marshal_get_native_wrapper (MonoMethod *method) } /* Character arrays are implicitly marshalled as [Out] */ - if ((klass->element_class == mono_defaults.char_class) || (klass->element_class == mono_defaults.stringbuilder_class) || (t->attrs & PARAM_ATTRIBUTE_OUT)) { + if ((klass->element_class == mono_defaults.char_class) || (t->attrs & PARAM_ATTRIBUTE_OUT)) { /* FIXME: Optimize blittable case */ MonoClass *eklass; guint32 label1, label2, label3; - int index_var, src_ptr, esize; + int index_var, src_ptr; eklass = klass->element_class; - if (eklass == mono_defaults.stringbuilder_class) - esize = sizeof (gpointer); - else - esize = mono_class_native_size (eklass, NULL); src_ptr = mono_mb_add_local (mb, &mono_defaults.int_class->byval_arg); /* Check null */ @@ -4238,53 +4158,22 @@ mono_marshal_get_native_wrapper (MonoMethod *method) /* Emit marshalling code */ - if (eklass == mono_defaults.stringbuilder_class) { - gboolean need_free; - MonoMarshalNative encoding = mono_marshal_get_ptr_to_stringbuilder_encoding (piinfo, spec, &need_free); - - g_assert (encoding != -1); - - /* dest */ - mono_mb_emit_ldarg (mb, argnum); - mono_mb_emit_ldloc (mb, index_var); - mono_mb_emit_byte (mb, CEE_LDELEM_REF); - - /* src */ - mono_mb_emit_ldloc (mb, src_ptr); - mono_mb_emit_byte (mb, CEE_LDIND_I); - - mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX); - mono_mb_emit_byte (mb, CEE_MONO_PROC2); - - mono_mb_emit_byte (mb, encoding); - - if (need_free) { - /* src */ - mono_mb_emit_ldloc (mb, src_ptr); - mono_mb_emit_byte (mb, CEE_LDIND_I); - - mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX); - mono_mb_emit_byte (mb, CEE_MONO_FREE); - } - } - else { - /* set the src_ptr */ - mono_mb_emit_ldloc (mb, src_ptr); - mono_mb_emit_byte (mb, CEE_STLOC_0); + /* set the src_ptr */ + mono_mb_emit_ldloc (mb, src_ptr); + mono_mb_emit_byte (mb, CEE_STLOC_0); - /* set dst_ptr */ - mono_mb_emit_ldarg (mb, argnum); - mono_mb_emit_ldloc (mb, index_var); - mono_mb_emit_byte (mb, CEE_LDELEMA); - mono_mb_emit_i4 (mb, mono_mb_add_data (mb, eklass)); - mono_mb_emit_byte (mb, CEE_STLOC_1); + /* set dst_ptr */ + mono_mb_emit_ldarg (mb, argnum); + mono_mb_emit_ldloc (mb, index_var); + mono_mb_emit_byte (mb, CEE_LDELEMA); + mono_mb_emit_i4 (mb, mono_mb_add_data (mb, eklass)); + mono_mb_emit_byte (mb, CEE_STLOC_1); - /* emit valuetype conversion code */ - emit_struct_conv (mb, eklass, TRUE); - } + /* emit valuetype conversion code */ + emit_struct_conv (mb, eklass, TRUE); mono_mb_emit_add_to_local (mb, index_var, 1); - mono_mb_emit_add_to_local (mb, src_ptr, esize); + mono_mb_emit_add_to_local (mb, src_ptr, mono_class_native_size (eklass, NULL)); mono_mb_emit_byte (mb, CEE_BR); mono_mb_emit_i4 (mb, label2 - (mb->pos + 4)); @@ -4860,8 +4749,6 @@ mono_marshal_alloc (gpointer size) { MONO_ARCH_SAVE_REGS; - if (size == NULL) - size = (gpointer)4; return g_try_malloc ((gulong)size); } diff --git a/mono/metadata/metadata.c b/mono/metadata/metadata.c index 9fe1bc71193..88699f3e890 100644 --- a/mono/metadata/metadata.c +++ b/mono/metadata/metadata.c @@ -1203,10 +1203,6 @@ mono_metadata_parse_type (MonoImage *m, MonoParseTypeMode mode, short opt_attrs, { MonoType *type, *cached; gboolean byref = FALSE; - gboolean pinned = FALSE; - const char *tmp_ptr; - int count = 0; - gboolean found; /* * According to the spec, custom modifiers should come before the byref @@ -1216,70 +1212,70 @@ mono_metadata_parse_type (MonoImage *m, MonoParseTypeMode mode, short opt_attrs, * Also, this type seems to be different from 'object & modopt(...)'. Maybe * it would be better to treat byref as real type constructor instead of * a modifier... - * Also, pinned should come before anything else, but some MSV++ produced - * assemblies violate this (#bug 61990). */ - - /* Count the modifiers first */ - tmp_ptr = ptr; - found = TRUE; - while (found) { - switch (*tmp_ptr) { - case MONO_TYPE_PINNED: - case MONO_TYPE_BYREF: - ++tmp_ptr; - break; - case MONO_TYPE_CMOD_REQD: - case MONO_TYPE_CMOD_OPT: - count ++; - mono_metadata_parse_custom_mod (m, NULL, tmp_ptr, &tmp_ptr); - break; - default: - found = FALSE; - } + if (*ptr == MONO_TYPE_BYREF) { + byref = TRUE; + ++ptr; } - if (count) { - type = g_malloc0 (sizeof (MonoType) + ((gint32)count - MONO_ZERO_LEN_ARRAY) * sizeof (MonoCustomMod)); - type->num_mods = count; - if (count > 64) - g_warning ("got more than 64 modifiers in type"); + switch (mode) { + case MONO_PARSE_MOD_TYPE: + case MONO_PARSE_PARAM: + case MONO_PARSE_RET: + case MONO_PARSE_LOCAL: /* should not have modifiers according to the spec, but ms tools disagree */ + case MONO_PARSE_FIELD: { + /* count the modifiers */ + const char *tmp_ptr = ptr; + int count = 0; + while (mono_metadata_parse_custom_mod (m, NULL, tmp_ptr, &tmp_ptr)) + count++; + if (count) { + type = g_malloc0 (sizeof (MonoType) + ((gint32)count - MONO_ZERO_LEN_ARRAY) * sizeof (MonoCustomMod)); + type->num_mods = count; + if (count > 64) + g_warning ("got more than 64 modifiers in type"); + /* save them this time */ + count = 0; + while (mono_metadata_parse_custom_mod (m, &(type->modifiers [count]), ptr, &ptr)) + count++; + break; + } /* fall through */ } - else + case MONO_PARSE_TYPE: /* * Later we can avoid doing this allocation. */ type = g_new0 (MonoType, 1); - - /* Parse pinned, byref and custom modifiers */ - found = TRUE; - count = 0; - while (found) { - switch (*ptr) { - case MONO_TYPE_PINNED: - pinned = TRUE; - ++ptr; - break; - case MONO_TYPE_BYREF: - byref = TRUE; - ++ptr; - break; - case MONO_TYPE_CMOD_REQD: - case MONO_TYPE_CMOD_OPT: - mono_metadata_parse_custom_mod (m, &(type->modifiers [count]), ptr, &ptr); - count ++; - break; - default: - found = FALSE; - } + break; + default: + g_assert_not_reached (); } type->attrs = opt_attrs; type->byref = byref; - type->pinned = pinned ? 1 : 0; - - do_mono_metadata_parse_type (type, m, ptr, &ptr); + if (mode == MONO_PARSE_LOCAL) { + /* + * check for pinned flag + */ + if (*ptr == MONO_TYPE_PINNED) { + type->pinned = 1; + ++ptr; + } + } + switch (*ptr) { + case MONO_TYPE_BYREF: + if (mode == MONO_PARSE_FIELD) + g_warning ("A field type cannot be byref"); + type->byref = 1; + ptr++; + /* follow through */ + default: + /*if (*ptr == MONO_TYPE_VOID && mode != MONO_PARSE_RET) + g_error ("void not allowed in param");*/ + do_mono_metadata_parse_type (type, m, ptr, &ptr); + break; + } if (rptr) *rptr = ptr; diff --git a/mono/metadata/mono-debug.c b/mono/metadata/mono-debug.c index b977ec0546d..b8503ecbc4b 100644 --- a/mono/metadata/mono-debug.c +++ b/mono/metadata/mono-debug.c @@ -45,6 +45,8 @@ extern void (*mono_debugger_class_init_func) (MonoClass *klass); void mono_debug_init (MonoDomain *domain, MonoDebugFormat format) { + MonoAssembly **ass; + g_assert (!mono_debug_initialized); mono_debug_initialized = TRUE; @@ -344,35 +346,25 @@ gchar * mono_debug_source_location_from_address (MonoMethod *method, guint32 address, guint32 *line_number, MonoDomain *domain) { - char *res; - MonoDebugMethodInfo *minfo; + MonoDebugMethodInfo *minfo = _mono_debug_lookup_method (method); MonoDebugDomainData *domain_data; - mono_loader_lock (); - minfo = _mono_debug_lookup_method (method); - if (!minfo || !minfo->handle || !minfo->handle->symfile || - !minfo->handle->symfile->offset_table) { - mono_loader_unlock (); + if (!minfo) return NULL; - } domain_data = mono_debug_get_domain_data (minfo->handle, domain); - if (!domain_data->jit [minfo->index]) { - mono_loader_unlock (); + if (!domain_data->jit [minfo->index]) return NULL; - } - if (minfo->handle && minfo->handle->symfile) { + if (minfo->handle) { gint32 offset = il_offset_from_address (domain_data->jit [minfo->index], address); - char *res = NULL; - if (offset >= 0) - res = mono_debug_find_source_location (minfo->handle->symfile, method, offset, line_number); - mono_loader_unlock (); - return res; + if (offset < 0) + return NULL; + + return mono_debug_find_source_location (minfo->handle->symfile, method, offset, line_number); } - mono_loader_unlock (); return NULL; } @@ -389,19 +381,12 @@ mono_debug_source_location_from_address (MonoMethod *method, guint32 address, gu gchar * mono_debug_source_location_from_il_offset (MonoMethod *method, guint32 offset, guint32 *line_number) { - char *res; - MonoDebugMethodInfo *minfo; + MonoDebugMethodInfo *minfo = _mono_debug_lookup_method (method); - mono_loader_lock (); - minfo = _mono_debug_lookup_method (method); - if (!minfo || !minfo->handle || !minfo->handle->symfile) { - mono_loader_unlock (); + if (!minfo || !minfo->handle) return NULL; - } - res = mono_debug_find_source_location (minfo->handle->symfile, method, offset, line_number); - mono_loader_unlock (); - return res; + return mono_debug_find_source_location (minfo->handle->symfile, method, offset, line_number); } /* @@ -413,24 +398,17 @@ mono_debug_il_offset_from_address (MonoMethod *method, gint32 address, MonoDomai { MonoDebugMethodInfo *minfo; MonoDebugDomainData *domain_data; - gint32 res; if (address < 0) return -1; - mono_loader_lock (); minfo = _mono_debug_lookup_method (method); - if (!minfo || !minfo->il_offsets || !minfo->handle || !minfo->handle->symfile || - !minfo->handle->symfile->offset_table) { - mono_loader_unlock (); + if (!minfo || !minfo->il_offsets) return -1; - } domain_data = mono_debug_get_domain_data (minfo->handle, domain); - res = il_offset_from_address (domain_data->jit [minfo->index], address); - mono_loader_unlock (); - return res; + return il_offset_from_address (domain_data->jit [minfo->index], address); } /* @@ -442,24 +420,17 @@ mono_debug_address_from_il_offset (MonoMethod *method, gint32 il_offset, MonoDom { MonoDebugMethodInfo *minfo; MonoDebugDomainData *domain_data; - gint32 res; if (il_offset < 0) return -1; - mono_loader_lock (); minfo = _mono_debug_lookup_method (method); - if (!minfo || !minfo->il_offsets || !minfo->handle || !minfo->handle->symfile || - !minfo->handle->symfile->offset_table) { - mono_loader_unlock (); + if (!minfo || !minfo->il_offsets) return -1; - } domain_data = mono_debug_get_domain_data (minfo->handle, domain); - res = _mono_debug_address_from_il_offset (domain_data->jit [minfo->index], il_offset); - mono_loader_unlock (); - return res; + return _mono_debug_address_from_il_offset (domain_data->jit [minfo->index], il_offset); } MonoDebugDomainData * @@ -468,9 +439,6 @@ mono_debug_get_domain_data (MonoDebugHandle *handle, MonoDomain *domain) MonoDebugDomainData *data; int domain_id = mono_domain_get_id (domain); - /* We checked this earlier. */ - g_assert (handle->symfile); - for (data = handle->_priv->domain_table; data; data = data->_priv->next) if (data->domain_id == domain_id) return data; diff --git a/mono/metadata/object.c b/mono/metadata/object.c index 904bd25c868..bdf832baa6d 100644 --- a/mono/metadata/object.c +++ b/mono/metadata/object.c @@ -90,7 +90,6 @@ typedef struct { guint32 initializing_tid; guint32 waiting_count; - gboolean done; CRITICAL_SECTION initialization_section; } TypeInitializationLock; @@ -178,38 +177,28 @@ mono_runtime_class_init (MonoVTable *vtable) InitializeCriticalSection (&lock->initialization_section); lock->initializing_tid = tid; lock->waiting_count = 1; - lock->done = FALSE; /* grab the vtable lock while this thread still owns type_initialization_section */ EnterCriticalSection (&lock->initialization_section); g_hash_table_insert (type_initialization_hash, vtable, lock); do_initialization = 1; } else { gpointer blocked; - TypeInitializationLock *pending_lock; - if (lock->initializing_tid == tid || lock->done) { + if (lock->initializing_tid == tid) { LeaveCriticalSection (&type_initialization_section); return; } /* see if the thread doing the initialization is already blocked on this thread */ blocked = GUINT_TO_POINTER (lock->initializing_tid); - while ((pending_lock = (TypeInitializationLock*) g_hash_table_lookup (blocked_thread_hash, blocked))) { - if (pending_lock->initializing_tid == tid) { - if (!pending_lock->done) { - LeaveCriticalSection (&type_initialization_section); - return; - } else { - /* the thread doing the initialization is blocked on this thread, - but on a lock that has already been freed. It just hasn't got - time to awake */ - break; - } + while ((blocked = g_hash_table_lookup (blocked_thread_hash, blocked))) { + if (blocked == GUINT_TO_POINTER (tid)) { + LeaveCriticalSection (&type_initialization_section); + return; } - blocked = GUINT_TO_POINTER (pending_lock->initializing_tid); } ++lock->waiting_count; /* record the fact that we are waiting on the initializing thread */ - g_hash_table_insert (blocked_thread_hash, GUINT_TO_POINTER (tid), lock); + g_hash_table_insert (blocked_thread_hash, GUINT_TO_POINTER (tid), GUINT_TO_POINTER (lock->initializing_tid)); } LeaveCriticalSection (&type_initialization_section); @@ -217,7 +206,6 @@ mono_runtime_class_init (MonoVTable *vtable) mono_runtime_invoke (method, NULL, NULL, (MonoObject **) &exc); if (last_domain) mono_domain_set (last_domain, TRUE); - lock->done = TRUE; LeaveCriticalSection (&lock->initialization_section); } else { /* this just blocks until the initializing thread is done */ @@ -1598,9 +1586,13 @@ mono_runtime_invoke_array (MonoMethod *method, void *obj, MonoArray *params, case MONO_TYPE_R4: case MONO_TYPE_R8: case MONO_TYPE_VALUETYPE: - /* MS seems to create the objects if a null is passed in */ - if (! ((gpointer *)params->vector)[i]) - ((gpointer*)params->vector)[i] = mono_object_new (mono_domain_get (), mono_class_from_mono_type (sig->params [i])); + if (sig->params [i]->byref) { + /* MS seems to create the objects if a null is passed in */ + if (! ((gpointer *)params->vector)[i]) + ((gpointer*)params->vector)[i] = mono_object_new (mono_domain_get (), mono_class_from_mono_type (sig->params [i])); + } + else + g_assert (((gpointer*)params->vector) [i]); pa [i] = (char *)(((gpointer *)params->vector)[i]) + sizeof (MonoObject); break; case MONO_TYPE_STRING: @@ -2723,7 +2715,6 @@ mono_message_invoke (MonoObject *target, MonoMethodMessage *msg, MonoDomain *domain; MonoMethod *method; MonoMethodSignature *sig; - MonoObject *ret; int i, j, outarg_count = 0; if (target && target->vtable->klass == mono_defaults.transparent_proxy_class) { @@ -2748,8 +2739,6 @@ mono_message_invoke (MonoObject *target, MonoMethodMessage *msg, *out_args = mono_array_new (domain, mono_defaults.object_class, outarg_count); *exc = NULL; - ret = mono_runtime_invoke_array (method, method->klass->valuetype? mono_object_unbox (target): target, msg->args, exc); - for (i = 0, j = 0; i < sig->param_count; i++) { if (sig->params [i]->byref) { gpointer arg; @@ -2759,7 +2748,7 @@ mono_message_invoke (MonoObject *target, MonoMethodMessage *msg, } } - return ret; + return mono_runtime_invoke_array (method, method->klass->valuetype? mono_object_unbox (target): target, msg->args, exc); } void diff --git a/mono/metadata/object.h b/mono/metadata/object.h index 2413cc7a346..c1ffc3c4c2d 100644 --- a/mono/metadata/object.h +++ b/mono/metadata/object.h @@ -252,11 +252,5 @@ mono_property_set_value (MonoProperty *prop, void *obj, void **params, MonoObjec MonoObject* mono_property_get_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc); -/* GC handles support */ -guint32 mono_gchandle_new (MonoObject *obj, gboolean pinned); -guint32 mono_gchandle_new_weakref (MonoObject *obj, gboolean track_resurrection); -MonoObject* mono_gchandle_get_target (guint32 gchandle); -void mono_gchandle_free (guint32 gchandle); - #endif diff --git a/mono/metadata/process.c b/mono/metadata/process.c index 5fa57bcf0ed..5e7cce9de7b 100644 --- a/mono/metadata/process.c +++ b/mono/metadata/process.c @@ -738,7 +738,7 @@ complete_path (const gunichar2 *appname, gunichar2 **completed) return FALSE; } - if (g_file_test (utf8app, G_FILE_TEST_IS_EXECUTABLE) && !g_file_test (utf8app, G_FILE_TEST_IS_DIR)) { + if (g_file_test (utf8app, G_FILE_TEST_IS_EXECUTABLE)) { g_free (utf8app); return FALSE; } @@ -875,9 +875,7 @@ MonoBoolean ves_icall_System_Diagnostics_Process_Start_internal (MonoString *app if(ret) { process_info->process_handle=procinfo.hProcess; - /*process_info->thread_handle=procinfo.hThread;*/ - process_info->thread_handle=NULL; - CloseHandle(procinfo.hThread); + process_info->thread_handle=procinfo.hThread; process_info->pid=procinfo.dwProcessId; process_info->tid=procinfo.dwThreadId; } else { diff --git a/mono/metadata/reflection.c b/mono/metadata/reflection.c index 9a1555d27a7..9640136c0eb 100644 --- a/mono/metadata/reflection.c +++ b/mono/metadata/reflection.c @@ -61,9 +61,6 @@ typedef struct { MonoMethod *mhandle; guint32 nrefs; gpointer *refs; - /* for PInvoke */ - int charset, lasterr, native_cc; - MonoString *dll, *dllentry; } ReflectionMethodBuilder; const unsigned char table_sizes [64] = { @@ -890,8 +887,6 @@ method_encode_code (MonoDynamicImage *assembly, ReflectionMethodBuilder *mb) max_stack = 8; /* we probably need to run a verifier on the code... */ } - stream_data_align (&assembly->code); - /* check for exceptions, maxstack, locals */ maybe_small = (max_stack <= 8) && (!num_locals) && (!num_exception); if (maybe_small) { @@ -1265,14 +1260,6 @@ reflection_methodbuilder_from_method_builder (ReflectionMethodBuilder *rmb, rmb->mhandle = mb->mhandle; rmb->nrefs = 0; rmb->refs = NULL; - - if (mb->dll) { - rmb->charset = rmb->charset & 0xf; - rmb->lasterr = rmb->charset & 0x40; - rmb->native_cc = rmb->native_cc; - rmb->dllentry = mb->dllentry; - rmb->dll = mb->dll; - } } static void @@ -2729,8 +2716,7 @@ mono_image_get_type_info (MonoDomain *domain, MonoReflectionTypeBuilder *tb, Mon * if we have explicitlayout or sequentiallayouts, output data in the * ClassLayout table. */ - if (((tb->attrs & TYPE_ATTRIBUTE_LAYOUT_MASK) != TYPE_ATTRIBUTE_AUTO_LAYOUT) && - ((tb->class_size > 0) || (tb->packing_size > 0))) { + if (((tb->attrs & TYPE_ATTRIBUTE_LAYOUT_MASK) != TYPE_ATTRIBUTE_AUTO_LAYOUT) && (tb->class_size != -1)) { table = &assembly->tables [MONO_TABLE_CLASSLAYOUT]; table->rows++; alloc_table (table, table->rows); @@ -5270,21 +5256,12 @@ MonoArray* mono_param_get_objects (MonoDomain *domain, MonoMethod *method) { static MonoClass *System_Reflection_ParameterInfo; - static MonoClassField *dbnull_value_field; - MonoClass *klass; MonoArray *res = NULL; MonoReflectionMethod *member = NULL; MonoReflectionParameter *param = NULL; char **names; int i; - if (!dbnull_value_field) { - klass = mono_class_from_name (mono_defaults.corlib, "System", "DBNull"); - mono_class_init (klass); - dbnull_value_field = mono_class_get_field_from_name (klass, "Value"); - g_assert (dbnull_value_field); - } - if (!System_Reflection_ParameterInfo) System_Reflection_ParameterInfo = mono_class_from_name ( mono_defaults.corlib, "System.Reflection", "ParameterInfo"); @@ -5306,7 +5283,7 @@ mono_param_get_objects (MonoDomain *domain, MonoMethod *method) param = (MonoReflectionParameter *)mono_object_new (domain, System_Reflection_ParameterInfo); param->ClassImpl = mono_type_get_object (domain, method->signature->params [i]); - param->DefaultValueImpl = mono_field_get_value_object (domain, dbnull_value_field, NULL); /* FIXME */ + param->DefaultValueImpl = NULL; /* FIXME */ param->MemberImpl = (MonoObject*)member; param->NameImpl = mono_string_new (domain, names [i]); param->PositionImpl = i; @@ -5891,7 +5868,6 @@ handle_type: } break; case MONO_TYPE_CLASS: - case MONO_TYPE_OBJECT: case MONO_TYPE_STRING: for (i = 0; i < alen; i++) { MonoObject *item = load_cattr_value (image, &t->data.klass->byval_arg, p, &p); @@ -7029,17 +7005,6 @@ reflection_methodbuilder_to_mono_method (MonoClass *klass, } else if (m->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) { /* TODO */ m->signature->pinvoke = 1; - - method_aux = g_new0 (MonoReflectionMethodAux, 1); - - method_aux->dllentry = g_strdup (mono_string_to_utf8 (rmb->dllentry)); - method_aux->dll = g_strdup (mono_string_to_utf8 (rmb->dll)); - - ((MonoMethodPInvoke*)m)->piflags = (rmb->native_cc << 8) | (rmb->charset ? (rmb->charset - 1) * 2 : 1) | rmb->lasterr; - - if (klass->image->dynamic) - mono_g_hash_table_insert (((MonoDynamicImage*)klass->image)->method_aux_hash, m, method_aux); - return m; } else if (!m->klass->dummy && !(m->flags & METHOD_ATTRIBUTE_ABSTRACT) && @@ -7853,7 +7818,6 @@ mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb) { MonoClass *klass; MonoReflectionType* res; - int i; MONO_ARCH_SAVE_REGS; @@ -7864,6 +7828,7 @@ mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb) /* * Fields to set in klass: * the various flags: delegate/unicode/contextbound etc. + * nested_classes */ klass->flags = tb->attrs; @@ -7875,13 +7840,6 @@ mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb) if (!klass->enumtype) ensure_runtime_vtable (klass); - if (tb->subtypes) { - for (i = 0; i < mono_array_length (tb->subtypes); ++i) { - MonoReflectionTypeBuilder *subtb = mono_array_get (tb->subtypes, MonoReflectionTypeBuilder*, i); - klass->nested_classes = g_list_prepend (klass->nested_classes, my_mono_class_from_mono_type (subtb->type.type)); - } - } - /* fields and object layout */ if (klass->parent) { if (!klass->parent->size_inited) diff --git a/mono/metadata/reflection.h b/mono/metadata/reflection.h index f365047c3b6..e44243f3d66 100644 --- a/mono/metadata/reflection.h +++ b/mono/metadata/reflection.h @@ -34,7 +34,6 @@ typedef struct { char **param_names; MonoMarshalSpec **param_marshall; MonoCustomAttrInfo **param_cattr; - char *dllentry, *dll; } MonoReflectionMethodAux; int mono_reflection_parse_type (char *name, MonoTypeNameParse *info); diff --git a/mono/metadata/socket-io.c b/mono/metadata/socket-io.c index 1ef49278ea9..c2b129984e7 100644 --- a/mono/metadata/socket-io.c +++ b/mono/metadata/socket-io.c @@ -330,11 +330,6 @@ static gint32 convert_sockopt_level_and_name(MonoSocketOptionLevel mono_level, case SocketOptionName_Type: *system_name = SO_TYPE; break; -#ifdef SO_PEERCRED - case SocketOptionName_PeerCred: - *system_name = SO_PEERCRED; - break; -#endif case SocketOptionName_ExclusiveAddressUse: case SocketOptionName_UseLoopback: case SocketOptionName_MaxConnections: @@ -1160,15 +1155,7 @@ gint32 ves_icall_System_Net_Sockets_Socket_RecvFrom_internal(SOCKET sock, MonoAr return(0); } - /* If we didn't get a socket size, then we're probably a - * connected connection-oriented socket and the stack hasn't - * returned the remote address. All we can do is return null. - */ - if ( sa_size != 0 ) - *sockaddr=create_object_from_sockaddr(sa, sa_size, error); - else - *sockaddr=NULL; - + *sockaddr=create_object_from_sockaddr(sa, sa_size, error); g_free(sa); return(ret); @@ -1441,10 +1428,6 @@ void ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal(SOCKET soc int lingersize=sizeof(linger); struct timeval tv; int tvsize=sizeof(tv); -#ifdef SO_PEERCRED - struct ucred cred; - int credsize = sizeof(cred); -#endif MonoDomain *domain=mono_domain_get(); MonoObject *obj; MonoClass *obj_class; @@ -1478,13 +1461,6 @@ void ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal(SOCKET soc &tvsize); break; -#ifdef SO_PEERCRED - case SocketOptionName_PeerCred: - ret = _wapi_getsockopt (sock, system_level, system_name, &cred, - &credsize); - break; -#endif - default: ret = _wapi_getsockopt (sock, system_level, system_name, &val, &valsize); @@ -1524,32 +1500,6 @@ void ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal(SOCKET soc obj = int_to_object (domain, (tv.tv_sec * 1000) + (tv.tv_usec / 1000)); break; -#ifdef SO_PEERCRED - case SocketOptionName_PeerCred: - { - /* build a Mono.Posix.PeerCred+PeerCredData if - * possible - */ - MonoImage *mono_posix_image = mono_image_loaded ("Mono.Posix"); - MonoPeerCredData *cred_data; - - if (mono_posix_image == NULL) { - *error = WSAENOPROTOOPT; - return; - } - - obj_class = mono_class_from_name(mono_posix_image, - "Mono.Posix", - "PeerCred/PeerCredData"); - obj = mono_object_new(domain, obj_class); - cred_data = (MonoPeerCredData *)obj; - cred_data->pid = cred.pid; - cred_data->uid = cred.uid; - cred_data->gid = cred.gid; - break; - } -#endif - default: obj = int_to_object (domain, val); } diff --git a/mono/metadata/socket-io.h b/mono/metadata/socket-io.h index 5c2ee72181a..3540882f105 100644 --- a/mono/metadata/socket-io.h +++ b/mono/metadata/socket-io.h @@ -130,12 +130,7 @@ typedef enum { SocketOptionName_BsdUrgent=2, SocketOptionName_Expedited=2, SocketOptionName_NoChecksum=1, - SocketOptionName_ChecksumCoverage=20, - - /* This is Mono-specific, keep it in sync with - * Mono.Posix/PeerCred.cs - */ - SocketOptionName_PeerCred=10001 + SocketOptionName_ChecksumCoverage=20 } MonoSocketOptionName; typedef struct _MonoSocketAsyncResult { @@ -159,14 +154,6 @@ typedef struct _MonoSocketAsyncResult { gint error; } MonoSocketAsyncResult; -typedef struct -{ - MonoObject obj; - gint pid; - gint uid; - gint gid; -} MonoPeerCredData; - extern gpointer ves_icall_System_Net_Sockets_Socket_Socket_internal(MonoObject *this, gint32 family, gint32 type, gint32 proto, gint32 *error); extern void ves_icall_System_Net_Sockets_Socket_Close_internal(SOCKET sock, gint32 *error); extern gint32 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal(void); diff --git a/mono/metadata/threadpool.c b/mono/metadata/threadpool.c index 9d5768df224..e14470c0e5d 100644 --- a/mono/metadata/threadpool.c +++ b/mono/metadata/threadpool.c @@ -31,7 +31,7 @@ #include "threadpool.h" /* maximum number of worker threads */ -int mono_max_worker_threads = 25; /* per available CPU? */ +int mono_max_worker_threads = 25; /* fixme: should be 25 per available CPU */ static int mono_min_worker_threads = 0; /* current number of worker threads */ @@ -43,8 +43,6 @@ static int busy_worker_threads = 0; /* we use this to store a reference to the AsyncResult to avoid GC */ static MonoGHashTable *ares_htable = NULL; -static CRITICAL_SECTION ares_lock; - /* we append a job */ static HANDLE job_added; @@ -93,12 +91,9 @@ mono_async_invoke (MonoAsyncResult *ares) } mono_monitor_exit ((MonoObject *) ares); - EnterCriticalSection (&ares_lock); mono_g_hash_table_remove (ares_htable, ares); - LeaveCriticalSection (&ares_lock); } - MonoAsyncResult * mono_thread_pool_add (MonoObject *target, MonoMethodMessage *msg, MonoDelegate *async_callback, MonoObject *state) @@ -127,14 +122,11 @@ mono_thread_pool_add (MonoObject *target, MonoMethodMessage *msg, MonoDelegate * ares->async_delegate = target; if (!ares_htable) { - InitializeCriticalSection (&ares_lock); ares_htable = mono_g_hash_table_new (NULL, NULL); job_added = CreateSemaphore (NULL, 0, 0x7fffffff, NULL); } - EnterCriticalSection (&ares_lock); mono_g_hash_table_insert (ares_htable, ares, ares); - LeaveCriticalSection (&ares_lock); busy = (int) InterlockedCompareExchange (&busy_worker_threads, 0, -1); worker = (int) InterlockedCompareExchange (&mono_worker_threads, 0, -1); @@ -211,19 +203,8 @@ mono_thread_pool_cleanup (void) static void append_job (MonoAsyncResult *ar) { - GList *tmp; - EnterCriticalSection (&mono_delegate_section); - if (async_call_queue == NULL) { - async_call_queue = g_list_append (async_call_queue, ar); - } else { - for (tmp = async_call_queue; tmp && tmp->data != NULL; tmp = tmp->next); - if (tmp == NULL) { - async_call_queue = g_list_append (async_call_queue, ar); - } else { - tmp->data = ar; - } - } + async_call_queue = g_list_append (async_call_queue, ar); LeaveCriticalSection (&mono_delegate_section); } @@ -231,23 +212,17 @@ static MonoAsyncResult * dequeue_job (void) { MonoAsyncResult *ar = NULL; - GList *tmp, *tmp2; + GList *tmp = NULL; EnterCriticalSection (&mono_delegate_section); - tmp = async_call_queue; - if (tmp) { - ar = (MonoAsyncResult *) tmp->data; - tmp->data = NULL; - tmp2 = tmp; - for (tmp2 = tmp; tmp2->next != NULL; tmp2 = tmp2->next); - if (tmp2 != tmp) { - async_call_queue = tmp->next; - tmp->next = NULL; - tmp2->next = tmp; - tmp->prev = tmp2; - } + if (async_call_queue) { + ar = (MonoAsyncResult *)async_call_queue->data; + tmp = async_call_queue; + async_call_queue = g_list_remove_link (tmp, tmp); } LeaveCriticalSection (&mono_delegate_section); + if (tmp) + g_list_free_1 (tmp); return ar; } @@ -293,7 +268,7 @@ async_invoke_thread (gpointer data) } while (!data && timeout > 0); } - + if (!data) { workers = (int) InterlockedCompareExchange (&mono_worker_threads, 0, -1); min = (int) InterlockedCompareExchange (&mono_min_worker_threads, 0, -1); diff --git a/mono/metadata/threads.c b/mono/metadata/threads.c index 2159aad9ac4..7a43ab5ff8a 100644 --- a/mono/metadata/threads.c +++ b/mono/metadata/threads.c @@ -243,9 +243,12 @@ static guint32 start_wrapper(void *data) mono_thread_push_appdomain_ref (mono_domain_get ()); thread_adjust_static_data (thread); +#ifndef PLATFORM_WIN32 #ifdef DEBUG g_message (G_GNUC_PRETTY_FUNCTION "start_wrapper for %d\n", thread->tid); #endif + pthread_cleanup_push ((void (*) (void *)) mono_thread_detach, thread); +#endif start_func (this); #ifdef PLATFORM_WIN32 @@ -270,6 +273,8 @@ static guint32 start_wrapper(void *data) TlsSetValue (current_object_key, NULL); thread_cleanup (thread); +#else + pthread_cleanup_pop (1); #endif return(0); @@ -1515,14 +1520,10 @@ abort_appdomain_thread (gpointer key, gpointer value, gpointer user_data) if (mono_thread_has_appdomain_ref (thread, domain)) { /* printf ("ABORTING THREAD %p BECAUSE IT REFERENCES DOMAIN %s.\n", thread, domain->friendly_name); */ - HANDLE handle = OpenThread (THREAD_ALL_ACCESS, TRUE, thread->tid); - if (handle == NULL) - return; - ves_icall_System_Threading_Thread_Abort (thread, NULL); if(data->wait.num<MAXIMUM_WAIT_OBJECTS) { - data->wait.handles [data->wait.num] = handle; + data->wait.handles [data->wait.num] = thread->handle; data->wait.threads [data->wait.num] = thread; data->wait.num++; } else { diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index fa98499d11d..b7210c3fe9c 100644 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,90 +1,4 @@ -2004-10-15 Geoff Norton <gnorton@customerdna.com> - * mini-ppc.c (calculate_sizes): Marshal valuetypes for pinvoke - methods as their native size, fixed bug #57543, #57545. - * mini-ppc.c (mono_arch_output_basic_block): Use mulli for imm16 types - This saves a temporary register and mullw call down into 1 (minor perf - increase for cases like sum = sum * 5; This use to translate into: - li r11,5 - mullw r28,r28,r11 - It now translates to - mulli r28,r28,5 - -2004-10-15 Zoltan Varga <vargaz@freemail.hu> - - * trace.c (mono_trace_eval): Use mono_method_desc_full_match. Fixes - #68388. - -2004-09-17 Zoltan Varga <vargaz@freemail.hu> - - * mini.c (mono_method_to_ir): Fix LDSTR in dynamic methods. Fixes #66132. - -2004-09-11 Ben Maurer <bmaurer@users.sourceforge.net> - - * inssel.brg: make ldelema check aot friendly. - -Thu Sep 9 20:57:53 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * mini-*.c, mini-ops.h, inssel-long32.brg: introduced - OP_ADDCC_IMM and OP_SUBCC_IMM (add/sub immediate that will - set the carry/borrow flag). The sparc and s390 implementations - can now use optimized versions (and simplify the code). ppc bugfixes. - -2004-09-02 Zoltan Varga <vargaz@freemail.hu> - - * inssel-long32.brg: Fix OP_LCONV_TO_OVF_I1 rule. Fixes #64578. - -2004-08-23 Zoltan Varga <vargaz@freemail.hu> - - * inssel-x86.brg inssel-amd64: Add yet another missing tree->dreg assignment. - - * mini-x86.c (mono_arch_local_regalloc): Fix bug in long register - allocation. Fixes #63085. - -2004-08-09 Zoltan Varga <vargaz@freemail.hu> - - * inssel-x86.brg: Set dreg of LOCALLOC correctly. - -Tue Aug 3 11:20:09 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * mini-ppc.c: mul.ovf.un exception name fix. - -Tue Aug 3 11:19:07 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * mini-ppc.c: reg allocator fix. - -Tue Aug 3 11:17:07 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * mini-ppc.c: make sure temp regs are not used for global reg - allocation. - -Tue Jul 27 16:05:19 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * mini-ppc.c, mini-sparc.c, mini-s390.c: keep track of line - numbers in the debug info (spotted by Geoff Norton, - <gnorton@customerdna.com>). - -Mon Jul 12 17:47:00 CEST 2004 Paolo Molaro <lupus@ximian.com> - - * inssel-ppc.brg: arguments on the stack are always - relative to the stack pointer (spotted by Neale Ferguson). - -2004-07-11 Gonzalo Paniagua Javier <gonzalo@ximian.com> - - * exceptions-x86.c: delay appending the method name to the trace until - after mono_jit_info_table_find is called, as this gets the real - MonoMethod. - -2004-07-08 Zoltan Varga <vargaz@freemail.hu> - - * mini.c (handle_stack_args): Handle some corner cases. Fixes - 58863. - -2004-07-05 Zoltan Varga <vargaz@freemail.hu> - - * mini.c (optimize_branches): Fix linking of bblocks in branch->branch - optimization. - Mon Jun 28 18:05:09 CEST 2004 Paolo Molaro <lupus@ximian.com> * mini.c: reinstated mono_compile_get_interface_var() diff --git a/mono/mini/basic-long.cs b/mono/mini/basic-long.cs index 4b321017ce7..f16f9f5dcb1 100644 --- a/mono/mini/basic-long.cs +++ b/mono/mini/basic-long.cs @@ -263,12 +263,6 @@ class Tests { return 1; } - static int test_4_addcc_imm () { - long a = 3; - long b = 0; - return (int)(a - b + 1); - } - static int test_5_sub () { long a = 8; long b = 3; diff --git a/mono/mini/cpu-g4.md b/mono/mini/cpu-g4.md index 638fb2828bc..7d76db87792 100644 --- a/mono/mini/cpu-g4.md +++ b/mono/mini/cpu-g4.md @@ -545,8 +545,6 @@ adc: dest:i src1:i src2:i len:4 addcc: dest:i src1:i src2:i len:4 subcc: dest:i src1:i src2:i len:4 adc_imm: dest:i src1:i len:12 -addcc_imm: dest:i src1:i len:12 -subcc_imm: dest:i src1:i len:12 sbb: dest:i src1:i src2:i len:4 sbb_imm: dest:i src1:i len:12 br_reg: src1:i len:8 diff --git a/mono/mini/cpu-pentium.md b/mono/mini/cpu-pentium.md index e48ba96540e..2568eac81f6 100644 --- a/mono/mini/cpu-pentium.md +++ b/mono/mini/cpu-pentium.md @@ -354,9 +354,7 @@ loadr8_membase: dest:f src1:b len:6 loadr8_spill_membase: src1:b len:8 loadu4_mem: dest:i len:9 move: dest:i src1:i len:2 -addcc_imm: dest:i src1:i len:6 clob:1 add_imm: dest:i src1:i len:6 clob:1 -subcc_imm: dest:i src1:i len:6 clob:1 sub_imm: dest:i src1:i len:6 clob:1 mul_imm: dest:i src1:i len:6 # there is no actual support for division or reminder by immediate diff --git a/mono/mini/cpu-s390.md b/mono/mini/cpu-s390.md index 3cc63d770d1..256bf4aa609 100644 --- a/mono/mini/cpu-s390.md +++ b/mono/mini/cpu-s390.md @@ -349,9 +349,7 @@ loadu4_mem: dest:i len:8 move: dest:i src1:i len:4 fmove: dest:f src1:f len:4 add_imm: dest:i src1:i len:18 -addcc_imm: dest:i src1:i len:18 sub_imm: dest:i src1:i len:18 -subcc_imm: dest:i src1:i len:18 mul_imm: dest:i src1:i len:18 # there is no actual support for division or reminder by immediate # we simulate them, though (but we need to change the burg rules diff --git a/mono/mini/cpu-sparc.md b/mono/mini/cpu-sparc.md index 6fef70d713d..8f9280a222b 100644 --- a/mono/mini/cpu-sparc.md +++ b/mono/mini/cpu-sparc.md @@ -356,9 +356,7 @@ loadr8_membase: dest:f src1:b len:20 loadu4_mem: dest:i len:8 move: dest:i src1:i len:4 add_imm: dest:i src1:i len:12 -addcc_imm: dest:i src1:i len:64 sub_imm: dest:i src1:i len:12 -subcc_imm: dest:i src1:i len:64 mul_imm: dest:i src1:i len:12 div_imm: dest:a src1:i src2:i len:28 div_un_imm: dest:a src1:i src2:i len:12 diff --git a/mono/mini/exceptions-x86.c b/mono/mini/exceptions-x86.c index c0961c485d2..b0783ae39b1 100644 --- a/mono/mini/exceptions-x86.c +++ b/mono/mini/exceptions-x86.c @@ -462,6 +462,9 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf if (!(*lmf)->method) return (gpointer)-1; + if (trace) + *trace = g_strdup_printf ("in (unmanaged) %s", mono_method_full_name ((*lmf)->method, TRUE)); + if ((ji = mono_jit_info_table_find (domain, (gpointer)(*lmf)->eip))) { *res = *ji; } else { @@ -469,9 +472,6 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf res->method = (*lmf)->method; } - if (trace) - *trace = g_strdup_printf ("in (unmanaged) %s", mono_method_full_name (res->method, TRUE)); - new_ctx->SC_ESI = (*lmf)->esi; new_ctx->SC_EDI = (*lmf)->edi; new_ctx->SC_EBX = (*lmf)->ebx; diff --git a/mono/mini/inssel-long32.brg b/mono/mini/inssel-long32.brg index 2ebeb3c27b7..0d1cf077f2d 100644 --- a/mono/mini/inssel-long32.brg +++ b/mono/mini/inssel-long32.brg @@ -108,7 +108,7 @@ lreg: OP_LADD_OVF_UN (lreg, lreg) { } lreg: OP_LADD (lreg, i8con) { - MONO_EMIT_NEW_BIALU_IMM (s, OP_ADDCC_IMM, state->reg1, state->left->reg1, state->right->tree->inst_ls_word); + MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, state->reg1, state->left->reg1, state->right->tree->inst_ls_word); MONO_EMIT_BIALU_IMM (s, tree, OP_ADC_IMM, state->reg2, state->left->reg2, state->right->tree->inst_ms_word); } @@ -118,7 +118,7 @@ lreg: OP_LSUB (lreg, lreg) { } lreg: OP_LSUB (lreg, i8con) { - MONO_EMIT_NEW_BIALU_IMM (s, OP_SUBCC_IMM, state->reg1, state->left->reg1, state->right->tree->inst_ls_word); + MONO_EMIT_NEW_BIALU_IMM (s, OP_SUB_IMM, state->reg1, state->left->reg1, state->right->tree->inst_ls_word); MONO_EMIT_BIALU_IMM (s, tree, OP_SBB_IMM, state->reg2, state->left->reg2, state->right->tree->inst_ms_word); } @@ -575,30 +575,15 @@ reg: OP_LCONV_TO_OVF_I1_UN (lreg) { } reg: OP_LCONV_TO_OVF_I1 (lreg) { - MonoInst *is_negative, *end_label; - - MONO_NEW_LABEL (s, is_negative); - MONO_NEW_LABEL (s, end_label); - MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, 0); MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException"); MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, -1); MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException"); - MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, 0); - MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BLT, is_negative); - - /* Positive */ MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, 127); - MONO_EMIT_NEW_COND_EXC (s, GT_UN, "OverflowException"); - MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BR, end_label); - - /* Negative */ - mono_bblock_add_inst (s->cbb, is_negative); + MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException"); MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, -128); - MONO_EMIT_NEW_COND_EXC (s, LT_UN, "OverflowException"); - mono_bblock_add_inst (s->cbb, end_label); - + MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException"); MONO_EMIT_UNALU (s, tree, CEE_CONV_I1, state->reg1, state->left->reg1); } diff --git a/mono/mini/inssel-ppc.brg b/mono/mini/inssel-ppc.brg index 38eced8c0dc..a4043e1d797 100644 --- a/mono/mini/inssel-ppc.brg +++ b/mono/mini/inssel-ppc.brg @@ -131,7 +131,7 @@ stmt: OP_SETRET (OP_ICONST) { stmt: OP_OUTARG (reg) { if (tree->inst_imm) { - MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, ppc_r1, tree->inst_imm, state->left->reg1); + MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, s->frame_reg, tree->inst_imm, state->left->reg1); return; } tree->opcode = OP_SETREG; @@ -142,7 +142,7 @@ stmt: OP_OUTARG (reg) { stmt: OP_OUTARG (OP_REGVAR) { if (tree->inst_imm) { - MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, ppc_r1, tree->inst_imm, state->left->tree->dreg); + MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, s->frame_reg, tree->inst_imm, state->left->tree->dreg); return; } tree->opcode = OP_SETREG; @@ -153,8 +153,8 @@ stmt: OP_OUTARG (OP_REGVAR) { stmt: OP_OUTARG (lreg) { if (tree->inst_imm) { - MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, ppc_r1, tree->inst_imm, state->left->reg2); - MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, ppc_r1, tree->inst_imm + 4, state->left->reg1); + MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, s->frame_reg, tree->inst_imm, state->left->reg2); + MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, s->frame_reg, tree->inst_imm + 4, state->left->reg1); return; } MONO_EMIT_NEW_UNALU (s, OP_SETREG, tree->unused, state->left->reg2); @@ -166,7 +166,7 @@ stmt: OP_OUTARG (lreg) { stmt: OP_OUTARG (OP_ICONST) { if (tree->inst_imm) { - MONO_EMIT_NEW_STORE_MEMBASE_IMM (s, OP_STORE_MEMBASE_IMM, ppc_r1, tree->inst_imm, state->left->tree->inst_c0); + MONO_EMIT_NEW_STORE_MEMBASE_IMM (s, OP_STORE_MEMBASE_IMM, s->frame_reg, tree->inst_imm, state->left->tree->inst_c0); return; } tree->opcode = OP_SETREGIMM; @@ -205,7 +205,7 @@ stmt: OP_OUTARG (OP_ICONST) { stmt: OP_OUTARG (CEE_LDIND_REF (OP_REGVAR)) { if (tree->inst_imm) { - MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, ppc_r1, tree->inst_imm, state->left->left->tree->dreg); + MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, s->frame_reg, tree->inst_imm, state->left->left->tree->dreg); return; } tree->opcode = OP_SETREG; @@ -223,7 +223,7 @@ stmt: OP_OUTARG (CEE_LDIND_REF (OP_REGVAR)) { stmt: OP_OUTARG (freg) { if (tree->inst_imm) { int opcode = (tree->unused & 0xff00) == 0x0400? OP_STORER4_MEMBASE_REG: OP_STORER8_MEMBASE_REG; - MONO_EMIT_NEW_STORE_MEMBASE (s, opcode, ppc_r1, tree->inst_imm, state->left->reg1); + MONO_EMIT_NEW_STORE_MEMBASE (s, opcode, s->frame_reg, tree->inst_imm, state->left->reg1); return; } tree->opcode = OP_SETFREG; @@ -234,7 +234,7 @@ stmt: OP_OUTARG (freg) { stmt: OP_OUTARG_R4 (freg) { if (tree->inst_imm) { - MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORER4_MEMBASE_REG, ppc_r1, tree->inst_imm, state->left->reg1); + MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORER4_MEMBASE_REG, s->frame_reg, tree->inst_imm, state->left->reg1); return; } tree->opcode = OP_SETFREG; @@ -245,7 +245,7 @@ stmt: OP_OUTARG_R4 (freg) { stmt: OP_OUTARG_R8 (freg) { if (tree->inst_imm) { - MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORER8_MEMBASE_REG, ppc_r1, tree->inst_imm, state->left->reg1); + MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORER8_MEMBASE_REG, s->frame_reg, tree->inst_imm, state->left->reg1); return; } tree->opcode = OP_SETFREG; @@ -269,7 +269,7 @@ stmt: OP_OUTARG_VT (CEE_LDOBJ (base)) { } //g_print ("vt size: %d at R%d + %d\n", tree->inst_imm, vt->inst_basereg, vt->inst_offset); if (ovf_size != 0) { - mini_emit_memcpy (s, ppc_r1, tree->inst_imm + (soffset - vt->inst_offset), vt->inst_basereg, soffset, ovf_size * sizeof (gpointer), 0); + mini_emit_memcpy (s, s->frame_reg, tree->inst_imm + (soffset - vt->inst_offset), vt->inst_basereg, soffset, ovf_size * sizeof (gpointer), 0); } } diff --git a/mono/mini/inssel-x86.brg b/mono/mini/inssel-x86.brg index b80affe25ab..b1f1cf67c77 100644 --- a/mono/mini/inssel-x86.brg +++ b/mono/mini/inssel-x86.brg @@ -151,7 +151,6 @@ reg: OP_LOCALLOC (OP_ICONST) { if (tree->flags & MONO_INST_INIT) { /* microcoded in mini-x86.c */ tree->sreg1 = mono_regstate_next_int (s->rs); - tree->dreg = state->reg1; MONO_EMIT_NEW_ICONST (s, tree->sreg1, state->left->tree->inst_c0); mono_bblock_add_inst (s->cbb, tree); } else { @@ -162,7 +161,6 @@ reg: OP_LOCALLOC (OP_ICONST) { reg: OP_LOCALLOC (reg) { tree->sreg1 = state->left->tree->dreg; - tree->dreg = state->reg1; mono_bblock_add_inst (s->cbb, tree); } diff --git a/mono/mini/inssel.brg b/mono/mini/inssel.brg index 0cb8129cca0..e0bc1f0254b 100644 --- a/mono/mini/inssel.brg +++ b/mono/mini/inssel.brg @@ -1736,14 +1736,7 @@ reg: OP_CHECK_ARRAY_TYPE (reg) { vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass)); MONO_EMIT_NEW_LOAD_MEMBASE_OP (s, OP_LOAD_MEMBASE, elclass_reg, class_reg, G_STRUCT_OFFSET (MonoClass, element_class)); - if (mono_compile_aot) { - int klass_reg = mono_regstate_next_int (s->rs); - MONO_EMIT_NEW_CLASSCONST (s, klass_reg, tree->klass); - MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, elclass_reg, klass_reg); - } else { - MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, elclass_reg, tree->klass); - } - + MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, elclass_reg, tree->klass); MONO_EMIT_NEW_COND_EXC (s, NE_UN, "ArrayTypeMismatchException"); MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1); } diff --git a/mono/mini/mini-ops.h b/mono/mini/mini-ops.h index 98da133d3fa..32b6eb5f35e 100644 --- a/mono/mini/mini-ops.h +++ b/mono/mini/mini-ops.h @@ -297,9 +297,7 @@ MINI_OP(OP_ADC_IMM, "adc_imm") MINI_OP(OP_SBB, "sbb") MINI_OP(OP_SBB_IMM, "sbb_imm") MINI_OP(OP_ADDCC, "addcc") -MINI_OP(OP_ADDCC_IMM, "addcc_imm") MINI_OP(OP_SUBCC, "subcc") -MINI_OP(OP_SUBCC_IMM, "subcc_imm") MINI_OP(OP_BR_REG, "br_reg") MINI_OP(OP_SEXT_I1, "sext_i1") MINI_OP(OP_SEXT_I2, "sext_i2") diff --git a/mono/mini/mini-ppc.c b/mono/mini/mini-ppc.c index 967c253c648..a62d49bd453 100644 --- a/mono/mini/mini-ppc.c +++ b/mono/mini/mini-ppc.c @@ -209,7 +209,7 @@ mono_arch_get_global_int_regs (MonoCompile *cfg) if (cfg->frame_reg != ppc_sp) top = 31; #if USE_EXTRA_TEMPS - top = 29; + top -= 2; #endif for (i = 13; i < top; ++i) regs = g_list_prepend (regs, GUINT_TO_POINTER (i)); @@ -400,12 +400,9 @@ calculate_sizes (MonoMethodSignature *sig, gboolean is_pinvoke) simpletype = sig->params [i]->data.klass->enum_basetype->type; goto enum_calc_size; } - if (is_pinvoke) - size = mono_class_native_size (sig->params [i]->data.klass, NULL); - else - size = mono_class_value_size (sig->params [i]->data.klass, NULL); + size = mono_class_value_size (sig->params [i]->data.klass, NULL); DEBUG(printf ("load %d bytes struct\n", - mono_class_native_size (sig->params [i]->data.klass, NULL))); + mono_class_value_size (sig->params [i]->data.klass, NULL))); #if PPC_PASS_STRUCTS_BY_VALUE { int nwords = (size + sizeof (gpointer) -1 ) / sizeof (gpointer); @@ -1299,11 +1296,7 @@ mono_spillvar_offset_float (MonoCompile *cfg, int spillvar) #undef DEBUG #define DEBUG(a) if (cfg->verbose_level > 1) a //#define DEBUG(a) -/* use ppc_r3-ppc_10,ppc_r12 as temp registers, f1-f13 for FP registers */ -#define PPC_CALLER_REGS ((0xff<<3) | (1<<12) | USE_EXTRA_TEMPS) -#define PPC_CALLER_FREGS (0x3ffe) - -#define reg_is_freeable(r) (PPC_CALLER_REGS & 1 << (r)) +#define reg_is_freeable(r) ((r) >= 3 && (r) <= 10) #define freg_is_freeable(r) ((r) >= 1 && (r) <= 13) typedef struct { @@ -1638,6 +1631,10 @@ alloc_int_reg (MonoCompile *cfg, InstList *curinst, MonoInst *ins, int sym_reg, return val; } +/* use ppc_r3-ppc_10,ppc_r12 as temp registers, f1-f13 for FP registers */ +#define PPC_CALLER_REGS ((0xff<<3) | (1<<12) | USE_EXTRA_TEMPS) +#define PPC_CALLER_FREGS (0x3ffe) + /* * Local register allocation. * We first scan the list of instructions and we save the liveness info of @@ -2278,7 +2275,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) } // if (ins->cil_code) // g_print ("cil code\n"); - mono_debug_record_line_number (cfg, ins, offset); switch (ins->opcode) { case OP_BIGMUL: @@ -2446,14 +2442,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) case OP_ADC: ppc_adde (code, ins->dreg, ins->sreg1, ins->sreg2); break; - case OP_ADDCC_IMM: - if (ppc_is_imm16 (ins->inst_imm)) { - ppc_addic (code, ins->dreg, ins->sreg1, ins->inst_imm); - } else { - ppc_load (code, ppc_r11, ins->inst_imm); - ppc_addc (code, ins->dreg, ins->sreg1, ppc_r11); - } - break; case OP_ADD_IMM: if (ppc_is_imm16 (ins->inst_imm)) { ppc_addi (code, ins->dreg, ins->sreg1, ins->inst_imm); @@ -2533,10 +2521,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) case OP_SUBCC: ppc_subfc (code, ins->dreg, ins->sreg2, ins->sreg1); break; - case OP_SUBCC_IMM: - ppc_load (code, ppc_r11, ins->inst_imm); - ppc_subfc (code, ins->dreg, ppc_r11, ins->sreg1); - break; case CEE_SUB: ppc_subf (code, ins->dreg, ins->sreg2, ins->sreg1); break; @@ -2554,7 +2538,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) break; case OP_SBB_IMM: ppc_load (code, ppc_r11, ins->inst_imm); - ppc_subfe (code, ins->dreg, ppc_r11, ins->sreg1); + ppc_subfe (code, ins->dreg, ins->sreg2, ppc_r11); break; case OP_PPC_SUBFIC: g_assert (ppc_is_imm16 (ins->inst_imm)); @@ -2683,12 +2667,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) ppc_mullw (code, ins->dreg, ins->sreg1, ins->sreg2); break; case OP_MUL_IMM: - if (ppc_is_imm16 (ins->inst_imm)) { - ppc_mulli (code, ins->dreg, ins->sreg1, ins->inst_imm); - } else { - ppc_load (code, ppc_r11, ins->inst_imm); - ppc_mullw (code, ins->dreg, ins->sreg1, ppc_r11); - } + ppc_load (code, ppc_r11, ins->inst_imm); + ppc_mullw (code, ins->dreg, ins->sreg1, ppc_r11); break; case CEE_MUL_OVF: /* we annot use mcrxr, since it's not implemented on some processors @@ -2706,7 +2686,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) */ ppc_mulhwu (code, ppc_r0, ins->sreg1, ins->sreg2); ppc_cmpi (code, 0, 0, ppc_r0, 0); - EMIT_COND_SYSTEM_EXCEPTION (CEE_BNE_UN - CEE_BEQ, "OverflowException"); + EMIT_COND_SYSTEM_EXCEPTION (CEE_BNE_UN - CEE_BEQ, ins->inst_p1); ppc_mullw (code, ins->dreg, ins->sreg1, ins->sreg2); break; case OP_ICONST: @@ -3429,8 +3409,6 @@ mono_arch_emit_prolog (MonoCompile *cfg) ArgInfo *ainfo = cinfo->args + i; inst = cfg->varinfo [pos]; - if (cfg->verbose_level > 2) - g_print ("Saving argument %d (type: %d)\n", i, ainfo->regtype); if (inst->opcode == OP_REGVAR) { if (ainfo->regtype == RegTypeGeneral) ppc_mr (code, inst->dreg, ainfo->reg); diff --git a/mono/mini/mini-s390.c b/mono/mini/mini-s390.c index 6d7f7ce718b..101c5c7ec76 100644 --- a/mono/mini/mini-s390.c +++ b/mono/mini/mini-s390.c @@ -2944,8 +2944,6 @@ guint8 cond; code = cfg->native_code + offset; } - mono_debug_record_line_number (cfg, ins, offset); - switch (ins->opcode) { case OP_STOREI1_MEMBASE_IMM: { s390_lhi (code, s390_r14, ins->inst_imm); @@ -3228,7 +3226,6 @@ guint8 cond; s390_alcr (code, ins->dreg, ins->sreg2); } break; - case OP_ADDCC_IMM: case OP_ADD_IMM: { if ((ins->next) && (ins->next->opcode == OP_ADC_IMM)) { @@ -3294,7 +3291,6 @@ guint8 cond; s390_slbr (code, ins->dreg, ins->sreg2); } break; - case OP_SUBCC_IMM: case OP_SUB_IMM: { if (s390_is_imm16 (-ins->inst_imm)) { if (ins->dreg != ins->sreg1) { diff --git a/mono/mini/mini-sparc.c b/mono/mini/mini-sparc.c index 1552e50c16e..54fd7fda138 100644 --- a/mono/mini/mini-sparc.c +++ b/mono/mini/mini-sparc.c @@ -2546,7 +2546,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) code_start = (guint8*)code; // if (ins->cil_code) // g_print ("cil code\n"); - mono_debug_record_line_number (cfg, ins, offset); switch (ins->opcode) { case OP_STOREI1_MEMBASE_IMM: @@ -2652,7 +2651,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) case CEE_ADD: sparc_add (code, FALSE, ins->sreg1, ins->sreg2, ins->dreg); break; - case OP_ADDCC_IMM: case OP_ADD_IMM: /* according to inssel-long32.brg, this should set cc */ EMIT_ALU_IMM (ins, add, TRUE); @@ -2670,7 +2668,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) case CEE_SUB: sparc_sub (code, FALSE, ins->sreg1, ins->sreg2, ins->dreg); break; - case OP_SUBCC_IMM: case OP_SUB_IMM: /* according to inssel-long32.brg, this should set cc */ EMIT_ALU_IMM (ins, sub, TRUE); diff --git a/mono/mini/mini-x86.c b/mono/mini/mini-x86.c index dc098a1c26b..14710b31792 100644 --- a/mono/mini/mini-x86.c +++ b/mono/mini/mini-x86.c @@ -1866,8 +1866,6 @@ mono_arch_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb) /* force source to be same as dest */ rs->iassign [ins->sreg1] = ins->dreg; rs->iassign [ins->sreg1 + 1] = ins->unused; - rs->isymbolic [ins->dreg] = ins->sreg1; - rs->isymbolic [ins->unused] = ins->sreg1 + 1; DEBUG (g_print ("\tassigned sreg1 (long) %s to sreg1 R%d\n", mono_arch_regname (ins->dreg), ins->sreg1)); DEBUG (g_print ("\tassigned sreg1 (long-high) %s to sreg1 R%d\n", mono_arch_regname (ins->unused), ins->sreg1 + 1)); @@ -2326,7 +2324,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) case OP_ADC: x86_alu_reg_reg (code, X86_ADC, ins->sreg1, ins->sreg2); break; - case OP_ADDCC_IMM: case OP_ADD_IMM: x86_alu_reg_imm (code, X86_ADD, ins->dreg, ins->inst_imm); break; @@ -2340,7 +2337,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) case OP_SBB: x86_alu_reg_reg (code, X86_SBB, ins->sreg1, ins->sreg2); break; - case OP_SUBCC_IMM: case OP_SUB_IMM: x86_alu_reg_imm (code, X86_SUB, ins->dreg, ins->inst_imm); break; diff --git a/mono/mini/mini.c b/mono/mini/mini.c index 28f70d463c3..95a14efc341 100644 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -1581,24 +1581,23 @@ mono_compile_get_interface_var (MonoCompile *cfg, int slot, MonoInst *ins) */ static int handle_stack_args (MonoCompile *cfg, MonoBasicBlock *bb, MonoInst **sp, int count) { - int i, bindex; + int i; MonoBasicBlock *outb; MonoInst *inst, **locals; - gboolean found; if (!count) return 0; if (cfg->verbose_level > 3) g_print ("%d item(s) on exit from B%d\n", count, bb->block_num); if (!bb->out_scount) { + int found = 0; bb->out_scount = count; //g_print ("bblock %d has out:", bb->block_num); - found = FALSE; for (i = 0; i < bb->out_count; ++i) { outb = bb->out_bb [i]; //g_print (" %d", outb->block_num); if (outb->in_stack) { - found = TRUE; + found = 1; bb->out_stack = outb->in_stack; break; } @@ -1607,34 +1606,19 @@ handle_stack_args (MonoCompile *cfg, MonoBasicBlock *bb, MonoInst **sp, int coun if (!found) { bb->out_stack = mono_mempool_alloc (cfg->mempool, sizeof (MonoInst*) * count); for (i = 0; i < count; ++i) { - /* - * try to reuse temps already allocated for this purpouse, if they occupy the same - * stack slot and if they are of the same type. - * This won't cause conflicts since if 'local' is used to - * store one of the values in the in_stack of a bblock, then - * the same variable will be used for the same outgoing stack - * slot as well. - * This doesn't work when inlining methods, since the bblocks - * in the inlined methods do not inherit their in_stack from - * the bblock they are inlined to. See bug #58863 for an - * example. - */ - if (cfg->inlined_method) - bb->out_stack [i] = mono_compile_create_var (cfg, type_from_stack_type (sp [i]), OP_LOCAL); - else - bb->out_stack [i] = mono_compile_get_interface_var (cfg, i, sp [i]); +/* see bug#58863, but removing this code causes regressions in gtk-sharp build + * (SEGV running Method::Initialize() in gapi_codegen.exe) + */ +#if 1 + /* try to reuse temps already allocated for this purpouse, if they occupy the same + * stack slot and if they are of the same type. */ + bb->out_stack [i] = mono_compile_get_interface_var (cfg, i, sp [i]); +#else + bb->out_stack [i] = mono_compile_create_var (cfg, type_from_stack_type (sp [i]), OP_LOCAL); +#endif } } } - - for (i = 0; i < bb->out_count; ++i) { - outb = bb->out_bb [i]; - if (outb->in_scount) - continue; /* check they are the same locals */ - outb->in_scount = count; - outb->in_stack = bb->out_stack; - } - locals = bb->out_stack; for (i = 0; i < count; ++i) { /* add store ops at the end of the bb, before the branch */ @@ -1649,36 +1633,14 @@ handle_stack_args (MonoCompile *cfg, MonoBasicBlock *bb, MonoInst **sp, int coun if (cfg->verbose_level > 3) g_print ("storing %d to temp %d\n", i, locals [i]->inst_c0); } - - /* - * It is possible that the out bblocks already have in_stack assigned, and - * the in_stacks differ. In this case, we will store to all the different - * in_stacks. - */ - - found = TRUE; - bindex = 0; - while (found) { - /* Find a bblock which has a different in_stack */ - found = FALSE; - while (bindex < bb->out_count) { - outb = bb->out_bb [bindex]; - if (outb->in_stack != locals) { - /* - * Instead of storing sp [i] to locals [i], we need to store - * locals [i] to <new locals>[i], since the sp [i] tree can't - * be shared between trees. - */ - for (i = 0; i < count; ++i) - mono_add_varcopy_to_end (cfg, bb, locals [i]->inst_c0, outb->in_stack [i]->inst_c0); - locals = outb->in_stack; - found = TRUE; - break; - } - bindex ++; - } - } + for (i = 0; i < bb->out_count; ++i) { + outb = bb->out_bb [i]; + if (outb->in_scount) + continue; /* check they are the same locals */ + outb->in_scount = count; + outb->in_stack = locals; + } return 0; } @@ -2465,7 +2427,6 @@ inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoMethodHeader *cheader; MonoBasicBlock *ebblock, *sbblock; int i, costs, new_locals_offset; - MonoMethod *prev_inlined_method; if (cfg->verbose_level > 2) g_print ("INLINE START %p %s -> %s\n", cmethod, mono_method_full_name (cfg->method, TRUE), mono_method_full_name (cmethod, TRUE)); @@ -2494,13 +2455,8 @@ inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, ebblock->block_num = cfg->num_bblocks++; ebblock->real_offset = real_offset; - prev_inlined_method = cfg->inlined_method; - cfg->inlined_method = cmethod; - costs = mono_method_to_ir (cfg, cmethod, sbblock, ebblock, new_locals_offset, rvar, dont_inline, sp, real_offset, *ip == CEE_CALLVIRT); - cfg->inlined_method = prev_inlined_method; - if ((costs >= 0 && costs < 60) || inline_allways) { if (cfg->verbose_level > 2) g_print ("INLINE END %s -> %s\n", mono_method_full_name (cfg->method, TRUE), mono_method_full_name (cmethod, TRUE)); @@ -3893,13 +3849,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b CHECK_OPSIZE (5); n = read32 (ip + 1); - if (method->wrapper_type == MONO_WRAPPER_DYNAMIC_METHOD) { - NEW_PCONST (cfg, ins, mono_method_get_wrapper_data (method, n)); - ins->cil_code = ip; - ins->type = STACK_OBJ; - *sp = ins; - } - else if (method->wrapper_type != MONO_WRAPPER_NONE) { + if (method->wrapper_type != MONO_WRAPPER_NONE) { int temp; MonoInst *iargs [1]; @@ -7096,12 +7046,10 @@ optimize_branches (MonoCompile *cfg) bbn->code->inst_target_bb->region == bb->region) { if (cfg->verbose_level > 2) - g_print ("in %s branch to branch triggered %d -> %d -> %d\n", cfg->method->name, - bb->block_num, bbn->block_num, bbn->code->inst_target_bb->block_num); - - replace_in_block (bbn, bb, NULL); - replace_out_block (bb, bbn, bbn->code->inst_target_bb); - link_bblock (cfg, bb, bbn->code->inst_target_bb); + g_print ("in %s branch to branch triggered %d -> %d\n", cfg->method->name, + bb->block_num, bbn->block_num); + + replace_basic_block (bb, bb->out_bb [0], bbn->code->inst_target_bb); bb->last_ins->inst_target_bb = bbn->code->inst_target_bb; changed = TRUE; break; diff --git a/mono/mini/mini.h b/mono/mini/mini.h index e62be1b95cb..adc1e9086b5 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -492,7 +492,6 @@ typedef struct { MonoSpillInfo *spill_info_float; /* fp register spills */ gint spill_count; /* unsigned char *cil_code; */ - MonoMethod *inlined_method; /* the method which is currently inlined */ /* the exception object passed to catch/filter blocks */ MonoInst *exvar; diff --git a/mono/mini/trace.c b/mono/mini/trace.c index 1a687005faf..49c9d86d636 100644 --- a/mono/mini/trace.c +++ b/mono/mini/trace.c @@ -36,7 +36,7 @@ mono_trace_eval (MonoMethod *method) if (method->klass->image == mono_assembly_get_image (trace_spec.assembly)) inc = 1; break; case MONO_TRACEOP_METHOD: - if (mono_method_desc_full_match ((MonoMethodDesc *) op->data, method)) + if (mono_method_desc_match ((MonoMethodDesc *) op->data, method)) inc = 1; break; case MONO_TRACEOP_CLASS: if (strcmp (method->klass->name_space, op->data) == 0) diff --git a/mono/tests/ChangeLog b/mono/tests/ChangeLog index 041938869bd..e73b632c1c1 100644 --- a/mono/tests/ChangeLog +++ b/mono/tests/ChangeLog @@ -1,9 +1,3 @@ -2004-09-07 Duncan Mak <duncan@ximian.com> - - * typeof-ptr.cs: Add unsafe sections to the code that's using - pointers directly. This was breaking the test stage on the build - boxes. - 2004-05-29 Zoltan Varga <vargaz@freemail.hu> * invoke.cs: Add an Invoke test. diff --git a/mono/tests/Makefile.am b/mono/tests/Makefile.am index 2ac008e74c4..23cc36cc3cc 100644 --- a/mono/tests/Makefile.am +++ b/mono/tests/Makefile.am @@ -41,7 +41,6 @@ TEST_CS_SRC= \ exception16.cs \ struct.cs \ valuetype-gettype.cs \ - typeof-ptr.cs \ static-constructor.cs \ pinvoke.cs \ pinvoke1.cs \ diff --git a/mono/tests/libtest.c b/mono/tests/libtest.c index 6a9bad00f5a..0d651b00e80 100644 --- a/mono/tests/libtest.c +++ b/mono/tests/libtest.c @@ -636,24 +636,10 @@ mono_test_marshal_primitive_byref_delegate (PrimitiveByrefDelegate delegate) return 0; } -typedef int (*return_int_delegate) (int i); - -typedef return_int_delegate (*ReturnDelegateDelegate) (); - -int -mono_test_marshal_return_delegate_delegate (ReturnDelegateDelegate d) -{ - return (d ()) (55); -} - - int mono_test_marshal_stringbuilder (char *s, int n) { const char m[] = "This is my message. Isn't it nice?"; - - if (strcmp (s, "ABCD") != 0) - return 1; strncpy(s, m, n); return 0; } @@ -701,20 +687,6 @@ mono_test_marshal_string_array (char **array) } int -mono_test_marshal_stringbuilder_array (char **array) -{ - if (strcmp (array [0], "ABC")) - return 1; - if (strcmp (array [1], "DEF")) - return 2; - - strcpy (array [0], "DEF"); - strcpy (array [1], "ABC"); - - return 0; -} - -int mono_test_marshal_unicode_string_array (gunichar2 **array, char **array2) { GError *error = NULL; @@ -1020,18 +992,6 @@ mono_test_marshal_mixed_point (mixed_point pt) } int -mono_test_marshal_mixed_point_2 (mixed_point *pt) -{ - if (pt->x != 5 || pt->y != 6.75) - return 1; - - pt->x = 10; - pt->y = 12.35; - - return 0; -} - -int time_t_sizeof (void) { return sizeof (time_t); diff --git a/mono/tests/pinvoke2.cs b/mono/tests/pinvoke2.cs index 6dd5a7828a7..179f67d0f56 100755 --- a/mono/tests/pinvoke2.cs +++ b/mono/tests/pinvoke2.cs @@ -111,9 +111,6 @@ public class Tests { [DllImport ("libtest", EntryPoint="mono_test_marshal_unicode_string_array", CharSet=CharSet.Unicode)] public static extern int mono_test_marshal_unicode_string_array (string [] a1, [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)]string [] a2); - [DllImport ("libtest", EntryPoint="mono_test_marshal_stringbuilder_array")] - public static extern int mono_test_marshal_stringbuilder_array (StringBuilder [] a1); - [DllImport ("libtest", EntryPoint="mono_test_marshal_inout_array")] public static extern int mono_test_marshal_inout_array ([In, Out] int [] a1); @@ -416,7 +413,6 @@ public class Tests { static int test_0_marshal_stringbuilder () { StringBuilder sb = new StringBuilder(255); - sb.Append ("ABCD"); mono_test_marshal_stringbuilder (sb, sb.Capacity); String res = sb.ToString(); @@ -449,20 +445,6 @@ public class Tests { return mono_test_marshal_unicode_string_array (new String [] { "ABC", "DEF" }, new String [] { "ABC", "DEF" }); } - static int test_0_marshal_stringbuilder_array () { - StringBuilder sb1 = new StringBuilder ("ABC"); - StringBuilder sb2 = new StringBuilder ("DEF"); - - int res = mono_test_marshal_stringbuilder_array (new StringBuilder [] { sb1, sb2 }); - if (res != 0) - return res; - if (sb1.ToString () != "DEF") - return 5; - if (sb2.ToString () != "ABC") - return 6; - return 0; - } - static int test_0_last_error () { mono_test_last_error (5); if (Marshal.GetLastWin32Error () == 5) diff --git a/mono/tests/pinvoke3.cs b/mono/tests/pinvoke3.cs index 0a0d39ee3aa..f463e14afc5 100755 --- a/mono/tests/pinvoke3.cs +++ b/mono/tests/pinvoke3.cs @@ -150,9 +150,6 @@ public class Tests { [DllImport ("libtest", EntryPoint="mono_test_marshal_primitive_byref_delegate")] public static extern int mono_test_marshal_primitive_byref_delegate (PrimitiveByrefDelegate d); - [DllImport ("libtest", EntryPoint="mono_test_marshal_return_delegate_delegate")] - public static extern int mono_test_marshal_return_delegate_delegate (ReturnDelegateDelegate d); - public delegate int TestDelegate (int a, ref SimpleStruct ss, int b); public delegate SimpleStruct SimpleDelegate2 (SimpleStruct ss); @@ -171,8 +168,6 @@ public class Tests { public delegate int PrimitiveByrefDelegate (ref int i); - public delegate return_int_delegate ReturnDelegateDelegate (); - public static int Main () { return TestDriver.RunTests (typeof (Tests)); } @@ -283,13 +278,4 @@ public class Tests { return mono_test_marshal_primitive_byref_delegate (d); } - - public static return_int_delegate return_delegate () { - return new return_int_delegate (return_self); - } - - static int test_55_marshal_return_delegate_delegate () { - return mono_test_marshal_return_delegate_delegate (new ReturnDelegateDelegate (return_delegate)); - } - } diff --git a/mono/tests/typeof-ptr.cs b/mono/tests/typeof-ptr.cs deleted file mode 100644 index 69e75ca1745..00000000000 --- a/mono/tests/typeof-ptr.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Reflection; - -class T { - public static unsafe void meth (int a, int* b) { - } - static int Main () { - ParameterInfo[] args = typeof (T).GetMethod ("meth").GetParameters (); - if (args[0].ParameterType == args[1].ParameterType) - return 1; - - unsafe { - if (typeof(int) == typeof (int*)) - return 2; - } - if (args[0].ParameterType != typeof(int)) - return 3; - - unsafe { - if (args[1].ParameterType != typeof(int*)) - return 4; - } - - return 0; - } -} diff --git a/mono/utils/ChangeLog b/mono/utils/ChangeLog index a2d3b07bb6e..4ba899c1e3e 100644 --- a/mono/utils/ChangeLog +++ b/mono/utils/ChangeLog @@ -1,7 +1,3 @@ -2004-10-26 Zoltan Varga <vargaz@freemail.hu> - - * mono-codeman.c: Fall back to malloc if MAP_ANON is not defined. - 2004-06-29 Zoltan Varga <vargaz@freemail.hu> * mono-sha1.c: Use gint32 for 32 types. Fixes random memory corruption diff --git a/mono/utils/mono-codeman.c b/mono/utils/mono-codeman.c index 28ed098b690..1fbc1479172 100644 --- a/mono/utils/mono-codeman.c +++ b/mono/utils/mono-codeman.c @@ -25,11 +25,7 @@ #define MAX_WASTAGE 32 #ifndef MAP_ANONYMOUS -#ifdef MAP_ANON #define MAP_ANONYMOUS MAP_ANON -#else -#define FORCE_MALLOC -#endif #endif typedef struct _CodeChunck CodeChunk; diff --git a/tools/locale-builder/supp/ChangeLog b/tools/locale-builder/supp/ChangeLog index aac15bd01ce..b5eb13b4ddc 100755 --- a/tools/locale-builder/supp/ChangeLog +++ b/tools/locale-builder/supp/ChangeLog @@ -1,9 +1,3 @@ -2004-10-06 Jackson Harper <jackson@ximian.com> - - * pt.xml: We need a space after R$. Is there a better way to do - this? I should know... - * pt_BR.xml: Fix currency format. - 2004-06-08 Atsushi Enomoto <atsushi@ximian.com> * ja.xml : added extra datetime patterns. diff --git a/tools/locale-builder/supp/pt.xml b/tools/locale-builder/supp/pt.xml deleted file mode 100755 index c424d37d4fa..00000000000 --- a/tools/locale-builder/supp/pt.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<ldml> - <numbers> - <currencies> - <currency type="BRL"> - <displayName>Real Brasileiro</displayName> - <symbol>R$ </symbol> - </currency> - </currencies> - </numbers> -</ldml> - diff --git a/tools/locale-builder/supp/pt_BR.xml b/tools/locale-builder/supp/pt_BR.xml index f06421234f3..5492f0a75b8 100755 --- a/tools/locale-builder/supp/pt_BR.xml +++ b/tools/locale-builder/supp/pt_BR.xml @@ -4,7 +4,7 @@ <currencyFormats> <currencyFormatLength > <currencyFormat > - <pattern>#,##0.00;(#,##0.00)</pattern> + <pattern>#,##0;(-#,##0)</pattern> </currencyFormat> </currencyFormatLength > </currencyFormats> diff --git a/web/pending-classes.in b/web/pending-classes.in new file mode 100644 index 00000000000..1cdb5a4cb36 --- /dev/null +++ b/web/pending-classes.in @@ -0,0 +1,246 @@ +System.Object +System.Exception +System.ValueType +System.Delegate +System.MulticastDelegate +System.Enum +System.Activator +System.ArgIterator +System.__ComObject +System.TypedReference +System.Security.AllowPartiallyTrustedCallersAttribute +System.Runtime.Serialization.Formatter +System.Runtime.Serialization.FormatterConverter +System.Runtime.Serialization.FormatterServices +System.Runtime.Serialization.ObjectIDGenerator +System.Runtime.Serialization.ObjectManager +System.Reflection.ModuleResolveEventHandler +System.Reflection.Pointer +System.Globalization.CompareInfo +System.Globalization.HebrewCalendar +System.Globalization.HijriCalendar +System.Globalization.JapaneseCalendar +System.Globalization.KoreanCalendar +System.Globalization.SortKey +System.Globalization.StringInfo +System.Globalization.TaiwanCalendar +System.Globalization.TextElementEnumerator +System.Globalization.TextInfo +System.Globalization.ThaiBuddhistCalendar +System.IO.IsolatedStorage.IsolatedStorageFile +System.Reflection.Emit.MethodRental +System.Runtime.CompilerServices.AccessedThroughPropertyAttribute +System.Runtime.CompilerServices.CallConvCdecl +System.Runtime.CompilerServices.CallConvStdcall +System.Runtime.CompilerServices.CallConvThiscall +System.Runtime.CompilerServices.CallConvFastcall +System.Runtime.CompilerServices.CustomConstantAttribute +System.Runtime.CompilerServices.DateTimeConstantAttribute +System.Runtime.CompilerServices.DiscardableAttribute +System.Runtime.CompilerServices.DecimalConstantAttribute +System.Runtime.CompilerServices.CompilationRelaxationsAttribute +System.Runtime.CompilerServices.CompilerGlobalScopeAttribute +System.Runtime.CompilerServices.IDispatchConstantAttribute +System.Runtime.CompilerServices.IsVolatile +System.Runtime.CompilerServices.IUnknownConstantAttribute +System.Runtime.CompilerServices.RequiredAttributeAttribute +System.Runtime.InteropServices.ArrayWithOffset +System.Runtime.InteropServices.DispIdAttribute +System.Runtime.InteropServices.ClassInterfaceType +System.Runtime.InteropServices.ClassInterfaceAttribute +System.Runtime.InteropServices.ComVisibleAttribute +System.Runtime.InteropServices.LCIDConversionAttribute +System.Runtime.InteropServices.ComRegisterFunctionAttribute +System.Runtime.InteropServices.ComUnregisterFunctionAttribute +System.Runtime.InteropServices.ProgIdAttribute +System.Runtime.InteropServices.ImportedFromTypeLibAttribute +System.Runtime.InteropServices.IDispatchImplType +System.Runtime.InteropServices.IDispatchImplAttribute +System.Runtime.InteropServices.ComSourceInterfacesAttribute +System.Runtime.InteropServices.ComConversionLossAttribute +System.Runtime.InteropServices.TypeLibTypeFlags +System.Runtime.InteropServices.TypeLibFuncFlags +System.Runtime.InteropServices.TypeLibVarFlags +System.Runtime.InteropServices.TypeLibTypeAttribute +System.Runtime.InteropServices.TypeLibFuncAttribute +System.Runtime.InteropServices.TypeLibVarAttribute +System.Runtime.InteropServices.ComImportAttribute +System.Runtime.InteropServices.PreserveSigAttribute +System.Runtime.InteropServices.ComAliasNameAttribute +System.Runtime.InteropServices.AutomationProxyAttribute +System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute +System.Runtime.InteropServices.CoClassAttribute +System.Runtime.InteropServices.ComEventInterfaceAttribute +System.Runtime.InteropServices.COMException +System.Runtime.InteropServices.ComMemberType +System.Runtime.InteropServices.CurrencyWrapper +System.Runtime.InteropServices.DispatchWrapper +System.Runtime.InteropServices.ErrorWrapper +System.Runtime.InteropServices.ExtensibleClassFactory +System.Runtime.InteropServices.HandleRef +System.Runtime.InteropServices.InvalidComObjectException +System.Runtime.InteropServices.InvalidOleVariantTypeException +System.Runtime.InteropServices.TypeLibImporterFlags +System.Runtime.InteropServices.ExporterEventKind +System.Runtime.InteropServices.ITypeLibExporterNotifySink +System.Runtime.InteropServices.ITypeLibConverter +System.Runtime.InteropServices.MarshalDirectiveException +System.Runtime.InteropServices.ObjectCreationDelegate +System.Runtime.InteropServices.RuntimeEnvironment +System.Runtime.InteropServices.RegistrationServices +System.Runtime.InteropServices.SafeArrayRankMismatchException +System.Runtime.InteropServices.SafeArrayTypeMismatchException +System.Runtime.InteropServices.SEHException +System.Runtime.InteropServices.TypeLibConverter +System.Runtime.InteropServices.BIND_OPTS +System.Runtime.InteropServices.UCOMIBindCtx +System.Runtime.InteropServices.UCOMIConnectionPointContainer +System.Runtime.InteropServices.UCOMIConnectionPoint +System.Runtime.InteropServices.UCOMIEnumMoniker +System.Runtime.InteropServices.CONNECTDATA +System.Runtime.InteropServices.UCOMIEnumConnections +System.Runtime.InteropServices.UCOMIEnumConnectionPoints +System.Runtime.InteropServices.UCOMIEnumString +System.Runtime.InteropServices.UCOMIEnumVARIANT +System.Runtime.InteropServices.FILETIME +System.Runtime.InteropServices.UCOMIMoniker +System.Runtime.InteropServices.UCOMIPersistFile +System.Runtime.InteropServices.UCOMIRunningObjectTable +System.Runtime.InteropServices.STATSTG +System.Runtime.InteropServices.UCOMIStream +System.Runtime.InteropServices.DESCKIND +System.Runtime.InteropServices.BINDPTR +System.Runtime.InteropServices.UCOMITypeComp +System.Runtime.InteropServices.TYPEKIND +System.Runtime.InteropServices.TYPEFLAGS +System.Runtime.InteropServices.IMPLTYPEFLAGS +System.Runtime.InteropServices.TYPEATTR +System.Runtime.InteropServices.FUNCDESC +System.Runtime.InteropServices.IDLFLAG +System.Runtime.InteropServices.IDLDESC +System.Runtime.InteropServices.PARAMFLAG +System.Runtime.InteropServices.PARAMDESC +System.Runtime.InteropServices.TYPEDESC +System.Runtime.InteropServices.ELEMDESC +System.Runtime.InteropServices.VARDESC +System.Runtime.InteropServices.DISPPARAMS +System.Runtime.InteropServices.EXCEPINFO +System.Runtime.InteropServices.FUNCKIND +System.Runtime.InteropServices.INVOKEKIND +System.Runtime.InteropServices.CALLCONV +System.Runtime.InteropServices.FUNCFLAGS +System.Runtime.InteropServices.VARFLAGS +System.Runtime.InteropServices.UCOMITypeInfo +System.Runtime.InteropServices.SYSKIND +System.Runtime.InteropServices.LIBFLAGS +System.Runtime.InteropServices.TYPELIBATTR +System.Runtime.InteropServices.UCOMITypeLib +System.Runtime.InteropServices.UnknownWrapper +System.Runtime.Remoting.IObjectHandle +System.Runtime.Remoting.IRemotingTypeInfo +System.Runtime.Remoting.IChannelInfo +System.Runtime.Remoting.IEnvoyInfo +System.Runtime.Remoting.RemotingConfiguration +System.Runtime.Remoting.TypeEntry +System.Runtime.Remoting.ActivatedClientTypeEntry +System.Runtime.Remoting.ActivatedServiceTypeEntry +System.Runtime.Remoting.WellKnownClientTypeEntry +System.Runtime.Remoting.WellKnownServiceTypeEntry +System.Runtime.Remoting.RemotingException +System.Runtime.Remoting.ServerException +System.Runtime.Remoting.RemotingTimeoutException +System.Runtime.Remoting.RemotingServices +System.Runtime.Remoting.InternalRemotingServices +System.Runtime.Remoting.SoapServices +System.Runtime.Remoting.Activation.UrlAttribute +System.Runtime.Remoting.Messaging.IMessageSink +System.Runtime.Remoting.Messaging.AsyncResult +System.Runtime.Remoting.Messaging.CallContext +System.Runtime.Remoting.Messaging.ILogicalThreadAffinative +System.Runtime.Remoting.Messaging.InternalMessageWrapper +System.Runtime.Remoting.Messaging.IMethodCallMessage +System.Runtime.Remoting.Messaging.MethodCallMessageWrapper +System.Runtime.Remoting.Messaging.HeaderHandler +System.Runtime.Remoting.Messaging.IMessageCtrl +System.Runtime.Remoting.Messaging.IRemotingFormatter +System.Runtime.Remoting.Messaging.ReturnMessage +System.Runtime.Remoting.Messaging.MethodCall +System.Runtime.Remoting.Messaging.ConstructionCall +System.Runtime.Remoting.Messaging.MethodResponse +System.Runtime.Remoting.Messaging.ConstructionResponse +System.Runtime.Remoting.Messaging.MethodReturnMessageWrapper +System.Runtime.Remoting.Messaging.OneWayAttribute +System.Runtime.Remoting.Messaging.MessageSurrogateFilter +System.Runtime.Remoting.Messaging.RemotingSurrogateSelector +System.Runtime.Remoting.Contexts.CrossContextDelegate +System.Runtime.Remoting.Contexts.ContextProperty +System.Runtime.Remoting.Contexts.IContextPropertyActivator +System.Runtime.Remoting.Contexts.IContributeClientContextSink +System.Runtime.Remoting.Contexts.IContributeDynamicSink +System.Runtime.Remoting.Contexts.IContributeEnvoySink +System.Runtime.Remoting.Contexts.IContributeObjectSink +System.Runtime.Remoting.Contexts.IContributeServerContextSink +System.Runtime.Serialization.Formatters.InternalRM +System.Runtime.Serialization.Formatters.InternalST +System.Runtime.Serialization.Formatters.SoapMessage +System.Runtime.Serialization.Formatters.SoapFault +System.Runtime.Serialization.Formatters.ServerFault +System.Runtime.Serialization.Formatters.Binary.BinaryFormatter +System.Security.Cryptography.CryptoConfig +System.Security.Cryptography.KeyedHashAlgorithm +System.Security.Cryptography.HMACSHA1 +System.Security.Cryptography.MACTripleDES +System.Security.Cryptography.MaskGenerationMethod +System.Security.Cryptography.PasswordDeriveBytes +System.Security.Cryptography.PKCS1MaskGenerationMethod +System.Security.Cryptography.RC2 +System.Security.Cryptography.RC2CryptoServiceProvider +System.Security.Cryptography.RSACryptoServiceProvider +System.Security.Cryptography.RSAOAEPKeyExchangeDeformatter +System.Security.Cryptography.RSAOAEPKeyExchangeFormatter +System.Security.Cryptography.RSAPKCS1KeyExchangeDeformatter +System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter +System.Security.Cryptography.RSAPKCS1SignatureDeformatter +System.Security.Cryptography.RSAPKCS1SignatureFormatter +System.Security.Cryptography.SHA1Managed +System.Security.Cryptography.TripleDES +System.Security.Cryptography.TripleDESCryptoServiceProvider +System.Security.Permissions.EnvironmentPermission +System.Security.Permissions.FileDialogPermission +System.Security.Permissions.IsolatedStorageFilePermission +System.Security.Permissions.PrincipalPermissionAttribute +System.Security.Permissions.SecurityPermissionAttribute +System.Security.Permissions.PublisherIdentityPermissionAttribute +System.Security.Permissions.PublisherIdentityPermission +System.Security.Permissions.ReflectionPermission +System.Security.Permissions.RegistryPermission +System.Security.Permissions.PrincipalPermission +System.Security.Permissions.SiteIdentityPermission +System.Security.Permissions.StrongNameIdentityPermission +System.Security.Permissions.StrongNamePublicKeyBlob +System.Security.Permissions.UIPermission +System.Security.Permissions.UrlIdentityPermission +System.Security.Permissions.ZoneIdentityPermission +System.Security.Policy.ApplicationDirectory +System.Security.Policy.ApplicationDirectoryMembershipCondition +System.Security.Policy.FirstMatchCodeGroup +System.Security.Policy.Hash +System.Security.Policy.HashMembershipCondition +System.Security.Policy.NetCodeGroup +System.Security.Policy.PermissionRequestEvidence +System.Security.Policy.Publisher +System.Security.Policy.PublisherMembershipCondition +System.Security.Policy.Site +System.Security.Policy.SiteMembershipCondition +System.Security.Policy.StrongName +System.Security.Policy.StrongNameMembershipCondition +System.Security.Policy.UnionCodeGroup +System.Security.Policy.Url +System.Security.Policy.UrlMembershipCondition +System.Security.Policy.Zone +System.Security.Policy.ZoneMembershipCondition +System.Security.Principal.WindowsIdentity +System.Security.Principal.WindowsImpersonationContext +System.Security.Principal.WindowsPrincipal +System.Threading.CompressedStack +
diff --git a/web/web/masterinfos/.cvsignore b/web/web/masterinfos/.cvsignore new file mode 100644 index 00000000000..6722cd96e78 --- /dev/null +++ b/web/web/masterinfos/.cvsignore @@ -0,0 +1 @@ +*.xml diff --git a/web/web/masterinfos/Makefile b/web/web/masterinfos/Makefile new file mode 100644 index 00000000000..73f0b96341b --- /dev/null +++ b/web/web/masterinfos/Makefile @@ -0,0 +1,96 @@ +# Note that you will need Microsoft.NET to generate those masterinfos + +# Customize to indicate your own installation dir. +DLL_PATH=c:/WINDOWS/Microsoft.NET/Framework/v1.1.4322 +# DLL_PATH=c:/WINDOWS/Microsoft.NET/Framework/v1.2.30703 + +all: \ + mscorlib.xml \ + System.xml \ + System.Xml.xml \ + System.Configuration.Install.xml \ + System.Data.xml \ + System.Data.OracleClient.xml \ + System.Design.xml \ + System.Management.xml \ + System.Messaging.xml \ + System.Web.xml \ + System.Web.Services.xml \ + System.Runtime.Serialization.Formatters.Soap.xml \ + System.Drawing.xml \ + System.Drawing.Design.xml \ + System.Security.xml \ + System.DirectoryServices.xml \ + System.EnterpriseServices.xml \ + System.Runtime.Remoting.xml \ + System.Windows.Forms.xml \ + Microsoft.VisualBasic.xml \ + Cscompmgd.xml + +mscorlib.xml : + mono-api-info $(DLL_PATH)/mscorlib.dll > mscorlib.xml + +System.xml : + mono-api-info $(DLL_PATH)/System.dll > System.xml + +System.Xml.xml : + mono-api-info $(DLL_PATH)/System.Xml.dll > System.Xml.xml + +System.Configuration.Install.xml : + mono-api-info $(DLL_PATH)/System.Configuration.Install.dll > System.Configuration.Install.xml + +System.Data.xml : + mono-api-info $(DLL_PATH)/System.Data.dll > System.Data.xml + +System.Data.OracleClient.xml : + mono-api-info $(DLL_PATH)/System.Data.OracleClient.dll > System.Data.OracleClient.xml + +System.Design.xml : + mono-api-info $(DLL_PATH)/System.Design.dll > System.Design.xml + +System.Management.xml : + mono-api-info $(DLL_PATH)/System.Management.dll > System.Management.xml + +System.Messaging.xml : + mono-api-info $(DLL_PATH)/System.Messaging.dll > System.Messaging.xml + +System.Web.xml : + mono-api-info $(DLL_PATH)/System.Web.dll > System.Web.xml + +System.Web.Services.xml : + mono-api-info $(DLL_PATH)/System.Web.Services.dll > System.Web.Services.xml + +System.Runtime.Remoting.xml : + mono-api-info $(DLL_PATH)/System.Runtime.Remoting.dll > System.Runtime.Remoting.xml + +System.Runtime.Serialization.Formatters.Soap.xml : + mono-api-info $(DLL_PATH)/System.Runtime.Serialization.Formatters.Soap.dll > System.Runtime.Serialization.Formatters.Soap.xml + +System.Drawing.xml : + mono-api-info $(DLL_PATH)/System.Drawing.dll > System.Drawing.xml + +System.Drawing.Design.xml : + mono-api-info $(DLL_PATH)/System.Drawing.Design.dll > System.Drawing.Design.xml + +System.Security.xml : + mono-api-info $(DLL_PATH)/System.Security.dll > System.Security.xml + +System.DirectoryServices.xml : + mono-api-info $(DLL_PATH)/System.DirectoryServices.dll > System.DirectoryServices.xml + +System.EnterpriseServices.xml : + mono-api-info $(DLL_PATH)/System.EnterpriseServices.dll > System.EnterpriseServices.xml + +System.Windows.Forms.xml : + mono-api-info $(DLL_PATH)/System.Windows.Forms.dll > System.Windows.Forms.xml + +Cscompmgd.xml : + mono-api-info $(DLL_PATH)/Cscompmgd.dll > Cscompmgd.xml + +Microsoft.VisualBasic.xml : + mono-api-info $(DLL_PATH)/Microsoft.VisualBasic.dll > Microsoft.VisualBasic.xml + +clean: + rm mscorlib.xml System.xml System.Xml.xml System.Configuration.Install.xml System.Data.xml System.Data.OracleClient.xml System.Design.xml System.Drawing.Design.xml System.Management.xml System.Messaging.xml System.Web.xml System.Web.Services.xml System.Runtime.Serialization.Formatters.Soap.xml System.Drawing.xml System.Security.xml System.DirectoryServices.xml System.EnterpriseServices.xml System.Runtime.Remoting.xml System.Windows.Forms.xml Cscompmgd.xml Microsoft.VisualBasic.xml + + |