On Jan 26, 2007, at 12:43 PM, Alexey Varlamov wrote:

2007/1/26, Tim Ellison <[EMAIL PROTECTED]>:
Mark Hindess wrote:
> There is one slightly odd failure. The hyerror last error message is > not null at startup. I suspect it is the nls catalog that is not found
> because there is no way to find the executable name.  (The portlib
> executable name function only works if either:
>
> a) we are on linux (and /proc is mounted)
>
> b) we pass in argv[0]
>
> but clearly a) isn't true and at the point of the call argv[0] isn't
> available.  I'm not sure how to fix this.  (If we insist that /proc
> is mounted on FreeBSD we might resolve it here but /proc is a little > different on FreeBSD *and* it is not mounted by default. Besides this
> isn't really a generic solution.)

Don't know the answer off the top of my head, and a quick grep around
the APR code implies that they don't provide an equivalent to
hysysinfo_get_executable_name.  Still may be worth asking over there
(I'll proxy for you if you don't get round to it), or in an equivalent
forum.

Well, we alredy iterated on this problem, and I recall some solution
was proposed but not verified, quoting the message:
-----------------------------------------
Well, with a bit of googling I've managed to obtain the following snippet [1]:
      if (dladdr( addr, &info ) != 0)
      {
              strncpy( path, info.dli_fname, PATH_MAX );
              *(strrchr( path, '/' )) = '\0';
      }

"The dladdr() function shall query the dynamic linker for information
about the shared object containing the address addr." [2]
Moreover, google reports about "dladdr" in a variety of manuals,
including BSD, SGI, MacOS, Solaris etc, I've listed some of the links
below.
So this  looks like a silver bullet for us :)

I looked at this when writing samsa. I forget why I rejected it and punted to use readlink("/proc/self/exe"...). I'll see if I can remember.

It's not obvious to me we need one silver bullet - why not just ifdef dladdr() for BSD... ?

geir


[1] http://lists.trolltech.com/qt-interest/2003-11/msg00380.html
[2] http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/ LSB-Core-generic/baselib-dladdr-3.html [3] http://developer.apple.com/documentation/Darwin/Reference/ ManPages/man3/dladdr.3.html
[4] http://docs.sun.com/app/docs/doc/816-5168/6mbb3hr4c?a=view
----------------------------------------
I tried the snippet on a microtest on SUSE9, it worked.

Alexey


Regards,
Tim


Reply via email to