[Mono-dev] [PATCH] Use correct console code page on Windows (affects Linux as well)

Kornél Pál kornelpal at gmail.com
Mon Aug 7 13:32:02 EDT 2006


Thanks for this explanation, now I understand why the complicated solution 
you suggested is required.

I committed the patch using wrapper methods; I hope this won't cause 
kernel32.dll to be loaded on Linux.

Kornél

----- Original Message ----- 
From: "Zoltan Varga" <vargaz at gmail.com>
To: "Kornél Pál" <kornelpal at gmail.com>
Cc: <mono-devel-list at lists.ximian.com>
Sent: Monday, August 07, 2006 5:25 PM
Subject: Re: [Mono-dev] [PATCH] Use correct console code page on Windows 
(affects Linux as well)


Currently, when a method referencing a pinvoke method is compiled, the
pinvoke method is looked up even if it ends up not being called, i.e:

void foo () {
if (false)
   <a pinvoke method>
}

if foo () is called, the pinvoke method is looked up. thats why I
suggested using
a wrapper method with the NoInlining attribute.

           Zoltan

On 8/7/06, Kornél Pál <kornelpal at gmail.com> wrote:
> Hi,
>
> Is a wrapper method necessary to avoid DLL loading? What if I use
> [MethodImplAttribute (MethodImplOptions.NoInlining)] on the P/Invoke 
> method?
> Will P/Invoke methods be inlined without NoInlining?
>
> Kornél
>
> ----- Original Message -----
> From: "Zoltan Varga" <vargaz at gmail.com>
> To: "Kornél Pál" <kornelpal at gmail.com>
> Cc: <mono-devel-list at lists.ximian.com>
> Sent: Thursday, July 27, 2006 6:50 PM
> Subject: Re: [Mono-dev] [PATCH] Use correct console code page on Windows
> (affects Linux as well)
>
>
>                          Hi,
>
>   I think this can be solved by moving the windows specific code to a
> separate
> method, marking it with [MethodImplAttribute 
> (MethodImplOptions.NoInlining)]
> and calling it from inside the if (OnWindows) block. That way, the pinvoke
> lookups would not be executed on linux.
>
>                   Zoltan
>
> On 7/27/06, Kornél Pál <kornelpal at gmail.com> wrote:
> > Hi,
> >
> > I recently posted this patch:
> > http://lists.ximian.com/pipermail/mono-devel-list/2006-July/019433.html
> >
> > But I received no comments and didn't think that this can cause problems
> > on
> > other OSes so I commited it:
> > http://lists.ximian.com/pipermail/mono-patches/2006-July/077941.html
> >
> > This was later reverted by Miguel because he pointed out that this 
> > causes
> > problems on non-Windows operating systems:
> >
> > >    There is already a process to fetch the proper encoding in the 
> > > file,
> > >and you added a new setup.   And to make things worse, considering the
> > >inliner can decide to inline, this means that on Linux, we get an extra
> > >hit for looking up kernel32.dll every time.
> > >
> > >    If this is required, discuss this on the list.
> > >
> > >open("/mono/lib/mono/1.0/advapi32.dll", O_RDONLY|O_LARGEFILE) = -1
> > >ENOENT (No such file or directory)
> > >open("/mono/lib/mono/1.0/kernel32.dll", O_RDONLY|O_LARGEFILE) = -1
> > >ENOENT (No such file or directory)
> > >open("/mono/lib/mono/1.0/ole32.dll", O_RDONLY|O_LARGEFILE) = -1 ENOENT
> > >(No such file or directory)
> >
> > As for advapi32.dll and ole32.dll I don't think that these hints are
> > caused
> > by my modifications.
> >
> > Windows uses different code pages (DOS code pages) for console than for
> > GUI
> > applications (that is Encoding.Default) so this patch (or something
> > functionally equivalent) is required.
> >
> > This initialization is done only once (in static constructor) so I don't
> > think that it's worth to use ConsoleDriver in NET_1_1 as well.
> >
> > Please help to solve this problem occurring on Linux.
> >
> > Kornél
> >
> > _______________________________________________
> > Mono-devel-list mailing list
> > Mono-devel-list at lists.ximian.com
> > http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >
>
> 




More information about the Mono-devel-list mailing list