[PATCH v2] kernel32: Use setprogname(3) to set the program name if available.

Theodore Dubois tblodt at icloud.com
Tue Apr 26 15:35:11 CDT 2016


I have both a custom wine loader and a hacked version of Wine, so I just reverted the patch.

It would be really nice to have this work for when I’m not using a custom loader. Maybe you could check if argv is in the malloc heap? Or maybe I could somehow indicate when calling wine_init that the argv is malloced?

~Theodore

> On Apr 26, 2016, at 1:02 PM, Charles Davis <cdavis5x at gmail.com> wrote:
> 
> Sorry it took me so long to respond.
> 
> What this actually does is it changes the ps output so that the wine binary doesn't show up in the command line. Naturally, it relies on the argv block being one huge null-null-terminated list of strings (as most UNIX-like systems do, apparently). If you're not building your argv this way, then yes, wine will crash. Also, if wine's idea of the argv block isn't the one that the OS gave to main(), the ps output won't be affected.
> 
> The code that manipulates the argv block existed in the Linux case. I surmise, then, that we'd have this same problem there.
> 
> I'd kinda like to keep it, but then we'd need some way to detect that the argv we have isn't the block that was passed to main(), or isn't a null-null-terminated string list. (Or, maybe I can use _NSGetArgv() on Mac OS... but then all the other systems we support will still have this problem, and since you've written your own loader, we can't really rely on the order of arguments being "wine" "program" "...".) If you'd like me to just gut that piece of code, I'll be happy to write a patch to do that.
> 
> Chip
> 
> 
> On Wed, Apr 6, 2016 at 4:03 PM, Theodore Dubois <tblodt at icloud.com> wrote:
> I CC’d him on the original email.
> 
> It would be neat if the wine program name could show up in Activity Monitor on OSX, so I can tell one wine process apart from another. There is a way to do it (http://stackoverflow.com/questions/4217947/setting-process-name-on-mac-os-x-at-runtime) but it requires undocumented APIs. (Damn.)
> 
> ~Theodore
> 
> > On Apr 6, 2016, at 3:35 PM, Ken Thomases <ken at codeweavers.com> wrote:
> >
> > Ah, I see.  Yeah, that's weird.  Have you tried asking Chip directly?  I'm CC'ing him.
> >
> > -Ken
> >
> >> On Apr 6, 2016, at 4:53 PM, Theodore Dubois <tblodt at icloud.com> wrote:
> >>
> >> Yes, I did. The problem is that the code assumes that argv[0] - argv[1] (= offset) is a meaningful quantity, which it isn’t because each string in the argv array came from strdup.
> >>
> >> ~Theodore
> >>
> >>> On Apr 6, 2016, at 2:14 PM, Ken Thomases <ken at codeweavers.com> wrote:
> >>>
> >>> Did you allocate one more entry in your argv than is needed for actual arguments and put a terminating NULL?  You're supposed to.
> >>>
> >>> -Ken
> >>>
> >>>> On Apr 6, 2016, at 3:41 PM, Theodore Dubois <tblodt at icloud.com> wrote:
> >>>>
> >>>> This patch causes a segfault in the event that __wine_main_argv is not the argv that got passed to main. This happened in a program I wrote that acts as a custom wine loader. It creates an argv by using malloc, then passes that to wine_init.
> >>>>
> >>>> Why wouldn’t setprogname(argv[1]) be adequate?
> >>>>
> >>>> ~Theodore
> >>>>
> >>>>> On Feb 19, 2016, at 2:33 PM, Charles Davis <cdavis5x at gmail.com> wrote:
> >>>>>
> >>>>> Signed-off-by: Charles Davis <cdavis5x at gmail.com>
> >>>
> >>
> >
> 
> 




More information about the wine-devel mailing list